@valtimo/dossier 12.6.0 → 12.7.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 (41) hide show
  1. package/esm2022/lib/components/dossier-detail/dossier-detail.component.mjs +26 -16
  2. package/esm2022/lib/components/dossier-detail/tab/widgets/components/collection/widget-collection.component.mjs +26 -13
  3. package/esm2022/lib/components/dossier-detail/tab/widgets/components/custom/widget-custom.component.mjs +27 -12
  4. package/esm2022/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.mjs +33 -11
  5. package/esm2022/lib/components/dossier-detail/tab/widgets/components/formio/widget-formio.component.mjs +25 -11
  6. package/esm2022/lib/components/dossier-detail/tab/widgets/components/table/widget-table.component.mjs +32 -13
  7. package/esm2022/lib/components/dossier-detail/tab/widgets/components/widget-process/widget-process.mjs +17 -0
  8. package/esm2022/lib/components/dossier-detail/tab/widgets/widgets.component.mjs +4 -4
  9. package/esm2022/lib/components/dossier-detail/tab/widgets/widgets.permissions.mjs +30 -0
  10. package/esm2022/lib/components/dossier-detail/tab/widgets/widgets.service.mjs +45 -0
  11. package/esm2022/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.mjs +38 -6
  12. package/esm2022/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.mjs +40 -5
  13. package/esm2022/lib/models/case-widget.model.mjs +1 -1
  14. package/fesm2022/valtimo-dossier.mjs +331 -115
  15. package/fesm2022/valtimo-dossier.mjs.map +1 -1
  16. package/lib/components/dossier-detail/dossier-detail.component.d.ts +4 -1
  17. package/lib/components/dossier-detail/dossier-detail.component.d.ts.map +1 -1
  18. package/lib/components/dossier-detail/tab/widgets/components/collection/widget-collection.component.d.ts +11 -3
  19. package/lib/components/dossier-detail/tab/widgets/components/collection/widget-collection.component.d.ts.map +1 -1
  20. package/lib/components/dossier-detail/tab/widgets/components/custom/widget-custom.component.d.ts +12 -4
  21. package/lib/components/dossier-detail/tab/widgets/components/custom/widget-custom.component.d.ts.map +1 -1
  22. package/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.d.ts +14 -4
  23. package/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.d.ts.map +1 -1
  24. package/lib/components/dossier-detail/tab/widgets/components/formio/widget-formio.component.d.ts +11 -3
  25. package/lib/components/dossier-detail/tab/widgets/components/formio/widget-formio.component.d.ts.map +1 -1
  26. package/lib/components/dossier-detail/tab/widgets/components/table/widget-table.component.d.ts +11 -3
  27. package/lib/components/dossier-detail/tab/widgets/components/table/widget-table.component.d.ts.map +1 -1
  28. package/lib/components/dossier-detail/tab/widgets/components/widget-process/widget-process.d.ts +13 -0
  29. package/lib/components/dossier-detail/tab/widgets/components/widget-process/widget-process.d.ts.map +1 -0
  30. package/lib/components/dossier-detail/tab/widgets/widgets.component.d.ts.map +1 -1
  31. package/lib/components/dossier-detail/tab/widgets/widgets.permissions.d.ts +8 -0
  32. package/lib/components/dossier-detail/tab/widgets/widgets.permissions.d.ts.map +1 -0
  33. package/lib/components/dossier-detail/tab/widgets/widgets.service.d.ts +16 -0
  34. package/lib/components/dossier-detail/tab/widgets/widgets.service.d.ts.map +1 -0
  35. package/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.d.ts +8 -3
  36. package/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.d.ts.map +1 -1
  37. package/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts +8 -3
  38. package/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts.map +1 -1
  39. package/lib/models/case-widget.model.d.ts +6 -1
  40. package/lib/models/case-widget.model.d.ts.map +1 -1
  41. package/package.json +1 -1
@@ -15,21 +15,26 @@
15
15
  */
16
16
  import { ChangeDetectionStrategy, Component, HostBinding, Input, signal, ViewChild, ViewEncapsulation, } from '@angular/core';
17
17
  import { CommonModule } from '@angular/common';
18
- import { InputModule, PaginationModel, PaginationModule, TilesModule, } from 'carbon-components-angular';
18
+ import { ButtonModule, InputModule, PaginationModel, PaginationModule, TilesModule, } from 'carbon-components-angular';
19
19
  import { CaseWidgetDisplayTypeKey, } from '../../../../../../models';
20
20
  import { BehaviorSubject, combineLatest, filter, map, of, switchMap, tap } from 'rxjs';
21
21
  import { CarbonListModule } from '@valtimo/components';
22
22
  import { TranslateModule } from '@ngx-translate/core';
23
+ import { WidgetProcess } from '../widget-process/widget-process';
23
24
  import * as i0 from "@angular/core";
24
- import * as i1 from "@valtimo/components";
25
- import * as i2 from "../../../../../../services";
26
- import * as i3 from "@angular/common";
27
- import * as i4 from "carbon-components-angular";
28
- import * as i5 from "@ngx-translate/core";
29
- export class WidgetCollectionComponent {
25
+ import * as i1 from "@valtimo/document";
26
+ import * as i2 from "@valtimo/access-control";
27
+ import * as i3 from "@valtimo/components";
28
+ import * as i4 from "../../../../../../services";
29
+ import * as i5 from "../../widgets.service";
30
+ import * as i6 from "@angular/common";
31
+ import * as i7 from "carbon-components-angular";
32
+ import * as i8 from "@ngx-translate/core";
33
+ export class WidgetCollectionComponent extends WidgetProcess {
30
34
  set widgetConfiguration(value) {
31
35
  if (!value)
32
36
  return;
37
+ this.baseWidgetConfiguration = value;
33
38
  this.widgetConfiguration$.next(value);
34
39
  }
35
40
  get _initialNumberOfElements$() {
@@ -50,10 +55,14 @@ export class WidgetCollectionComponent {
50
55
  });
51
56
  this.cdr.detectChanges();
52
57
  }
53
- constructor(viewContentService, cdr, widgetApiService) {
58
+ constructor(documentService, permissionService, viewContentService, cdr, widgetApiService, widgetsService) {
59
+ super(documentService, permissionService);
60
+ this.documentService = documentService;
61
+ this.permissionService = permissionService;
54
62
  this.viewContentService = viewContentService;
55
63
  this.cdr = cdr;
56
64
  this.widgetApiService = widgetApiService;
65
+ this.widgetsService = widgetsService;
57
66
  this.class = 'valtimo-widget-collection';
58
67
  this.showPagination$ = new BehaviorSubject(false);
59
68
  this._initialNumberOfElementsSubject$ = new BehaviorSubject(null);
@@ -108,6 +117,9 @@ export class WidgetCollectionComponent {
108
117
  currentPage: page,
109
118
  }));
110
119
  }
