@valtimo/components 12.5.1 → 12.6.0

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 (43) hide show
  1. package/assets/css/formio-carbon.scss +4 -0
  2. package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +20 -21
  3. package/esm2022/lib/components/carbon-list/carbon-list.module.mjs +4 -2
  4. package/esm2022/lib/components/form-io/form-io-currency/currency-edit-form.mjs +96 -0
  5. package/esm2022/lib/components/form-io/form-io-currency/currency.component.mjs +105 -0
  6. package/esm2022/lib/components/form-io/form-io-currency/currency.formio.mjs +24 -0
  7. package/esm2022/lib/components/form-io/form-io.module.mjs +6 -1
  8. package/esm2022/lib/components/input/input.component.mjs +8 -2
  9. package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +3 -3
  10. package/esm2022/lib/components/search-fields/search-fields.component.mjs +1 -1
  11. package/esm2022/lib/components/timeline/timeline.component.mjs +3 -3
  12. package/esm2022/lib/components/value-path-selector/value-path-selector.component.mjs +2 -2
  13. package/esm2022/lib/components/view-content/type-converters/booleanTypeConverter.mjs +2 -2
  14. package/esm2022/lib/components/view-content/type-converters/dateTimeTypeConverter.mjs +3 -3
  15. package/esm2022/lib/components/view-content/type-converters/stringTypeConverter.mjs +5 -1
  16. package/esm2022/lib/pipes/ellipsis.pipe.mjs +16 -0
  17. package/esm2022/lib/pipes/index.mjs +2 -1
  18. package/esm2022/lib/services/valtimo-modal.service.mjs +3 -2
  19. package/esm2022/public_api.mjs +3 -1
  20. package/fesm2022/valtimo-components.mjs +326 -83
  21. package/fesm2022/valtimo-components.mjs.map +1 -1
  22. package/lib/components/carbon-list/carbon-list.component.d.ts +3 -2
  23. package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -1
  24. package/lib/components/carbon-list/carbon-list.module.d.ts.map +1 -1
  25. package/lib/components/form-io/form-io-currency/currency-edit-form.d.ts +4 -0
  26. package/lib/components/form-io/form-io-currency/currency-edit-form.d.ts.map +1 -0
  27. package/lib/components/form-io/form-io-currency/currency.component.d.ts +30 -0
  28. package/lib/components/form-io/form-io-currency/currency.component.d.ts.map +1 -0
  29. package/lib/components/form-io/form-io-currency/currency.formio.d.ts +3 -0
  30. package/lib/components/form-io/form-io-currency/currency.formio.d.ts.map +1 -0
  31. package/lib/components/form-io/form-io.module.d.ts +14 -13
  32. package/lib/components/form-io/form-io.module.d.ts.map +1 -1
  33. package/lib/components/input/input.component.d.ts +2 -1
  34. package/lib/components/input/input.component.d.ts.map +1 -1
  35. package/lib/components/view-content/type-converters/stringTypeConverter.d.ts.map +1 -1
  36. package/lib/pipes/ellipsis.pipe.d.ts +8 -0
  37. package/lib/pipes/ellipsis.pipe.d.ts.map +1 -0
  38. package/lib/pipes/index.d.ts +1 -0
  39. package/lib/pipes/index.d.ts.map +1 -1
  40. package/lib/services/valtimo-modal.service.d.ts.map +1 -1
  41. package/package.json +3 -2
  42. package/public_api.d.ts +2 -0
  43. package/public_api.d.ts.map +1 -1
@@ -69,6 +69,10 @@
69
69
  color: unset !important;
70
70
  }
71
71
 
72
+ .col-form-label {
73
+ padding-top: unset;
74
+ }
75
+
72
76
  /* manual overrides */