120
+ onProcessStartClick(process) {
121
+ this.widgetsService.startProcess(process.processDefinitionKey);
122
+ }
111
123
  getCardField(field, data) {
112
124
  const resolvedValue = this.viewContentService.get(data.fields[field.key], {
113
125
  ...field.displayProperties,
@@ -159,8 +171,8 @@ export class WidgetCollectionComponent {
159
171
  }
160
172
  return '-';
161
173
  }
162
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetCollectionComponent, deps: [{ token: i1.ViewContentService }, { token: i0.ChangeDetectorRef }, { token: i2.DossierWidgetsApiService }], target: i0.ɵɵFactoryTarget.Component }); }
163
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: WidgetCollectionComponent, isStandalone: true, selector: "valtimo-widget-collection", inputs: { documentId: "documentId", tabKey: "tabKey", widgetConfiguration: "widgetConfiguration", widgetData: "widgetData" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "_widgetCollectionRef", first: true, predicate: ["widgetCollection"], 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\n<ng-container\n *ngIf=\"{\n widgetConfiguration: widgetConfiguration$ | async,\n collectionWidgetCards: collectionWidgetCards$ | async,\n } as obs\"\n>\n <span class=\"valtimo-widget-collection__title\">{{ widgetTitle() }}</span>\n\n <div\n #widgetCollection\n [ngClass]=\"{\n 'valtimo-widget-collection__render-vertically': amountOfColumns() === 1,\n 'valtimo-widget-collection__render-two-columns': amountOfColumns() === 2,\n 'valtimo-widget-collection__render-three-columns': amountOfColumns() === 3,\n 'valtimo-widget-collection__container': amountOfColumns() === 4,\n }\"\n >\n @for (card of obs?.collectionWidgetCards; track card.key) {\n <div\n class=\"valtimo-widget-collection__card\"\n [ngClass]=\"{'valtimo-widget-collection__card--hidden': card.hidden}\"\n >\n <span class=\"valtimo-widget-collection__card-title\">{{ card.title }}</span>\n\n @for (field of card.fields; track field.key) {\n <div\n [ngClass]=\"{\n 'valtimo-widget-collection__full-width-input': field?.width === 'full',\n 'valtimo-widget-collection__half-width-input': field?.width === 'half',\n }\"\n >\n <cds-label class=\"valtimo-widget-collection__label\" [attr.title]=\"field?.title\">\n {{ field?.title }}\n\n <input\n [value]=\"field?.value\"\n [readonly]=\"true\"\n class=\"valtimo-widget-collection__card-input\"\n cdsText\n />\n </cds-label>\n </div>\n }\n </div>\n }\n </div>\n\n @if (!obs?.collectionWidgetCards?.length) {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n\n <cds-pagination-nav\n *ngIf=\"paginationModel() && (showPagination$ | async)\"\n class=\"valtimo-widget-collection__pagination\"\n [model]=\"paginationModel()\"\n (selectPage)=\"onSelectPage($event)\"\n >\n </cds-pagination-nav>\n</ng-container>\n", styles: [".valtimo-widget-collection{padding:24px}.valtimo-widget-collection .cds--label{overflow:hidden;text-overflow:ellipsis;width:100%}.valtimo-widget-collection__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.valtimo-widget-collection__container{display:flex;column-gap:16px}.valtimo-widget-collection,.valtimo-widget-collection__column{display:flex;flex-direction:column;width:100%;overflow:hidden}.valtimo-widget-collection__card{margin-top:16px;display:flex;flex-flow:row wrap;background-color:var(--cds-background);padding:16px;width:100%;gap:16px}.valtimo-widget-collection__card--hidden{visibility:hidden}.valtimo-widget-collection__card-title{color:var(--cds-text-primary);font-weight:500;font-size:14px;line-height:22px;font-style:italic;width:100%}.valtimo-widget-collection__card-input{background:transparent}.valtimo-widget-collection__full-width-input{width:100%}.valtimo-widget-collection__half-width-input{width:calc(50% - 16px);box-sizing:border-box}.valtimo-widget-collection__pagination{padding:8px 0;display:flex;justify-content:center}.valtimo-widget-collection__render-vertically,.valtimo-widget-collection__render-two-columns,.valtimo-widget-collection__render-three-columns{grid-gap:16px;align-items:stretch;overflow:hidden;text-overflow:ellipsis;width:100%}.valtimo-widget-collection__render-vertically{display:flex!important}.valtimo-widget-collection__render-two-columns{grid-template-columns:repeat(2,1fr)}.valtimo-widget-collection__render-three-columns{grid-template-columns:repeat(3,1fr)}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i4.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i4.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: PaginationModule }, { kind: "component", type: i4.PaginationNav, selector: "cds-pagination-nav, ibm-pagination-navm", inputs: ["model", "disabled", "numOfItemsToShow", "translations"], outputs: ["selectPage"] }, { kind: "ngmodule", type: TilesModule }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
174
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetCollectionComponent, deps: [{ token: i1.DocumentService }, { token: i2.PermissionService }, { token: i3.ViewContentService }, { token: i0.ChangeDetectorRef }, { token: i4.DossierWidgetsApiService }, { token: i5.WidgetsService }], target: i0.ɵɵFactoryTarget.Component }); }
175
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: WidgetCollectionComponent, isStandalone: true, selector: "valtimo-widget-collection", inputs: { documentId: "documentId", tabKey: "tabKey", widgetConfiguration: "widgetConfiguration", widgetData: "widgetData" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "_widgetCollectionRef", first: true, predicate: ["widgetCollection"], descendants: true }], usesInheritance: 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\n<ng-container\n *ngIf=\"{\n widgetConfiguration: widgetConfiguration$ | async,\n collectionWidgetCards: collectionWidgetCards$ | async,\n } as obs\"\n>\n <section class=\"valtimo-widget-collection__header\">\n <span class=\"valtimo-widget-collection__title\">{{ widgetTitle() }}</span>\n\n @if (obs.widgetConfiguration?.actions?.length === 1) {\n <button\n *ngIf=\"canCreateCamundaExecution$ | async\"\n cdsButton=\"ghost\"\n (click)=\"onProcessStartClick(obs.widgetConfiguration?.actions[0])\"\n >\n {{ obs.widgetConfiguration?.actions[0].name }}\n </button>\n }\n </section>\n\n <div\n #widgetCollection\n [ngClass]=\"{\n 'valtimo-widget-collection__render-vertically': amountOfColumns() === 1,\n 'valtimo-widget-collection__render-two-columns': amountOfColumns() === 2,\n 'valtimo-widget-collection__render-three-columns': amountOfColumns() === 3,\n 'valtimo-widget-collection__container': amountOfColumns() === 4,\n }\"\n >\n @for (card of obs?.collectionWidgetCards; track card.key) {\n <div\n class=\"valtimo-widget-collection__card\"\n [ngClass]=\"{'valtimo-widget-collection__card--hidden': card.hidden}\"\n >\n <span class=\"valtimo-widget-collection__card-title\">{{ card.title }}</span>\n\n @for (field of card.fields; track field.key) {\n <div\n [ngClass]=\"{\n 'valtimo-widget-collection__full-width-input': field?.width === 'full',\n 'valtimo-widget-collection__half-width-input': field?.width === 'half',\n }\"\n >\n <cds-label class=\"valtimo-widget-collection__label\" [attr.title]=\"field?.title\">\n {{ field?.title }}\n\n <input\n [value]=\"field?.value\"\n [readonly]=\"true\"\n class=\"valtimo-widget-collection__card-input\"\n cdsText\n />\n </cds-label>\n </div>\n }\n </div>\n }\n </div>\n\n @if (!obs?.collectionWidgetCards?.length) {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n\n <cds-pagination-nav\n *ngIf=\"paginationModel() && (showPagination$ | async)\"\n class=\"valtimo-widget-collection__pagination\"\n [model]=\"paginationModel()\"\n (selectPage)=\"onSelectPage($event)\"\n >\n </cds-pagination-nav>\n</ng-container>\n", styles: [".valtimo-widget-collection{padding:24px}.valtimo-widget-collection .cds--label{overflow:hidden;text-overflow:ellipsis;width:100%}.valtimo-widget-collection__header{display:flex;align-items:center;justify-content:space-between}.valtimo-widget-collection__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.valtimo-widget-collection__container{display:flex;column-gap:16px}.valtimo-widget-collection,.valtimo-widget-collection__column{display:flex;flex-direction:column;width:100%;overflow:hidden}.valtimo-widget-collection__card{margin-top:16px;display:flex;flex-flow:row wrap;background-color:var(--cds-background);padding:16px;width:100%;gap:16px}.valtimo-widget-collection__card--hidden{visibility:hidden}.valtimo-widget-collection__card-title{color:var(--cds-text-primary);font-weight:500;font-size:14px;line-height:22px;font-style:italic;width:100%}.valtimo-widget-collection__card-input{background:transparent}.valtimo-widget-collection__full-width-input{width:100%}.valtimo-widget-collection__half-width-input{width:calc(50% - 16px);box-sizing:border-box}.valtimo-widget-collection__pagination{padding:8px 0;display:flex;justify-content:center}.valtimo-widget-collection__render-vertically,.valtimo-widget-collection__render-two-columns,.valtimo-widget-collection__render-three-columns{grid-gap:16px;align-items:stretch;overflow:hidden;text-overflow:ellipsis;width:100%}.valtimo-widget-collection__render-vertically{display:flex!important}.valtimo-widget-collection__render-two-columns{grid-template-columns:repeat(2,1fr)}.valtimo-widget-collection__render-three-columns{grid-template-columns:repeat(3,1fr)}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i7.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i7.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: PaginationModule }, { kind: "component", type: i7.PaginationNav, selector: "cds-pagination-nav, ibm-pagination-navm", inputs: ["model", "disabled", "numOfItemsToShow", "translations"], outputs: ["selectPage"] }, { kind: "ngmodule", type: TilesModule }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i3.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i7.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
164
176
  }
165
177
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetCollectionComponent, decorators: [{
166
178
  type: Component,
@@ -171,8 +183,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
171
183
  TilesModule,
172
184
  CarbonListModule,
173
185
  TranslateModule,
174
- ], 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\n<ng-container\n *ngIf=\"{\n widgetConfiguration: widgetConfiguration$ | async,\n collectionWidgetCards: collectionWidgetCards$ | async,\n } as obs\"\n>\n <span class=\"valtimo-widget-collection__title\">{{ widgetTitle() }}</span>\n\n <div\n #widgetCollection\n [ngClass]=\"{\n 'valtimo-widget-collection__render-vertically': amountOfColumns() === 1,\n 'valtimo-widget-collection__render-two-columns': amountOfColumns() === 2,\n 'valtimo-widget-collection__render-three-columns': amountOfColumns() === 3,\n 'valtimo-widget-collection__container': amountOfColumns() === 4,\n }\"\n >\n @for (card of obs?.collectionWidgetCards; track card.key) {\n <div\n class=\"valtimo-widget-collection__card\"\n [ngClass]=\"{'valtimo-widget-collection__card--hidden': card.hidden}\"\n >\n <span class=\"valtimo-widget-collection__card-title\">{{ card.title }}</span>\n\n @for (field of card.fields; track field.key) {\n <div\n [ngClass]=\"{\n 'valtimo-widget-collection__full-width-input': field?.width === 'full',\n 'valtimo-widget-collection__half-width-input': field?.width === 'half',\n }\"\n >\n <cds-label class=\"valtimo-widget-collection__label\" [attr.title]=\"field?.title\">\n {{ field?.title }}\n\n <input\n [value]=\"field?.value\"\n [readonly]=\"true\"\n class=\"valtimo-widget-collection__card-input\"\n cdsText\n />\n </cds-label>\n </div>\n }\n </div>\n }\n </div>\n\n @if (!obs?.collectionWidgetCards?.length) {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n\n <cds-pagination-nav\n *ngIf=\"paginationModel() && (showPagination$ | async)\"\n class=\"valtimo-widget-collection__pagination\"\n [model]=\"paginationModel()\"\n (selectPage)=\"onSelectPage($event)\"\n >\n </cds-pagination-nav>\n</ng-container>\n", styles: [".valtimo-widget-collection{padding:24px}.valtimo-widget-collection .cds--label{overflow:hidden;text-overflow:ellipsis;width:100%}.valtimo-widget-collection__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.valtimo-widget-collection__container{display:flex;column-gap:16px}.valtimo-widget-collection,.valtimo-widget-collection__column{display:flex;flex-direction:column;width:100%;overflow:hidden}.valtimo-widget-collection__card{margin-top:16px;display:flex;flex-flow:row wrap;background-color:var(--cds-background);padding:16px;width:100%;gap:16px}.valtimo-widget-collection__card--hidden{visibility:hidden}.valtimo-widget-collection__card-title{color:var(--cds-text-primary);font-weight:500;font-size:14px;line-height:22px;font-style:italic;width:100%}.valtimo-widget-collection__card-input{background:transparent}.valtimo-widget-collection__full-width-input{width:100%}.valtimo-widget-collection__half-width-input{width:calc(50% - 16px);box-sizing:border-box}.valtimo-widget-collection__pagination{padding:8px 0;display:flex;justify-content:center}.valtimo-widget-collection__render-vertically,.valtimo-widget-collection__render-two-columns,.valtimo-widget-collection__render-three-columns{grid-gap:16px;align-items:stretch;overflow:hidden;text-overflow:ellipsis;width:100%}.valtimo-widget-collection__render-vertically{display:flex!important}.valtimo-widget-collection__render-two-columns{grid-template-columns:repeat(2,1fr)}.valtimo-widget-collection__render-three-columns{grid-template-columns:repeat(3,1fr)}\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"] }]
175
- }], ctorParameters: () => [{ type: i1.ViewContentService }, { type: i0.ChangeDetectorRef }, { type: i2.DossierWidgetsApiService }], propDecorators: { class: [{
186
+ ButtonModule,
187
+ ], 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\n<ng-container\n *ngIf=\"{\n widgetConfiguration: widgetConfiguration$ | async,\n collectionWidgetCards: collectionWidgetCards$ | async,\n } as obs\"\n>\n <section class=\"valtimo-widget-collection__header\">\n <span class=\"valtimo-widget-collection__title\">{{ widgetTitle() }}</span>\n\n @if (obs.widgetConfiguration?.actions?.length === 1) {\n <button\n *ngIf=\"canCreateCamundaExecution$ | async\"\n cdsButton=\"ghost\"\n (click)=\"onProcessStartClick(obs.widgetConfiguration?.actions[0])\"\n >\n {{ obs.widgetConfiguration?.actions[0].name }}\n </button>\n }\n </section>\n\n <div\n #widgetCollection\n [ngClass]=\"{\n 'valtimo-widget-collection__render-vertically': amountOfColumns() === 1,\n 'valtimo-widget-collection__render-two-columns': amountOfColumns() === 2,\n 'valtimo-widget-collection__render-three-columns': amountOfColumns() === 3,\n 'valtimo-widget-collection__container': amountOfColumns() === 4,\n }\"\n >\n @for (card of obs?.collectionWidgetCards; track card.key) {\n <div\n class=\"valtimo-widget-collection__card\"\n [ngClass]=\"{'valtimo-widget-collection__card--hidden': card.hidden}\"\n >\n <span class=\"valtimo-widget-collection__card-title\">{{ card.title }}</span>\n\n @for (field of card.fields; track field.key) {\n <div\n [ngClass]=\"{\n 'valtimo-widget-collection__full-width-input': field?.width === 'full',\n 'valtimo-widget-collection__half-width-input': field?.width === 'half',\n }\"\n >\n <cds-label class=\"valtimo-widget-collection__label\" [attr.title]=\"field?.title\">\n {{ field?.title }}\n\n <input\n [value]=\"field?.value\"\n [readonly]=\"true\"\n class=\"valtimo-widget-collection__card-input\"\n cdsText\n />\n </cds-label>\n </div>\n }\n </div>\n }\n </div>\n\n @if (!obs?.collectionWidgetCards?.length) {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noData' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n\n <cds-pagination-nav\n *ngIf=\"paginationModel() && (showPagination$ | async)\"\n class=\"valtimo-widget-collection__pagination\"\n [model]=\"paginationModel()\"\n (selectPage)=\"onSelectPage($event)\"\n >\n </cds-pagination-nav>\n</ng-container>\n", styles: [".valtimo-widget-collection{padding:24px}.valtimo-widget-collection .cds--label{overflow:hidden;text-overflow:ellipsis;width:100%}.valtimo-widget-collection__header{display:flex;align-items:center;justify-content:space-between}.valtimo-widget-collection__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.valtimo-widget-collection__container{display:flex;column-gap:16px}.valtimo-widget-collection,.valtimo-widget-collection__column{display:flex;flex-direction:column;width:100%;overflow:hidden}.valtimo-widget-collection__card{margin-top:16px;display:flex;flex-flow:row wrap;background-color:var(--cds-background);padding:16px;width:100%;gap:16px}.valtimo-widget-collection__card--hidden{visibility:hidden}.valtimo-widget-collection__card-title{color:var(--cds-text-primary);font-weight:500;font-size:14px;line-height:22px;font-style:italic;width:100%}.valtimo-widget-collection__card-input{background:transparent}.valtimo-widget-collection__full-width-input{width:100%}.valtimo-widget-collection__half-width-input{width:calc(50% - 16px);box-sizing:border-box}.valtimo-widget-collection__pagination{padding:8px 0;display:flex;justify-content:center}.valtimo-widget-collection__render-vertically,.valtimo-widget-collection__render-two-columns,.valtimo-widget-collection__render-three-columns{grid-gap:16px;align-items:stretch;overflow:hidden;text-overflow:ellipsis;width:100%}.valtimo-widget-collection__render-vertically{display:flex!important}.valtimo-widget-collection__render-two-columns{grid-template-columns:repeat(2,1fr)}.valtimo-widget-collection__render-three-columns{grid-template-columns:repeat(3,1fr)}\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"] }]
188
+ }], ctorParameters: () => [{ type: i1.DocumentService }, { type: i2.PermissionService }, { type: i3.ViewContentService }, { type: i0.ChangeDetectorRef }, { type: i4.DossierWidgetsApiService }, { type: i5.WidgetsService }], propDecorators: { class: [{
176
189
  type: HostBinding,
177
190
  args: ['class']
178
191
  }], _widgetCollectionRef: [{
@@ -189,4 +202,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
189
202
  }], widgetData: [{
190
203
  type: Input
191
204
  }] } });
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbGxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC90YWIvd2lkZ2V0cy9jb21wb25lbnRzL2NvbGxlY3Rpb24vd2lkZ2V0LWNvbGxlY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC90YWIvd2lkZ2V0cy9jb21wb25lbnRzL2NvbGxlY3Rpb24vd2lkZ2V0LWNvbGxlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsV0FBVyxFQUNYLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsV0FBVyxHQUNaLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNMLHdCQUF3QixHQU16QixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDakcsT0FBTyxFQUFDLGdCQUFnQixFQUFxQixNQUFNLHFCQUFxQixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFB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LDhCQUNYLGdCQUFnQixvUEFDaEIsZUFBZTs7NEZBR04seUJBQXlCO2tCQWhCckMsU0FBUzsrQkFDRSwyQkFBMkIsbUJBR3BCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsZ0JBQWdCO3dCQUNoQixlQUFlO3FCQUNoQjs4SkFHcUMsS0FBSztzQkFBMUMsV0FBVzt1QkFBQyxPQUFPO2dCQUNtQixvQkFBb0I7c0JBQTFELFNBQVM7dUJBQUMsa0JBQWtCO2dCQUVHLFVBQVU7c0JBQXpDLEtBQUs7dUJBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDO2dCQUNTLE1BQU07c0JBQXJDLEtBQUs7dUJBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDO2dCQUNILG1CQUFtQjtzQkFBdEMsS0FBSztnQkFjYyxVQUFVO3NCQUE3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBzaWduYWwsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBJbnB1dE1vZHVsZSxcbiAgUGFnaW5hdGlvbk1vZGVsLFxuICBQYWdpbmF0aW9uTW9kdWxlLFxuICBUaWxlc01vZHVsZSxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1xuICBDYXNlV2lkZ2V0RGlzcGxheVR5cGVLZXksXG4gIENvbGxlY3Rpb25DYXNlV2lkZ2V0LFxuICBDb2xsZWN0aW9uQ2FzZVdpZGdldENhcmREYXRhLFxuICBDb2xsZWN0aW9uQ2FzZVdpZGdldEZpZWxkLFxuICBDb2xsZWN0aW9uQ2FzZVdpZGdldFRpdGxlLFxuICBDb2xsZWN0aW9uV2lkZ2V0UmVzb2x2ZWRGaWVsZCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q2FyYm9uTGlzdE1vZHVsZSwgVmlld0NvbnRlbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7RG9zc2llcldpZGdldHNBcGlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWNvbGxlY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93aWRnZXQtY29sbGVjdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBQYWdpbmF0aW9uTW9kdWxlLFxuICAgIFRpbGVzTW9kdWxlLFxuICAgIENhcmJvbkxpc3RNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRDb2xsZWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIHB1YmxpYyByZWFkb25seSBjbGFzcyA9ICd2YWx0aW1vLXdpZGdldC1jb2xsZWN0aW9uJztcbiAgQFZpZXdDaGlsZCgnd2lkZ2V0Q29sbGVjdGlvbicpIHByaXZhdGUgX3dpZGdldENvbGxlY3Rpb25SZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KSBwdWJsaWMgZG9jdW1lbnRJZDogc3RyaW5nO1xuICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIHRhYktleTogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHdpZGdldENvbmZpZ3VyYXRpb24odmFsdWU6IENvbGxlY3Rpb25DYXNlV2lkZ2V0KSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMud2lkZ2V0Q29uZmlndXJhdGlvbiQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIHJlYWRvbmx5IHNob3dQYWdpbmF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxOdW1iZXJPZkVsZW1lbnRzU3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4obnVsbCk7XG5cbiAgcHJpdmF0ZSBnZXQgX2luaXRpYWxOdW1iZXJPZkVsZW1lbnRzJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9pbml0aWFsTnVtYmVyT2ZFbGVtZW50c1N1YmplY3QkLnBpcGUoXG4gICAgICBmaWx0ZXIobnVtYmVyT2ZFbGVtZW50cyA9PiBudW1iZXJPZkVsZW1lbnRzICE9PSBudWxsKVxuICAgICk7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHdpZGdldERhdGEodmFsdWU6IFBhZ2U8Q29sbGVjdGlvbkNhc2VXaWRnZXRDYXJkRGF0YT4gfCBudWxsKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5zaG93UGFnaW5hdGlvbiQubmV4dCh2YWx1ZS50b3RhbEVsZW1lbnRzID4gdmFsdWUuc2l6ZSk7XG4gICAgdGhpcy5faW5pdGlhbE51bWJlck9mRWxlbWVudHNTdWJqZWN0JC5uZXh0KHZhbHVlLm51bWJlck9mRWxlbWVudHMpO1xuICAgIHRoaXMuX3dpZGdldERhdGFTdWJqZWN0JC5uZXh0KHZhbHVlLmNvbnRlbnQpO1xuXG4gICAgdGhpcy5wYWdpbmF0aW9uTW9kZWwuc2V0KFxuICAgICAgdmFsdWUudG90YWxQYWdlcyA8IDBcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDoge1xuICAgICAgICAgICAgY3VycmVudFBhZ2U6IDEsXG4gICAgICAgICAgICB0b3RhbERhdGFMZW5ndGg6IE1hdGguY2VpbCh2YWx1ZS50b3RhbEVsZW1lbnRzIC8gdmFsdWUuc2l6ZSksXG4gICAgICAgICAgICBwYWdlTGVuZ3RoOiB2YWx1ZS5zaXplLFxuICAgICAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSB3aWRnZXRUaXRsZSA9IHNpZ25hbCgnLScpO1xuXG4gIHB1YmxpYyByZWFkb25seSB3aWRnZXRDb25maWd1cmF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29sbGVjdGlvbkNhc2VXaWRnZXQgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2luYXRpb25Nb2RlbCA9IHNpZ25hbDxQYWdpbmF0aW9uTW9kZWw+KG5ldyBQYWdpbmF0aW9uTW9kZWwoKSk7XG4gIHB1YmxpYyByZWFkb25seSBhbW91bnRPZkNvbHVtbnMgPSBzaWduYWwoMCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfd2lkZ2V0RGF0YVN1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2xsZWN0aW9uQ2FzZVdpZGdldENhcmREYXRhW10+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3F1ZXJ5UGFyYW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfd2lkZ2V0RGF0YSQ6IE9ic2VydmFibGU8Q29sbGVjdGlvbkNhc2VXaWRnZXRDYXJkRGF0YVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX3dpZGdldERhdGFTdWJqZWN0JCxcbiAgICB0aGlzLl9xdWVyeVBhcmFtcyQsXG4gICAgdGhpcy5faW5pdGlhbE51bWJlck9mRWxlbWVudHMkLFxuICAgIHRoaXMud2lkZ2V0Q29uZmlndXJhdGlvbiQsXG4gIF0pLnBpcGUoXG4gICAgc3dpdGNoTWFwKChbZGF0YSwgcXVlcnlQYXJhbXMsIGluaXRpYWxOdW1iZXJPZkVsZW1lbnRzLCB3aWRnZXRDb25maWd1cmF0aW9uXSkgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAhcXVlcnlQYXJhbXNcbiAgICAgICAgICA/IG9mKGRhdGEpXG4gICAgICAgICAgOiB0aGlzLndpZGdldEFwaVNlcnZpY2VcbiAgICAgICAgICAgICAgLmdldFdpZGdldERhdGEodGhpcy5kb2N1bWVudElkLCB0aGlzLnRhYktleSwgd2lkZ2V0Q29uZmlndXJhdGlvbi5rZXksIHF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgICAucGlwZShtYXAoKHJlczogUGFnZTxDb2xsZWN0aW9uQ2FzZVdpZGdldENhcmREYXRhPikgPT4gcmVzLmNvbnRlbnQpKSxcbiAgICAgICAgb2YoaW5pdGlhbE51bWJlck9mRWxlbWVudHMpLFxuICAgICAgXSlcbiAgICApLFxuICAgIGZpbHRlcigoW2l0ZW1zXSkgPT4gISFpdGVtcyksXG4gICAgbWFwKChbaXRlbXMsIGluaXRpYWxOdW1iZXJPZkVsZW1lbnRzXSkgPT4ge1xuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gaW5pdGlhbE51bWJlck9mRWxlbWVudHMpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByb3dzID0gbmV3IEFycmF5PG51bWJlcj4oaW5pdGlhbE51bWJlck9mRWxlbWVudHMpLmZpbGwobnVsbCk7XG5cbiAgICAgIHJldHVybiByb3dzLm1hcCgoXywgaW5kZXgpID0+IGl0ZW1zW2luZGV4XSB8fCB7Li4uaXRlbXNbMF0sIGhpZGRlbjogdHJ1ZX0pO1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbGxlY3Rpb25XaWRnZXRDYXJkcyQ6IE9ic2VydmFibGU8XG4gICAge3RpdGxlOiBzdHJpbmc7IGZpZWxkczogQ29sbGVjdGlvbldpZGdldFJlc29sdmVkRmllbGRbXTsga2V5OiBudW1iZXI7IGhpZGRlbjogYm9vbGVhbn1bXVxuICA+ID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRDb25maWd1cmF0aW9uJCwgdGhpcy5fd2lkZ2V0RGF0YSRdKS5waXBlKFxuICAgIGZpbHRlcigoW3dpZGdldENvbmZpZywgd2lkZ2V0RGF0YV0pID0+ICEhd2lkZ2V0Q29uZmlnICYmICEhd2lkZ2V0RGF0YSksXG4gICAgdGFwKChbd2lkZ2V0Q29uZmlnXSkgPT4gdGhpcy53aWRnZXRUaXRsZS5zZXQod2lkZ2V0Q29uZmlnLnRpdGxlKSksXG4gICAgbWFwKChbd2lkZ2V0Q29uZmlnLCB3aWRnZXREYXRhXSkgPT5cbiAgICAgIHdpZGdldERhdGEubWFwKChjYXJkRGF0YSwgaW5kZXgpID0+ICh7XG4gICAgICAgIGhpZGRlbjogY2FyZERhdGEuaGlkZGVuLFxuICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICB0aXRsZTogdGhpcy5nZXRDYXJkVGl0bGUoe1xuICAgICAgICAgIHZhbHVlOiBjYXJkRGF0YS50aXRsZSxcbiAgICAgICAgICBkaXNwbGF5UHJvcGVydGllczogd2lkZ2V0Q29uZmlnPy5wcm9wZXJ0aWVzPy50aXRsZT8uZGlzcGxheVByb3BlcnRpZXMsXG4gICAgICAgIH0pLFxuICAgICAgICBmaWVsZHM6IHdpZGdldENvbmZpZz8ucHJvcGVydGllcy5maWVsZHMucmVkdWNlKFxuICAgICAgICAgIChjYXJkRmllbGRzQWNjdW11bGF0b3IsIGN1cnJlbnRGaWVsZCkgPT4gW1xuICAgICAgICAgICAgLi4uY2FyZEZpZWxkc0FjY3VtdWxhdG9yLFxuICAgICAgICAgICAgdGhpcy5nZXRDYXJkRmllbGQoY3VycmVudEZpZWxkLCBjYXJkRGF0YSksXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbXVxuICAgICAgICApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgX29ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGVudFNlcnZpY2U6IFZpZXdDb250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSB3aWRnZXRBcGlTZXJ2aWNlOiBEb3NzaWVyV2lkZ2V0c0FwaVNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuV2lkdGhPYnNlcnZlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX29ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3RQYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3F1ZXJ5UGFyYW1zJC5uZXh0KGBwYWdlPSR7cGFnZSAtIDF9JnNpemU9JHt0aGlzLnBhZ2luYXRpb25Nb2RlbCgpLnBhZ2VMZW5ndGh9YCk7XG4gICAgdGhpcy5wYWdpbmF0aW9uTW9kZWwudXBkYXRlKChtb2RlbDogUGFnaW5hdGlvbk1vZGVsKSA9PiAoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICBjdXJyZW50UGFnZTogcGFnZSxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldENhcmRGaWVsZChcbiAgICBmaWVsZDogQ29sbGVjdGlvbkNhc2VXaWRnZXRGaWVsZCxcbiAgICBkYXRhOiBDb2xsZWN0aW9uQ2FzZVdpZGdldENhcmREYXRhXG4gICk6IENvbGxlY3Rpb25XaWRnZXRSZXNvbHZlZEZpZWxkIHtcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlID0gdGhpcy52aWV3Q29udGVudFNlcnZpY2UuZ2V0KGRhdGEuZmllbGRzW2ZpZWxkLmtleV0sIHtcbiAgICAgIC4uLmZpZWxkLmRpc3BsYXlQcm9wZXJ0aWVzLFxuICAgICAgdmlld1R5cGU6IGZpZWxkLmRpc3BsYXlQcm9wZXJ0aWVzPy50eXBlID8/IENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5URVhULFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgdGl0bGU6IGZpZWxkLnRpdGxlLFxuICAgICAgd2lkdGg6IGZpZWxkLndpZHRoLFxuICAgICAgdmFsdWU6IHJlc29sdmVkVmFsdWUgfHwgZGF0YS5maWVsZHNbZmllbGQua2V5XSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuV2lkdGhPYnNlcnZlcigpOiB2b2lkIHtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihldmVudCA9PiB7XG4gICAgICB0aGlzLm9ic2VydmVyTXV0YXRpb24oZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcy5fd2lkZ2V0Q29sbGVjdGlvblJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZXJNdXRhdGlvbihldmVudDogQXJyYXk8UmVzaXplT2JzZXJ2ZXJFbnRyeT4pOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50V2lkdGggPSBldmVudFswXT8uYm9yZGVyQm94U2l6ZVswXT8uaW5saW5lU2l6ZTtcblxuICAgIGlmICh0eXBlb2YgZWxlbWVudFdpZHRoID09PSAnbnVtYmVyJyAmJiBlbGVtZW50V2lkdGggIT09IDApIHtcbiAgICAgIGlmIChlbGVtZW50V2lkdGggPCA2NDApIHtcbiAgICAgICAgdGhpcy5hbW91bnRPZkNvbHVtbnMuc2V0KDEpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50V2lkdGggPiA2NDAgJiYgZWxlbWVudFdpZHRoIDw9IDc2OCkge1xuICAgICAgICB0aGlzLmFtb3VudE9mQ29sdW1ucy5zZXQoMik7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnRXaWR0aCA+IDc2OCAmJiBlbGVtZW50V2lkdGggPD0gMTA4MCkge1xuICAgICAgICB0aGlzLmFtb3VudE9mQ29sdW1ucy5zZXQoMyk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnRXaWR0aCA+IDEwODApIHtcbiAgICAgICAgdGhpcy5hbW91bnRPZkNvbHVtbnMuc2V0KDQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FyZFRpdGxlKGNvbGxlY3Rpb25DYXNlV2lkZ2V0VGl0bGU6IENvbGxlY3Rpb25DYXNlV2lkZ2V0VGl0bGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHdpZGdldFRpdGxlVmFsdWUgPSBjb2xsZWN0aW9uQ2FzZVdpZGdldFRpdGxlLnZhbHVlO1xuICAgIGNvbnN0IHdpZGdldFRpdGxlRGlzcGxheVByb3BlcnRpZXMgPSBjb2xsZWN0aW9uQ2FzZVdpZGdldFRpdGxlLmRpc3BsYXlQcm9wZXJ0aWVzO1xuXG4gICAgaWYgKCF3aWRnZXRUaXRsZURpc3BsYXlQcm9wZXJ0aWVzICYmIHdpZGdldFRpdGxlVmFsdWUpIHtcbiAgICAgIHJldHVybiB3aWRnZXRUaXRsZVZhbHVlO1xuICAgIH0gZWxzZSBpZiAod2lkZ2V0VGl0bGVEaXNwbGF5UHJvcGVydGllcyAmJiB3aWRnZXRUaXRsZVZhbHVlKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWRUaXRsZSA9IHRoaXMudmlld0NvbnRlbnRTZXJ2aWNlLmdldCh3aWRnZXRUaXRsZVZhbHVlLCB7XG4gICAgICAgIC4uLndpZGdldFRpdGxlRGlzcGxheVByb3BlcnRpZXMsXG4gICAgICAgIHZpZXdUeXBlOiB3aWRnZXRUaXRsZURpc3BsYXlQcm9wZXJ0aWVzLnR5cGUsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGNvbnZlcnRlZFRpdGxlKSByZXR1cm4gY29udmVydGVkVGl0bGU7XG4gICAgfVxuXG4gICAgcmV0dXJuICctJztcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48bmctY29udGFpbmVyXG4gICpuZ0lmPVwie1xuICAgIHdpZGdldENvbmZpZ3VyYXRpb246IHdpZGdldENvbmZpZ3VyYXRpb24kIHwgYXN5bmMsXG4gICAgY29sbGVjdGlvbldpZGdldENhcmRzOiBjb2xsZWN0aW9uV2lkZ2V0Q2FyZHMkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbj5cbiAgPHNwYW4gY2xhc3M9XCJ2YWx0aW1vLXdpZGdldC1jb2xsZWN0aW9uX190aXRsZVwiPnt7IHdpZGdldFRpdGxlKCkgfX08L3NwYW4+XG5cbiAgPGRpdlxuICAgICN3aWRnZXRDb2xsZWN0aW9uXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3ZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb25fX3JlbmRlci12ZXJ0aWNhbGx5JzogYW1vdW50T2ZDb2x1bW5zKCkgPT09IDEsXG4gICAgICAndmFsdGltby13aWRnZXQtY29sbGVjdGlvbl9fcmVuZGVyLXR3by1jb2x1bW5zJzogYW1vdW50T2ZDb2x1bW5zKCkgPT09IDIsXG4gICAgICAndmFsdGltby13aWRnZXQtY29sbGVjdGlvbl9fcmVuZGVyLXRocmVlLWNvbHVtbnMnOiBhbW91bnRPZkNvbHVtbnMoKSA9PT0gMyxcbiAgICAgICd2YWx0aW1vLXdpZGdldC1jb2xsZWN0aW9uX19jb250YWluZXInOiBhbW91bnRPZkNvbHVtbnMoKSA9PT0gNCxcbiAgICB9XCJcbiAgPlxuICAgIEBmb3IgKGNhcmQgb2Ygb2JzPy5jb2xsZWN0aW9uV2lkZ2V0Q2FyZHM7IHRyYWNrIGNhcmQua2V5KSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidmFsdGltby13aWRnZXQtY29sbGVjdGlvbl9fY2FyZFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsndmFsdGltby13aWRnZXQtY29sbGVjdGlvbl9fY2FyZC0taGlkZGVuJzogY2FyZC5oaWRkZW59XCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx0aW1vLXdpZGdldC1jb2xsZWN0aW9uX19jYXJkLXRpdGxlXCI+e3sgY2FyZC50aXRsZSB9fTwvc3Bhbj5cblxuICAgICAgICBAZm9yIChmaWVsZCBvZiBjYXJkLmZpZWxkczsgdHJhY2sgZmllbGQua2V5KSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAndmFsdGltby13aWRnZXQtY29sbGVjdGlvbl9fZnVsbC13aWR0aC1pbnB1dCc6IGZpZWxkPy53aWR0aCA9PT0gJ2Z1bGwnLFxuICAgICAgICAgICAgICAndmFsdGltby13aWRnZXQtY29sbGVjdGlvbl9faGFsZi13aWR0aC1pbnB1dCc6IGZpZWxkPy53aWR0aCA9PT0gJ2hhbGYnLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGNkcy1sYWJlbCBjbGFzcz1cInZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb25fX2xhYmVsXCIgW2F0dHIudGl0bGVdPVwiZmllbGQ/LnRpdGxlXCI+XG4gICAgICAgICAgICAgIHt7IGZpZWxkPy50aXRsZSB9fVxuXG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmaWVsZD8udmFsdWVcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb25fX2NhcmQtaW5wdXRcIlxuICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvY2RzLWxhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIEBpZiAoIW9icz8uY29sbGVjdGlvbldpZGdldENhcmRzPy5sZW5ndGgpIHtcbiAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICBbY29sbGFwc2VWZXJ0aWNhbGx5XT1cInRydWVcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb3NzaWVyLndpZGdldHMubm9EYXRhJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbc21hbGxQYWRkaW5nXT1cInRydWVcIlxuICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgfVxuXG4gIDxjZHMtcGFnaW5hdGlvbi1uYXZcbiAgICAqbmdJZj1cInBhZ2luYXRpb25Nb2RlbCgpICYmIChzaG93UGFnaW5hdGlvbiQgfCBhc3luYylcIlxuICAgIGNsYXNzPVwidmFsdGltby13aWRnZXQtY29sbGVjdGlvbl9fcGFnaW5hdGlvblwiXG4gICAgW21vZGVsXT1cInBhZ2luYXRpb25Nb2RlbCgpXCJcbiAgICAoc2VsZWN0UGFnZSk9XCJvblNlbGVjdFBhZ2UoJGV2ZW50KVwiXG4gID5cbiAgPC9jZHMtcGFnaW5hdGlvbi1uYXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbGxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC90YWIvd2lkZ2V0cy9jb21wb25lbnRzL2NvbGxlY3Rpb24vd2lkZ2V0LWNvbGxlY3Rpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC90YWIvd2lkZ2V0cy9jb21wb25lbnRzL2NvbGxlY3Rpb24vd2lkZ2V0LWNvbGxlY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsWUFBWSxFQUNaLFdBQVcsRUFDWCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFdBQVcsR0FDWixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFFTCx3QkFBd0IsR0FNekIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2pHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBcUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEVBQUMsZUFBZSxFQUFD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QU8sZ0JBQWdCLENBQUM7UUFDMUIsQ0FBQzthQUFNLElBQUksNEJBQTRCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUM1RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFO2dCQUNuRSxHQUFHLDRCQUE0QjtnQkFDL0IsUUFBUSxFQUFFLDRCQUE0QixDQUFDLElBQUk7YUFDNUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxjQUFjO2dCQUFFLE9BQU8sY0FBYyxDQUFDO1FBQzVDLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7K0dBL0xVLHlCQUF5QjttR0FBekIseUJBQXlCLHFaQ3pFdEMsb3BHQTJGQSx3eUVEM0JJLFlBQVkscVJBQ1osV0FBVyx5V0FDWCxnQkFBZ0IsOE5BQ2hCLFdBQVcsOEJBQ1gsZ0JBQWdCLG9QQUNoQixlQUFlLDJGQUNmLFlBQVk7OzRGQUdILHlCQUF5QjtrQkFqQnJDLFNBQVM7K0JBQ0UsMkJBQTJCLG1CQUdwQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZ0JBQWdCO3dCQUNoQixXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixZQUFZO3FCQUNiO3lQQUdxQyxLQUFLO3NCQUExQyxXQUFXO3VCQUFDLE9BQU87Z0JBQ21CLG9CQUFvQjtzQkFBMUQsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBRUcsVUFBVTtzQkFBekMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBQ1MsTUFBTTtzQkFBckMsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBQ0gsbUJBQW1CO3NCQUF0QyxLQUFLO2dCQWVjLFVBQVU7c0JBQTdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEJ1dHRvbk1vZHVsZSxcbiAgSW5wdXRNb2R1bGUsXG4gIFBhZ2luYXRpb25Nb2RlbCxcbiAgUGFnaW5hdGlvbk1vZHVsZSxcbiAgVGlsZXNNb2R1bGUsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtcbiAgQ2FzZVdpZGdldEFjdGlvbixcbiAgQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5LFxuICBDb2xsZWN0aW9uQ2FzZVdpZGdldCxcbiAgQ29sbGVjdGlvbkNhc2VXaWRnZXRDYXJkRGF0YSxcbiAgQ29sbGVjdGlvbkNhc2VXaWRnZXRGaWVsZCxcbiAgQ29sbGVjdGlvbkNhc2VXaWRnZXRUaXRsZSxcbiAgQ29sbGVjdGlvbldpZGdldFJlc29sdmVkRmllbGQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0NhcmJvbkxpc3RNb2R1bGUsIFZpZXdDb250ZW50U2VydmljZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1BhZ2V9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0Rvc3NpZXJXaWRnZXRzQXBpU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtXaWRnZXRQcm9jZXNzfSBmcm9tICcuLi93aWRnZXQtcHJvY2Vzcy93aWRnZXQtcHJvY2Vzcyc7XG5pbXBvcnQge0RvY3VtZW50U2VydmljZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtQZXJtaXNzaW9uU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vYWNjZXNzLWNvbnRyb2wnO1xuaW1wb3J0IHtXaWRnZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vd2lkZ2V0cy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby13aWRnZXQtY29sbGVjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtY29sbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dpZGdldC1jb2xsZWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIElucHV0TW9kdWxlLFxuICAgIFBhZ2luYXRpb25Nb2R1bGUsXG4gICAgVGlsZXNNb2R1bGUsXG4gICAgQ2FyYm9uTGlzdE1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRDb2xsZWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgV2lkZ2V0UHJvY2VzcyBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBwdWJsaWMgcmVhZG9ubHkgY2xhc3MgPSAndmFsdGltby13aWRnZXQtY29sbGVjdGlvbic7XG4gIEBWaWV3Q2hpbGQoJ3dpZGdldENvbGxlY3Rpb24nKSBwcml2YXRlIF93aWRnZXRDb2xsZWN0aW9uUmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIGRvY3VtZW50SWQ6IHN0cmluZztcbiAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIHB1YmxpYyB0YWJLZXk6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIHNldCB3aWRnZXRDb25maWd1cmF0aW9uKHZhbHVlOiBDb2xsZWN0aW9uQ2FzZVdpZGdldCkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLmJhc2VXaWRnZXRDb25maWd1cmF0aW9uID0gdmFsdWU7XG4gICAgdGhpcy53aWRnZXRDb25maWd1cmF0aW9uJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1BhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbE51bWJlck9mRWxlbWVudHNTdWJqZWN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihudWxsKTtcblxuICBwcml2YXRlIGdldCBfaW5pdGlhbE51bWJlck9mRWxlbWVudHMkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2luaXRpYWxOdW1iZXJPZkVsZW1lbnRzU3ViamVjdCQucGlwZShcbiAgICAgIGZpbHRlcihudW1iZXJPZkVsZW1lbnRzID0+IG51bWJlck9mRWxlbWVudHMgIT09IG51bGwpXG4gICAgKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgd2lkZ2V0RGF0YSh2YWx1ZTogUGFnZTxDb2xsZWN0aW9uQ2FzZVdpZGdldENhcmREYXRhPiB8IG51bGwpIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICB0aGlzLnNob3dQYWdpbmF0aW9uJC5uZXh0KHZhbHVlLnRvdGFsRWxlbWVudHMgPiB2YWx1ZS5zaXplKTtcbiAgICB0aGlzLl9pbml0aWFsTnVtYmVyT2ZFbGVtZW50c1N1YmplY3QkLm5leHQodmFsdWUubnVtYmVyT2ZFbGVtZW50cyk7XG4gICAgdGhpcy5fd2lkZ2V0RGF0YVN1YmplY3QkLm5leHQodmFsdWUuY29udGVudCk7XG5cbiAgICB0aGlzLnBhZ2luYXRpb25Nb2RlbC5zZXQoXG4gICAgICB2YWx1ZS50b3RhbFBhZ2VzIDwgMFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZTogMSxcbiAgICAgICAgICAgIHRvdGFsRGF0YUxlbmd0aDogTWF0aC5jZWlsKHZhbHVlLnRvdGFsRWxlbWVudHMgLyB2YWx1ZS5zaXplKSxcbiAgICAgICAgICAgIHBhZ2VMZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHdpZGdldFRpdGxlID0gc2lnbmFsKCctJyk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHdpZGdldENvbmZpZ3VyYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2xsZWN0aW9uQ2FzZVdpZGdldCB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnaW5hdGlvbk1vZGVsID0gc2lnbmFsPFBhZ2luYXRpb25Nb2RlbD4obmV3IFBhZ2luYXRpb25Nb2RlbCgpKTtcbiAgcHVibGljIHJlYWRvbmx5IGFtb3VudE9mQ29sdW1ucyA9IHNpZ25hbCgwKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF93aWRnZXREYXRhU3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbGxlY3Rpb25DYXNlV2lkZ2V0Q2FyZERhdGFbXT4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcXVlcnlQYXJhbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF93aWRnZXREYXRhJDogT2JzZXJ2YWJsZTxDb2xsZWN0aW9uQ2FzZVdpZGdldENhcmREYXRhW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fd2lkZ2V0RGF0YVN1YmplY3QkLFxuICAgIHRoaXMuX3F1ZXJ5UGFyYW1zJCxcbiAgICB0aGlzLl9pbml0aWFsTnVtYmVyT2ZFbGVtZW50cyQsXG4gICAgdGhpcy53aWRnZXRDb25maWd1cmF0aW9uJCxcbiAgXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtkYXRhLCBxdWVyeVBhcmFtcywgaW5pdGlhbE51bWJlck9mRWxlbWVudHMsIHdpZGdldENvbmZpZ3VyYXRpb25dKSA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICFxdWVyeVBhcmFtc1xuICAgICAgICAgID8gb2YoZGF0YSlcbiAgICAgICAgICA6IHRoaXMud2lkZ2V0QXBpU2VydmljZVxuICAgICAgICAgICAgICAuZ2V0V2lkZ2V0RGF0YSh0aGlzLmRvY3VtZW50SWQsIHRoaXMudGFiS2V5LCB3aWRnZXRDb25maWd1cmF0aW9uLmtleSwgcXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAgIC5waXBlKG1hcCgocmVzOiBQYWdlPENvbGxlY3Rpb25DYXNlV2lkZ2V0Q2FyZERhdGE+KSA9PiByZXMuY29udGVudCkpLFxuICAgICAgICBvZihpbml0aWFsTnVtYmVyT2ZFbGVtZW50cyksXG4gICAgICBdKVxuICAgICksXG4gICAgZmlsdGVyKChbaXRlbXNdKSA9PiAhIWl0ZW1zKSxcbiAgICBtYXAoKFtpdGVtcywgaW5pdGlhbE51bWJlck9mRWxlbWVudHNdKSA9PiB7XG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSBpbml0aWFsTnVtYmVyT2ZFbGVtZW50cykge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvd3MgPSBuZXcgQXJyYXk8bnVtYmVyPihpbml0aWFsTnVtYmVyT2ZFbGVtZW50cykuZmlsbChudWxsKTtcblxuICAgICAgcmV0dXJuIHJvd3MubWFwKChfLCBpbmRleCkgPT4gaXRlbXNbaW5kZXhdIHx8IHsuLi5pdGVtc1swXSwgaGlkZGVuOiB0cnVlfSk7XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgY29sbGVjdGlvbldpZGdldENhcmRzJDogT2JzZXJ2YWJsZTxcbiAgICB7dGl0bGU6IHN0cmluZzsgZmllbGRzOiBDb2xsZWN0aW9uV2lkZ2V0UmVzb2x2ZWRGaWVsZFtdOyBrZXk6IG51bWJlcjsgaGlkZGVuOiBib29sZWFufVtdXG4gID4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldENvbmZpZ3VyYXRpb24kLCB0aGlzLl93aWRnZXREYXRhJF0pLnBpcGUoXG4gICAgZmlsdGVyKChbd2lkZ2V0Q29uZmlnLCB3aWRnZXREYXRhXSkgPT4gISF3aWRnZXRDb25maWcgJiYgISF3aWRnZXREYXRhKSxcbiAgICB0YXAoKFt3aWRnZXRDb25maWddKSA9PiB0aGlzLndpZGdldFRpdGxlLnNldCh3aWRnZXRDb25maWcudGl0bGUpKSxcbiAgICBtYXAoKFt3aWRnZXRDb25maWcsIHdpZGdldERhdGFdKSA9PlxuICAgICAgd2lkZ2V0RGF0YS5tYXAoKGNhcmREYXRhLCBpbmRleCkgPT4gKHtcbiAgICAgICAgaGlkZGVuOiBjYXJkRGF0YS5oaWRkZW4sXG4gICAgICAgIGtleTogaW5kZXgsXG4gICAgICAgIHRpdGxlOiB0aGlzLmdldENhcmRUaXRsZSh7XG4gICAgICAgICAgdmFsdWU6IGNhcmREYXRhLnRpdGxlLFxuICAgICAgICAgIGRpc3BsYXlQcm9wZXJ0aWVzOiB3aWRnZXRDb25maWc/LnByb3BlcnRpZXM/LnRpdGxlPy5kaXNwbGF5UHJvcGVydGllcyxcbiAgICAgICAgfSksXG4gICAgICAgIGZpZWxkczogd2lkZ2V0Q29uZmlnPy5wcm9wZXJ0aWVzLmZpZWxkcy5yZWR1Y2UoXG4gICAgICAgICAgKGNhcmRGaWVsZHNBY2N1bXVsYXRvciwgY3VycmVudEZpZWxkKSA9PiBbXG4gICAgICAgICAgICAuLi5jYXJkRmllbGRzQWNjdW11bGF0b3IsXG4gICAgICAgICAgICB0aGlzLmdldENhcmRGaWVsZChjdXJyZW50RmllbGQsIGNhcmREYXRhKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIFtdXG4gICAgICAgICksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZXIhOiBSZXNpemVPYnNlcnZlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250ZW50U2VydmljZTogVmlld0NvbnRlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpZGdldEFwaVNlcnZpY2U6IERvc3NpZXJXaWRnZXRzQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpZGdldHNTZXJ2aWNlOiBXaWRnZXRzU2VydmljZVxuICApIHtcbiAgICBzdXBlcihkb2N1bWVudFNlcnZpY2UsIHBlcm1pc3Npb25TZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuV2lkdGhPYnNlcnZlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX29ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3RQYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3F1ZXJ5UGFyYW1zJC5uZXh0KGBwYWdlPSR7cGFnZSAtIDF9JnNpemU9JHt0aGlzLnBhZ2luYXRpb25Nb2RlbCgpLnBhZ2VMZW5ndGh9YCk7XG4gICAgdGhpcy5wYWdpbmF0aW9uTW9kZWwudXBkYXRlKChtb2RlbDogUGFnaW5hdGlvbk1vZGVsKSA9PiAoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICBjdXJyZW50UGFnZTogcGFnZSxcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgb25Qcm9jZXNzU3RhcnRDbGljayhwcm9jZXNzOiBDYXNlV2lkZ2V0QWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy53aWRnZXRzU2VydmljZS5zdGFydFByb2Nlc3MocHJvY2Vzcy5wcm9jZXNzRGVmaW5pdGlvbktleSk7XG4gIH1cblxuICBwcml2YXRlIGdldENhcmRGaWVsZChcbiAgICBmaWVsZDogQ29sbGVjdGlvbkNhc2VXaWRnZXRGaWVsZCxcbiAgICBkYXRhOiBDb2xsZWN0aW9uQ2FzZVdpZGdldENhcmREYXRhXG4gICk6IENvbGxlY3Rpb25XaWRnZXRSZXNvbHZlZEZpZWxkIHtcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlID0gdGhpcy52aWV3Q29udGVudFNlcnZpY2UuZ2V0KGRhdGEuZmllbGRzW2ZpZWxkLmtleV0sIHtcbiAgICAgIC4uLmZpZWxkLmRpc3BsYXlQcm9wZXJ0aWVzLFxuICAgICAgdmlld1R5cGU6IGZpZWxkLmRpc3BsYXlQcm9wZXJ0aWVzPy50eXBlID8/IENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5URVhULFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgdGl0bGU6IGZpZWxkLnRpdGxlLFxuICAgICAgd2lkdGg6IGZpZWxkLndpZHRoLFxuICAgICAgdmFsdWU6IHJlc29sdmVkVmFsdWUgfHwgZGF0YS5maWVsZHNbZmllbGQua2V5XSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuV2lkdGhPYnNlcnZlcigpOiB2b2lkIHtcbiAgICB0aGlzLl9vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihldmVudCA9PiB7XG4gICAgICB0aGlzLm9ic2VydmVyTXV0YXRpb24oZXZlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcy5fd2lkZ2V0Q29sbGVjdGlvblJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZXJNdXRhdGlvbihldmVudDogQXJyYXk8UmVzaXplT2JzZXJ2ZXJFbnRyeT4pOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50V2lkdGggPSBldmVudFswXT8uYm9yZGVyQm94U2l6ZVswXT8uaW5saW5lU2l6ZTtcblxuICAgIGlmICh0eXBlb2YgZWxlbWVudFdpZHRoID09PSAnbnVtYmVyJyAmJiBlbGVtZW50V2lkdGggIT09IDApIHtcbiAgICAgIGlmIChlbGVtZW50V2lkdGggPCA2NDApIHtcbiAgICAgICAgdGhpcy5hbW91bnRPZkNvbHVtbnMuc2V0KDEpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50V2lkdGggPiA2NDAgJiYgZWxlbWVudFdpZHRoIDw9IDc2OCkge1xuICAgICAgICB0aGlzLmFtb3VudE9mQ29sdW1ucy5zZXQoMik7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnRXaWR0aCA+IDc2OCAmJiBlbGVtZW50V2lkdGggPD0gMTA4MCkge1xuICAgICAgICB0aGlzLmFtb3VudE9mQ29sdW1ucy5zZXQoMyk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnRXaWR0aCA+IDEwODApIHtcbiAgICAgICAgdGhpcy5hbW91bnRPZkNvbHVtbnMuc2V0KDQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FyZFRpdGxlKGNvbGxlY3Rpb25DYXNlV2lkZ2V0VGl0bGU6IENvbGxlY3Rpb25DYXNlV2lkZ2V0VGl0bGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHdpZGdldFRpdGxlVmFsdWUgPSBjb2xsZWN0aW9uQ2FzZVdpZGdldFRpdGxlLnZhbHVlO1xuICAgIGNvbnN0IHdpZGdldFRpdGxlRGlzcGxheVByb3BlcnRpZXMgPSBjb2xsZWN0aW9uQ2FzZVdpZGdldFRpdGxlLmRpc3BsYXlQcm9wZXJ0aWVzO1xuXG4gICAgaWYgKCF3aWRnZXRUaXRsZURpc3BsYXlQcm9wZXJ0aWVzICYmIHdpZGdldFRpdGxlVmFsdWUpIHtcbiAgICAgIHJldHVybiB3aWRnZXRUaXRsZVZhbHVlO1xuICAgIH0gZWxzZSBpZiAod2lkZ2V0VGl0bGVEaXNwbGF5UHJvcGVydGllcyAmJiB3aWRnZXRUaXRsZVZhbHVlKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWRUaXRsZSA9IHRoaXMudmlld0NvbnRlbnRTZXJ2aWNlLmdldCh3aWRnZXRUaXRsZVZhbHVlLCB7XG4gICAgICAgIC4uLndpZGdldFRpdGxlRGlzcGxheVByb3BlcnRpZXMsXG4gICAgICAgIHZpZXdUeXBlOiB3aWRnZXRUaXRsZURpc3BsYXlQcm9wZXJ0aWVzLnR5cGUsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGNvbnZlcnRlZFRpdGxlKSByZXR1cm4gY29udmVydGVkVGl0bGU7XG4gICAgfVxuXG4gICAgcmV0dXJuICctJztcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48bmctY29udGFpbmVyXG4gICpuZ0lmPVwie1xuICAgIHdpZGdldENvbmZpZ3VyYXRpb246IHdpZGdldENvbmZpZ3VyYXRpb24kIHwgYXN5bmMsXG4gICAgY29sbGVjdGlvbldpZGdldENhcmRzOiBjb2xsZWN0aW9uV2lkZ2V0Q2FyZHMkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJ2YWx0aW1vLXdpZGdldC1jb2xsZWN0aW9uX19oZWFkZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cInZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb25fX3RpdGxlXCI+e3sgd2lkZ2V0VGl0bGUoKSB9fTwvc3Bhbj5cblxuICAgIEBpZiAob2JzLndpZGdldENvbmZpZ3VyYXRpb24/LmFjdGlvbnM/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cImNhbkNyZWF0ZUNhbXVuZGFFeGVjdXRpb24kIHwgYXN5bmNcIlxuICAgICAgICBjZHNCdXR0b249XCJnaG9zdFwiXG4gICAgICAgIChjbGljayk9XCJvblByb2Nlc3NTdGFydENsaWNrKG9icy53aWRnZXRDb25maWd1cmF0aW9uPy5hY3Rpb25zWzBdKVwiXG4gICAgICA+XG4gICAgICAgIHt7IG9icy53aWRnZXRDb25maWd1cmF0aW9uPy5hY3Rpb25zWzBdLm5hbWUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgPC9zZWN0aW9uPlxuXG4gIDxkaXZcbiAgICAjd2lkZ2V0Q29sbGVjdGlvblxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICd2YWx0aW1vLXdpZGdldC1jb2xsZWN0aW9uX19yZW5kZXItdmVydGljYWxseSc6IGFtb3VudE9mQ29sdW1ucygpID09PSAxLFxuICAgICAgJ3ZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb25fX3JlbmRlci10d28tY29sdW1ucyc6IGFtb3VudE9mQ29sdW1ucygpID09PSAyLFxuICAgICAgJ3ZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb25fX3JlbmRlci10aHJlZS1jb2x1bW5zJzogYW1vdW50T2ZDb2x1bW5zKCkgPT09IDMsXG4gICAgICAndmFsdGltby13aWRnZXQtY29sbGVjdGlvbl9fY29udGFpbmVyJzogYW1vdW50T2ZDb2x1bW5zKCkgPT09IDQsXG4gICAgfVwiXG4gID5cbiAgICBAZm9yIChjYXJkIG9mIG9icz8uY29sbGVjdGlvbldpZGdldENhcmRzOyB0cmFjayBjYXJkLmtleSkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb25fX2NhcmRcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J3ZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb25fX2NhcmQtLWhpZGRlbic6IGNhcmQuaGlkZGVufVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdGltby13aWRnZXQtY29sbGVjdGlvbl9fY2FyZC10aXRsZVwiPnt7IGNhcmQudGl0bGUgfX08L3NwYW4+XG5cbiAgICAgICAgQGZvciAoZmllbGQgb2YgY2FyZC5maWVsZHM7IHRyYWNrIGZpZWxkLmtleSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3ZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb25fX2Z1bGwtd2lkdGgtaW5wdXQnOiBmaWVsZD8ud2lkdGggPT09ICdmdWxsJyxcbiAgICAgICAgICAgICAgJ3ZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb25fX2hhbGYtd2lkdGgtaW5wdXQnOiBmaWVsZD8ud2lkdGggPT09ICdoYWxmJyxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxjZHMtbGFiZWwgY2xhc3M9XCJ2YWx0aW1vLXdpZGdldC1jb2xsZWN0aW9uX19sYWJlbFwiIFthdHRyLnRpdGxlXT1cImZpZWxkPy50aXRsZVwiPlxuICAgICAgICAgICAgICB7eyBmaWVsZD8udGl0bGUgfX1cblxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmllbGQ/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx0aW1vLXdpZGdldC1jb2xsZWN0aW9uX19jYXJkLWlucHV0XCJcbiAgICAgICAgICAgICAgICBjZHNUZXh0XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICBAaWYgKCFvYnM/LmNvbGxlY3Rpb25XaWRnZXRDYXJkcz8ubGVuZ3RoKSB7XG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW2NvbGxhcHNlVmVydGljYWxseV09XCJ0cnVlXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9zc2llci53aWRnZXRzLm5vRGF0YScgfCB0cmFuc2xhdGVcIlxuICAgICAgW3NtYWxsUGFkZGluZ109XCJ0cnVlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIH1cblxuICA8Y2RzLXBhZ2luYXRpb24tbmF2XG4gICAgKm5nSWY9XCJwYWdpbmF0aW9uTW9kZWwoKSAmJiAoc2hvd1BhZ2luYXRpb24kIHwgYXN5bmMpXCJcbiAgICBjbGFzcz1cInZhbHRpbW8td2lkZ2V0LWNvbGxlY3Rpb25fX3BhZ2luYXRpb25cIlxuICAgIFttb2RlbF09XCJwYWdpbmF0aW9uTW9kZWwoKVwiXG4gICAgKHNlbGVjdFBhZ2UpPVwib25TZWxlY3RQYWdlKCRldmVudClcIlxuICA+XG4gIDwvY2RzLXBhZ2luYXRpb24tbmF2PlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -19,21 +19,33 @@ import { CUSTOM_CASE_WIDGET_TOKEN } from '../../../../../../constants';
19
19
  import { BehaviorSubject, combineLatest, filter, Subscription } from 'rxjs';