73
77
  .form-check {
74
78
  padding-left: 0;
@@ -25,17 +25,18 @@ import { DEFAULT_LIST_TRANSLATIONS, DEFAULT_PAGINATION, DEFAULT_PAGINATOR_CONFIG
25
25
  import { CarbonListFilterPipe } from './CarbonListFilterPipe.directive';
26
26
  import { CarbonListDragAndDropService } from './services';
27
27
  import * as i0 from "@angular/core";
28
- import * as i1 from "./CarbonListFilterPipe.directive";
29
- import * as i2 from "carbon-components-angular";
30
- import * as i3 from "ngx-logger";
31
- import * as i4 from "@ngx-translate/core";
32
- import * as i5 from "../view-content/view-content.service";
33
- import * as i6 from "../../services/key-state.service";
34
- import * as i7 from "./services";
35
- import * as i8 from "@angular/common";
36
- import * as i9 from "@angular/forms";
37
- import * as i10 from "@ng-bootstrap/ng-bootstrap";
38
- import * as i11 from "./tags-modal/tags-modal.component";
28
+ import * as i1 from "../../pipes";
29
+ import * as i2 from "./CarbonListFilterPipe.directive";
30
+ import * as i3 from "carbon-components-angular";
31
+ import * as i4 from "ngx-logger";
32
+ import * as i5 from "@ngx-translate/core";
33
+ import * as i6 from "../view-content/view-content.service";
34
+ import * as i7 from "../../services/key-state.service";
35
+ import * as i8 from "./services";
36
+ import * as i9 from "@angular/common";
37
+ import * as i10 from "@angular/forms";
38
+ import * as i11 from "@ng-bootstrap/ng-bootstrap";
39
+ import * as i12 from "./tags-modal/tags-modal.component";
39
40
  export class CarbonListComponent {
40
41
  get _items() {
41
42
  return this._items$.getValue();
@@ -85,7 +86,8 @@ export class CarbonListComponent {
85
86
  get model() {
86
87
  return this._table.model;
87
88
  }
88
- constructor(filterPipe, iconService, logger, translateService, viewContentService, keyStateService, dragAndDropService, elementRef) {
89
+ constructor(ellipsisPipe, filterPipe, iconService, logger, translateService, viewContentService, keyStateService, dragAndDropService, elementRef) {
90
+ this.ellipsisPipe = ellipsisPipe;
89
91
  this.filterPipe = filterPipe;
90
92
  this.iconService = iconService;
91
93
  this.logger = logger;
@@ -197,7 +199,7 @@ export class CarbonListComponent {
197
199
  return new TableItem({
198
200
  title: resolvedObject ?? '-',
199
201
  data: (field.tooltipCharLimit
200
- ? this.transformContentEllipsis(resolvedObject, field.tooltipCharLimit)
202
+ ? this.ellipsisPipe.transform(resolvedObject, field.tooltipCharLimit)
201
203
  : resolvedObject) ?? '-',
202
204
  template: this.defaultTemplate,
203
205
  item,
@@ -481,23 +483,20 @@ export class CarbonListComponent {
481
483
  template: this.tagTemplate,
482
484
  });
483
485
  const tags = itemTags.map((tag, index) => index === 0
484
- ? { ...tag, ellipsisContent: this.transformContentEllipsis(tag.content, TAG_ELLIPSIS_LIMIT) }
486
+ ? { ...tag, ellipsisContent: this.ellipsisPipe.transform(tag.content, TAG_ELLIPSIS_LIMIT) }
485
487
  : tag);
486
488
  return new TableItem({
487
489
  data: { tags },
488
490
  template: this.tagTemplate,
489
491
  });
490
492
  }
491
- transformContentEllipsis(content, limit) {
492
- return content.substring(0, limit - 1) + (content.length > limit ? '...' : '');
493
- }
494
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonListComponent, deps: [{ token: i1.CarbonListFilterPipe }, { token: i2.IconService }, { token: i3.NGXLogger }, { token: i4.TranslateService }, { token: i5.ViewContentService }, { token: i6.KeyStateService }, { token: i7.CarbonListDragAndDropService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
495
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CarbonListComponent, selector: "valtimo-carbon-list", inputs: { items: "items", fields: "fields", tableTranslations: "tableTranslations", paginatorConfig: "paginatorConfig", pagination: "pagination", loading: "loading", actions: "actions", actionItems: "actionItems", header: "header", hideColumnHeader: "hideColumnHeader", initialSortState: "initialSortState", sortState: "sortState", isSearchable: "isSearchable", enableSingleSelection: "enableSingleSelection", lastColumnTemplate: "lastColumnTemplate", paginationIdentifier: "paginationIdentifier", showSelectionColumn: "showSelectionColumn", striped: "striped", hideToolbar: "hideToolbar", lockedTooltipTranslationKey: "lockedTooltipTranslationKey", movingRowsEnabled: "movingRowsEnabled", dragAndDrop: "dragAndDrop", dragAndDropDisabled: "dragAndDropDisabled" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged", moveRow: "moveRow", itemsReordered: "itemsReordered" }, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], viewQueries: [{ propertyName: "actionsMenuTemplate", first: true, predicate: ["actionsMenuTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }, { propertyName: "booleanTemplate", first: true, predicate: ["booleanTemplate"], descendants: true }, { propertyName: "moveRowsTemplate", first: true, predicate: ["moveRowsTemplate"], descendants: true }, { propertyName: "dragAndDropTemplate", first: true, predicate: ["dragAndDropTemplate"], descendants: true }, { propertyName: "rowDisabled", first: true, predicate: ["rowDisabled"], descendants: true }, { propertyName: "tagTemplate", first: true, predicate: ["tagTemplate"], descendants: true }, { propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true }, { propertyName: "_table", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async,\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed,\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items?.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n <ng-container *ngIf=\"!data.tags\">-</ng-container>\n\n <div *ngIf=\"data.tags\" class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n <cds-tag *ngIf=\"!!data.tags[0].content\" class=\"cds-tag--no-margin\" [type]=\"data.tags[0].type\">\n {{ data.tags[0].ellipsisContent ?? data.tags[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.tags.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i2.Pagination, selector: "cds-pagination, ibm-pagination", inputs: ["skeleton", "model", "disabled", "pageInputDisabled", "showPageInput", "pagesUnknown", "pageSelectThreshold", "translations", "itemsPerPageOptions"], outputs: ["selectPage"] }, { kind: "component", type: i2.TableToolbar, selector: "cds-table-toolbar, ibm-table-toolbar", inputs: ["model", "batchText", "ariaLabel", "cancelText", "size"], outputs: ["cancel"] }, { kind: "component", type: i2.TableContainer, selector: "cds-table-container, ibm-table-container" }, { kind: "component", type: i2.TableHeader, selector: "cds-table-header, ibm-table-header" }, { kind: "component", type: i2.TableToolbarActions, selector: "cds-table-toolbar-actions, ibm-table-toolbar-actions" }, { kind: "component", type: i2.TableToolbarSearch, selector: "cds-table-toolbar-search, ibm-table-toolbar-search" }, { kind: "component", type: i2.TableToolbarContent, selector: "cds-table-toolbar-content, ibm-table-toolbar-content" }, { kind: "component", type: i2.Table, selector: "cds-table, ibm-table", inputs: ["ariaLabelledby", "ariaDescribedby", "model", "size", "skeleton", "isDataGrid", "sortable", "noBorder", "showSelectionColumn", "enableSingleSelect", "scrollLoadDistance", "expandButtonAriaLabel", "sortDescendingLabel", "sortAscendingLabel", "translations", "striped", "stickyHeader", "footerTemplate", "selectionLabelColumn"], outputs: ["sort", "selectAll", "deselectAll", "selectRow", "deselectRow", "rowClick", "scrollLoad"] }, { kind: "component", type: i2.TableBody, selector: "[cdsTableBody], [ibmTableBody]", inputs: ["model", "enableSingleSelect", "expandButtonAriaLabel", "checkboxRowLabel", "showSelectionColumn", "size", "selectionLabelColumn", "skeleton"], outputs: ["selectRow", "deselectRow", "rowClick"] }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i2.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i2.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i10.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i11.CarbonTagsModalComponent, selector: "valtimo-tags-modal", inputs: ["open", "tags"], outputs: ["closeEvent"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
493
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonListComponent, deps: [{ token: i1.EllipsisPipe }, { token: i2.CarbonListFilterPipe }, { token: i3.IconService }, { token: i4.NGXLogger }, { token: i5.TranslateService }, { token: i6.ViewContentService }, { token: i7.KeyStateService }, { token: i8.CarbonListDragAndDropService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
494
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CarbonListComponent, selector: "valtimo-carbon-list", inputs: { items: "items", fields: "fields", tableTranslations: "tableTranslations", paginatorConfig: "paginatorConfig", pagination: "pagination", loading: "loading", actions: "actions", actionItems: "actionItems", header: "header", hideColumnHeader: "hideColumnHeader", initialSortState: "initialSortState", sortState: "sortState", isSearchable: "isSearchable", enableSingleSelection: "enableSingleSelection", lastColumnTemplate: "lastColumnTemplate", paginationIdentifier: "paginationIdentifier", showSelectionColumn: "showSelectionColumn", striped: "striped", hideToolbar: "hideToolbar", lockedTooltipTranslationKey: "lockedTooltipTranslationKey", movingRowsEnabled: "movingRowsEnabled", dragAndDrop: "dragAndDrop", dragAndDropDisabled: "dragAndDropDisabled" }, outputs: { rowClicked: "rowClicked", paginationClicked: "paginationClicked", paginationSet: "paginationSet", search: "search", sortChanged: "sortChanged", moveRow: "moveRow", itemsReordered: "itemsReordered" }, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], viewQueries: [{ propertyName: "actionsMenuTemplate", first: true, predicate: ["actionsMenuTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }, { propertyName: "booleanTemplate", first: true, predicate: ["booleanTemplate"], descendants: true }, { propertyName: "moveRowsTemplate", first: true, predicate: ["moveRowsTemplate"], descendants: true }, { propertyName: "dragAndDropTemplate", first: true, predicate: ["dragAndDropTemplate"], descendants: true }, { propertyName: "rowDisabled", first: true, predicate: ["rowDisabled"], descendants: true }, { propertyName: "tagTemplate", first: true, predicate: ["tagTemplate"], descendants: true }, { propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true }, { propertyName: "_table", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async,\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed,\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items?.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n <ng-container *ngIf=\"!data.tags\">-</ng-container>\n\n <div *ngIf=\"data.tags\" class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n <cds-tag *ngIf=\"!!data.tags[0].content\" class=\"cds-tag--no-margin\" [type]=\"data.tags[0].type\">\n {{ data.tags[0].ellipsisContent ?? data.tags[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.tags.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3.Pagination, selector: "cds-pagination, ibm-pagination", inputs: ["skeleton", "model", "disabled", "pageInputDisabled", "showPageInput", "pagesUnknown", "pageSelectThreshold", "translations", "itemsPerPageOptions"], outputs: ["selectPage"] }, { kind: "component", type: i3.TableToolbar, selector: "cds-table-toolbar, ibm-table-toolbar", inputs: ["model", "batchText", "ariaLabel", "cancelText", "size"], outputs: ["cancel"] }, { kind: "component", type: i3.TableContainer, selector: "cds-table-container, ibm-table-container" }, { kind: "component", type: i3.TableHeader, selector: "cds-table-header, ibm-table-header" }, { kind: "component", type: i3.TableToolbarActions, selector: "cds-table-toolbar-actions, ibm-table-toolbar-actions" }, { kind: "component", type: i3.TableToolbarSearch, selector: "cds-table-toolbar-search, ibm-table-toolbar-search" }, { kind: "component", type: i3.TableToolbarContent, selector: "cds-table-toolbar-content, ibm-table-toolbar-content" }, { kind: "component", type: i3.Table, selector: "cds-table, ibm-table", inputs: ["ariaLabelledby", "ariaDescribedby", "model", "size", "skeleton", "isDataGrid", "sortable", "noBorder", "showSelectionColumn", "enableSingleSelect", "scrollLoadDistance", "expandButtonAriaLabel", "sortDescendingLabel", "sortAscendingLabel", "translations", "striped", "stickyHeader", "footerTemplate", "selectionLabelColumn"], outputs: ["sort", "selectAll", "deselectAll", "selectRow", "deselectRow", "rowClick", "scrollLoad"] }, { kind: "component", type: i3.TableBody, selector: "[cdsTableBody], [ibmTableBody]", inputs: ["model", "enableSingleSelect", "expandButtonAriaLabel", "checkboxRowLabel", "showSelectionColumn", "size", "selectionLabelColumn", "skeleton"], outputs: ["selectRow", "deselectRow", "rowClick"] }, { kind: "directive", type: i10.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i3.OverflowMenu, selector: "cds-overflow-menu, ibm-overflow-menu", inputs: ["buttonLabel", "flip", "placement", "open", "customTrigger", "offset", "wrapperClass", "triggerClass"], outputs: ["openChange"] }, { kind: "component", type: i3.OverflowMenuOption, selector: "cds-overflow-menu-option, ibm-overflow-menu-option", inputs: ["divider", "type", "disabled", "href", "target", "innerClass"], outputs: ["selected"] }, { kind: "directive", type: i11.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i3.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i12.CarbonTagsModalComponent, selector: "valtimo-tags-modal", inputs: ["open", "tags"], outputs: ["closeEvent"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
496
495
  }
497
496
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonListComponent, decorators: [{
498
497
  type: Component,
499
498
  args: [{ selector: 'valtimo-carbon-list', changeDetection: ChangeDetectionStrategy.OnPush, providers: [CarbonListFilterPipe, CarbonListDragAndDropService], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<cds-table-container\n *ngIf=\"{\n sort: sort$ | async,\n model: model$ | async,\n viewInitialized: viewInitialized$ | async,\n } as obs\"\n class=\"valtimo-carbon-list\"\n>\n <cds-table-header *ngIf=\"header\">\n <ng-content select=\"[header]\"></ng-content>\n </cds-table-header>\n\n <ng-content select=\"[tabs]\"></ng-content>\n\n <cds-table-toolbar\n *ngIf=\"!hideToolbar\"\n class=\"valtimo-carbon-list__toolbar\"\n [model]=\"obs.model\"\n [batchText]=\"batchText$ | async\"\n >\n <cds-table-toolbar-actions>\n <ng-content select=\"[carbonToolbarActions]\"> </ng-content>\n </cds-table-toolbar-actions>\n\n <cds-table-toolbar-content>\n <cds-table-toolbar-search\n *ngIf=\"isSearchable\"\n [expandable]=\"true\"\n [formControl]=\"searchFormControl\"\n ></cds-table-toolbar-search>\n\n <ng-content select=\"[carbonToolbarContent]\"> </ng-content>\n </cds-table-toolbar-content>\n </cds-table-toolbar>\n\n <cds-table\n *ngIf=\"!!obs.sort\"\n [ngClass]=\"{\n 'valtimo-carbon-list__header--hidden': hideColumnHeader,\n 'valtimo-carbon-list--unclickable': !this.rowClicked.observed,\n }\"\n [enableSingleSelect]=\"enableSingleSelect\"\n [model]=\"loading || !obs.viewInitialized ? skeletonModel : obs.model\"\n [showSelectionColumn]=\"showSelectionColumn\"\n [skeleton]=\"loading\"\n [striped]=\"striped\"\n (sort)=\"onSort(obs.model.header[$event])\"\n (rowClick)=\"onRowClick($event)\"\n >\n <tbody cdsTableBody>\n <tr class=\"valtimo-carbon-list__no-results\">\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n <ng-content></ng-content>\n </td>\n\n <td [attr.colspan]=\"obs.model.header.length + (showSelectionColumn ? 1 : 0)\">\n {{ 'list.noResults' | translate }}\n </td>\n </tr>\n </tbody>\n </cds-table>\n\n <cds-pagination\n *ngIf=\"paginationModel && items?.length\"\n [itemsPerPageOptions]=\"paginatorConfig.itemsPerPageOptions\"\n [model]=\"paginationModel\"\n [showPageInput]=\"paginatorConfig.showPageInput\"\n [skeleton]=\"loading\"\n [translations]=\"paginationTranslations$ | async\"\n (selectPage)=\"onSelectPage($event)\"\n ></cds-pagination>\n</cds-table-container>\n\n<ng-template #actionTemplate let-data=\"data\">\n <i\n class=\"clickable\"\n [ngClass]=\"data.iconClass\"\n (click)=\"$event.stopPropagation(); data.callback(data.item)\"\n ></i>\n</ng-template>\n\n<ng-template #booleanTemplate let-data=\"data\">\n {{ data | translate }}\n</ng-template>\n\n<ng-template #actionsMenuTemplate let-data=\"data\">\n <cds-overflow-menu\n [open]=\"currentOpenActionId === data.item\"\n (openChange)=\"handleActionOpenChange(data.item, $event)\"\n [flip]=\"true\"\n [offset]=\"{x: 0, y: 50}\"\n placement=\"bottom\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (action of data.actions; track action.label) {\n <cds-overflow-menu-option\n [disabled]=\"action.disabledCallback ? action.disabledCallback(data.item) : false\"\n [type]=\"action.type\"\n (selected)=\"action.callback(data.item)\"\n >\n <i *ngIf=\"!!action.iconClass\" [ngClass]=\"action.iconClass\"></i>\n\n {{ action.label | translate }}\n </cds-overflow-menu-option>\n }\n </cds-overflow-menu>\n</ng-template>\n\n<ng-template #rowDisabled let-data=\"data\">\n <div *ngIf=\"data.locked\" class=\"locked\">\n <span\n class=\"float-right badge badge-pill badge-secondary bg-grey\"\n ngbTooltip=\"{{ lockedTooltipTranslationKey | translate }}\"\n >\n <i class=\"icon mdi mdi-lock\"></i>\n </span>\n </div>\n</ng-template>\n\n<ng-template #moveRowsTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__move-rows\">\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === 0\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveUpClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--up\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n\n <button\n cdsButton=\"tertiary\"\n [disabled]=\"data.index === data.length - 1\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (click)=\"onMoveDownClick($event, data)\"\n >\n <svg cdsIcon=\"arrow--down\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #dragAndDropTemplate let-data=\"data\">\n <div class=\"valtimo-carbon-list__draggable\">\n <button\n cdsButton=\"ghost\"\n [disabled]=\"dragAndDropDisabled\"\n [iconOnly]=\"true\"\n size=\"sm\"\n (mousedown)=\"onDragStart($event, data)\"\n >\n <svg cdsIcon=\"draggable\" size=\"16\" class=\"cds--btn__icon\"></svg>\n </button>\n </div>\n</ng-template>\n\n<ng-template #tagTemplate let-data=\"data\">\n <ng-container *ngIf=\"!data.tags\">-</ng-container>\n\n <div *ngIf=\"data.tags\" class=\"tag-template\">\n @if (data.tags.length === 0) {\n -\n } @else {\n <cds-tag *ngIf=\"!!data.tags[0].content\" class=\"cds-tag--no-margin\" [type]=\"data.tags[0].type\">\n {{ data.tags[0].ellipsisContent ?? data.tags[0].content }}\n </cds-tag>\n\n <cds-tag\n *ngIf=\"data.tags.length > 1\"\n class=\"cds-tag--no-margin valtimo-carbon-list__expand-tag\"\n type=\"high-contrast\"\n (click)=\"onTagClick($event, data.tags)\"\n >\n {{ data.tags.length - 1 }} <svg cdsIcon=\"add\" size=\"16\"></svg>\n </cds-tag>\n }\n </div>\n</ng-template>\n\n<ng-template #defaultTemplate let-data=\"data\">\n <span>{{ data }}</span>\n</ng-template>\n\n<valtimo-tags-modal\n [open]=\"tagModalOpen$ | async\"\n [tags]=\"tagModalData$ | async\"\n (closeEvent)=\"onCloseEvent()\"\n></valtimo-tags-modal>\n", styles: [".clickable{cursor:pointer}.container-fluid{background-color:var(--cds-layer)}.tile-holder{background-color:#f5f5f5;border:1px solid transparent}.tile-holder:hover{background-color:#eee;border:1px solid #dee2e6}th:first-child,td:first-child{padding-left:25px}::ng-deep tr:has(>td .locked){cursor:not-allowed}::ng-deep tr:has(>td .locked) td{color:var(--cds-text-on-color-disabled)}::ng-deep .valtimo-carbon-list__header--hidden thead{display:none}::ng-deep .valtimo-carbon-list--unclickable tr{cursor:default}.valtimo-carbon-list__toolbar:empty{display:none}.valtimo-carbon-list__no-results{cursor:default}.valtimo-carbon-list__no-results td:empty,.valtimo-carbon-list__no-results td:not(:empty)+td{display:none}.valtimo-carbon-list__move-rows,.valtimo-carbon-list__draggable{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.valtimo-carbon-list__move-rows button:not(:last-child),.valtimo-carbon-list__draggable button:not(:last-child){margin-right:8px}.valtimo-carbon-list__expand-tag{cursor:pointer}.valtimo-carbon-list label{margin-bottom:0!important}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag{margin:0}.valtimo-carbon-list ::ng-deep .tag-template .cds--tag svg{fill:var(--cds-background)}.valtimo-carbon-list ::ng-deep .tag-template>*:not(:last-child){margin-right:8px}.valtimo-carbon-list ::ng-deep .cds--tag{white-space:nowrap}.valtimo-carbon-list ::ng-deep .valtimo-carbon-list__draggable .cds--btn--ghost{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row{cursor:move!important}::ng-deep .valtimo-carbon-list__drag-table-row .valtimo-carbon-list__draggable .cds--btn--ghost{outline:0;border-color:var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60)));box-shadow:inset 0 0 0 1px var(--cds-button-focus-color, var(--cds-focus, var(--vcds-color-60))),inset 0 0 0 2px var(--cds-background, #f4f4f4)}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
500
- }], ctorParameters: () => [{ type: i1.CarbonListFilterPipe }, { type: i2.IconService }, { type: i3.NGXLogger }, { type: i4.TranslateService }, { type: i5.ViewContentService }, { type: i6.KeyStateService }, { type: i7.CarbonListDragAndDropService }, { type: i0.ElementRef }], propDecorators: { actionsMenuTemplate: [{
499
+ }], ctorParameters: () => [{ type: i1.EllipsisPipe }, { type: i2.CarbonListFilterPipe }, { type: i3.IconService }, { type: i4.NGXLogger }, { type: i5.TranslateService }, { type: i6.ViewContentService }, { type: i7.KeyStateService }, { type: i8.CarbonListDragAndDropService }, { type: i0.ElementRef }], propDecorators: { actionsMenuTemplate: [{
501
500
  type: ViewChild,
502
501
  args: ['actionsMenuTemplate']
503
502
  }], actionTemplate: [{
@@ -585,4 +584,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
585
584
  }], itemsReordered: [{
586
585
  type: Output
587
586
  }] } });
588
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmJvbi1saXN0L2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2xGLE9BQU8sRUFLTCxLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsR0FBRyxJQUFJLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVuQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osR0FBRyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLHdCQUF3QixFQUFFLHdCQUF3QixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxF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O3NCQUE3QixLQUFLO2dCQUlHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR2MsVUFBVTtzQkFBN0IsS0FBSztnQkFxQkcsT0FBTztzQkFBZixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSUcsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBSUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QXJyb3dEb3duMTYsIEFycm93VXAxNiwgRHJhZ2dhYmxlMTYsIFNldHRpbmdzVmlldzE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1NvcnRTdGF0ZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtcbiAgSWNvblNlcnZpY2UsXG4gIE92ZXJmbG93TWVudSxcbiAgUGFnaW5hdGlvbk1vZGVsLFxuICBQYWdpbmF0aW9uVHJhbnNsYXRpb25zLFxuICBUYWJsZSxcbiAgVGFibGVIZWFkZXJJdGVtLFxuICBUYWJsZUl0ZW0sXG4gIFRhYmxlTW9kZWwsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtnZXQgYXMgX2dldH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7TkdYTG9nZ2VyfSBmcm9tICduZ3gtbG9nZ2VyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMsIENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWX0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFjdGlvbkl0ZW0sXG4gIENhcmJvbkxpc3RCYXRjaFRleHQsXG4gIENhcmJvbkxpc3RJdGVtLFxuICBDYXJib25MaXN0VHJhbnNsYXRpb25zLFxuICBDYXJib25QYWdpbmF0b3JDb25maWcsXG4gIENhcmJvblRhZyxcbiAgQ29sdW1uQ29uZmlnLFxuICBERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TLFxuICBERUZBVUxUX1BBR0lOQVRJT04sXG4gIERFRkFVTFRfUEFHSU5BVE9SX0NPTkZJRyxcbiAgTW92ZVJvd0RpcmVjdGlvbixcbiAgTW92ZVJvd0V2ZW50LFxuICBQYWdpbmF0aW9uLFxuICBUQUdfRUxMSVBTSVNfTElNSVQsXG4gIFZpZXdUeXBlLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtLZXlTdGF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2tleS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7Vmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRlbnQvdmlldy1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtDYXJib25MaXN0RmlsdGVyUGlwZX0gZnJvbSAnLi9DYXJib25MaXN0RmlsdGVyUGlwZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtDYXJib25MaXN0RHJhZ0FuZERyb3BTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1jYXJib24tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJib24tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmJvbi1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtDYXJib25MaXN0RmlsdGVyUGlwZSwgQ2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIENhcmJvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbnNNZW51VGVtcGxhdGUnKSBhY3Rpb25zTWVudVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxPdmVyZmxvd01lbnU+O1xuICBAVmlld0NoaWxkKCdhY3Rpb25UZW1wbGF0ZScpIGFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdib29sZWFuVGVtcGxhdGUnKSBib29sZWFuVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ21vdmVSb3dzVGVtcGxhdGUnKSBtb3ZlUm93c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdkcmFnQW5kRHJvcFRlbXBsYXRlJykgZHJhZ0FuZERyb3BUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgncm93RGlzYWJsZWQnKSByb3dEaXNhYmxlZDogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgndGFnVGVtcGxhdGUnKSB0YWdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdFRlbXBsYXRlJykgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKFRhYmxlKSBwcml2YXRlIF90YWJsZTogVGFibGU7XG5cbiAgcHJpdmF0ZSBfY29tcGxldGVEYXRhU291cmNlOiBUYWJsZUl0ZW1bXVtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FyYm9uTGlzdEl0ZW1bXT4oW10pO1xuICBwcml2YXRlIGdldCBfaXRlbXMoKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zJC5nZXRWYWx1ZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGl0ZW1zKHZhbHVlOiBDYXJib25MaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5faXRlbXMkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGN1cnJlbnRPcGVuQWN0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbHVtbkNvbmZpZ1tdPihbXSk7XG4gIEBJbnB1dCgpIHNldCBmaWVsZHModmFsdWU6IENvbHVtbkNvbmZpZ1tdKSB7XG4gICAgdGhpcy5fZmllbGRzJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlVHJhbnNsYXRpb25zJDogQmVoYXZpb3JTdWJqZWN0PENhcmJvbkxpc3RUcmFuc2xhdGlvbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICBERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TXG4gICk7XG4gIEBJbnB1dCgpIHNldCB0YWJsZVRyYW5zbGF0aW9ucyh2YWx1ZTogUGFydGlhbDxDYXJib25MaXN0VHJhbnNsYXRpb25zPikge1xuICAgIHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5uZXh0KHsuLi5ERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TLCAuLi52YWx1ZX0pO1xuICB9XG5cbiAgQElucHV0KCkgcGFnaW5hdG9yQ29uZmlnOiBDYXJib25QYWdpbmF0b3JDb25maWcgPSBERUZBVUxUX1BBR0lOQVRPUl9DT05GSUc7XG4gIHByaXZhdGUgX3BhZ2luYXRpb246IFBhZ2luYXRpb247XG4gIHByaXZhdGUgX2lzUGFnaW5hdGlvbkluaXQgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNldCBwYWdpbmF0aW9uKHZhbHVlOiBQYXJ0aWFsPFBhZ2luYXRpb24+IHwgZmFsc2UpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9wYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLl9wYWdpbmF0aW9uID0gey4uLkRFRkFVTFRfUEFHSU5BVElPTiwgLi4udmFsdWV9O1xuICAgIH1cblxuICAgIHRoaXMuX3BhZ2luYXRpb24gPSB7Li4udGhpcy5fcGFnaW5hdGlvbiwgLi4udmFsdWV9O1xuICAgIHRoaXMuYnVpbGRQYWdpbmF0aW9uTW9kZWwoKTtcblxuICAgIGlmICh0aGlzLl9pc1BhZ2luYXRpb25Jbml0IHx8ICF2YWx1ZS5zaXplKSByZXR1cm47XG5cbiAgICB0aGlzLnNldFBhZ2luYXRpb25TaXplKHZhbHVlLnNpemUudG9TdHJpbmcoKSk7XG4gICAgdGhpcy5faXNQYWdpbmF0aW9uSW5pdCA9IHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBwYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uO1xuICB9XG5cbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGFjdGlvbnMgZmllbGQgaXMgZGVwcmVjYXRlZC4gQWN0aW9ucyBjYW4gYmUgYWRkZWQgdGhyb3VnaCB0aGUgKipASW5wdXQgZmllbGQqKi5cbiAgICovXG4gIEBJbnB1dCgpIGFjdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW107XG4gIEBJbnB1dCgpIGhlYWRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaGlkZUNvbHVtbkhlYWRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlO1xuICBASW5wdXQoKSBzZXQgc29ydFN0YXRlKHZhbHVlOiBTb3J0U3RhdGUpIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5zb3J0JC5uZXh0KHZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBpc1NlYXJjaGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgbGFzdENvbHVtblRlbXBsYXRlIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIEFueSB0ZW1wbGF0ZSBjb2x1bW4gY2FuIGJlIGFkZGVkIHRocm91Z2ggdGhlICoqQElucHV0IGZpZWxkKiouXG4gICAqL1xuICBASW5wdXQoKSBsYXN0Q29sdW1uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIHBhZ2luYXRpb25JZGVudGlmaWVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dTZWxlY3Rpb25Db2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3RyaXBlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlVG9vbGJhciA9IGZhbHNlO1xuICBASW5wdXQoKSBsb2NrZWRUb29sdGlwVHJhbnNsYXRpb25LZXkgPSAnJztcbiAgQElucHV0KCkgbW92aW5nUm93c0VuYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRyYWdBbmREcm9wID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRyYWdBbmREcm9wRGlzYWJsZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcGFnaW5hdGlvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25TZXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc29ydENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnRTdGF0ZT4oKTtcbiAgQE91dHB1dCgpIG1vdmVSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdmVSb3dFdmVudD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zUmVvcmRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJib25MaXN0SXRlbVtdPigpO1xuXG4gIHB1YmxpYyBiYXRjaFRleHQkOiBPYnNlcnZhYmxlPENhcmJvbkxpc3RCYXRjaFRleHQ+ID0gdGhpcy5fdGFibGVUcmFuc2xhdGlvbnMkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh0cmFuc2xhdGlvbnM6IENhcmJvbkxpc3RUcmFuc2xhdGlvbnMpID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMuc2VsZWN0LnNpbmdsZSksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnNlbGVjdC5tdWx0aXBsZSksXG4gICAgICBdKS5waXBlKFxuICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodHJhbnNsYXRpb25zLnNlbGVjdC5zaW5nbGUpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRyYW5zbGF0aW9ucy5zZWxlY3QubXVsdGlwbGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcCgoW1NJTkdMRSwgTVVMVElQTEVdKSA9PiAoe1NJTkdMRSwgTVVMVElQTEV9KSlcbiAgKTtcblxuICBwdWJsaWMgcGFnaW5hdGlvblRyYW5zbGF0aW9ucyQ6IE9ic2VydmFibGU8UGFydGlhbDxQYWdpbmF0aW9uVHJhbnNsYXRpb25zPj4gPVxuICAgIHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh0cmFuc2xhdGlvbnM6IENhcmJvbkxpc3RUcmFuc2xhdGlvbnMpID0+XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnBhZ2luYXRpb24uaXRlbXNQZXJQYWdlKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5wYWdpbmF0aW9uLnRvdGFsSXRlbSksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMucGFnaW5hdGlvbi50b3RhbEl0ZW1zKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdpbnRlcmZhY2UubGlzdC5vZkxhc3RQYWdlJyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgnaW50ZXJmYWNlLmxpc3Qub2ZMYXN0UGFnZXMnKSxcbiAgICAgICAgXSlcbiAgICAgICksXG4gICAgICBtYXAoKFtJVEVNU19QRVJfUEFHRSwgVE9UQUxfSVRFTSwgVE9UQUxfSVRFTVMsIE9GX0xBU1RfUEFHRSwgT0ZfTEFTVF9QQUdFU10pID0+ICh7XG4gICAgICAgIElURU1TX1BFUl9QQUdFLFxuICAgICAgICBUT1RBTF9JVEVNLFxuICAgICAgICBUT1RBTF9JVEVNUyxcbiAgICAgICAgT0ZfTEFTVF9QQUdFLFxuICAgICAgICBPRl9MQVNUX1BBR0VTLFxuICAgICAgfSkpXG4gICAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc29ydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNvcnRTdGF0ZT4oe1xuICAgIHN0YXRlOiB7bmFtZTogJycsIGRpcmVjdGlvbjogJ0RFU0MnfSxcbiAgICBpc1NvcnRpbmc6IGZhbHNlLFxuICB9KTtcbiAgcHVibGljIHJlYWRvbmx5IHRhZ01vZGFsT3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHRhZ01vZGFsRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvblRhZ1tdPihbXSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWSA9IENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWTtcbiAgcHVibGljIHJlYWRvbmx5IFZpZXdUeXBlID0gVmlld1R5cGU7XG4gIHB1YmxpYyBza2VsZXRvbk1vZGVsID0gVGFibGUuc2tlbGV0b25Nb2RlbCg1LCA1KTtcbiAgcHVibGljIHBhZ2luYXRpb25Nb2RlbDogUGFnaW5hdGlvbk1vZGVsO1xuICBwdWJsaWMgc2VhcmNoRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBBR0lOQVRJT05fU0laRSA9ICdQYWdpbmF0aW9uU2l6ZSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6IENhcmJvbkxpc3RJdGVtW10ge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5fdGFibGUubW9kZWw7XG5cbiAgICByZXR1cm4gbW9kZWwuZGF0YS5yZWR1Y2UoXG4gICAgICAoaXRlbXM6IENhcmJvbkxpc3RJdGVtW10sIF8sIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgIG1vZGVsLmlzUm93U2VsZWN0ZWQoaW5kZXgpID8gWy4uLml0ZW1zLCB0aGlzLml0ZW1zW2luZGV4XV0gOiBbLi4uaXRlbXNdLFxuICAgICAgW11cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0luaXRpYWxpemVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBnZXQgdmlld0luaXRpYWxpemVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fdmlld0luaXRpYWxpemVkJC5waXBlKGZpbHRlcihpbml0aWFsaXplZCA9PiBpbml0aWFsaXplZCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlbCgpOiBUYWJsZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGUubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbHRlclBpcGU6IENhcmJvbkxpc3RGaWx0ZXJQaXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRlbnRTZXJ2aWNlOiBWaWV3Q29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXlTdGF0ZVNlcnZpY2U6IEtleVN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWdBbmREcm9wU2VydmljZTogQ2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbQXJyb3dEb3duMTYsIEFycm93VXAxNiwgU2V0dGluZ3NWaWV3MTYsIERyYWdnYWJsZTE2XSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5sb2FkUGFnaW5hdGlvblNpemUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbml0aWFsU29ydFN0YXRlKSB7XG4gICAgICB0aGlzLnNvcnQkLm5leHQodGhpcy5pbml0aWFsU29ydFN0YXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxuICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hTdHJpbmc6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2gub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQoc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyZWRJdGVtcyQubmV4dChudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zJC5uZXh0KFxuICAgICAgICAgICAgdGhpcy5maWx0ZXJQaXBlLnRyYW5zZm9ybSh0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UsIHNlYXJjaFN0cmluZyA/PyAnJylcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLm9wZW5EcmFnQW5kRHJvcFN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRHJhZ0FuZERyb3BTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5kcmFnQW5kRHJvcEV2ZW50cyQuc3Vic2NyaWJlKGRyYWdBbmREcm9wRXZlbnQgPT4ge1xuICAgICAgICBjb25zdCByZW9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKFxuICAgICAgICAgIHRoaXMuX2l0ZW1zLFxuICAgICAgICAgIGRyYWdBbmREcm9wRXZlbnQuc3RhcnRJbmRleCxcbiAgICAgICAgICBkcmFnQW5kRHJvcEV2ZW50Lm5ld0luZGV4XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXRlbXNSZW9yZGVyZWQuZW1pdChyZW9yZGVyZWRJdGVtcyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dDbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuX3RhYmxlLm1vZGVsLmRhdGFbaW5kZXhdO1xuICAgIGNvbnN0IGZpcnN0SXRlbVdpdGhEYXRhID0gcm93RGF0YS5maW5kKGl0ZW0gPT4gISFpdGVtWydpdGVtJ10pO1xuICAgIGNvbnN0IGZpcnN0SXRlbSA9IGZpcnN0SXRlbVdpdGhEYXRhPy5bJ2l0ZW0nXTtcblxuICAgIGlmIChmaXJzdEl0ZW0pIGZpcnN0SXRlbS5jdHJsQ2xpY2sgPSB0aGlzLmtleVN0YXRlU2VydmljZS5nZXRDdHJsT3JDbWRTdGF0ZSgpO1xuXG4gICAgaWYgKCFmaXJzdEl0ZW0gfHwgZmlyc3RJdGVtPy5sb2NrZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQoZmlyc3RJdGVtKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbi5zaXplICE9PSB0aGlzLnBhZ2luYXRpb25Nb2RlbC5wYWdlTGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldFBhZ2luYXRpb25TaXplKHRoaXMucGFnaW5hdGlvbk1vZGVsLnBhZ2VMZW5ndGgudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYWdpbmF0aW9uQ2xpY2tlZC5lbWl0KHBhZ2UpO1xuICB9XG5cbiAgcHVibGljIG9uU29ydChoZWFkZXJJdGVtOiBUYWJsZUhlYWRlckl0ZW0gJiB7a2V5OiBzdHJpbmd9KTogdm9pZCB7XG4gICAgY29uc3Qge2tleSwgc29ydGFibGV9ID0gaGVhZGVySXRlbTtcbiAgICBpZiAoIXNvcnRhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzb3J0ID0+IHtcbiAgICAgIGxldCBuZXdTdGF0ZTogU29ydFN0YXRlO1xuXG4gICAgICBpZiAoc29ydC5zdGF0ZS5uYW1lID09PSBrZXkpIHtcbiAgICAgICAgaWYgKCFzb3J0LmlzU29ydGluZykge1xuICAgICAgICAgIG5ld1N0YXRlID0ge3N0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiAnREVTQyd9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzb3J0LnN0YXRlLmRpcmVjdGlvbiA9PT0gJ0RFU0MnKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHsuLi5zb3J0LCBzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogJ0FTQyd9fTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246ICdERVNDJ30sIGlzU29ydGluZzogZmFsc2V9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHtuYW1lOiBrZXksIGRpcmVjdGlvbjogJ0RFU0MnfSwgaXNTb3J0aW5nOiB0cnVlfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0JC5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChuZXdTdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25EcmFnU3RhcnQoXG4gICAgbW91c2VFdmVudDogTW91c2VFdmVudCxcbiAgICBjYXJib25FdmVudDoge2luZGV4OiBudW1iZXI7IGl0ZW06IENhcmJvbkxpc3RJdGVtOyBsZW5ndGg6IG51bWJlcn1cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJhZ0FuZERyb3BEaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5kcmFnQW5kRHJvcFNlcnZpY2Uuc2V0Q2FyYm9uTGlzdEVsZW1lbnRSZWYodGhpcy5lbGVtZW50UmVmKTtcbiAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5zdGFydERyYWcobW91c2VFdmVudC55LCBjYXJib25FdmVudC5pbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGFnaW5hdGlvbk1vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMucGFnaW5hdGlvbk1vZGVsID0ge1xuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5wYWdlLFxuICAgICAgdG90YWxEYXRhTGVuZ3RoOiArdGhpcy5wYWdpbmF0aW9uLmNvbGxlY3Rpb25TaXplLFxuICAgICAgcGFnZUxlbmd0aDogdGhpcy5wYWdpbmF0aW9uLnNpemUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyYW5zbGF0ZWRGaWVsZHMkOiBPYnNlcnZhYmxlPENvbHVtbkNvbmZpZ1tdPiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2ZpZWxkcyQpLFxuICAgIGZpbHRlcigoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT4gISFmaWVsZHMpLFxuICAgIG1hcCgoZmllbGRzOiBDb2x1bW5Db25maWdbXSkgPT5cbiAgICAgIGZpZWxkcy5tYXAoKGZpZWxkOiBDb2x1bW5Db25maWcpID0+ICh7XG4gICAgICAgIC4uLmZpZWxkLFxuICAgICAgICBsYWJlbDogIWZpZWxkLmxhYmVsID8gJycgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChmaWVsZC5sYWJlbCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSBfaGVhZGVySXRlbXMkOiBPYnNlcnZhYmxlPFRhYmxlSGVhZGVySXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX3RyYW5zbGF0ZWRGaWVsZHMkLFxuICAgIHRoaXMuc29ydCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbdHJhbnNsYXRlZEZpZWxkcywgc29ydFN0YXRlXSkgPT5cbiAgICAgIHRyYW5zbGF0ZWRGaWVsZHMubWFwKFxuICAgICAgICAoZmllbGQ6IENvbHVtbkNvbmZpZykgPT5cbiAgICAgICAgICBuZXcgVGFibGVIZWFkZXJJdGVtKHtcbiAgICAgICAgICAgIGRhdGE6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgc29ydGFibGU6IGZpZWxkLnNvcnRhYmxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBmaWVsZC5jbGFzc05hbWUsXG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHNvcnRlZDogc29ydFN0YXRlLmlzU29ydGluZyAmJiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lLFxuICAgICAgICAgICAgYXNjZW5kaW5nOiBmaWVsZC5rZXkgPT09IHNvcnRTdGF0ZS5zdGF0ZS5uYW1lICYmIHNvcnRTdGF0ZS5zdGF0ZS5kaXJlY3Rpb24gPT09ICdBU0MnLFxuICAgICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGhlYWRlcjogVGFibGVIZWFkZXJJdGVtW10pID0+IFtcbiAgICAgIC4uLnRoaXMuZHJhZ0FuZERyb3BIZWFkZXJDb2x1bW5zLFxuICAgICAgLi4uaGVhZGVyLFxuICAgICAgLi4udGhpcy5leHRyYUNvbHVtbnMsXG4gICAgXSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUl0ZW1zJDogT2JzZXJ2YWJsZTxUYWJsZUl0ZW1bXVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2ZpZWxkcyQsXG4gICAgdGhpcy5faXRlbXMkLFxuICAgIHRoaXMuX3ZpZXdJbml0aWFsaXplZCQsXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbZmllbGRzLCBpdGVtcywgdmlld0luaXRpYWxpemVkXSkgPT4gISFmaWVsZHMgJiYgISFpdGVtcyAmJiB2aWV3SW5pdGlhbGl6ZWQpLFxuICAgIG1hcCgoW2ZpZWxkcywgaXRlbXNdKSA9PlxuICAgICAgaXRlbXMubWFwKChpdGVtOiBDYXJib25MaXN0SXRlbSwgaW5kZXg6IG51bWJlcikgPT4gW1xuICAgICAgICAuLi50aGlzLmdldERyYWdBbmREcm9wSXRlbXNJdGVtcyhpdGVtLCBpbmRleCwgaXRlbXMubGVuZ3RoKSxcbiAgICAgICAgLi4uZmllbGRzLm1hcCgoZmllbGQ6IENvbHVtbkNvbmZpZykgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQudmlld1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuVEVNUExBVEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgaW5kZXgsIGxlbmd0aDogaXRlbXMubGVuZ3RoLCAuLi5maWVsZC50ZW1wbGF0ZURhdGF9LFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBmaWVsZC50ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFZpZXdUeXBlLkJPT0xFQU46XG4gICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5yZXNvbHZlT2JqZWN0KGZpZWxkLCBpdGVtKTtcbiAgICAgICAgICAgICAgZGF0YSA9ICFCT09MRUFOX0NPTlZFUlRFUl9WQUxVRVMuaW5jbHVkZXMoZGF0YSlcbiAgICAgICAgICAgICAgICA/IGRhdGFcbiAgICAgICAgICAgICAgICA6IGAkeyd2aWV3VHlwZUNvbnZlcnRlci4nICsgZGF0YX1gO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5ib29sZWFuVGVtcGxhdGUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FzZSBWaWV3VHlwZS5UQUdTOiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUYWdPYmplY3QoaXRlbS50YWdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkT2JqZWN0OiBzdHJpbmcgPSB0aGlzLnJlc29sdmVPYmplY3QoZmllbGQsIGl0ZW0pO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7XG4gICAgICAgICAgICAgICAgdGl0bGU6IHJlc29sdmVkT2JqZWN0ID8/ICctJyxcbiAgICAgICAgICAgICAgICBkYXRhOlxuICAgICAgICAgICAgICAgICAgKGZpZWxkLnRvb2x0aXBDaGFyTGltaXRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnRyYW5zZm9ybUNvbnRlbnRFbGxpcHNpcyhyZXNvbHZlZE9iamVjdCwgZmllbGQudG9vbHRpcENoYXJMaW1pdClcbiAgICAgICAgICAgICAgICAgICAgOiByZXNvbHZlZE9iamVjdCkgPz8gJy0nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmRlZmF1bHRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICAuLi50aGlzLmdldEV4dHJhSXRlbXMoaXRlbSwgaW5kZXgsIGl0ZW1zLmxlbmd0aCksXG4gICAgICBdKVxuICAgICksXG4gICAgdGFwKChkYXRhOiBUYWJsZUl0ZW1bXVtdKSA9PiB7XG4gICAgICB0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyZWRJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlSXRlbVtdW10gfCBudWxsPihudWxsKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW9kZWwkOiBPYnNlcnZhYmxlPFRhYmxlTW9kZWw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5faGVhZGVySXRlbXMkLFxuICAgIHRoaXMuX3RhYmxlSXRlbXMkLFxuICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2hlYWRlciwgZGF0YSwgZmlsdGVyZWREYXRhXSkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBuZXcgVGFibGVNb2RlbCgpO1xuICAgICAgbW9kZWwuaGVhZGVyID0gaGVhZGVyO1xuICAgICAgbW9kZWwuZGF0YSA9IGZpbHRlcmVkRGF0YSA/PyBkYXRhO1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pLFxuICAgIHN0YXJ0V2l0aChuZXcgVGFibGVNb2RlbCgpKVxuICApO1xuXG4gIHByaXZhdGUgZ2V0IGRyYWdBbmREcm9wSGVhZGVyQ29sdW1ucygpOiBUYWJsZUhlYWRlckl0ZW1bXSB7XG4gICAgY29uc3QgZW1wdHlIZWFkZXIgPSBuZXcgVGFibGVIZWFkZXJJdGVtKCk7XG5cbiAgICBlbXB0eUhlYWRlci5zb3J0YWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLih0aGlzLmRyYWdBbmREcm9wXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldCBleHRyYUNvbHVtbnMoKTogVGFibGVIZWFkZXJJdGVtW10ge1xuICAgIGNvbnN0IGVtcHR5SGVhZGVyID0gbmV3IFRhYmxlSGVhZGVySXRlbSgpO1xuXG4gICAgZW1wdHlIZWFkZXIuc29ydGFibGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBbXG4gICAgICAuLi4odGhpcy5tb3ZpbmdSb3dzRW5hYmxlZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUhlYWRlckl0ZW0oe1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YWx0aW1vLWNhcmJvbi1saXN0X19hY3Rpb25zJyxcbiAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uc1xuICAgICAgICA/IHRoaXMuYWN0aW9ucy5tYXAoXG4gICAgICAgICAgICBhY3Rpb24gPT5cbiAgICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YTogYWN0aW9uLmNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAga2V5OiBhY3Rpb24uY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMubGFzdENvbHVtblRlbXBsYXRlID8gW2VtcHR5SGVhZGVyXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLl9pdGVtcz8uc29tZShpdGVtID0+IGl0ZW0ubG9ja2VkKSA/IFtlbXB0eUhlYWRlcl0gOiBbXSksXG4gICAgICAuLi4oISF0aGlzLmFjdGlvbkl0ZW1zXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlRG93bkNsaWNrKFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBkYXRhOiB7aW5kZXg6IG51bWJlcjsgaXRlbTogQ2FyYm9uTGlzdEl0ZW07IGxlbmd0aDogbnVtYmVyfVxuICApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdmVSb3dFdmVudCA9IHtcbiAgICAgIGRpcmVjdGlvbjogTW92ZVJvd0RpcmVjdGlvbi5ET1dOLFxuICAgICAgaW5kZXg6IGRhdGEuaW5kZXgsXG4gICAgfTtcbiAgICBjb25zdCBvcmRlcmVkSXRlbXMgPSB0aGlzLnN3YXBJdGVtcyh0aGlzLl9pdGVtcywgbW92ZVJvd0V2ZW50LmluZGV4LCBtb3ZlUm93RXZlbnQuaW5kZXggKyAxKTtcblxuICAgIHRoaXMubW92ZVJvdy5lbWl0KG1vdmVSb3dFdmVudCk7XG4gICAgdGhpcy5pdGVtc1Jlb3JkZXJlZC5lbWl0KG9yZGVyZWRJdGVtcyk7XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlVXBDbGljayhcbiAgICBldmVudDogRXZlbnQsXG4gICAgZGF0YToge2luZGV4OiBudW1iZXI7IGl0ZW06IENhcmJvbkxpc3RJdGVtOyBsZW5ndGg6IG51bWJlcn1cbiAgKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBtb3ZlUm93RXZlbnQgPSB7XG4gICAgICBkaXJlY3Rpb246IE1vdmVSb3dEaXJlY3Rpb24uVVAsXG4gICAgICBpbmRleDogZGF0YS5pbmRleCxcbiAgICB9O1xuICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKHRoaXMuX2l0ZW1zLCBtb3ZlUm93RXZlbnQuaW5kZXggLSAxLCBtb3ZlUm93RXZlbnQuaW5kZXgpO1xuXG4gICAgdGhpcy5tb3ZlUm93LmVtaXQobW92ZVJvd0V2ZW50KTtcbiAgICB0aGlzLml0ZW1zUmVvcmRlcmVkLmVtaXQob3JkZXJlZEl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRhZ0NsaWNrKGV2ZW50OiBFdmVudCwgdGFnczogQ2FyYm9uVGFnW10pOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRhZ01vZGFsT3BlbiQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnRhZ01vZGFsRGF0YSQubmV4dCh0YWdzKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy50YWdNb2RhbE9wZW4kLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUFjdGlvbk9wZW5DaGFuZ2UoYWN0aW9uSWQ6IHN0cmluZywgaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbkFjdGlvbklkID0gYWN0aW9uSWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRPcGVuQWN0aW9uSWQgPT09IGFjdGlvbklkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuQWN0aW9uSWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHJhZ0FuZERyb3BJdGVtc0l0ZW1zKFxuICAgIGl0ZW06IENhcmJvbkxpc3RJdGVtLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgbGVuZ3RoOiBudW1iZXJcbiAgKTogVGFibGVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oISF0aGlzLmRyYWdBbmREcm9wXG4gICAgICAgID8gW25ldyBUYWJsZUl0ZW0oe2RhdGE6IHtpdGVtLCBpbmRleCwgbGVuZ3RofSwgdGVtcGxhdGU6IHRoaXMuZHJhZ0FuZERyb3BUZW1wbGF0ZX0pXVxuICAgICAgICA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHRyYUl0ZW1zKGl0ZW06IENhcmJvbkxpc3RJdGVtLCBpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IFRhYmxlSXRlbVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25zXG4gICAgICAgID8gdGhpcy5hY3Rpb25zLm1hcChcbiAgICAgICAgICAgIGFjdGlvbiA9PlxuICAgICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgY2FsbGJhY2s6IGFjdGlvbi5jYWxsYmFjaywgaWNvbkNsYXNzOiBhY3Rpb24uaWNvbkNsYXNzfSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5hY3Rpb25UZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHRoaXMuX2l0ZW1zPy5zb21lKHRhYmxlSXRlbSA9PiB0YWJsZUl0ZW0ubG9ja2VkKVxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBkYXRhOiB7bG9ja2VkOiBpdGVtLmxvY2tlZH0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLnJvd0Rpc2FibGVkLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMubGFzdENvbHVtblRlbXBsYXRlXG4gICAgICAgID8gW25ldyBUYWJsZUl0ZW0oe2RhdGE6IHtpdGVtLCBpbmRleCwgbGVuZ3RofSwgdGVtcGxhdGU6IHRoaXMubGFzdENvbHVtblRlbXBsYXRlfSldXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHRoaXMubW92aW5nUm93c0VuYWJsZWRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5tb3ZlUm93c1RlbXBsYXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uSXRlbXNcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIGRhdGE6IHthY3Rpb25zOiB0aGlzLmFjdGlvbkl0ZW1zLCBpdGVtfSxcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuYWN0aW9uc01lbnVUZW1wbGF0ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBhZ2luYXRpb25TaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtDYXJib25MaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gXG4gICAgKTtcbiAgICBpZiAoZW50cmllcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0ge3NpemU6ICtlbnRyaWVzfTtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KCtlbnRyaWVzKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdQYWdpbmF0aW9uIGxvYWRlZCBmcm9tIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gQ3VycmVudDogJywgZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAnUGFnaW5hdGlvbiBkb2VzIE5PVCBleGlzdCBpbiBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIGxpc3QuIFdpbGwgdXNlIGRlZmF1bHQuIENoYW5nZSBpdCB0byBjcmVhdGUgYW4gZW50cnkuJ1xuICAgICAgKTtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KDEwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFBhZ2luYXRpb25TaXplKG51bWJlck9mRW50cmllczogc3RyaW5nKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICBgJHt0aGlzLnBhZ2luYXRpb25JZGVudGlmaWVyfSR7Q2FyYm9uTGlzdENvbXBvbmVudC5QQUdJTkFUSU9OX1NJWkV9YCxcbiAgICAgIG51bWJlck9mRW50cmllc1xuICAgICk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gc2V0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdDogJywgbnVtYmVyT2ZFbnRyaWVzKTtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdChudW1iZXJPZkVudHJpZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlT2JqZWN0KGRlZmluaXRpb246IGFueSwgb2JqOiBhbnkpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uS2V5ID0gZGVmaW5pdGlvbi5rZXk7XG4gICAgY29uc3QgY3VzdG9tUHJvcFN0cmluZyA9ICckLic7XG4gICAgY29uc3Qga2V5ID0gZGVmaW5pdGlvbktleS5pbmNsdWRlcyhjdXN0b21Qcm9wU3RyaW5nKVxuICAgICAgPyBkZWZpbml0aW9uS2V5LnNwbGl0KGN1c3RvbVByb3BTdHJpbmcpWzFdXG4gICAgICA6IGRlZmluaXRpb25LZXk7XG4gICAgY29uc3QgcmVzb2x2ZWRPYmpWYWx1ZSA9IF9nZXQob2JqLCBrZXksIG51bGwpO1xuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZW50U2VydmljZS5nZXQocmVzb2x2ZWRPYmpWYWx1ZSwgZGVmaW5pdGlvbik7XG4gIH1cblxuICBwcml2YXRlIHN3YXBJdGVtcyhpdGVtczogQ2FyYm9uTGlzdEl0ZW1bXSwgaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgY29uc3QgaXRlbVRvSW5zZXJ0ID0gaXRlbXNbaW5kZXgxXTtcbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gaXRlbXMuZmlsdGVyKChfLCBpbmRleCkgPT4gaW5kZXggIT09IGluZGV4MSk7XG4gICAgZmlsdGVyZWRJdGVtcy5zcGxpY2UoaW5kZXgyLCAwLCBpdGVtVG9JbnNlcnQpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkSXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUYWdPYmplY3QoaXRlbVRhZ3M6IENhcmJvblRhZ1tdIHwgdW5kZWZpbmVkKTogVGFibGVJdGVtIHtcbiAgICBpZiAoIWl0ZW1UYWdzIHx8IGl0ZW1UYWdzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgZGF0YToge3RhZ3M6IFtdfSxcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMudGFnVGVtcGxhdGUsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHRhZ3MgPSBpdGVtVGFncy5tYXAoKHRhZzogQ2FyYm9uVGFnLCBpbmRleDogbnVtYmVyKSA9PlxuICAgICAgaW5kZXggPT09IDBcbiAgICAgICAgPyB7Li4udGFnLCBlbGxpcHNpc0NvbnRlbnQ6IHRoaXMudHJhbnNmb3JtQ29udGVudEVsbGlwc2lzKHRhZy5jb250ZW50LCBUQUdfRUxMSVBTSVNfTElNSVQpfVxuICAgICAgICA6IHRhZ1xuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IFRhYmxlSXRlbSh7XG4gICAgICBkYXRhOiB7dGFnc30sXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50YWdUZW1wbGF0ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ29udGVudEVsbGlwc2lzKGNvbnRlbnQ6IHN0cmluZywgbGltaXQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbnRlbnQuc3Vic3RyaW5nKDAsIGxpbWl0IC0gMSkgKyAoY29udGVudC5sZW5ndGggPiBsaW1pdCA/ICcuLi4nIDogJycpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG48Y2RzLXRhYmxlLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBzb3J0OiBzb3J0JCB8IGFzeW5jLFxuICAgIG1vZGVsOiBtb2RlbCQgfCBhc3luYyxcbiAgICB2aWV3SW5pdGlhbGl6ZWQ6IHZpZXdJbml0aWFsaXplZCQgfCBhc3luYyxcbiAgfSBhcyBvYnNcIlxuICBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RcIlxuPlxuICA8Y2RzLXRhYmxlLWhlYWRlciAqbmdJZj1cImhlYWRlclwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICA8L2Nkcy10YWJsZS1oZWFkZXI+XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3RhYnNdXCI+PC9uZy1jb250ZW50PlxuXG4gIDxjZHMtdGFibGUtdG9vbGJhclxuICAgICpuZ0lmPVwiIWhpZGVUb29sYmFyXCJcbiAgICBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX3Rvb2xiYXJcIlxuICAgIFttb2RlbF09XCJvYnMubW9kZWxcIlxuICAgIFtiYXRjaFRleHRdPVwiYmF0Y2hUZXh0JCB8IGFzeW5jXCJcbiAgPlxuICAgIDxjZHMtdGFibGUtdG9vbGJhci1hY3Rpb25zPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NhcmJvblRvb2xiYXJBY3Rpb25zXVwiPiA8L25nLWNvbnRlbnQ+XG4gICAgPC9jZHMtdGFibGUtdG9vbGJhci1hY3Rpb25zPlxuXG4gICAgPGNkcy10YWJsZS10b29sYmFyLWNvbnRlbnQ+XG4gICAgICA8Y2RzLXRhYmxlLXRvb2xiYXItc2VhcmNoXG4gICAgICAgICpuZ0lmPVwiaXNTZWFyY2hhYmxlXCJcbiAgICAgICAgW2V4cGFuZGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hGb3JtQ29udHJvbFwiXG4gICAgICA+PC9jZHMtdGFibGUtdG9vbGJhci1zZWFyY2g+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjYXJib25Ub29sYmFyQ29udGVudF1cIj4gPC9uZy1jb250ZW50PlxuICAgIDwvY2RzLXRhYmxlLXRvb2xiYXItY29udGVudD5cbiAgPC9jZHMtdGFibGUtdG9vbGJhcj5cblxuICA8Y2RzLXRhYmxlXG4gICAgKm5nSWY9XCIhIW9icy5zb3J0XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAndmFsdGltby1jYXJib24tbGlzdF9faGVhZGVyLS1oaWRkZW4nOiBoaWRlQ29sdW1uSGVhZGVyLFxuICAgICAgJ3ZhbHRpbW8tY2FyYm9uLWxpc3QtLXVuY2xpY2thYmxlJzogIXRoaXMucm93Q2xpY2tlZC5vYnNlcnZlZCxcbiAgICB9XCJcbiAgICBbZW5hYmxlU2luZ2xlU2VsZWN0XT1cImVuYWJsZVNpbmdsZVNlbGVjdFwiXG4gICAgW21vZGVsXT1cImxvYWRpbmcgfHwgIW9icy52aWV3SW5pdGlhbGl6ZWQgPyBza2VsZXRvbk1vZGVsIDogb2JzLm1vZGVsXCJcbiAgICBbc2hvd1NlbGVjdGlvbkNvbHVtbl09XCJzaG93U2VsZWN0aW9uQ29sdW1uXCJcbiAgICBbc2tlbGV0b25dPVwibG9hZGluZ1wiXG4gICAgW3N0cmlwZWRdPVwic3RyaXBlZFwiXG4gICAgKHNvcnQpPVwib25Tb3J0KG9icy5tb2RlbC5oZWFkZXJbJGV2ZW50XSlcIlxuICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICA+XG4gICAgPHRib2R5IGNkc1RhYmxlQm9keT5cbiAgICAgIDx0ciBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX25vLXJlc3VsdHNcIj5cbiAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwib2JzLm1vZGVsLmhlYWRlci5sZW5ndGggKyAoc2hvd1NlbGVjdGlvbkNvbHVtbiA/IDEgOiAwKVwiPlxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvYnMubW9kZWwuaGVhZGVyLmxlbmd0aCArIChzaG93U2VsZWN0aW9uQ29sdW1uID8gMSA6IDApXCI+XG4gICAgICAgICAge3sgJ2xpc3Qubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICA8L2Nkcy10YWJsZT5cblxuICA8Y2RzLXBhZ2luYXRpb25cbiAgICAqbmdJZj1cInBhZ2luYXRpb25Nb2RlbCAmJiBpdGVtcz8ubGVuZ3RoXCJcbiAgICBbaXRlbXNQZXJQYWdlT3B0aW9uc109XCJwYWdpbmF0b3JDb25maWcuaXRlbXNQZXJQYWdlT3B0aW9uc1wiXG4gICAgW21vZGVsXT1cInBhZ2luYXRpb25Nb2RlbFwiXG4gICAgW3Nob3dQYWdlSW5wdXRdPVwicGFnaW5hdG9yQ29uZmlnLnNob3dQYWdlSW5wdXRcIlxuICAgIFtza2VsZXRvbl09XCJsb2FkaW5nXCJcbiAgICBbdHJhbnNsYXRpb25zXT1cInBhZ2luYXRpb25UcmFuc2xhdGlvbnMkIHwgYXN5bmNcIlxuICAgIChzZWxlY3RQYWdlKT1cIm9uU2VsZWN0UGFnZSgkZXZlbnQpXCJcbiAgPjwvY2RzLXBhZ2luYXRpb24+XG48L2Nkcy10YWJsZS1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjYWN0aW9uVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxpXG4gICAgY2xhc3M9XCJjbGlja2FibGVcIlxuICAgIFtuZ0NsYXNzXT1cImRhdGEuaWNvbkNsYXNzXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkYXRhLmNhbGxiYWNrKGRhdGEuaXRlbSlcIlxuICA+PC9pPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNib29sZWFuVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIHt7IGRhdGEgfCB0cmFuc2xhdGUgfX1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYWN0aW9uc01lbnVUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGNkcy1vdmVyZmxvdy1tZW51XG4gICAgW29wZW5dPVwiY3VycmVudE9wZW5BY3Rpb25JZCA9PT0gZGF0YS5pdGVtXCJcbiAgICAob3BlbkNoYW5nZSk9XCJoYW5kbGVBY3Rpb25PcGVuQ2hhbmdlKGRhdGEuaXRlbSwgJGV2ZW50KVwiXG4gICAgW2ZsaXBdPVwidHJ1ZVwiXG4gICAgW29mZnNldF09XCJ7eDogMCwgeTogNTB9XCJcbiAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgQGZvciAoYWN0aW9uIG9mIGRhdGEuYWN0aW9uczsgdHJhY2sgYWN0aW9uLmxhYmVsKSB7XG4gICAgICA8Y2RzLW92ZXJmbG93LW1lbnUtb3B0aW9uXG4gICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWRDYWxsYmFjayA/IGFjdGlvbi5kaXNhYmxlZENhbGxiYWNrKGRhdGEuaXRlbSkgOiBmYWxzZVwiXG4gICAgICAgIFt0eXBlXT1cImFjdGlvbi50eXBlXCJcbiAgICAgICAgKHNlbGVjdGVkKT1cImFjdGlvbi5jYWxsYmFjayhkYXRhLml0ZW0pXCJcbiAgICAgID5cbiAgICAgICAgPGkgKm5nSWY9XCIhIWFjdGlvbi5pY29uQ2xhc3NcIiBbbmdDbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCI+PC9pPlxuXG4gICAgICAgIHt7IGFjdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9jZHMtb3ZlcmZsb3ctbWVudS1vcHRpb24+XG4gICAgfVxuICA8L2Nkcy1vdmVyZmxvdy1tZW51PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyb3dEaXNhYmxlZCBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiAqbmdJZj1cImRhdGEubG9ja2VkXCIgY2xhc3M9XCJsb2NrZWRcIj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodCBiYWRnZSBiYWRnZS1waWxsIGJhZGdlLXNlY29uZGFyeSBiZy1ncmV5XCJcbiAgICAgIG5nYlRvb2x0aXA9XCJ7eyBsb2NrZWRUb29sdGlwVHJhbnNsYXRpb25LZXkgfCB0cmFuc2xhdGUgfX1cIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLWxvY2tcIj48L2k+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW92ZVJvd3NUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX21vdmUtcm93c1wiPlxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cInRlcnRpYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkYXRhLmluZGV4ID09PSAwXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAoY2xpY2spPVwib25Nb3ZlVXBDbGljaygkZXZlbnQsIGRhdGEpXCJcbiAgICA+XG4gICAgICA8c3ZnIGNkc0ljb249XCJhcnJvdy0tdXBcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJ0ZXJ0aWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGF0YS5pbmRleCA9PT0gZGF0YS5sZW5ndGggLSAxXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAoY2xpY2spPVwib25Nb3ZlRG93bkNsaWNrKCRldmVudCwgZGF0YSlcIlxuICAgID5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImFycm93LS1kb3duXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZHJhZ0FuZERyb3BUZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cInZhbHRpbW8tY2FyYm9uLWxpc3RfX2RyYWdnYWJsZVwiPlxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cImdob3N0XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkcmFnQW5kRHJvcERpc2FibGVkXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICAobW91c2Vkb3duKT1cIm9uRHJhZ1N0YXJ0KCRldmVudCwgZGF0YSlcIlxuICAgID5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImRyYWdnYWJsZVwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhZ1RlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRhdGEudGFnc1wiPi08L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2ICpuZ0lmPVwiZGF0YS50YWdzXCIgY2xhc3M9XCJ0YWctdGVtcGxhdGVcIj5cbiAgICBAaWYgKGRhdGEudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgIC1cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxjZHMtdGFnICpuZ0lmPVwiISFkYXRhLnRhZ3NbMF0uY29udGVudFwiIGNsYXNzPVwiY2RzLXRhZy0tbm8tbWFyZ2luXCIgW3R5cGVdPVwiZGF0YS50YWdzWzBdLnR5cGVcIj5cbiAgICAgICAge3sgZGF0YS50YWdzWzBdLmVsbGlwc2lzQ29udGVudCA/PyBkYXRhLnRhZ3NbMF0uY29udGVudCB9fVxuICAgICAgPC9jZHMtdGFnPlxuXG4gICAgICA8Y2RzLXRhZ1xuICAgICAgICAqbmdJZj1cImRhdGEudGFncy5sZW5ndGggPiAxXCJcbiAgICAgICAgY2xhc3M9XCJjZHMtdGFnLS1uby1tYXJnaW4gdmFsdGltby1jYXJib24tbGlzdF9fZXhwYW5kLXRhZ1wiXG4gICAgICAgIHR5cGU9XCJoaWdoLWNvbnRyYXN0XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uVGFnQ2xpY2soJGV2ZW50LCBkYXRhLnRhZ3MpXCJcbiAgICAgID5cbiAgICAgICAge3sgZGF0YS50YWdzLmxlbmd0aCAtIDEgfX0gPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICA8L2Nkcy10YWc+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8c3Bhbj57eyBkYXRhIH19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPHZhbHRpbW8tdGFncy1tb2RhbFxuICBbb3Blbl09XCJ0YWdNb2RhbE9wZW4kIHwgYXN5bmNcIlxuICBbdGFnc109XCJ0YWdNb2RhbERhdGEkIHwgYXN5bmNcIlxuICAoY2xvc2VFdmVudCk9XCJvbkNsb3NlRXZlbnQoKVwiXG4+PC92YWx0aW1vLXRhZ3MtbW9kYWw+XG4iXX0=
587
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhcmJvbi1saXN0L2NhcmJvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2xGLE9BQU8sRUFLTCxLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsR0FBRyxJQUFJLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVuQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osR0FBRyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLHdCQUF3QixFQUFFLHdCQUF3QixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxF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TUFBTTtzQkFBZCxLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ08sU0FBUztzQkFBckIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFJRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBcnJvd0Rvd24xNiwgQXJyb3dVcDE2LCBEcmFnZ2FibGUxNiwgU2V0dGluZ3NWaWV3MTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7U29ydFN0YXRlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1xuICBJY29uU2VydmljZSxcbiAgT3ZlcmZsb3dNZW51LFxuICBQYWdpbmF0aW9uTW9kZWwsXG4gIFBhZ2luYXRpb25UcmFuc2xhdGlvbnMsXG4gIFRhYmxlLFxuICBUYWJsZUhlYWRlckl0ZW0sXG4gIFRhYmxlSXRlbSxcbiAgVGFibGVNb2RlbCxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge2dldCBhcyBfZ2V0fSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtOR1hMb2dnZXJ9IGZyb20gJ25neC1sb2dnZXInO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgc3RhcnRXaXRoLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0JPT0xFQU5fQ09OVkVSVEVSX1ZBTFVFUywgQ0FTRVNfV0lUSE9VVF9TVEFUVVNfS0VZfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgQWN0aW9uSXRlbSxcbiAgQ2FyYm9uTGlzdEJhdGNoVGV4dCxcbiAgQ2FyYm9uTGlzdEl0ZW0sXG4gIENhcmJvbkxpc3RUcmFuc2xhdGlvbnMsXG4gIENhcmJvblBhZ2luYXRvckNvbmZpZyxcbiAgQ2FyYm9uVGFnLFxuICBDb2x1bW5Db25maWcsXG4gIERFRkFVTFRfTElTVF9UUkFOU0xBVElPTlMsXG4gIERFRkFVTFRfUEFHSU5BVElPTixcbiAgREVGQVVMVF9QQUdJTkFUT1JfQ09ORklHLFxuICBNb3ZlUm93RGlyZWN0aW9uLFxuICBNb3ZlUm93RXZlbnQsXG4gIFBhZ2luYXRpb24sXG4gIFRBR19FTExJUFNJU19MSU1JVCxcbiAgVmlld1R5cGUsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0VsbGlwc2lzUGlwZX0gZnJvbSAnLi4vLi4vcGlwZXMnO1xuaW1wb3J0IHtLZXlTdGF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2tleS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7Vmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICcuLi92aWV3LWNvbnRlbnQvdmlldy1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtDYXJib25MaXN0RmlsdGVyUGlwZX0gZnJvbSAnLi9DYXJib25MaXN0RmlsdGVyUGlwZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtDYXJib25MaXN0RHJhZ0FuZERyb3BTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1jYXJib24tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJib24tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmJvbi1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtDYXJib25MaXN0RmlsdGVyUGlwZSwgQ2FyYm9uTGlzdERyYWdBbmREcm9wU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIENhcmJvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbnNNZW51VGVtcGxhdGUnKSBhY3Rpb25zTWVudVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxPdmVyZmxvd01lbnU+O1xuICBAVmlld0NoaWxkKCdhY3Rpb25UZW1wbGF0ZScpIGFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdib29sZWFuVGVtcGxhdGUnKSBib29sZWFuVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ21vdmVSb3dzVGVtcGxhdGUnKSBtb3ZlUm93c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdkcmFnQW5kRHJvcFRlbXBsYXRlJykgZHJhZ0FuZERyb3BUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgncm93RGlzYWJsZWQnKSByb3dEaXNhYmxlZDogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgndGFnVGVtcGxhdGUnKSB0YWdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdFRlbXBsYXRlJykgZGVmYXVsdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKFRhYmxlKSBwcml2YXRlIF90YWJsZTogVGFibGU7XG5cbiAgcHJpdmF0ZSBfY29tcGxldGVEYXRhU291cmNlOiBUYWJsZUl0ZW1bXVtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2l0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FyYm9uTGlzdEl0ZW1bXT4oW10pO1xuICBwcml2YXRlIGdldCBfaXRlbXMoKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zJC5nZXRWYWx1ZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGl0ZW1zKHZhbHVlOiBDYXJib25MaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5faXRlbXMkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGN1cnJlbnRPcGVuQWN0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbHVtbkNvbmZpZ1tdPihbXSk7XG4gIEBJbnB1dCgpIHNldCBmaWVsZHModmFsdWU6IENvbHVtbkNvbmZpZ1tdKSB7XG4gICAgdGhpcy5fZmllbGRzJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlVHJhbnNsYXRpb25zJDogQmVoYXZpb3JTdWJqZWN0PENhcmJvbkxpc3RUcmFuc2xhdGlvbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICBERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TXG4gICk7XG4gIEBJbnB1dCgpIHNldCB0YWJsZVRyYW5zbGF0aW9ucyh2YWx1ZTogUGFydGlhbDxDYXJib25MaXN0VHJhbnNsYXRpb25zPikge1xuICAgIHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5uZXh0KHsuLi5ERUZBVUxUX0xJU1RfVFJBTlNMQVRJT05TLCAuLi52YWx1ZX0pO1xuICB9XG5cbiAgQElucHV0KCkgcGFnaW5hdG9yQ29uZmlnOiBDYXJib25QYWdpbmF0b3JDb25maWcgPSBERUZBVUxUX1BBR0lOQVRPUl9DT05GSUc7XG4gIHByaXZhdGUgX3BhZ2luYXRpb246IFBhZ2luYXRpb247XG4gIHByaXZhdGUgX2lzUGFnaW5hdGlvbkluaXQgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNldCBwYWdpbmF0aW9uKHZhbHVlOiBQYXJ0aWFsPFBhZ2luYXRpb24+IHwgZmFsc2UpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9wYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLl9wYWdpbmF0aW9uID0gey4uLkRFRkFVTFRfUEFHSU5BVElPTiwgLi4udmFsdWV9O1xuICAgIH1cblxuICAgIHRoaXMuX3BhZ2luYXRpb24gPSB7Li4udGhpcy5fcGFnaW5hdGlvbiwgLi4udmFsdWV9O1xuICAgIHRoaXMuYnVpbGRQYWdpbmF0aW9uTW9kZWwoKTtcblxuICAgIGlmICh0aGlzLl9pc1BhZ2luYXRpb25Jbml0IHx8ICF2YWx1ZS5zaXplKSByZXR1cm47XG5cbiAgICB0aGlzLnNldFBhZ2luYXRpb25TaXplKHZhbHVlLnNpemUudG9TdHJpbmcoKSk7XG4gICAgdGhpcy5faXNQYWdpbmF0aW9uSW5pdCA9IHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBwYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uO1xuICB9XG5cbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGFjdGlvbnMgZmllbGQgaXMgZGVwcmVjYXRlZC4gQWN0aW9ucyBjYW4gYmUgYWRkZWQgdGhyb3VnaCB0aGUgKipASW5wdXQgZmllbGQqKi5cbiAgICovXG4gIEBJbnB1dCgpIGFjdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW107XG4gIEBJbnB1dCgpIGhlYWRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaGlkZUNvbHVtbkhlYWRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5pdGlhbFNvcnRTdGF0ZTogU29ydFN0YXRlO1xuICBASW5wdXQoKSBzZXQgc29ydFN0YXRlKHZhbHVlOiBTb3J0U3RhdGUpIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5zb3J0JC5uZXh0KHZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBpc1NlYXJjaGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlU2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgbGFzdENvbHVtblRlbXBsYXRlIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIEFueSB0ZW1wbGF0ZSBjb2x1bW4gY2FuIGJlIGFkZGVkIHRocm91Z2ggdGhlICoqQElucHV0IGZpZWxkKiouXG4gICAqL1xuICBASW5wdXQoKSBsYXN0Q29sdW1uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIHBhZ2luYXRpb25JZGVudGlmaWVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dTZWxlY3Rpb25Db2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3RyaXBlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlVG9vbGJhciA9IGZhbHNlO1xuICBASW5wdXQoKSBsb2NrZWRUb29sdGlwVHJhbnNsYXRpb25LZXkgPSAnJztcbiAgQElucHV0KCkgbW92aW5nUm93c0VuYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRyYWdBbmREcm9wID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRyYWdBbmREcm9wRGlzYWJsZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcGFnaW5hdGlvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25TZXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc29ydENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnRTdGF0ZT4oKTtcbiAgQE91dHB1dCgpIG1vdmVSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdmVSb3dFdmVudD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zUmVvcmRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJib25MaXN0SXRlbVtdPigpO1xuXG4gIHB1YmxpYyBiYXRjaFRleHQkOiBPYnNlcnZhYmxlPENhcmJvbkxpc3RCYXRjaFRleHQ+ID0gdGhpcy5fdGFibGVUcmFuc2xhdGlvbnMkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh0cmFuc2xhdGlvbnM6IENhcmJvbkxpc3RUcmFuc2xhdGlvbnMpID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMuc2VsZWN0LnNpbmdsZSksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnNlbGVjdC5tdWx0aXBsZSksXG4gICAgICBdKS5waXBlKFxuICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodHJhbnNsYXRpb25zLnNlbGVjdC5zaW5nbGUpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRyYW5zbGF0aW9ucy5zZWxlY3QubXVsdGlwbGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcCgoW1NJTkdMRSwgTVVMVElQTEVdKSA9PiAoe1NJTkdMRSwgTVVMVElQTEV9KSlcbiAgKTtcblxuICBwdWJsaWMgcGFnaW5hdGlvblRyYW5zbGF0aW9ucyQ6IE9ic2VydmFibGU8UGFydGlhbDxQYWdpbmF0aW9uVHJhbnNsYXRpb25zPj4gPVxuICAgIHRoaXMuX3RhYmxlVHJhbnNsYXRpb25zJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh0cmFuc2xhdGlvbnM6IENhcmJvbkxpc3RUcmFuc2xhdGlvbnMpID0+XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0odHJhbnNsYXRpb25zLnBhZ2luYXRpb24uaXRlbXNQZXJQYWdlKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKHRyYW5zbGF0aW9ucy5wYWdpbmF0aW9uLnRvdGFsSXRlbSksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSh0cmFuc2xhdGlvbnMucGFnaW5hdGlvbi50b3RhbEl0ZW1zKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdpbnRlcmZhY2UubGlzdC5vZkxhc3RQYWdlJyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgnaW50ZXJmYWNlLmxpc3Qub2ZMYXN0UGFnZXMnKSxcbiAgICAgICAgXSlcbiAgICAgICksXG4gICAgICBtYXAoKFtJVEVNU19QRVJfUEFHRSwgVE9UQUxfSVRFTSwgVE9UQUxfSVRFTVMsIE9GX0xBU1RfUEFHRSwgT0ZfTEFTVF9QQUdFU10pID0+ICh7XG4gICAgICAgIElURU1TX1BFUl9QQUdFLFxuICAgICAgICBUT1RBTF9JVEVNLFxuICAgICAgICBUT1RBTF9JVEVNUyxcbiAgICAgICAgT0ZfTEFTVF9QQUdFLFxuICAgICAgICBPRl9MQVNUX1BBR0VTLFxuICAgICAgfSkpXG4gICAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc29ydCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNvcnRTdGF0ZT4oe1xuICAgIHN0YXRlOiB7bmFtZTogJycsIGRpcmVjdGlvbjogJ0RFU0MnfSxcbiAgICBpc1NvcnRpbmc6IGZhbHNlLFxuICB9KTtcbiAgcHVibGljIHJlYWRvbmx5IHRhZ01vZGFsT3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHRhZ01vZGFsRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhcmJvblRhZ1tdPihbXSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWSA9IENBU0VTX1dJVEhPVVRfU1RBVFVTX0tFWTtcbiAgcHVibGljIHJlYWRvbmx5IFZpZXdUeXBlID0gVmlld1R5cGU7XG4gIHB1YmxpYyBza2VsZXRvbk1vZGVsID0gVGFibGUuc2tlbGV0b25Nb2RlbCg1LCA1KTtcbiAgcHVibGljIHBhZ2luYXRpb25Nb2RlbDogUGFnaW5hdGlvbk1vZGVsO1xuICBwdWJsaWMgc2VhcmNoRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBBR0lOQVRJT05fU0laRSA9ICdQYWdpbmF0aW9uU2l6ZSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6IENhcmJvbkxpc3RJdGVtW10ge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5fdGFibGUubW9kZWw7XG5cbiAgICByZXR1cm4gbW9kZWwuZGF0YS5yZWR1Y2UoXG4gICAgICAoaXRlbXM6IENhcmJvbkxpc3RJdGVtW10sIF8sIGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgIG1vZGVsLmlzUm93U2VsZWN0ZWQoaW5kZXgpID8gWy4uLml0ZW1zLCB0aGlzLml0ZW1zW2luZGV4XV0gOiBbLi4uaXRlbXNdLFxuICAgICAgW11cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld0luaXRpYWxpemVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBnZXQgdmlld0luaXRpYWxpemVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fdmlld0luaXRpYWxpemVkJC5waXBlKGZpbHRlcihpbml0aWFsaXplZCA9PiBpbml0aWFsaXplZCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlbCgpOiBUYWJsZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGUubW9kZWw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsbGlwc2lzUGlwZTogRWxsaXBzaXNQaXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyUGlwZTogQ2FyYm9uTGlzdEZpbHRlclBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IE5HWExvZ2dlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGVudFNlcnZpY2U6IFZpZXdDb250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleVN0YXRlU2VydmljZTogS2V5U3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZ0FuZERyb3BTZXJ2aWNlOiBDYXJib25MaXN0RHJhZ0FuZERyb3BTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyQWxsKFtBcnJvd0Rvd24xNiwgQXJyb3dVcDE2LCBTZXR0aW5nc1ZpZXcxNiwgRHJhZ2dhYmxlMTZdKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmxvYWRQYWdpbmF0aW9uU2l6ZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluaXRpYWxTb3J0U3RhdGUpIHtcbiAgICAgIHRoaXMuc29ydCQubmV4dCh0aGlzLmluaXRpYWxTb3J0U3RhdGUpO1xuICAgIH1cblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHNlYXJjaFN0cmluZzogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaC5vYnNlcnZlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2guZW1pdChzZWFyY2hTdHJpbmcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9maWx0ZXJlZEl0ZW1zJC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMkLm5leHQoXG4gICAgICAgICAgICB0aGlzLmZpbHRlclBpcGUudHJhbnNmb3JtKHRoaXMuX2NvbXBsZXRlRGF0YVNvdXJjZSwgc2VhcmNoU3RyaW5nID8/ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdmlld0luaXRpYWxpemVkJC5uZXh0KHRydWUpO1xuICAgIHRoaXMub3BlbkRyYWdBbmREcm9wU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIG9wZW5EcmFnQW5kRHJvcFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZHJhZ0FuZERyb3BTZXJ2aWNlLmRyYWdBbmREcm9wRXZlbnRzJC5zdWJzY3JpYmUoZHJhZ0FuZERyb3BFdmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHJlb3JkZXJlZEl0ZW1zID0gdGhpcy5zd2FwSXRlbXMoXG4gICAgICAgICAgdGhpcy5faXRlbXMsXG4gICAgICAgICAgZHJhZ0FuZERyb3BFdmVudC5zdGFydEluZGV4LFxuICAgICAgICAgIGRyYWdBbmREcm9wRXZlbnQubmV3SW5kZXhcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pdGVtc1Jlb3JkZXJlZC5lbWl0KHJlb3JkZXJlZEl0ZW1zKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvd0NsaWNrKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCByb3dEYXRhID0gdGhpcy5fdGFibGUubW9kZWwuZGF0YVtpbmRleF07XG4gICAgY29uc3QgZmlyc3RJdGVtV2l0aERhdGEgPSByb3dEYXRhLmZpbmQoaXRlbSA9PiAhIWl0ZW1bJ2l0ZW0nXSk7XG4gICAgY29uc3QgZmlyc3RJdGVtID0gZmlyc3RJdGVtV2l0aERhdGE/LlsnaXRlbSddO1xuXG4gICAgaWYgKGZpcnN0SXRlbSkgZmlyc3RJdGVtLmN0cmxDbGljayA9IHRoaXMua2V5U3RhdGVTZXJ2aWNlLmdldEN0cmxPckNtZFN0YXRlKCk7XG5cbiAgICBpZiAoIWZpcnN0SXRlbSB8fCBmaXJzdEl0ZW0/LmxvY2tlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJvd0NsaWNrZWQuZW1pdChmaXJzdEl0ZW0pO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0UGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbk1vZGVsLnBhZ2VMZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uLnNpemUgIT09IHRoaXMucGFnaW5hdGlvbk1vZGVsLnBhZ2VMZW5ndGgpIHtcbiAgICAgIHRoaXMuc2V0UGFnaW5hdGlvblNpemUodGhpcy5wYWdpbmF0aW9uTW9kZWwucGFnZUxlbmd0aC50b1N0cmluZygpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBhZ2luYXRpb25DbGlja2VkLmVtaXQocGFnZSk7XG4gIH1cblxuICBwdWJsaWMgb25Tb3J0KGhlYWRlckl0ZW06IFRhYmxlSGVhZGVySXRlbSAmIHtrZXk6IHN0cmluZ30pOiB2b2lkIHtcbiAgICBjb25zdCB7a2V5LCBzb3J0YWJsZX0gPSBoZWFkZXJJdGVtO1xuICAgIGlmICghc29ydGFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHNvcnQgPT4ge1xuICAgICAgbGV0IG5ld1N0YXRlOiBTb3J0U3RhdGU7XG5cbiAgICAgIGlmIChzb3J0LnN0YXRlLm5hbWUgPT09IGtleSkge1xuICAgICAgICBpZiAoIXNvcnQuaXNTb3J0aW5nKSB7XG4gICAgICAgICAgbmV3U3RhdGUgPSB7c3RhdGU6IHsuLi5zb3J0LnN0YXRlLCBkaXJlY3Rpb246ICdERVNDJ30sIGlzU29ydGluZzogdHJ1ZX07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHNvcnQuc3RhdGUuZGlyZWN0aW9uID09PSAnREVTQycpIHtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gey4uLnNvcnQsIHN0YXRlOiB7Li4uc29ydC5zdGF0ZSwgZGlyZWN0aW9uOiAnQVNDJ319O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IHtzdGF0ZTogey4uLnNvcnQuc3RhdGUsIGRpcmVjdGlvbjogJ0RFU0MnfSwgaXNTb3J0aW5nOiBmYWxzZX07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTdGF0ZSA9IHtzdGF0ZToge25hbWU6IGtleSwgZGlyZWN0aW9uOiAnREVTQyd9LCBpc1NvcnRpbmc6IHRydWV9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNvcnQkLm5leHQobmV3U3RhdGUpO1xuICAgICAgdGhpcy5zb3J0Q2hhbmdlZC5lbWl0KG5ld1N0YXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRyYWdTdGFydChcbiAgICBtb3VzZUV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIGNhcmJvbkV2ZW50OiB7aW5kZXg6IG51bWJlcjsgaXRlbTogQ2FyYm9uTGlzdEl0ZW07IGxlbmd0aDogbnVtYmVyfVxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kcmFnQW5kRHJvcERpc2FibGVkKSByZXR1cm47XG5cbiAgICB0aGlzLmRyYWdBbmREcm9wU2VydmljZS5zZXRDYXJib25MaXN0RWxlbWVudFJlZih0aGlzLmVsZW1lbnRSZWYpO1xuICAgIHRoaXMuZHJhZ0FuZERyb3BTZXJ2aWNlLnN0YXJ0RHJhZyhtb3VzZUV2ZW50LnksIGNhcmJvbkV2ZW50LmluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQYWdpbmF0aW9uTW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0aW9uTW9kZWwgPSB7XG4gICAgICBjdXJyZW50UGFnZTogdGhpcy5wYWdpbmF0aW9uLnBhZ2UsXG4gICAgICB0b3RhbERhdGFMZW5ndGg6ICt0aGlzLnBhZ2luYXRpb24uY29sbGVjdGlvblNpemUsXG4gICAgICBwYWdlTGVuZ3RoOiB0aGlzLnBhZ2luYXRpb24uc2l6ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfdHJhbnNsYXRlZEZpZWxkcyQ6IE9ic2VydmFibGU8Q29sdW1uQ29uZmlnW10+ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JykucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fZmllbGRzJCksXG4gICAgZmlsdGVyKChmaWVsZHM6IENvbHVtbkNvbmZpZ1tdKSA9PiAhIWZpZWxkcyksXG4gICAgbWFwKChmaWVsZHM6IENvbHVtbkNvbmZpZ1tdKSA9PlxuICAgICAgZmllbGRzLm1hcCgoZmllbGQ6IENvbHVtbkNvbmZpZykgPT4gKHtcbiAgICAgICAgLi4uZmllbGQsXG4gICAgICAgIGxhYmVsOiAhZmllbGQubGFiZWwgPyAnJyA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGZpZWxkLmxhYmVsKSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICBwcml2YXRlIF9oZWFkZXJJdGVtcyQ6IE9ic2VydmFibGU8VGFibGVIZWFkZXJJdGVtW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fdHJhbnNsYXRlZEZpZWxkcyQsXG4gICAgdGhpcy5zb3J0JCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt0cmFuc2xhdGVkRmllbGRzLCBzb3J0U3RhdGVdKSA9PlxuICAgICAgdHJhbnNsYXRlZEZpZWxkcy5tYXAoXG4gICAgICAgIChmaWVsZDogQ29sdW1uQ29uZmlnKSA9PlxuICAgICAgICAgIG5ldyBUYWJsZUhlYWRlckl0ZW0oe1xuICAgICAgICAgICAgZGF0YTogZmllbGQubGFiZWwsXG4gICAgICAgICAgICBzb3J0YWJsZTogZmllbGQuc29ydGFibGUsXG4gICAgICAgICAgICBjbGFzc05hbWU6IGZpZWxkLmNsYXNzTmFtZSxcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgc29ydGVkOiBzb3J0U3RhdGUuaXNTb3J0aW5nICYmIGZpZWxkLmtleSA9PT0gc29ydFN0YXRlLnN0YXRlLm5hbWUsXG4gICAgICAgICAgICBhc2NlbmRpbmc6IGZpZWxkLmtleSA9PT0gc29ydFN0YXRlLnN0YXRlLm5hbWUgJiYgc29ydFN0YXRlLnN0YXRlLmRpcmVjdGlvbiA9PT0gJ0FTQycsXG4gICAgICAgICAgfSlcbiAgICAgIClcbiAgICApLFxuICAgIG1hcCgoaGVhZGVyOiBUYWJsZUhlYWRlckl0ZW1bXSkgPT4gW1xuICAgICAgLi4udGhpcy5kcmFnQW5kRHJvcEhlYWRlckNvbHVtbnMsXG4gICAgICAuLi5oZWFkZXIsXG4gICAgICAuLi50aGlzLmV4dHJhQ29sdW1ucyxcbiAgICBdKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlSXRlbXMkOiBPYnNlcnZhYmxlPFRhYmxlSXRlbVtdW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fZmllbGRzJCxcbiAgICB0aGlzLl9pdGVtcyQsXG4gICAgdGhpcy5fdmlld0luaXRpYWxpemVkJCxcbiAgXSkucGlwZShcbiAgICBmaWx0ZXIoKFtmaWVsZHMsIGl0ZW1zLCB2aWV3SW5pdGlhbGl6ZWRdKSA9PiAhIWZpZWxkcyAmJiAhIWl0ZW1zICYmIHZpZXdJbml0aWFsaXplZCksXG4gICAgbWFwKChbZmllbGRzLCBpdGVtc10pID0+XG4gICAgICBpdGVtcy5tYXAoKGl0ZW06IENhcmJvbkxpc3RJdGVtLCBpbmRleDogbnVtYmVyKSA9PiBbXG4gICAgICAgIC4uLnRoaXMuZ2V0RHJhZ0FuZERyb3BJdGVtc0l0ZW1zKGl0ZW0sIGluZGV4LCBpdGVtcy5sZW5ndGgpLFxuICAgICAgICAuLi5maWVsZHMubWFwKChmaWVsZDogQ29sdW1uQ29uZmlnKSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChmaWVsZC52aWV3VHlwZSkge1xuICAgICAgICAgICAgY2FzZSBWaWV3VHlwZS5URU1QTEFURTpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICAgIGRhdGE6IHtpdGVtLCBpbmRleCwgbGVuZ3RoOiBpdGVtcy5sZW5ndGgsIC4uLmZpZWxkLnRlbXBsYXRlRGF0YX0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGZpZWxkLnRlbXBsYXRlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNhc2UgVmlld1R5cGUuQk9PTEVBTjpcbiAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnJlc29sdmVPYmplY3QoZmllbGQsIGl0ZW0pO1xuICAgICAgICAgICAgICBkYXRhID0gIUJPT0xFQU5fQ09OVkVSVEVSX1ZBTFVFUy5pbmNsdWRlcyhkYXRhKVxuICAgICAgICAgICAgICAgID8gZGF0YVxuICAgICAgICAgICAgICAgIDogYCR7J3ZpZXdUeXBlQ29udmVydGVyLicgKyBkYXRhfWA7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmJvb2xlYW5UZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYXNlIFZpZXdUeXBlLlRBR1M6IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVRhZ09iamVjdChpdGVtLnRhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRPYmplY3Q6IHN0cmluZyA9IHRoaXMucmVzb2x2ZU9iamVjdChmaWVsZCwgaXRlbSk7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcmVzb2x2ZWRPYmplY3QgPz8gJy0nLFxuICAgICAgICAgICAgICAgIGRhdGE6XG4gICAgICAgICAgICAgICAgICAoZmllbGQudG9vbHRpcENoYXJMaW1pdFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZWxsaXBzaXNQaXBlLnRyYW5zZm9ybShyZXNvbHZlZE9iamVjdCwgZmllbGQudG9vbHRpcENoYXJMaW1pdClcbiAgICAgICAgICAgICAgICAgICAgOiByZXNvbHZlZE9iamVjdCkgPz8gJy0nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLmRlZmF1bHRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICAuLi50aGlzLmdldEV4dHJhSXRlbXMoaXRlbSwgaW5kZXgsIGl0ZW1zLmxlbmd0aCksXG4gICAgICBdKVxuICAgICksXG4gICAgdGFwKChkYXRhOiBUYWJsZUl0ZW1bXVtdKSA9PiB7XG4gICAgICB0aGlzLl9jb21wbGV0ZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyZWRJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRhYmxlSXRlbVtdW10gfCBudWxsPihudWxsKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW9kZWwkOiBPYnNlcnZhYmxlPFRhYmxlTW9kZWw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5faGVhZGVySXRlbXMkLFxuICAgIHRoaXMuX3RhYmxlSXRlbXMkLFxuICAgIHRoaXMuX2ZpbHRlcmVkSXRlbXMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2hlYWRlciwgZGF0YSwgZmlsdGVyZWREYXRhXSkgPT4ge1xuICAgICAgY29uc3QgbW9kZWwgPSBuZXcgVGFibGVNb2RlbCgpO1xuICAgICAgbW9kZWwuaGVhZGVyID0gaGVhZGVyO1xuICAgICAgbW9kZWwuZGF0YSA9IGZpbHRlcmVkRGF0YSA/PyBkYXRhO1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH0pLFxuICAgIHN0YXJ0V2l0aChuZXcgVGFibGVNb2RlbCgpKVxuICApO1xuXG4gIHByaXZhdGUgZ2V0IGRyYWdBbmREcm9wSGVhZGVyQ29sdW1ucygpOiBUYWJsZUhlYWRlckl0ZW1bXSB7XG4gICAgY29uc3QgZW1wdHlIZWFkZXIgPSBuZXcgVGFibGVIZWFkZXJJdGVtKCk7XG5cbiAgICBlbXB0eUhlYWRlci5zb3J0YWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLih0aGlzLmRyYWdBbmREcm9wXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldCBleHRyYUNvbHVtbnMoKTogVGFibGVIZWFkZXJJdGVtW10ge1xuICAgIGNvbnN0IGVtcHR5SGVhZGVyID0gbmV3IFRhYmxlSGVhZGVySXRlbSgpO1xuXG4gICAgZW1wdHlIZWFkZXIuc29ydGFibGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBbXG4gICAgICAuLi4odGhpcy5tb3ZpbmdSb3dzRW5hYmxlZFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUhlYWRlckl0ZW0oe1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YWx0aW1vLWNhcmJvbi1saXN0X19hY3Rpb25zJyxcbiAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uc1xuICAgICAgICA/IHRoaXMuYWN0aW9ucy5tYXAoXG4gICAgICAgICAgICBhY3Rpb24gPT5cbiAgICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgICAgZGF0YTogYWN0aW9uLmNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAga2V5OiBhY3Rpb24uY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMubGFzdENvbHVtblRlbXBsYXRlID8gW2VtcHR5SGVhZGVyXSA6IFtdKSxcbiAgICAgIC4uLih0aGlzLl9pdGVtcz8uc29tZShpdGVtID0+IGl0ZW0ubG9ja2VkKSA/IFtlbXB0eUhlYWRlcl0gOiBbXSksXG4gICAgICAuLi4oISF0aGlzLmFjdGlvbkl0ZW1zXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IFRhYmxlSGVhZGVySXRlbSh7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhbHRpbW8tY2FyYm9uLWxpc3RfX2FjdGlvbnMnLFxuICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgIF07XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlRG93bkNsaWNrKFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBkYXRhOiB7aW5kZXg6IG51bWJlcjsgaXRlbTogQ2FyYm9uTGlzdEl0ZW07IGxlbmd0aDogbnVtYmVyfVxuICApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IG1vdmVSb3dFdmVudCA9IHtcbiAgICAgIGRpcmVjdGlvbjogTW92ZVJvd0RpcmVjdGlvbi5ET1dOLFxuICAgICAgaW5kZXg6IGRhdGEuaW5kZXgsXG4gICAgfTtcbiAgICBjb25zdCBvcmRlcmVkSXRlbXMgPSB0aGlzLnN3YXBJdGVtcyh0aGlzLl9pdGVtcywgbW92ZVJvd0V2ZW50LmluZGV4LCBtb3ZlUm93RXZlbnQuaW5kZXggKyAxKTtcblxuICAgIHRoaXMubW92ZVJvdy5lbWl0KG1vdmVSb3dFdmVudCk7XG4gICAgdGhpcy5pdGVtc1Jlb3JkZXJlZC5lbWl0KG9yZGVyZWRJdGVtcyk7XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlVXBDbGljayhcbiAgICBldmVudDogRXZlbnQsXG4gICAgZGF0YToge2luZGV4OiBudW1iZXI7IGl0ZW06IENhcmJvbkxpc3RJdGVtOyBsZW5ndGg6IG51bWJlcn1cbiAgKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBtb3ZlUm93RXZlbnQgPSB7XG4gICAgICBkaXJlY3Rpb246IE1vdmVSb3dEaXJlY3Rpb24uVVAsXG4gICAgICBpbmRleDogZGF0YS5pbmRleCxcbiAgICB9O1xuICAgIGNvbnN0IG9yZGVyZWRJdGVtcyA9IHRoaXMuc3dhcEl0ZW1zKHRoaXMuX2l0ZW1zLCBtb3ZlUm93RXZlbnQuaW5kZXggLSAxLCBtb3ZlUm93RXZlbnQuaW5kZXgpO1xuXG4gICAgdGhpcy5tb3ZlUm93LmVtaXQobW92ZVJvd0V2ZW50KTtcbiAgICB0aGlzLml0ZW1zUmVvcmRlcmVkLmVtaXQob3JkZXJlZEl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRhZ0NsaWNrKGV2ZW50OiBFdmVudCwgdGFnczogQ2FyYm9uVGFnW10pOiB2b2lkIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRhZ01vZGFsT3BlbiQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnRhZ01vZGFsRGF0YSQubmV4dCh0YWdzKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlRXZlbnQoKTogdm9pZCB7XG4gICAgdGhpcy50YWdNb2RhbE9wZW4kLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUFjdGlvbk9wZW5DaGFuZ2UoYWN0aW9uSWQ6IHN0cmluZywgaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbkFjdGlvbklkID0gYWN0aW9uSWQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRPcGVuQWN0aW9uSWQgPT09IGFjdGlvbklkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuQWN0aW9uSWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHJhZ0FuZERyb3BJdGVtc0l0ZW1zKFxuICAgIGl0ZW06IENhcmJvbkxpc3RJdGVtLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgbGVuZ3RoOiBudW1iZXJcbiAgKTogVGFibGVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oISF0aGlzLmRyYWdBbmREcm9wXG4gICAgICAgID8gW25ldyBUYWJsZUl0ZW0oe2RhdGE6IHtpdGVtLCBpbmRleCwgbGVuZ3RofSwgdGVtcGxhdGU6IHRoaXMuZHJhZ0FuZERyb3BUZW1wbGF0ZX0pXVxuICAgICAgICA6IFtdKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHRyYUl0ZW1zKGl0ZW06IENhcmJvbkxpc3RJdGVtLCBpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IFRhYmxlSXRlbVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKCEhdGhpcy5hY3Rpb25zXG4gICAgICAgID8gdGhpcy5hY3Rpb25zLm1hcChcbiAgICAgICAgICAgIGFjdGlvbiA9PlxuICAgICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7aXRlbSwgY2FsbGJhY2s6IGFjdGlvbi5jYWxsYmFjaywgaWNvbkNsYXNzOiBhY3Rpb24uaWNvbkNsYXNzfSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5hY3Rpb25UZW1wbGF0ZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHRoaXMuX2l0ZW1zPy5zb21lKHRhYmxlSXRlbSA9PiB0YWJsZUl0ZW0ubG9ja2VkKVxuICAgICAgICA/IFtcbiAgICAgICAgICAgIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgICAgICAgICBkYXRhOiB7bG9ja2VkOiBpdGVtLmxvY2tlZH0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlOiB0aGlzLnJvd0Rpc2FibGVkLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMubGFzdENvbHVtblRlbXBsYXRlXG4gICAgICAgID8gW25ldyBUYWJsZUl0ZW0oe2RhdGE6IHtpdGVtLCBpbmRleCwgbGVuZ3RofSwgdGVtcGxhdGU6IHRoaXMubGFzdENvbHVtblRlbXBsYXRlfSldXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHRoaXMubW92aW5nUm93c0VuYWJsZWRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgZGF0YToge2l0ZW0sIGluZGV4LCBsZW5ndGh9LFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5tb3ZlUm93c1RlbXBsYXRlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLighIXRoaXMuYWN0aW9uSXRlbXNcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFsdGltby1jYXJib24tbGlzdF9fYWN0aW9ucycsXG4gICAgICAgICAgICAgIGRhdGE6IHthY3Rpb25zOiB0aGlzLmFjdGlvbkl0ZW1zLCBpdGVtfSxcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuYWN0aW9uc01lbnVUZW1wbGF0ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBhZ2luYXRpb25TaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcbiAgICAgIGAke3RoaXMucGFnaW5hdGlvbklkZW50aWZpZXJ9JHtDYXJib25MaXN0Q29tcG9uZW50LlBBR0lOQVRJT05fU0laRX1gXG4gICAgKTtcbiAgICBpZiAoZW50cmllcyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0ge3NpemU6ICtlbnRyaWVzfTtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KCtlbnRyaWVzKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdQYWdpbmF0aW9uIGxvYWRlZCBmcm9tIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdC4gQ3VycmVudDogJywgZW50cmllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAnUGFnaW5hdGlvbiBkb2VzIE5PVCBleGlzdCBpbiBsb2NhbCBzdG9yYWdlIGZvciB0aGlzIGxpc3QuIFdpbGwgdXNlIGRlZmF1bHQuIENoYW5nZSBpdCB0byBjcmVhdGUgYW4gZW50cnkuJ1xuICAgICAgKTtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNldC5lbWl0KDEwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFBhZ2luYXRpb25TaXplKG51bWJlck9mRW50cmllczogc3RyaW5nKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICBgJHt0aGlzLnBhZ2luYXRpb25JZGVudGlmaWVyfSR7Q2FyYm9uTGlzdENvbXBvbmVudC5QQUdJTkFUSU9OX1NJWkV9YCxcbiAgICAgIG51bWJlck9mRW50cmllc1xuICAgICk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1BhZ2luYXRpb24gc2V0IGluIGxvY2FsIHN0b3JhZ2UgZm9yIHRoaXMgbGlzdDogJywgbnVtYmVyT2ZFbnRyaWVzKTtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXQuZW1pdChudW1iZXJPZkVudHJpZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlT2JqZWN0KGRlZmluaXRpb246IGFueSwgb2JqOiBhbnkpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uS2V5ID0gZGVmaW5pdGlvbi5rZXk7XG4gICAgY29uc3QgY3VzdG9tUHJvcFN0cmluZyA9ICckLic7XG4gICAgY29uc3Qga2V5ID0gZGVmaW5pdGlvbktleS5pbmNsdWRlcyhjdXN0b21Qcm9wU3RyaW5nKVxuICAgICAgPyBkZWZpbml0aW9uS2V5LnNwbGl0KGN1c3RvbVByb3BTdHJpbmcpWzFdXG4gICAgICA6IGRlZmluaXRpb25LZXk7XG4gICAgY29uc3QgcmVzb2x2ZWRPYmpWYWx1ZSA9IF9nZXQob2JqLCBrZXksIG51bGwpO1xuICAgIHJldHVybiB0aGlzLnZpZXdDb250ZW50U2VydmljZS5nZXQocmVzb2x2ZWRPYmpWYWx1ZSwgZGVmaW5pdGlvbik7XG4gIH1cblxuICBwcml2YXRlIHN3YXBJdGVtcyhpdGVtczogQ2FyYm9uTGlzdEl0ZW1bXSwgaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKTogQ2FyYm9uTGlzdEl0ZW1bXSB7XG4gICAgY29uc3QgaXRlbVRvSW5zZXJ0ID0gaXRlbXNbaW5kZXgxXTtcbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gaXRlbXMuZmlsdGVyKChfLCBpbmRleCkgPT4gaW5kZXggIT09IGluZGV4MSk7XG4gICAgZmlsdGVyZWRJdGVtcy5zcGxpY2UoaW5kZXgyLCAwLCBpdGVtVG9JbnNlcnQpO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkSXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUYWdPYmplY3QoaXRlbVRhZ3M6IENhcmJvblRhZ1tdIHwgdW5kZWZpbmVkKTogVGFibGVJdGVtIHtcbiAgICBpZiAoIWl0ZW1UYWdzIHx8IGl0ZW1UYWdzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiBuZXcgVGFibGVJdGVtKHtcbiAgICAgICAgZGF0YToge3RhZ3M6IFtdfSxcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMudGFnVGVtcGxhdGUsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHRhZ3MgPSBpdGVtVGFncy5tYXAoKHRhZzogQ2FyYm9uVGFnLCBpbmRleDogbnVtYmVyKSA9PlxuICAgICAgaW5kZXggPT09IDBcbiAgICAgICAgPyB7Li4udGFnLCBlbGxpcHNpc0NvbnRlbnQ6IHRoaXMuZWxsaXBzaXNQaXBlLnRyYW5zZm9ybSh0YWcuY29udGVudCwgVEFHX0VMTElQU0lTX0xJTUlUKX1cbiAgICAgICAgOiB0YWdcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBUYWJsZUl0ZW0oe1xuICAgICAgZGF0YToge3RhZ3N9LFxuICAgICAgdGVtcGxhdGU6IHRoaXMudGFnVGVtcGxhdGUsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cbjxjZHMtdGFibGUtY29udGFpbmVyXG4gICpuZ0lmPVwie1xuICAgIHNvcnQ6IHNvcnQkIHwgYXN5bmMsXG4gICAgbW9kZWw6IG1vZGVsJCB8IGFzeW5jLFxuICAgIHZpZXdJbml0aWFsaXplZDogdmlld0luaXRpYWxpemVkJCB8IGFzeW5jLFxuICB9IGFzIG9ic1wiXG4gIGNsYXNzPVwidmFsdGltby1jYXJib24tbGlzdFwiXG4+XG4gIDxjZHMtdGFibGUtaGVhZGVyICpuZ0lmPVwiaGVhZGVyXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gIDwvY2RzLXRhYmxlLWhlYWRlcj5cblxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbdGFic11cIj48L25nLWNvbnRlbnQ+XG5cbiAgPGNkcy10YWJsZS10b29sYmFyXG4gICAgKm5nSWY9XCIhaGlkZVRvb2xiYXJcIlxuICAgIGNsYXNzPVwidmFsdGltby1jYXJib24tbGlzdF9fdG9vbGJhclwiXG4gICAgW21vZGVsXT1cIm9icy5tb2RlbFwiXG4gICAgW2JhdGNoVGV4dF09XCJiYXRjaFRleHQkIHwgYXN5bmNcIlxuICA+XG4gICAgPGNkcy10YWJsZS10b29sYmFyLWFjdGlvbnM+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY2FyYm9uVG9vbGJhckFjdGlvbnNdXCI+IDwvbmctY29udGVudD5cbiAgICA8L2Nkcy10YWJsZS10b29sYmFyLWFjdGlvbnM+XG5cbiAgICA8Y2RzLXRhYmxlLXRvb2xiYXItY29udGVudD5cbiAgICAgIDxjZHMtdGFibGUtdG9vbGJhci1zZWFyY2hcbiAgICAgICAgKm5nSWY9XCJpc1NlYXJjaGFibGVcIlxuICAgICAgICBbZXhwYW5kYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaEZvcm1Db250cm9sXCJcbiAgICAgID48L2Nkcy10YWJsZS10b29sYmFyLXNlYXJjaD5cblxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NhcmJvblRvb2xiYXJDb250ZW50XVwiPiA8L25nLWNvbnRlbnQ+XG4gICAgPC9jZHMtdGFibGUtdG9vbGJhci1jb250ZW50PlxuICA8L2Nkcy10YWJsZS10b29sYmFyPlxuXG4gIDxjZHMtdGFibGVcbiAgICAqbmdJZj1cIiEhb2JzLnNvcnRcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICd2YWx0aW1vLWNhcmJvbi1saXN0X19oZWFkZXItLWhpZGRlbic6IGhpZGVDb2x1bW5IZWFkZXIsXG4gICAgICAndmFsdGltby1jYXJib24tbGlzdC0tdW5jbGlja2FibGUnOiAhdGhpcy5yb3dDbGlja2VkLm9ic2VydmVkLFxuICAgIH1cIlxuICAgIFtlbmFibGVTaW5nbGVTZWxlY3RdPVwiZW5hYmxlU2luZ2xlU2VsZWN0XCJcbiAgICBbbW9kZWxdPVwibG9hZGluZyB8fCAhb2JzLnZpZXdJbml0aWFsaXplZCA/IHNrZWxldG9uTW9kZWwgOiBvYnMubW9kZWxcIlxuICAgIFtzaG93U2VsZWN0aW9uQ29sdW1uXT1cInNob3dTZWxlY3Rpb25Db2x1bW5cIlxuICAgIFtza2VsZXRvbl09XCJsb2FkaW5nXCJcbiAgICBbc3RyaXBlZF09XCJzdHJpcGVkXCJcbiAgICAoc29ydCk9XCJvblNvcnQob2JzLm1vZGVsLmhlYWRlclskZXZlbnRdKVwiXG4gICAgKHJvd0NsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXG4gID5cbiAgICA8dGJvZHkgY2RzVGFibGVCb2R5PlxuICAgICAgPHRyIGNsYXNzPVwidmFsdGltby1jYXJib24tbGlzdF9fbm8tcmVzdWx0c1wiPlxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJvYnMubW9kZWwuaGVhZGVyLmxlbmd0aCArIChzaG93U2VsZWN0aW9uQ29sdW1uID8gMSA6IDApXCI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cIm9icy5tb2RlbC5oZWFkZXIubGVuZ3RoICsgKHNob3dTZWxlY3Rpb25Db2x1bW4gPyAxIDogMClcIj5cbiAgICAgICAgICB7eyAnbGlzdC5ub1Jlc3VsdHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG4gIDwvY2RzLXRhYmxlPlxuXG4gIDxjZHMtcGFnaW5hdGlvblxuICAgICpuZ0lmPVwicGFnaW5hdGlvbk1vZGVsICYmIGl0ZW1zPy5sZW5ndGhcIlxuICAgIFtpdGVtc1BlclBhZ2VPcHRpb25zXT1cInBhZ2luYXRvckNvbmZpZy5pdGVtc1BlclBhZ2VPcHRpb25zXCJcbiAgICBbbW9kZWxdPVwicGFnaW5hdGlvbk1vZGVsXCJcbiAgICBbc2hvd1BhZ2VJbnB1dF09XCJwYWdpbmF0b3JDb25maWcuc2hvd1BhZ2VJbnB1dFwiXG4gICAgW3NrZWxldG9uXT1cImxvYWRpbmdcIlxuICAgIFt0cmFuc2xhdGlvbnNdPVwicGFnaW5hdGlvblRyYW5zbGF0aW9ucyQgfCBhc3luY1wiXG4gICAgKHNlbGVjdFBhZ2UpPVwib25TZWxlY3RQYWdlKCRldmVudClcIlxuICA+PC9jZHMtcGFnaW5hdGlvbj5cbjwvY2RzLXRhYmxlLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNhY3Rpb25UZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGlcbiAgICBjbGFzcz1cImNsaWNrYWJsZVwiXG4gICAgW25nQ2xhc3NdPVwiZGF0YS5pY29uQ2xhc3NcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRhdGEuY2FsbGJhY2soZGF0YS5pdGVtKVwiXG4gID48L2k+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Jvb2xlYW5UZW1wbGF0ZSBsZXQtZGF0YT1cImRhdGFcIj5cbiAge3sgZGF0YSB8IHRyYW5zbGF0ZSB9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhY3Rpb25zTWVudVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8Y2RzLW92ZXJmbG93LW1lbnVcbiAgICBbb3Blbl09XCJjdXJyZW50T3BlbkFjdGlvbklkID09PSBkYXRhLml0ZW1cIlxuICAgIChvcGVuQ2hhbmdlKT1cImhhbmRsZUFjdGlvbk9wZW5DaGFuZ2UoZGF0YS5pdGVtLCAkZXZlbnQpXCJcbiAgICBbZmxpcF09XCJ0cnVlXCJcbiAgICBbb2Zmc2V0XT1cInt4OiAwLCB5OiA1MH1cIlxuICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICBAZm9yIChhY3Rpb24gb2YgZGF0YS5hY3Rpb25zOyB0cmFjayBhY3Rpb24ubGFiZWwpIHtcbiAgICAgIDxjZHMtb3ZlcmZsb3ctbWVudS1vcHRpb25cbiAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZENhbGxiYWNrID8gYWN0aW9uLmRpc2FibGVkQ2FsbGJhY2soZGF0YS5pdGVtKSA6IGZhbHNlXCJcbiAgICAgICAgW3R5cGVdPVwiYWN0aW9uLnR5cGVcIlxuICAgICAgICAoc2VsZWN0ZWQpPVwiYWN0aW9uLmNhbGxiYWNrKGRhdGEuaXRlbSlcIlxuICAgICAgPlxuICAgICAgICA8aSAqbmdJZj1cIiEhYWN0aW9uLmljb25DbGFzc1wiIFtuZ0NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIj48L2k+XG5cbiAgICAgICAge3sgYWN0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Nkcy1vdmVyZmxvdy1tZW51LW9wdGlvbj5cbiAgICB9XG4gIDwvY2RzLW92ZXJmbG93LW1lbnU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Jvd0Rpc2FibGVkIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8ZGl2ICpuZ0lmPVwiZGF0YS5sb2NrZWRcIiBjbGFzcz1cImxvY2tlZFwiPlxuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cImZsb2F0LXJpZ2h0IGJhZGdlIGJhZGdlLXBpbGwgYmFkZ2Utc2Vjb25kYXJ5IGJnLWdyZXlcIlxuICAgICAgbmdiVG9vbHRpcD1cInt7IGxvY2tlZFRvb2x0aXBUcmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktbG9ja1wiPjwvaT5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb3ZlUm93c1RlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8ZGl2IGNsYXNzPVwidmFsdGltby1jYXJib24tbGlzdF9fbW92ZS1yb3dzXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2RzQnV0dG9uPVwidGVydGlhcnlcIlxuICAgICAgW2Rpc2FibGVkXT1cImRhdGEuaW5kZXggPT09IDBcIlxuICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgc2l6ZT1cInNtXCJcbiAgICAgIChjbGljayk9XCJvbk1vdmVVcENsaWNrKCRldmVudCwgZGF0YSlcIlxuICAgID5cbiAgICAgIDxzdmcgY2RzSWNvbj1cImFycm93LS11cFwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cInRlcnRpYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJkYXRhLmluZGV4ID09PSBkYXRhLmxlbmd0aCAtIDFcIlxuICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgc2l6ZT1cInNtXCJcbiAgICAgIChjbGljayk9XCJvbk1vdmVEb3duQ2xpY2soJGV2ZW50LCBkYXRhKVwiXG4gICAgPlxuICAgICAgPHN2ZyBjZHNJY29uPVwiYXJyb3ctLWRvd25cIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkcmFnQW5kRHJvcFRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxuICA8ZGl2IGNsYXNzPVwidmFsdGltby1jYXJib24tbGlzdF9fZHJhZ2dhYmxlXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgICAgW2Rpc2FibGVkXT1cImRyYWdBbmREcm9wRGlzYWJsZWRcIlxuICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgc2l6ZT1cInNtXCJcbiAgICAgIChtb3VzZWRvd24pPVwib25EcmFnU3RhcnQoJGV2ZW50LCBkYXRhKVwiXG4gICAgPlxuICAgICAgPHN2ZyBjZHNJY29uPVwiZHJhZ2dhYmxlXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFnVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGF0YS50YWdzXCI+LTwvbmctY29udGFpbmVyPlxuXG4gIDxkaXYgKm5nSWY9XCJkYXRhLnRhZ3NcIiBjbGFzcz1cInRhZy10ZW1wbGF0ZVwiPlxuICAgIEBpZiAoZGF0YS50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLVxuICAgIH0gQGVsc2Uge1xuICAgICAgPGNkcy10YWcgKm5nSWY9XCIhIWRhdGEudGFnc1swXS5jb250ZW50XCIgY2xhc3M9XCJjZHMtdGFnLS1uby1tYXJnaW5cIiBbdHlwZV09XCJkYXRhLnRhZ3NbMF0udHlwZVwiPlxuICAgICAgICB7eyBkYXRhLnRhZ3NbMF0uZWxsaXBzaXNDb250ZW50ID8/IGRhdGEudGFnc1swXS5jb250ZW50IH19XG4gICAgICA8L2Nkcy10YWc+XG5cbiAgICAgIDxjZHMtdGFnXG4gICAgICAgICpuZ0lmPVwiZGF0YS50YWdzLmxlbmd0aCA+IDFcIlxuICAgICAgICBjbGFzcz1cImNkcy10YWctLW5vLW1hcmdpbiB2YWx0aW1vLWNhcmJvbi1saXN0X19leHBhbmQtdGFnXCJcbiAgICAgICAgdHlwZT1cImhpZ2gtY29udHJhc3RcIlxuICAgICAgICAoY2xpY2spPVwib25UYWdDbGljaygkZXZlbnQsIGRhdGEudGFncylcIlxuICAgICAgPlxuICAgICAgICB7eyBkYXRhLnRhZ3MubGVuZ3RoIC0gMSB9fSA8c3ZnIGNkc0ljb249XCJhZGRcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgICAgIDwvY2RzLXRhZz5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxzcGFuPnt7IGRhdGEgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48dmFsdGltby10YWdzLW1vZGFsXG4gIFtvcGVuXT1cInRhZ01vZGFsT3BlbiQgfCBhc3luY1wiXG4gIFt0YWdzXT1cInRhZ01vZGFsRGF0YSQgfCBhc3luY1wiXG4gIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2VFdmVudCgpXCJcbj48L3ZhbHRpbW8tdGFncy1tb2RhbD5cbiJdfQ==
@@ -20,6 +20,7 @@ import { NgbPaginationModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstra
20
20
  import { TranslateModule } from '@ngx-translate/core';
21
21
  import { ButtonModule, ContentSwitcherModule, DialogModule, IconModule, ModalModule, PaginationModule, TableModule, TagModule, } from 'carbon-components-angular';
22
22
  import { ValtimoCdsModalDirectiveModule } from '../../directives/valtimo-cds-modal/valtimo-cds-modal-directive.module';
23
+ import { EllipsisPipe } from '../../pipes';
23
24
  import { CardModule } from '../card/card.module';
24
25
  import { ViewContentModule } from '../view-content/view-content.module';
25
26
  import { CarbonListComponent } from './carbon-list.component';
@@ -49,7 +50,7 @@ export class CarbonListModule {
49
50
  ModalModule,
50
51
  ValtimoCdsModalDirectiveModule,
51
52
  ViewContentModule], exports: [CarbonListComponent, CarbonListFilterPipe, CarbonNoResultsComponent] }); }
52
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonListModule, imports: [CardModule,
53
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CarbonListModule, providers: [EllipsisPipe], imports: [CardModule,
53
54
  CommonModule,
54
55
  FormsModule,
55
56
  NgbPaginationModule,
@@ -96,6 +97,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
96
97
  ViewContentModule,
97
98
  ],
98
99
  exports: [CarbonListComponent, CarbonListFilterPipe, CarbonNoResultsComponent],
100
+ providers: [EllipsisPipe],
99
101
  }]
100
102
  }] });
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDakYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxZQUFZLEVBQ1oscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sdUVBQXVFLENBQUM7QUFDckgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDOztBQThCM0UsTUFBTSxPQUFPLGdCQUFnQjsrR0FBaEIsZ0JBQWdCO2dIQUFoQixnQkFBZ0IsaUJBMUJ6QixtQkFBbUI7WUFDbkIsb0JBQW9CO1lBQ3BCLHdCQUF3QjtZQUN4Qix3QkFBd0IsYUFHeEIsVUFBVTtZQUNWLFlBQVk7WUFDWixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLGdCQUFnQjtZQUNoQixXQUFXO1lBQ1gsZUFBZTtZQUNmLG1CQUFtQjtZQUNuQixxQkFBcUI7WUFDckIsVUFBVTtZQUNWLFlBQVk7WUFDWixZQUFZO1lBQ1osZ0JBQWdCO1lBQ2hCLFNBQVM7WUFDVCxXQUFXO1lBQ1gsOEJBQThCO1lBQzlCLGlCQUFpQixhQUVULG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLHdCQUF3QjtnSEFFbEUsZ0JBQWdCLFlBcEJ6QixVQUFVO1lBQ1YsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsZ0JBQWdCO1lBQ2hCLFdBQVc7WUFDWCxlQUFlO1lBQ2YsbUJBQW1CO1lBQ25CLHFCQUFxQjtZQUNyQixVQUFVO1lBQ1YsWUFBWTtZQUNaLFlBQVk7WUFDWixnQkFBZ0I7WUFDaEIsU0FBUztZQUNULFdBQVc7WUFDWCw4QkFBOEI7WUFDOUIsaUJBQWlCOzs0RkFJUixnQkFBZ0I7a0JBNUI1QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4Qix3QkFBd0I7cUJBQ3pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxVQUFVO3dCQUNWLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIscUJBQXFCO3dCQUNyQixVQUFVO3dCQUNWLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLFNBQVM7d0JBQ1QsV0FBVzt3QkFDWCw4QkFBOEI7d0JBQzlCLGlCQUFpQjtxQkFDbEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLENBQUM7aUJBQy9FIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge05nYlBhZ2luYXRpb25Nb2R1bGUsIE5nYlRvb2x0aXBNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEJ1dHRvbk1vZHVsZSxcbiAgQ29udGVudFN3aXRjaGVyTW9kdWxlLFxuICBEaWFsb2dNb2R1bGUsXG4gIEljb25Nb2R1bGUsXG4gIE1vZGFsTW9kdWxlLFxuICBQYWdpbmF0aW9uTW9kdWxlLFxuICBUYWJsZU1vZHVsZSxcbiAgVGFnTW9kdWxlLFxufSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7VmFsdGltb0Nkc01vZGFsRGlyZWN0aXZlTW9kdWxlfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3ZhbHRpbW8tY2RzLW1vZGFsL3ZhbHRpbW8tY2RzLW1vZGFsLWRpcmVjdGl2ZS5tb2R1bGUnO1xuaW1wb3J0IHtDYXJkTW9kdWxlfSBmcm9tICcuLi9jYXJkL2NhcmQubW9kdWxlJztcbmltcG9ydCB7Vmlld0NvbnRlbnRNb2R1bGV9IGZyb20gJy4uL3ZpZXctY29udGVudC92aWV3LWNvbnRlbnQubW9kdWxlJztcbmltcG9ydCB7Q2FyYm9uTGlzdENvbXBvbmVudH0gZnJvbSAnLi9jYXJib24tbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtDYXJib25MaXN0RmlsdGVyUGlwZX0gZnJvbSAnLi9DYXJib25MaXN0RmlsdGVyUGlwZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtDYXJib25Ob1Jlc3VsdHNDb21wb25lbnR9IGZyb20gJy4vbm8tcmVzdWx0cy9jYXJib24tbm8tcmVzdWx0cy5jb21wb25lbnQnO1xuaW1wb3J0IHtDYXJib25UYWdzTW9kYWxDb21wb25lbnR9IGZyb20gJy4vdGFncy1tb2RhbC90YWdzLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIENhcmJvbkxpc3RDb21wb25lbnQsXG4gICAgQ2FyYm9uTGlzdEZpbHRlclBpcGUsXG4gICAgQ2FyYm9uTm9SZXN1bHRzQ29tcG9uZW50LFxuICAgIENhcmJvblRhZ3NNb2RhbENvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENhcmRNb2R1bGUsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nYlBhZ2luYXRpb25Nb2R1bGUsXG4gICAgUGFnaW5hdGlvbk1vZHVsZSxcbiAgICBUYWJsZU1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBDb250ZW50U3dpdGNoZXJNb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIE5nYlRvb2x0aXBNb2R1bGUsXG4gICAgVGFnTW9kdWxlLFxuICAgIE1vZGFsTW9kdWxlLFxuICAgIFZhbHRpbW9DZHNNb2RhbERpcmVjdGl2ZU1vZHVsZSxcbiAgICBWaWV3Q29udGVudE1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW0NhcmJvbkxpc3RDb21wb25lbnQsIENhcmJvbkxpc3RGaWx0ZXJQaXBlLCBDYXJib25Ob1Jlc3VsdHNDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJib25MaXN0TW9kdWxlIHt9XG4iXX0=
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyYm9uLWxpc3QubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYXJib24tbGlzdC9jYXJib24tbGlzdC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsV0FBVyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDakYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxZQUFZLEVBQ1oscUJBQXFCLEVBQ3JCLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sdUVBQXVFLENBQUM7QUFDckgsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDbEYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sbUNBQW1DLENBQUM7O0FBK0IzRSxNQUFNLE9BQU8sZ0JBQWdCOytHQUFoQixnQkFBZ0I7Z0hBQWhCLGdCQUFnQixpQkEzQnpCLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIsd0JBQXdCO1lBQ3hCLHdCQUF3QixhQUd4QixVQUFVO1lBQ1YsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsZ0JBQWdCO1lBQ2hCLFdBQVc7WUFDWCxlQUFlO1lBQ2YsbUJBQW1CO1lBQ25CLHFCQUFxQjtZQUNyQixVQUFVO1lBQ1YsWUFBWTtZQUNaLFlBQVk7WUFDWixnQkFBZ0I7WUFDaEIsU0FBUztZQUNULFdBQVc7WUFDWCw4QkFBOEI7WUFDOUIsaUJBQWlCLGFBRVQsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCO2dIQUdsRSxnQkFBZ0IsYUFGaEIsQ0FBQyxZQUFZLENBQUMsWUFuQnZCLFVBQVU7WUFDVixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixnQkFBZ0I7WUFDaEIsV0FBVztZQUNYLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIscUJBQXFCO1lBQ3JCLFVBQVU7WUFDVixZQUFZO1lBQ1osWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixTQUFTO1lBQ1QsV0FBVztZQUNYLDhCQUE4QjtZQUM5QixpQkFBaUI7OzRGQUtSLGdCQUFnQjtrQkE3QjVCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQix3QkFBd0I7d0JBQ3hCLHdCQUF3QjtxQkFDekI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixxQkFBcUI7d0JBQ3JCLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsU0FBUzt3QkFDVCxXQUFXO3dCQUNYLDhCQUE4Qjt3QkFDOUIsaUJBQWlCO3FCQUNsQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsQ0FBQztvQkFDOUUsU0FBUyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtOZ2JQYWdpbmF0aW9uTW9kdWxlLCBOZ2JUb29sdGlwTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIENvbnRlbnRTd2l0Y2hlck1vZHVsZSxcbiAgRGlhbG9nTW9kdWxlLFxuICBJY29uTW9kdWxlLFxuICBNb2RhbE1vZHVsZSxcbiAgUGFnaW5hdGlvbk1vZHVsZSxcbiAgVGFibGVNb2R1bGUsXG4gIFRhZ01vZHVsZSxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1ZhbHRpbW9DZHNNb2RhbERpcmVjdGl2ZU1vZHVsZX0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy92YWx0aW1vLWNkcy1tb2RhbC92YWx0aW1vLWNkcy1tb2RhbC1kaXJlY3RpdmUubW9kdWxlJztcbmltcG9ydCB7RWxsaXBzaXNQaXBlfSBmcm9tICcuLi8uLi9waXBlcyc7XG5pbXBvcnQge0NhcmRNb2R1bGV9IGZyb20gJy4uL2NhcmQvY2FyZC5tb2R1bGUnO1xuaW1wb3J0IHtWaWV3Q29udGVudE1vZHVsZX0gZnJvbSAnLi4vdmlldy1jb250ZW50L3ZpZXctY29udGVudC5tb2R1bGUnO1xuaW1wb3J0IHtDYXJib25MaXN0Q29tcG9uZW50fSBmcm9tICcuL2NhcmJvbi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge0NhcmJvbkxpc3RGaWx0ZXJQaXBlfSBmcm9tICcuL0NhcmJvbkxpc3RGaWx0ZXJQaXBlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0NhcmJvbk5vUmVzdWx0c0NvbXBvbmVudH0gZnJvbSAnLi9uby1yZXN1bHRzL2NhcmJvbi1uby1yZXN1bHRzLmNvbXBvbmVudCc7XG5pbXBvcnQge0NhcmJvblRhZ3NNb2RhbENvbXBvbmVudH0gZnJvbSAnLi90YWdzLW1vZGFsL3RhZ3MtbW9kYWwuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgQ2FyYm9uTGlzdENvbXBvbmVudCxcbiAgICBDYXJib25MaXN0RmlsdGVyUGlwZSxcbiAgICBDYXJib25Ob1Jlc3VsdHNDb21wb25lbnQsXG4gICAgQ2FyYm9uVGFnc01vZGFsQ29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ2FyZE1vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTmdiUGFnaW5hdGlvbk1vZHVsZSxcbiAgICBQYWdpbmF0aW9uTW9kdWxlLFxuICAgIFRhYmxlTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIENvbnRlbnRTd2l0Y2hlck1vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgTmdiVG9vbHRpcE1vZHVsZSxcbiAgICBUYWdNb2R1bGUsXG4gICAgTW9kYWxNb2R1bGUsXG4gICAgVmFsdGltb0Nkc01vZGFsRGlyZWN0aXZlTW9kdWxlLFxuICAgIFZpZXdDb250ZW50TW9kdWxlLFxuICBdLFxuICBleHBvcnRzOiBbQ2FyYm9uTGlzdENvbXBvbmVudCwgQ2FyYm9uTGlzdEZpbHRlclBpcGUsIENhcmJvbk5vUmVzdWx0c0NvbXBvbmVudF0sXG4gIHByb3ZpZGVyczogW0VsbGlwc2lzUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIENhcmJvbkxpc3RNb2R1bGUge31cbiJdfQ==