20
20
  import { CarbonListModule } from '@valtimo/components';
21
21
  import { TranslateModule } from '@ngx-translate/core';
22
+ import { WidgetProcess } from '../widget-process/widget-process';
23
+ import { ButtonModule } from 'carbon-components-angular';
22
24
  import * as i0 from "@angular/core";
23
- import * as i1 from "@angular/common";
24
- import * as i2 from "@valtimo/components";
25
- import * as i3 from "@ngx-translate/core";
26
- export class WidgetCustomComponent {
25
+ import * as i1 from "../../widgets.service";
26
+ import * as i2 from "@valtimo/document";
27
+ import * as i3 from "@valtimo/access-control";
28
+ import * as i4 from "@angular/common";
29
+ import * as i5 from "@valtimo/components";
30
+ import * as i6 from "@ngx-translate/core";
31
+ import * as i7 from "carbon-components-angular";
32
+ export class WidgetCustomComponent extends WidgetProcess {
27
33
  set widgetConfig(value) {
28
- if (value)
29
- this._widgetConfigSubject$.next(value);
34
+ if (!value)
35
+ return;
36
+ this.baseWidgetConfiguration = value;
37
+ this._widgetConfigSubject$.next(value);
30
38
  }
31
39
  get widgetConfig$() {
32
40
  return this._widgetConfigSubject$.pipe(filter(config => config !== null));
33
41
  }
34
- constructor(customCaseWidgetConfig, cdr) {
42
+ constructor(customCaseWidgetConfig, cdr, widgetsService, documentService, permissionService) {
43
+ super(documentService, permissionService);
35
44
  this.customCaseWidgetConfig = customCaseWidgetConfig;
36
45
  this.cdr = cdr;
46
+ this.widgetsService = widgetsService;
47
+ this.documentService = documentService;
48
+ this.permissionService = permissionService;
37
49
  this._customCaseWidgetConfig$ = new BehaviorSubject({});
38
50
  this._widgetConfigSubject$ = new BehaviorSubject(null);
39
51
  this.noCustomComponentAvailable = signal(false);
@@ -47,6 +59,9 @@ export class WidgetCustomComponent {
47
59
  ngOnDestroy() {
48
60
  this._subscriptions.unsubscribe();
49
61
  }
62
+ onProcessStartClick(process) {
63
+ this.widgetsService.startProcess(process.processDefinitionKey);
64
+ }
50
65
  openCustomWidgetSubscription() {
51
66
  this._subscriptions.add(combineLatest([this.widgetConfig$, this._customCaseWidgetConfig$]).subscribe(([widgetConfig, customCaseWidgetConfig]) => {
52
67
  const customWidgetComponentKey = widgetConfig?.properties?.componentKey;
@@ -60,21 +75,21 @@ export class WidgetCustomComponent {
60
75
  this.cdr.detectChanges();
61
76
  }));
62
77
  }
63
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetCustomComponent, deps: [{ token: CUSTOM_CASE_WIDGET_TOKEN, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
64
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: WidgetCustomComponent, isStandalone: true, selector: "valtimo-widget-custom", inputs: { widgetConfig: "widgetConfig" }, viewQueries: [{ propertyName: "_customWidgetContainerRef", first: true, predicate: ["customWidgetContainer"], descendants: true, read: ViewContainerRef }], 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\n<div class=\"custom-widget\">\n <h4 class=\"custom-widget__title\">{{ (widgetConfig$ | async)?.title || '-' }}</h4>\n\n <div class=\"custom-widget__content\">\n <ng-template #customWidgetContainer></ng-template>\n\n @if (noCustomComponentAvailable()) {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noCustomComponentDescription' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n </div>\n</div>\n", styles: [".custom-widget{padding:24px}.custom-widget__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}\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: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i2.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
78
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetCustomComponent, deps: [{ token: CUSTOM_CASE_WIDGET_TOKEN, optional: true }, { token: i0.ChangeDetectorRef }, { token: i1.WidgetsService }, { token: i2.DocumentService }, { token: i3.PermissionService }], target: i0.ɵɵFactoryTarget.Component }); }
79
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: WidgetCustomComponent, isStandalone: true, selector: "valtimo-widget-custom", inputs: { widgetConfig: "widgetConfig" }, viewQueries: [{ propertyName: "_customWidgetContainerRef", first: true, predicate: ["customWidgetContainer"], descendants: true, read: ViewContainerRef }], usesInheritance: 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\n<div *ngIf=\"{widgetConfig: widgetConfig$ | async} as obs\" class=\"custom-widget\">\n <section class=\"custom-widget__header\">\n <h4 class=\"custom-widget__title\">{{ obs.widgetConfig$?.title || '-' }}</h4>\n\n @if (obs.widgetConfig?.actions?.length === 1) {\n <button\n *ngIf=\"canCreateCamundaExecution$ | async\"\n cdsButton=\"ghost\"\n (click)=\"onProcessStartClick(obs.widgetConfig?.actions[0])\"\n >\n {{ obs.widgetConfig?.actions[0].name }}\n </button>\n }\n </section>\n\n <div class=\"custom-widget__content\">\n <ng-template #customWidgetContainer></ng-template>\n\n @if (noCustomComponentAvailable()) {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noCustomComponentDescription' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n </div>\n</div>\n", styles: [".custom-widget{padding:24px}.custom-widget__header{display:flex;align-items:center;justify-content:space-between}.custom-widget__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i5.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i7.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
65
80
  }
66
81
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WidgetCustomComponent, decorators: [{
67
82
  type: Component,
68
- args: [{ selector: 'valtimo-widget-custom', standalone: true, imports: [CommonModule, CarbonListModule, TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, 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\n<div class=\"custom-widget\">\n <h4 class=\"custom-widget__title\">{{ (widgetConfig$ | async)?.title || '-' }}</h4>\n\n <div class=\"custom-widget__content\">\n <ng-template #customWidgetContainer></ng-template>\n\n @if (noCustomComponentAvailable()) {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noCustomComponentDescription' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n </div>\n</div>\n", styles: [".custom-widget{padding:24px}.custom-widget__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}\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"] }]
83
+ args: [{ selector: 'valtimo-widget-custom', standalone: true, imports: [CommonModule, CarbonListModule, TranslateModule, ButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, 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\n<div *ngIf=\"{widgetConfig: widgetConfig$ | async} as obs\" class=\"custom-widget\">\n <section class=\"custom-widget__header\">\n <h4 class=\"custom-widget__title\">{{ obs.widgetConfig$?.title || '-' }}</h4>\n\n @if (obs.widgetConfig?.actions?.length === 1) {\n <button\n *ngIf=\"canCreateCamundaExecution$ | async\"\n cdsButton=\"ghost\"\n (click)=\"onProcessStartClick(obs.widgetConfig?.actions[0])\"\n >\n {{ obs.widgetConfig?.actions[0].name }}\n </button>\n }\n </section>\n\n <div class=\"custom-widget__content\">\n <ng-template #customWidgetContainer></ng-template>\n\n @if (noCustomComponentAvailable()) {\n <valtimo-no-results\n [collapseVertically]=\"true\"\n [description]=\"'dossier.widgets.noCustomComponentDescription' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n }\n </div>\n</div>\n", styles: [".custom-widget{padding:24px}.custom-widget__header{display:flex;align-items:center;justify-content:space-between}.custom-widget__title{color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}\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"] }]
69
84
  }], ctorParameters: () => [{ type: undefined, decorators: [{
70
85
  type: Optional
71
86
  }, {
72
87
  type: Inject,
73
88
  args: [CUSTOM_CASE_WIDGET_TOKEN]
74
- }] }, { type: i0.ChangeDetectorRef }], propDecorators: { _customWidgetContainerRef: [{
89
+ }] }, { type: i0.ChangeDetectorRef }, { type: i1.WidgetsService }, { type: i2.DocumentService }, { type: i3.PermissionService }], propDecorators: { _customWidgetContainerRef: [{
75
90
  type: ViewChild,
76
91
  args: ['customWidgetContainer', { read: ViewContainerRef }]
77
92
  }], widgetConfig: [{
78
93
  type: Input
79
94
  }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWN1c3RvbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItZGV0YWlsL3RhYi93aWRnZXRzL2NvbXBvbmVudHMvY3VzdG9tL3dpZGdldC1jdXN0b20uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC90YWIvd2lkZ2V0cy9jb21wb25lbnRzL2N1c3RvbS93aWRnZXQtY3VzdG9tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBYyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDOzs7OztBQVVwRCxNQUFNLE9BQU8scUJBQXFCO0lBSWhDLElBQW9CLFlBQVksQ0FBQyxLQUF1QjtRQUN0RCxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFNRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFNRCxZQUdtQixzQkFBOEMsRUFDOUMsR0FBc0I7UUFEdEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWhCeEIsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBQThCLEVBQUUsQ0FBQyxDQUFDO1FBRWhGLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUEwQixJQUFJLENBQUMsQ0FBQztRQU01RSwrQkFBMEIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBUW5ELElBQUksc0JBQXNCO1lBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVPLDRCQUE0QjtRQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDckIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDMUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLEVBQUU7WUFDekMsTUFBTSx3QkFBd0IsR0FBRyxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQztZQUN4RSxNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBRXpFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUMsT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRXJGLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FDRixDQUNGLENBQUM7SUFDSixDQUFDOytHQXhEVSxxQkFBcUIsa0JBc0J0Qix3QkFBd0I7bUdBdEJ2QixxQkFBcUIsME9BQ1csZ0JBQWdCLDZCQzdDN0Qsd29DQStCQSx5ekJEVVksWUFBWSxtRkFBRSxnQkFBZ0Isb1BBQUUsZUFBZTs7NEZBRzlDLHFCQUFxQjtrQkFSakMsU0FBUzsrQkFDRSx1QkFBdUIsY0FHckIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxtQkFDekMsdUJBQXVCLENBQUMsTUFBTTs7MEJBdUI1QyxRQUFROzswQkFDUixNQUFNOzJCQUFDLHdCQUF3Qjt5RUFwQmpCLHlCQUF5QjtzQkFEekMsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBQztnQkFHeEMsWUFBWTtzQkFBL0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBzaWduYWwsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q3VzdG9tQ2FzZVdpZGdldCwgQ3VzdG9tQ2FzZVdpZGdldENvbmZpZ30gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7Q1VTVE9NX0NBU0VfV0lER0VUX1RPS0VOfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q2FyYm9uTGlzdE1vZHVsZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8td2lkZ2V0LWN1c3RvbScsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtY3VzdG9tLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd2lkZ2V0LWN1c3RvbS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDYXJib25MaXN0TW9kdWxlLCBUcmFuc2xhdGVNb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0Q3VzdG9tQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnY3VzdG9tV2lkZ2V0Q29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICBwcml2YXRlIHJlYWRvbmx5IF9jdXN0b21XaWRnZXRDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgQElucHV0KCkgcHVibGljIHNldCB3aWRnZXRDb25maWcodmFsdWU6IEN1c3RvbUNhc2VXaWRnZXQpIHtcbiAgICBpZiAodmFsdWUpIHRoaXMuX3dpZGdldENvbmZpZ1N1YmplY3QkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY3VzdG9tQ2FzZVdpZGdldENvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEN1c3RvbUNhc2VXaWRnZXRDb25maWcgfCB7fT4oe30pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpZGdldENvbmZpZ1N1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDdXN0b21DYXNlV2lkZ2V0IHwgbnVsbD4obnVsbCk7XG5cbiAgcHVibGljIGdldCB3aWRnZXRDb25maWckKCk6IE9ic2VydmFibGU8Q3VzdG9tQ2FzZVdpZGdldD4ge1xuICAgIHJldHVybiB0aGlzLl93aWRnZXRDb25maWdTdWJqZWN0JC5waXBlKGZpbHRlcihjb25maWcgPT4gY29uZmlnICE9PSBudWxsKSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgbm9DdXN0b21Db21wb25lbnRBdmFpbGFibGUgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KENVU1RPTV9DQVNFX1dJREdFVF9UT0tFTilcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbUNhc2VXaWRnZXRDb25maWc6IEN1c3RvbUNhc2VXaWRnZXRDb25maWcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIGlmIChjdXN0b21DYXNlV2lkZ2V0Q29uZmlnKSB0aGlzLl9jdXN0b21DYXNlV2lkZ2V0Q29uZmlnJC5uZXh0KGN1c3RvbUNhc2VXaWRnZXRDb25maWcpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5DdXN0b21XaWRnZXRTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5DdXN0b21XaWRnZXRTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldENvbmZpZyQsIHRoaXMuX2N1c3RvbUNhc2VXaWRnZXRDb25maWckXSkuc3Vic2NyaWJlKFxuICAgICAgICAoW3dpZGdldENvbmZpZywgY3VzdG9tQ2FzZVdpZGdldENvbmZpZ10pID0+IHtcbiAgICAgICAgICBjb25zdCBjdXN0b21XaWRnZXRDb21wb25lbnRLZXkgPSB3aWRnZXRDb25maWc/LnByb3BlcnRpZXM/LmNvbXBvbmVudEtleTtcbiAgICAgICAgICBjb25zdCBjdXN0b21Db21wb25lbnQgPSBjdXN0b21DYXNlV2lkZ2V0Q29uZmlnW2N1c3RvbVdpZGdldENvbXBvbmVudEtleV07XG5cbiAgICAgICAgICBpZiAoIWN1c3RvbUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5ub0N1c3RvbUNvbXBvbmVudEF2YWlsYWJsZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5fY3VzdG9tV2lkZ2V0Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjdXN0b21Db21wb25lbnQpO1xuXG4gICAgICAgICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXYgY2xhc3M9XCJjdXN0b20td2lkZ2V0XCI+XG4gIDxoNCBjbGFzcz1cImN1c3RvbS13aWRnZXRfX3RpdGxlXCI+e3sgKHdpZGdldENvbmZpZyQgfCBhc3luYyk/LnRpdGxlIHx8ICctJyB9fTwvaDQ+XG5cbiAgPGRpdiBjbGFzcz1cImN1c3RvbS13aWRnZXRfX2NvbnRlbnRcIj5cbiAgICA8bmctdGVtcGxhdGUgI2N1c3RvbVdpZGdldENvbnRhaW5lcj48L25nLXRlbXBsYXRlPlxuXG4gICAgQGlmIChub0N1c3RvbUNvbXBvbmVudEF2YWlsYWJsZSgpKSB7XG4gICAgICA8dmFsdGltby1uby1yZXN1bHRzXG4gICAgICAgIFtjb2xsYXBzZVZlcnRpY2FsbHldPVwidHJ1ZVwiXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9zc2llci53aWRnZXRzLm5vQ3VzdG9tQ29tcG9uZW50RGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3NtYWxsUGFkZGluZ109XCJ0cnVlXCJcbiAgICAgID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWN1c3RvbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItZGV0YWlsL3RhYi93aWRnZXRzL2NvbXBvbmVudHMvY3VzdG9tL3dpZGdldC1jdXN0b20uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyL3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLWRldGFpbC90YWIvd2lkZ2V0cy9jb21wb25lbnRzL2N1c3RvbS93aWRnZXQtY3VzdG9tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBYyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUkvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7OztBQVV2RCxNQUFNLE9BQU8s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Z0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLG1CQUN2RCx1QkFBdUIsQ0FBQyxNQUFNOzswQkF5QjVDLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsd0JBQXdCO29LQXRCakIseUJBQXlCO3NCQUR6QyxTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFDO2dCQUd4QyxZQUFZO3NCQUEvQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIHNpZ25hbCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDYXNlV2lkZ2V0QWN0aW9uLCBDdXN0b21DYXNlV2lkZ2V0LCBDdXN0b21DYXNlV2lkZ2V0Q29uZmlnfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtDVVNUT01fQ0FTRV9XSURHRVRfVE9LRU59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZmlsdGVyLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDYXJib25MaXN0TW9kdWxlfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7V2lkZ2V0UHJvY2Vzc30gZnJvbSAnLi4vd2lkZ2V0LXByb2Nlc3Mvd2lkZ2V0LXByb2Nlc3MnO1xuaW1wb3J0IHtEb2N1bWVudFNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7UGVybWlzc2lvblNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2FjY2Vzcy1jb250cm9sJztcbmltcG9ydCB7V2lkZ2V0c1NlcnZpY2V9IGZyb20gJy4uLy4uL3dpZGdldHMuc2VydmljZSc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8td2lkZ2V0LWN1c3RvbScsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtY3VzdG9tLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd2lkZ2V0LWN1c3RvbS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDYXJib25MaXN0TW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIEJ1dHRvbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRDdXN0b21Db21wb25lbnQgZXh0ZW5kcyBXaWRnZXRQcm9jZXNzIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnY3VzdG9tV2lkZ2V0Q29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICBwcml2YXRlIHJlYWRvbmx5IF9jdXN0b21XaWRnZXRDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgQElucHV0KCkgcHVibGljIHNldCB3aWRnZXRDb25maWcodmFsdWU6IEN1c3RvbUNhc2VXaWRnZXQpIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5iYXNlV2lkZ2V0Q29uZmlndXJhdGlvbiA9IHZhbHVlO1xuICAgIHRoaXMuX3dpZGdldENvbmZpZ1N1YmplY3QkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY3VzdG9tQ2FzZVdpZGdldENvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEN1c3RvbUNhc2VXaWRnZXRDb25maWcgfCB7fT4oe30pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpZGdldENvbmZpZ1N1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDdXN0b21DYXNlV2lkZ2V0IHwgbnVsbD4obnVsbCk7XG5cbiAgcHVibGljIGdldCB3aWRnZXRDb25maWckKCk6IE9ic2VydmFibGU8Q3VzdG9tQ2FzZVdpZGdldD4ge1xuICAgIHJldHVybiB0aGlzLl93aWRnZXRDb25maWdTdWJqZWN0JC5waXBlKGZpbHRlcihjb25maWcgPT4gY29uZmlnICE9PSBudWxsKSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgbm9DdXN0b21Db21wb25lbnRBdmFpbGFibGUgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KENVU1RPTV9DQVNFX1dJREdFVF9UT0tFTilcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbUNhc2VXaWRnZXRDb25maWc6IEN1c3RvbUNhc2VXaWRnZXRDb25maWcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2lkZ2V0c1NlcnZpY2U6IFdpZGdldHNTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGRvY3VtZW50U2VydmljZSwgcGVybWlzc2lvblNlcnZpY2UpO1xuICAgIGlmIChjdXN0b21DYXNlV2lkZ2V0Q29uZmlnKSB0aGlzLl9jdXN0b21DYXNlV2lkZ2V0Q29uZmlnJC5uZXh0KGN1c3RvbUNhc2VXaWRnZXRDb25maWcpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5DdXN0b21XaWRnZXRTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25Qcm9jZXNzU3RhcnRDbGljayhwcm9jZXNzOiBDYXNlV2lkZ2V0QWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy53aWRnZXRzU2VydmljZS5zdGFydFByb2Nlc3MocHJvY2Vzcy5wcm9jZXNzRGVmaW5pdGlvbktleSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5DdXN0b21XaWRnZXRTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldENvbmZpZyQsIHRoaXMuX2N1c3RvbUNhc2VXaWRnZXRDb25maWckXSkuc3Vic2NyaWJlKFxuICAgICAgICAoW3dpZGdldENvbmZpZywgY3VzdG9tQ2FzZVdpZGdldENvbmZpZ10pID0+IHtcbiAgICAgICAgICBjb25zdCBjdXN0b21XaWRnZXRDb21wb25lbnRLZXkgPSB3aWRnZXRDb25maWc/LnByb3BlcnRpZXM/LmNvbXBvbmVudEtleTtcbiAgICAgICAgICBjb25zdCBjdXN0b21Db21wb25lbnQgPSBjdXN0b21DYXNlV2lkZ2V0Q29uZmlnW2N1c3RvbVdpZGdldENvbXBvbmVudEtleV07XG5cbiAgICAgICAgICBpZiAoIWN1c3RvbUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5ub0N1c3RvbUNvbXBvbmVudEF2YWlsYWJsZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5fY3VzdG9tV2lkZ2V0Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjdXN0b21Db21wb25lbnQpO1xuXG4gICAgICAgICAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXYgKm5nSWY9XCJ7d2lkZ2V0Q29uZmlnOiB3aWRnZXRDb25maWckIHwgYXN5bmN9IGFzIG9ic1wiIGNsYXNzPVwiY3VzdG9tLXdpZGdldFwiPlxuICA8c2VjdGlvbiBjbGFzcz1cImN1c3RvbS13aWRnZXRfX2hlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cImN1c3RvbS13aWRnZXRfX3RpdGxlXCI+e3sgb2JzLndpZGdldENvbmZpZyQ/LnRpdGxlIHx8ICctJyB9fTwvaDQ+XG5cbiAgICBAaWYgKG9icy53aWRnZXRDb25maWc/LmFjdGlvbnM/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cImNhbkNyZWF0ZUNhbXVuZGFFeGVjdXRpb24kIHwgYXN5bmNcIlxuICAgICAgICBjZHNCdXR0b249XCJnaG9zdFwiXG4gICAgICAgIChjbGljayk9XCJvblByb2Nlc3NTdGFydENsaWNrKG9icy53aWRnZXRDb25maWc/LmFjdGlvbnNbMF0pXCJcbiAgICAgID5cbiAgICAgICAge3sgb2JzLndpZGdldENvbmZpZz8uYWN0aW9uc1swXS5uYW1lIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gIDwvc2VjdGlvbj5cblxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXdpZGdldF9fY29udGVudFwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tV2lkZ2V0Q29udGFpbmVyPjwvbmctdGVtcGxhdGU+XG5cbiAgICBAaWYgKG5vQ3VzdG9tQ29tcG9uZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICAgICAgW2NvbGxhcHNlVmVydGljYWxseV09XCJ0cnVlXCJcbiAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb3NzaWVyLndpZGdldHMubm9DdXN0b21Db21wb25lbnREZXNjcmlwdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbc21hbGxQYWRkaW5nXT1cInRydWVcIlxuICAgICAgPjwvdmFsdGltby1uby1yZXN1bHRzPlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==