@valtimo/dossier-management 12.1.2 → 12.2.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 (52) hide show
  1. package/esm2022/lib/components/dossier-management-create/dossier-management-create.component.mjs +1 -1
  2. package/esm2022/lib/components/dossier-management-detail-container/dossier-management-detail-container.component.mjs +1 -1
  3. package/esm2022/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.component.mjs +1 -1
  4. package/esm2022/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.mjs +5 -4
  5. package/esm2022/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.mjs +12 -4
  6. package/esm2022/lib/components/dossier-management-statuses/dossier-management-status-modal/dossier-management-status-modal.component.mjs +1 -1
  7. package/esm2022/lib/components/dossier-management-tabs/dossier-management-add-tab-modal/dossier-management-add-tab-modal.component.mjs +8 -12
  8. package/esm2022/lib/components/dossier-management-tabs/dossier-management-tabs.component.mjs +6 -15
  9. package/esm2022/lib/components/dossier-management-tabs/tab-form/tab-form.component.mjs +14 -4
  10. package/esm2022/lib/components/dossier-management-widget-configurators/collection/dossier-management-widget-collection.component.mjs +7 -6
  11. package/esm2022/lib/components/dossier-management-widget-configurators/custom/dossier-management-widget-custom.component.mjs +1 -1
  12. package/esm2022/lib/components/dossier-management-widget-configurators/fields/column/dossier-management-widget-fields-column.component.mjs +16 -10
  13. package/esm2022/lib/components/dossier-management-widget-configurators/fields/dossier-management-widget-fields.component.mjs +14 -6
  14. package/esm2022/lib/components/dossier-management-widget-configurators/formio/dossier-management-widget-formio.component.mjs +1 -1
  15. package/esm2022/lib/components/dossier-management-widget-configurators/table/dossier-management-widget-table.component.mjs +5 -4
  16. package/esm2022/lib/components/dossier-management-widget-tab/dossier-management-widget-tab.component.mjs +1 -1
  17. package/esm2022/lib/components/dossier-management-widget-tab/editor/dossier-management-widgets-editor.component.mjs +5 -5
  18. package/esm2022/lib/components/dossier-management-widget-wizard/dossier-management-widget-wizard.component.mjs +12 -6
  19. package/esm2022/lib/components/dossier-management-widget-wizard/steps/widget-wizard-type-step/widget-wizard-type-step.component.mjs +3 -3
  20. package/esm2022/lib/components/dossier-management-widget-wizard/steps/widget-wizard-width-step/widget-wizard-width-step.component.mjs +3 -3
  21. package/esm2022/lib/dossier-management.module.mjs +7 -4
  22. package/esm2022/lib/models/widget-wizard.model.mjs +5 -5
  23. package/esm2022/lib/services/tab-management.service.mjs +6 -9
  24. package/fesm2022/valtimo-dossier-management.mjs +110 -83
  25. package/fesm2022/valtimo-dossier-management.mjs.map +1 -1
  26. package/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.component.d.ts +1 -1
  27. package/lib/components/dossier-management-detail-container-actions/dossier-management-detail-container-actions.component.d.ts.map +1 -1
  28. package/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.d.ts +2 -1
  29. package/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.d.ts.map +1 -1
  30. package/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.d.ts +3 -1
  31. package/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.d.ts.map +1 -1
  32. package/lib/components/dossier-management-statuses/dossier-management-statuses.component.d.ts +1 -1
  33. package/lib/components/dossier-management-tabs/dossier-management-add-tab-modal/dossier-management-add-tab-modal.component.d.ts.map +1 -1
  34. package/lib/components/dossier-management-tabs/dossier-management-tabs.component.d.ts +0 -1
  35. package/lib/components/dossier-management-tabs/dossier-management-tabs.component.d.ts.map +1 -1
  36. package/lib/components/dossier-management-tabs/tab-form/tab-form.component.d.ts +2 -1
  37. package/lib/components/dossier-management-tabs/tab-form/tab-form.component.d.ts.map +1 -1
  38. package/lib/components/dossier-management-widget-configurators/collection/dossier-management-widget-collection.component.d.ts.map +1 -1
  39. package/lib/components/dossier-management-widget-configurators/fields/column/dossier-management-widget-fields-column.component.d.ts +7 -5
  40. package/lib/components/dossier-management-widget-configurators/fields/column/dossier-management-widget-fields-column.component.d.ts.map +1 -1
  41. package/lib/components/dossier-management-widget-configurators/fields/dossier-management-widget-fields.component.d.ts +5 -3
  42. package/lib/components/dossier-management-widget-configurators/fields/dossier-management-widget-fields.component.d.ts.map +1 -1
  43. package/lib/components/dossier-management-widget-configurators/table/dossier-management-widget-table.component.d.ts.map +1 -1
  44. package/lib/components/dossier-management-widget-tab/dossier-management-widget-tab.component.d.ts +1 -1
  45. package/lib/components/dossier-management-widget-tab/dossier-management-widget-tab.component.d.ts.map +1 -1
  46. package/lib/components/dossier-management-widget-wizard/dossier-management-widget-wizard.component.d.ts +2 -0
  47. package/lib/components/dossier-management-widget-wizard/dossier-management-widget-wizard.component.d.ts.map +1 -1
  48. package/lib/dossier-management.module.d.ts +1 -1
  49. package/lib/dossier-management.module.d.ts.map +1 -1
  50. package/lib/services/tab-management.service.d.ts +1 -2
  51. package/lib/services/tab-management.service.d.ts.map +1 -1
  52. package/package.json +2 -2
@@ -15,7 +15,7 @@
15
15
  */
16
16
  import { ChangeDetectionStrategy, Component, EventEmitter, Output, } from '@angular/core';
17
17
  import { ArrowDown16, ArrowUp16 } from '@carbon/icons';
18
- import { CARBON_CONSTANTS, MoveRowDirection, ViewType, } from '@valtimo/components';
18
+ import { CARBON_CONSTANTS, MoveRowDirection, ValuePathSelectorPrefix, ViewType, } from '@valtimo/components';
19
19
  import { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, of, Subscription, switchMap, take, tap, } from 'rxjs';
20
20
  import * as i0 from "@angular/core";
21
21
  import * as i1 from "@valtimo/document";
@@ -224,6 +224,7 @@ export class DossierManagementSearchFieldsComponent {
224
224
  !!formData?.dropdownDataProvider &&
225
225
  this.dropdownDataProviderSupportsUpdates(formData?.dropdownDataProvider)));
226
226
  this.CARBON_THEME = 'white';
227
+ this.ValuePathSelectorPrefix = ValuePathSelectorPrefix;
227
228
  this.iconService.registerAll([ArrowDown16, ArrowUp16]);
228
229
  }
229
230
  ngOnInit() {
@@ -254,6 +255,13 @@ export class DossierManagementSearchFieldsComponent {
254
255
  this.nextIfChanged(this.valid$, this.isValid(data));
255
256
  }, 0);
256
257
  }
258
+ pathValueChange(path) {
259
+ this.formData$.pipe(take(1)).subscribe(currentData => {
260
+ const newData = { ...currentData, path };
261
+ this.nextIfChanged(this.formData$, newData);
262
+ this.nextIfChanged(this.valid$, this.isValid(newData));
263
+ });
264
+ }
257
265
  dropdownDatalistChange(data) {
258
266
  this.modifiedDropdownValues$.next(data);
259
267
  }
@@ -432,12 +440,12 @@ export class DossierManagementSearchFieldsComponent {
432
440
  this.searchFieldClicked(searchField, false);
433
441
  }
434
442
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierManagementSearchFieldsComponent, deps: [{ token: i1.DocumentService }, { token: i2.ActivatedRoute }, { token: i3.TranslateService }, { token: i4.DomSanitizer }, { token: i5.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
435
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DossierManagementSearchFieldsComponent, selector: "valtimo-dossier-management-search-fields", outputs: { searchField: "searchField" }, 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 searchFields: translatedSearchFields$ | async,\n downloadUrl: downloadUrl$ | async,\n downloadName: downloadName$ | async,\n documentDefinitionName: documentDefinitionName$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async\n } as obs\"\n>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dossierManagement.statuses.deleteText\"\n [outputOnConfirm]=\"selectedDeleteSearchField$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDeleteSelectedSearchFieldConfirm($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n [disabled]=\"\n !obs.downloadUrl || !obs.downloadName || obs.searchFields?.length <= 0 || obs.disableInput\n \"\n [download]=\"obs.downloadName\"\n [href]=\"obs.downloadUrl\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"loadingSearchFields || obs.disableInput\"\n (click)=\"searchFieldClicked($event, true)\"\n >\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.searchFields\"\n [loading]=\"!obs.searchFields\"\n [movingRowsEnabled]=\"true\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n (moveRow)=\"onMoveRowClick($event, obs.documentDefinitionName)\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [title]=\"'searchFieldsOverview.noSearchfieldsTitle' | translate\"\n [description]=\"'searchFieldsOverview.noSearchfieldsDescription' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #modal let-obs=\"obs\">\n <cds-modal\n valtimoCdsModal\n [title]=\"\n searchFieldActionTypeIsAdd\n ? ('searchFieldsOverview.addRow' | translate)\n : ('searchFieldsOverview.edit' | translate)\n \"\n [open]=\"modalShowing$ | async\"\n [showFooter]=\"true\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onModalClose()\">\n <h3 cdsModalHeaderHeading>\n {{\n (searchFieldActionTypeIsAdd ? 'searchFieldsOverview.addRow' : 'searchFieldsOverview.edit')\n | translate\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"\n (showFields$ | async) && {\n searchField: selectedSearchField$ | async\n } as searchObs\n \"\n >\n <v-input\n name=\"title\"\n [title]=\"'searchFieldsOverview.title' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.title\"\n [disabled]=\"obs.disableInput\"\n [required]=\"false\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <v-input\n name=\"key\"\n [title]=\"'searchFieldsOverview.key' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.key\"\n [disabled]=\"obs.disableInput || !searchFieldActionTypeIsAdd\"\n [required]=\"true\"\n [widthPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <v-input\n name=\"path\"\n [title]=\"'searchFieldsOverview.path' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.path\"\n [disabled]=\"obs.disableInput\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <v-select\n *ngIf=\"dataTypeItems$ | async as dataTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dataTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dataType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"dataType\"\n [defaultSelectionId]=\"searchObs.searchField?.dataType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"(showMatchTypes$ | async) && (matchTypeItems$ | async) as matchTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"matchTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.matchType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"matchType\"\n [defaultSelectionId]=\"searchObs.searchField?.matchType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.matchType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"fieldTypeItems$ | async as fieldTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"fieldTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.fieldType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"fieldType\"\n [defaultSelectionId]=\"searchObs.searchField?.fieldType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"\n (fieldTypeIsDropdown$ | async) &&\n (dropdownDataProviderNames$ | async) as dropdownDataProviderNames\n \"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dropdownDataProviderNames\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dropdownDataProvider' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"false\"\n name=\"dropdownDataProvider\"\n [defaultSelectionId]=\"searchObs.searchField?.dropdownDataProvider\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownDataProvider' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <valtimo-carbon-multi-input\n *ngIf=\"\n (showInputDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n name=\"dropdownValues\"\n [title]=\"'searchFieldsOverview.dropdownListValues' | translate\"\n type=\"keyValue\"\n [disabled]=\"obs.disableInput\"\n [defaultValues]=\"initialDropdownValues\"\n [margin]=\"true\"\n [required]=\"false\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownListValues' | translate\"\n (valueChange)=\"dropdownDatalistChange($event)\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </valtimo-carbon-multi-input>\n\n <v-table\n *ngIf=\"\n (showReadonlyDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n [items]=\"initialDropdownValues\"\n [columns]=\"dropdownColumns$ | async\"\n [showEditButtons]=\"false\"\n [itemsTranslationKey]=\"'searchFieldsOverview'\"\n [showPagination]=\"false\"\n [mobileBreakpointPx]=\"200\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-table>\n </v-form>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttonsFooterModal; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n </cds-modal>\n</ng-template>\n\n<ng-template #buttonsFooterModal let-obs=\"obs\">\n <button cdsButton=\"secondary\" (click)=\"onModalClose()\" [disabled]=\"obs.disableInput\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"obs.disableInput || !obs.valid\"\n (click)=\"saveSearchField(obs.documentDefinitionName)\"\n >\n {{ 'searchFieldsOverview.submit' | translate }}\n </button>\n</ng-template>\n", styles: ["valtimo-list::ng-deep table{border-top:1px solid rgba(0,0,0,.125)}.dossier-management-search-fields__buttons{display:flex;gap:16px}.dossier-management-search-fields__buttons .center-link{display:flex;align-items:center}.dossier-management-search-fields__move-buttons{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.dossier-management-search-fields__move-buttons button:not(:last-child){margin-right:8px}.list-actions{width:1px}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--tab-content{padding-top:0!important}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline"], outputs: ["selectedChange"] }, { kind: "component", type: i7.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder"], outputs: ["valueChange"] }, { kind: "component", type: i7.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "directive", type: i5.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i5.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i5.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i5.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i5.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i5.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i5.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i7.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["name", "title", "titleTranslationKey", "type", "arbitraryValueAmount", "arbitraryAmountTitles", "initialAmountOfRows", "minimumAmountOfRows", "maxRows", "addRowText", "addRowTranslationKey", "deleteRowText", "deleteRowTranslationKey", "disabled", "defaultValues", "margin", "tooltip", "required", "keyColumnTitle", "valueColumnTitle", "dropdownColumnTitle", "hideDeleteButton", "hideAddButton", "dropdownItems", "dropdownWidth", "fullWidth", "carbonTheme"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: i7.TableComponent, selector: "v-table", inputs: ["items", "columns", "loading", "showEditButtons", "showPagination", "editButtonTranslationKey", "itemsTranslationKey", "noResultsTranslationKey", "mobileBreakpointPx", "amountOfLoadingRows", "collectionSize", "page", "size"], outputs: ["editButtonClicked", "paginationSizeSet", "paginationPageSet"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]" }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
443
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DossierManagementSearchFieldsComponent, selector: "valtimo-dossier-management-search-fields", outputs: { searchField: "searchField" }, 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 searchFields: translatedSearchFields$ | async,\n downloadUrl: downloadUrl$ | async,\n downloadName: downloadName$ | async,\n documentDefinitionName: documentDefinitionName$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async\n } as obs\"\n>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dossierManagement.statuses.deleteText\"\n [outputOnConfirm]=\"selectedDeleteSearchField$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDeleteSelectedSearchFieldConfirm($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n data-testid=\"dossier-management-search-download\"\n [disabled]=\"\n !obs.downloadUrl || !obs.downloadName || obs.searchFields?.length <= 0 || obs.disableInput\n \"\n [download]=\"obs.downloadName\"\n [href]=\"obs.downloadUrl\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n\n <button\n cdsButton=\"primary\"\n data-testid=\"dossier-management-search-add\"\n [disabled]=\"loadingSearchFields || obs.disableInput\"\n (click)=\"searchFieldClicked($event, true)\"\n >\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.searchFields\"\n [loading]=\"!obs.searchFields\"\n [movingRowsEnabled]=\"true\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n (moveRow)=\"onMoveRowClick($event, obs.documentDefinitionName)\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [title]=\"'searchFieldsOverview.noSearchfieldsTitle' | translate\"\n [description]=\"'searchFieldsOverview.noSearchfieldsDescription' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #modal let-obs=\"obs\">\n <cds-modal\n valtimoCdsModal\n [title]=\"\n searchFieldActionTypeIsAdd\n ? ('searchFieldsOverview.addRow' | translate)\n : ('searchFieldsOverview.edit' | translate)\n \"\n [open]=\"modalShowing$ | async\"\n [showFooter]=\"true\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onModalClose()\">\n <h3 cdsModalHeaderHeading>\n {{\n (searchFieldActionTypeIsAdd ? 'searchFieldsOverview.addRow' : 'searchFieldsOverview.edit')\n | translate\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"\n (showFields$ | async) && {\n searchField: selectedSearchField$ | async\n } as searchObs\n \"\n >\n <v-input\n name=\"title\"\n dataTestId=\"dossier-management-search-title\"\n [title]=\"'searchFieldsOverview.title' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.title\"\n [disabled]=\"obs.disableInput\"\n [required]=\"false\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <v-input\n name=\"key\"\n dataTestId=\"dossier-management-search-key\"\n [title]=\"'searchFieldsOverview.key' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.key\"\n [disabled]=\"obs.disableInput || !searchFieldActionTypeIsAdd\"\n [required]=\"true\"\n [widthPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <valtimo-value-path-selector\n name=\"path\"\n [label]=\"'searchFieldsOverview.path' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n [marginXl]=\"true\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [defaultValue]=\"searchObs.searchField?.path\"\n [disabled]=\"obs.disableInput\"\n ></valtimo-value-path-selector>\n\n <v-select\n *ngIf=\"dataTypeItems$ | async as dataTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dataTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dataType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"dataType\"\n [defaultSelectionId]=\"searchObs.searchField?.dataType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"dossier-management-search-dataTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"(showMatchTypes$ | async) && (matchTypeItems$ | async) as matchTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"matchTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.matchType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"matchType\"\n [defaultSelectionId]=\"searchObs.searchField?.matchType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.matchType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"dossier-management-search-matchTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"fieldTypeItems$ | async as fieldTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"fieldTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.fieldType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"fieldType\"\n [defaultSelectionId]=\"searchObs.searchField?.fieldType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"dossier-management-search-fieldTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"\n (fieldTypeIsDropdown$ | async) &&\n (dropdownDataProviderNames$ | async) as dropdownDataProviderNames\n \"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dropdownDataProviderNames\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dropdownDataProvider' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"false\"\n name=\"dropdownDataProvider\"\n [defaultSelectionId]=\"searchObs.searchField?.dropdownDataProvider\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownDataProvider' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"dossier-management-search-dropdownDataProvider\"\n ></v-select>\n\n <valtimo-carbon-multi-input\n *ngIf=\"\n (showInputDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n name=\"dropdownValues\"\n [title]=\"'searchFieldsOverview.dropdownListValues' | translate\"\n type=\"keyValue\"\n [disabled]=\"obs.disableInput\"\n [defaultValues]=\"initialDropdownValues\"\n [margin]=\"true\"\n [required]=\"false\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownListValues' | translate\"\n (valueChange)=\"dropdownDatalistChange($event)\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </valtimo-carbon-multi-input>\n\n <v-table\n *ngIf=\"\n (showReadonlyDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n [items]=\"initialDropdownValues\"\n [columns]=\"dropdownColumns$ | async\"\n [showEditButtons]=\"false\"\n [itemsTranslationKey]=\"'searchFieldsOverview'\"\n [showPagination]=\"false\"\n [mobileBreakpointPx]=\"200\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-table>\n </v-form>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttonsFooterModal; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n </cds-modal>\n</ng-template>\n\n<ng-template #buttonsFooterModal let-obs=\"obs\">\n <button\n data-testid=\"dossier-management-search-close\"\n cdsButton=\"secondary\"\n (click)=\"onModalClose()\"\n [disabled]=\"obs.disableInput\"\n >\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n data-testid=\"dossier-management-search-save\"\n cdsButton=\"primary\"\n [disabled]=\"obs.disableInput || !obs.valid\"\n (click)=\"saveSearchField(obs.documentDefinitionName)\"\n >\n {{ 'searchFieldsOverview.submit' | translate }}\n </button>\n</ng-template>\n", styles: ["valtimo-list::ng-deep table{border-top:1px solid rgba(0,0,0,.125)}.dossier-management-search-fields__buttons{display:flex;gap:16px}.dossier-management-search-fields__buttons .center-link{display:flex;align-items:center}.dossier-management-search-fields__move-buttons{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.dossier-management-search-fields__move-buttons button:not(:last-child){margin-right:8px}.list-actions{width:1px}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--tab-content{padding-top:0!important}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline", "dataTestId"], outputs: ["selectedChange"] }, { kind: "component", type: i7.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder", "dataTestId"], outputs: ["valueChange"] }, { kind: "component", type: i7.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "directive", type: i5.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "directive", type: i5.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i5.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i5.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i5.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i5.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i5.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i7.CarbonMultiInputComponent, selector: "valtimo-carbon-multi-input", inputs: ["name", "title", "titleTranslationKey", "type", "arbitraryValueAmount", "arbitraryAmountTitles", "initialAmountOfRows", "minimumAmountOfRows", "maxRows", "addRowText", "addRowTranslationKey", "deleteRowText", "deleteRowTranslationKey", "disabled", "defaultValues", "margin", "tooltip", "required", "keyColumnTitle", "valueColumnTitle", "dropdownColumnTitle", "hideDeleteButton", "hideAddButton", "dropdownItems", "dropdownWidth", "fullWidth", "carbonTheme"], outputs: ["valueChange", "allValuesValidEvent"] }, { kind: "component", type: i7.ConfirmationModalComponent, selector: "valtimo-confirmation-modal", inputs: ["titleTranslationKey", "title", "content", "contentTranslationKey", "confirmButtonText", "confirmButtonTextTranslationKey", "confirmButtonType", "showOptionalButton", "optionalButtonText", "optionalButtonTextTranslationKey", "optionalButtonType", "cancelButtonText", "cancelButtonTextTranslationKey", "cancelButtonType", "showModalSubject$", "outputOnConfirm", "outputOnOptional", "spacerAfterCancelButton"], outputs: ["confirmEvent", "optionalEvent", "cancelEvent"] }, { kind: "component", type: i7.TableComponent, selector: "v-table", inputs: ["items", "columns", "loading", "showEditButtons", "showPagination", "editButtonTranslationKey", "itemsTranslationKey", "noResultsTranslationKey", "mobileBreakpointPx", "amountOfLoadingRows", "collectionSize", "page", "size"], outputs: ["editButtonClicked", "paginationSizeSet", "paginationPageSet"] }, { kind: "directive", type: i7.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]" }, { kind: "component", type: i7.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "actions", "actionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i7.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: i7.ValuePathSelectorComponent, selector: "valtimo-value-path-selector", inputs: ["name", "appendInline", "margin", "marginLg", "marginXl", "disabled", "documentDefinitionName", "version", "prefixes", "label", "tooltip", "required", "showDocumentDefinitionSelector", "notation", "defaultValue"], outputs: ["valueChangeEvent"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
436
444
  }
437
445
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierManagementSearchFieldsComponent, decorators: [{
438
446
  type: Component,
439
- args: [{ selector: 'valtimo-dossier-management-search-fields', 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<ng-container\n *ngIf=\"{\n searchFields: translatedSearchFields$ | async,\n downloadUrl: downloadUrl$ | async,\n downloadName: downloadName$ | async,\n documentDefinitionName: documentDefinitionName$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async\n } as obs\"\n>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dossierManagement.statuses.deleteText\"\n [outputOnConfirm]=\"selectedDeleteSearchField$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDeleteSelectedSearchFieldConfirm($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n [disabled]=\"\n !obs.downloadUrl || !obs.downloadName || obs.searchFields?.length <= 0 || obs.disableInput\n \"\n [download]=\"obs.downloadName\"\n [href]=\"obs.downloadUrl\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"loadingSearchFields || obs.disableInput\"\n (click)=\"searchFieldClicked($event, true)\"\n >\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.searchFields\"\n [loading]=\"!obs.searchFields\"\n [movingRowsEnabled]=\"true\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n (moveRow)=\"onMoveRowClick($event, obs.documentDefinitionName)\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [title]=\"'searchFieldsOverview.noSearchfieldsTitle' | translate\"\n [description]=\"'searchFieldsOverview.noSearchfieldsDescription' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #modal let-obs=\"obs\">\n <cds-modal\n valtimoCdsModal\n [title]=\"\n searchFieldActionTypeIsAdd\n ? ('searchFieldsOverview.addRow' | translate)\n : ('searchFieldsOverview.edit' | translate)\n \"\n [open]=\"modalShowing$ | async\"\n [showFooter]=\"true\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onModalClose()\">\n <h3 cdsModalHeaderHeading>\n {{\n (searchFieldActionTypeIsAdd ? 'searchFieldsOverview.addRow' : 'searchFieldsOverview.edit')\n | translate\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"\n (showFields$ | async) && {\n searchField: selectedSearchField$ | async\n } as searchObs\n \"\n >\n <v-input\n name=\"title\"\n [title]=\"'searchFieldsOverview.title' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.title\"\n [disabled]=\"obs.disableInput\"\n [required]=\"false\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <v-input\n name=\"key\"\n [title]=\"'searchFieldsOverview.key' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.key\"\n [disabled]=\"obs.disableInput || !searchFieldActionTypeIsAdd\"\n [required]=\"true\"\n [widthPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <v-input\n name=\"path\"\n [title]=\"'searchFieldsOverview.path' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.path\"\n [disabled]=\"obs.disableInput\"\n [required]=\"true\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <v-select\n *ngIf=\"dataTypeItems$ | async as dataTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dataTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dataType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"dataType\"\n [defaultSelectionId]=\"searchObs.searchField?.dataType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"(showMatchTypes$ | async) && (matchTypeItems$ | async) as matchTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"matchTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.matchType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"matchType\"\n [defaultSelectionId]=\"searchObs.searchField?.matchType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.matchType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"fieldTypeItems$ | async as fieldTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"fieldTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.fieldType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"fieldType\"\n [defaultSelectionId]=\"searchObs.searchField?.fieldType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <v-select\n *ngIf=\"\n (fieldTypeIsDropdown$ | async) &&\n (dropdownDataProviderNames$ | async) as dropdownDataProviderNames\n \"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dropdownDataProviderNames\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dropdownDataProvider' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"false\"\n name=\"dropdownDataProvider\"\n [defaultSelectionId]=\"searchObs.searchField?.dropdownDataProvider\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownDataProvider' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-select>\n\n <valtimo-carbon-multi-input\n *ngIf=\"\n (showInputDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n name=\"dropdownValues\"\n [title]=\"'searchFieldsOverview.dropdownListValues' | translate\"\n type=\"keyValue\"\n [disabled]=\"obs.disableInput\"\n [defaultValues]=\"initialDropdownValues\"\n [margin]=\"true\"\n [required]=\"false\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownListValues' | translate\"\n (valueChange)=\"dropdownDatalistChange($event)\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </valtimo-carbon-multi-input>\n\n <v-table\n *ngIf=\"\n (showReadonlyDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n [items]=\"initialDropdownValues\"\n [columns]=\"dropdownColumns$ | async\"\n [showEditButtons]=\"false\"\n [itemsTranslationKey]=\"'searchFieldsOverview'\"\n [showPagination]=\"false\"\n [mobileBreakpointPx]=\"200\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-table>\n </v-form>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttonsFooterModal; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n </cds-modal>\n</ng-template>\n\n<ng-template #buttonsFooterModal let-obs=\"obs\">\n <button cdsButton=\"secondary\" (click)=\"onModalClose()\" [disabled]=\"obs.disableInput\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n [disabled]=\"obs.disableInput || !obs.valid\"\n (click)=\"saveSearchField(obs.documentDefinitionName)\"\n >\n {{ 'searchFieldsOverview.submit' | translate }}\n </button>\n</ng-template>\n", styles: ["valtimo-list::ng-deep table{border-top:1px solid rgba(0,0,0,.125)}.dossier-management-search-fields__buttons{display:flex;gap:16px}.dossier-management-search-fields__buttons .center-link{display:flex;align-items:center}.dossier-management-search-fields__move-buttons{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.dossier-management-search-fields__move-buttons button:not(:last-child){margin-right:8px}.list-actions{width:1px}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--tab-content{padding-top:0!important}\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"] }]
447
+ args: [{ selector: 'valtimo-dossier-management-search-fields', 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<ng-container\n *ngIf=\"{\n searchFields: translatedSearchFields$ | async,\n downloadUrl: downloadUrl$ | async,\n downloadName: downloadName$ | async,\n documentDefinitionName: documentDefinitionName$ | async,\n valid: valid$ | async,\n disableInput: disableInput$ | async\n } as obs\"\n>\n <ng-container *ngTemplateOutlet=\"list; context: {obs: obs}\"></ng-container>\n\n <ng-container *ngTemplateOutlet=\"modal; context: {obs: obs}\"></ng-container>\n</ng-container>\n\n<valtimo-confirmation-modal\n confirmButtonTextTranslationKey=\"interface.delete\"\n confirmButtonType=\"danger\"\n contentTranslationKey=\"dossierManagement.statuses.deleteText\"\n [outputOnConfirm]=\"selectedDeleteSearchField$ | async\"\n [showModalSubject$]=\"showDeleteModal$\"\n titleTranslationKey=\"interface.delete\"\n (confirmEvent)=\"onDeleteSelectedSearchFieldConfirm($event)\"\n></valtimo-confirmation-modal>\n\n<ng-template #buttons let-obs=\"obs\">\n <button\n cdsButton=\"ghost\"\n iconOnly=\"true\"\n data-testid=\"dossier-management-search-download\"\n [disabled]=\"\n !obs.downloadUrl || !obs.downloadName || obs.searchFields?.length <= 0 || obs.disableInput\n \"\n [download]=\"obs.downloadName\"\n [href]=\"obs.downloadUrl\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"download\" size=\"16\"></svg>\n </button>\n\n <button\n cdsButton=\"primary\"\n data-testid=\"dossier-management-search-add\"\n [disabled]=\"loadingSearchFields || obs.disableInput\"\n (click)=\"searchFieldClicked($event, true)\"\n >\n <svg cdsIcon=\"add\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFieldsOverview.addRow' | translate }}\n </button>\n</ng-template>\n\n<ng-template #list let-obs=\"obs\">\n <valtimo-carbon-list\n [actionItems]=\"actionItems\"\n [fields]=\"fields\"\n [header]=\"false\"\n [items]=\"obs.searchFields\"\n [loading]=\"!obs.searchFields\"\n [movingRowsEnabled]=\"true\"\n (rowClicked)=\"searchFieldClicked($event, false)\"\n (moveRow)=\"onMoveRowClick($event, obs.documentDefinitionName)\"\n >\n <ng-container\n carbonToolbarContent\n *ngTemplateOutlet=\"buttons; context: {obs: obs}\"\n ></ng-container>\n\n <valtimo-no-results\n [title]=\"'searchFieldsOverview.noSearchfieldsTitle' | translate\"\n [description]=\"'searchFieldsOverview.noSearchfieldsDescription' | translate\"\n ></valtimo-no-results>\n </valtimo-carbon-list>\n</ng-template>\n\n<ng-template #modal let-obs=\"obs\">\n <cds-modal\n valtimoCdsModal\n [title]=\"\n searchFieldActionTypeIsAdd\n ? ('searchFieldsOverview.addRow' | translate)\n : ('searchFieldsOverview.edit' | translate)\n \"\n [open]=\"modalShowing$ | async\"\n [showFooter]=\"true\"\n >\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onModalClose()\">\n <h3 cdsModalHeaderHeading>\n {{\n (searchFieldActionTypeIsAdd ? 'searchFieldsOverview.addRow' : 'searchFieldsOverview.edit')\n | translate\n }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <v-form\n (valueChange)=\"formValueChange($event)\"\n *ngIf=\"\n (showFields$ | async) && {\n searchField: selectedSearchField$ | async\n } as searchObs\n \"\n >\n <v-input\n name=\"title\"\n dataTestId=\"dossier-management-search-title\"\n [title]=\"'searchFieldsOverview.title' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.title\"\n [disabled]=\"obs.disableInput\"\n [required]=\"false\"\n [fullWidth]=\"true\"\n [tooltip]=\"'searchFieldsOverviewTooltips.title' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <v-input\n name=\"key\"\n dataTestId=\"dossier-management-search-key\"\n [title]=\"'searchFieldsOverview.key' | translate\"\n [margin]=\"true\"\n [defaultValue]=\"searchObs.searchField?.key\"\n [disabled]=\"obs.disableInput || !searchFieldActionTypeIsAdd\"\n [required]=\"true\"\n [widthPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.key' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </v-input>\n\n <valtimo-value-path-selector\n name=\"path\"\n [label]=\"'searchFieldsOverview.path' | translate\"\n [tooltip]=\"'searchFieldsOverviewTooltips.path' | translate\"\n [marginXl]=\"true\"\n [documentDefinitionName]=\"documentDefinitionName$ | async\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [defaultValue]=\"searchObs.searchField?.path\"\n [disabled]=\"obs.disableInput\"\n ></valtimo-value-path-selector>\n\n <v-select\n *ngIf=\"dataTypeItems$ | async as dataTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dataTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dataType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"dataType\"\n [defaultSelectionId]=\"searchObs.searchField?.dataType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dataType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"dossier-management-search-dataTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"(showMatchTypes$ | async) && (matchTypeItems$ | async) as matchTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"matchTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.matchType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"matchType\"\n [defaultSelectionId]=\"searchObs.searchField?.matchType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.matchType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"dossier-management-search-matchTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"fieldTypeItems$ | async as fieldTypeItems\"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"fieldTypeItems\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.fieldType' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"true\"\n name=\"fieldType\"\n [defaultSelectionId]=\"searchObs.searchField?.fieldType\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.fieldType' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"dossier-management-search-fieldTypes\"\n ></v-select>\n\n <v-select\n *ngIf=\"\n (fieldTypeIsDropdown$ | async) &&\n (dropdownDataProviderNames$ | async) as dropdownDataProviderNames\n \"\n [appendInline]=\"true\"\n [dropUp]=\"false\"\n [items]=\"dropdownDataProviderNames\"\n [placeholder]=\"'searchFieldsOverview.searchFieldPlaceholder' | translate\"\n [title]=\"'searchFieldsOverview.dropdownDataProvider' | translate\"\n [disabled]=\"obs.disableInput\"\n [margin]=\"true\"\n [required]=\"false\"\n name=\"dropdownDataProvider\"\n [defaultSelectionId]=\"searchObs.searchField?.dropdownDataProvider\"\n [widthInPx]=\"200\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownDataProvider' | translate\"\n [carbonTheme]=\"CARBON_THEME\"\n dataTestId=\"dossier-management-search-dropdownDataProvider\"\n ></v-select>\n\n <valtimo-carbon-multi-input\n *ngIf=\"\n (showInputDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n name=\"dropdownValues\"\n [title]=\"'searchFieldsOverview.dropdownListValues' | translate\"\n type=\"keyValue\"\n [disabled]=\"obs.disableInput\"\n [defaultValues]=\"initialDropdownValues\"\n [margin]=\"true\"\n [required]=\"false\"\n [tooltip]=\"'searchFieldsOverviewTooltips.dropdownListValues' | translate\"\n (valueChange)=\"dropdownDatalistChange($event)\"\n [carbonTheme]=\"CARBON_THEME\"\n >\n </valtimo-carbon-multi-input>\n\n <v-table\n *ngIf=\"\n (showReadonlyDropdownTable$ | async) &&\n (initialDropdownValues$ | async) as initialDropdownValues\n \"\n [items]=\"initialDropdownValues\"\n [columns]=\"dropdownColumns$ | async\"\n [showEditButtons]=\"false\"\n [itemsTranslationKey]=\"'searchFieldsOverview'\"\n [showPagination]=\"false\"\n [mobileBreakpointPx]=\"200\"\n [carbonTheme]=\"CARBON_THEME\"\n ></v-table>\n </v-form>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttonsFooterModal; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n </cds-modal>\n</ng-template>\n\n<ng-template #buttonsFooterModal let-obs=\"obs\">\n <button\n data-testid=\"dossier-management-search-close\"\n cdsButton=\"secondary\"\n (click)=\"onModalClose()\"\n [disabled]=\"obs.disableInput\"\n >\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n data-testid=\"dossier-management-search-save\"\n cdsButton=\"primary\"\n [disabled]=\"obs.disableInput || !obs.valid\"\n (click)=\"saveSearchField(obs.documentDefinitionName)\"\n >\n {{ 'searchFieldsOverview.submit' | translate }}\n </button>\n</ng-template>\n", styles: ["valtimo-list::ng-deep table{border-top:1px solid rgba(0,0,0,.125)}.dossier-management-search-fields__buttons{display:flex;gap:16px}.dossier-management-search-fields__buttons .center-link{display:flex;align-items:center}.dossier-management-search-fields__move-buttons{width:100%;justify-content:flex-end;display:flex;flex-direction:row;position:relative}.dossier-management-search-fields__move-buttons button:not(:last-child){margin-right:8px}.list-actions{width:1px}.modal-header::ng-deep{background-color:#f3f4f7}::ng-deep .tab-container{min-height:unset!important}::ng-deep .cds--tab-content{padding-top:0!important}\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"] }]
440
448
  }], ctorParameters: () => [{ type: i1.DocumentService }, { type: i2.ActivatedRoute }, { type: i3.TranslateService }, { type: i4.DomSanitizer }, { type: i5.IconService }], propDecorators: { searchField: [{
441
449
  type: Output
442
450
  }] } });
443
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFHWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUVMLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFNaEIsUUFBUSxHQUNULE1BQU0scUJBQXFCLENBQUM7QUFTN0IsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBUWQsTUFBTSxPQUFPLHNDQUFzQztJQThRakQsWUFDbUIsZUFBZ0MsRUFDaEMsS0FBcUIsRUFDckIsZ0JBQWtDLEVBQ2xDLFNBQXVCLEVBQ3ZCLFdBQXdCO1FBSnhCLG9CQUFlLEdBQWYs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QzlDLENBQUM7K0dBampCVSxzQ0FBc0M7bUdBQXRDLHNDQUFzQyx5SENwRW5ELDAvVEF3UkE7OzRGRHBOYSxzQ0FBc0M7a0JBTmxELFNBQVM7K0JBQ0UsMENBQTBDLG1CQUduQyx1QkFBdUIsQ0FBQyxNQUFNO3FNQUdyQyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RvbVNhbml0aXplciwgU2FmZVVybH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBcnJvd0Rvd24xNiwgQXJyb3dVcDE2fSBmcm9tICdAY2FyYm9uL2ljb25zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBBY3Rpb25JdGVtLFxuICBDQVJCT05fQ09OU1RBTlRTLFxuICBDb2x1bW5Db25maWcsXG4gIE1vdmVSb3dEaXJlY3Rpb24sXG4gIE1vdmVSb3dFdmVudCxcbiAgTXVsdGlJbnB1dE91dHB1dCxcbiAgTXVsdGlJbnB1dFZhbHVlcyxcbiAgU2VsZWN0SXRlbSxcbiAgVGFibGVDb2x1bW4sXG4gIFZpZXdUeXBlLFxufSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIFNlYXJjaEZpZWxkLFxuICBTZWFyY2hGaWVsZERhdGFUeXBlLFxuICBTZWFyY2hGaWVsZEZpZWxkVHlwZSxcbiAgU2VhcmNoRmllbGRNYXRjaFR5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0RvY3VtZW50U2VydmljZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtJY29uU2VydmljZX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJNYW5hZ2VtZW50U2VhcmNoRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBAT3V0cHV0KCkgc2VhcmNoRmllbGQ6IEV2ZW50RW1pdHRlcjxTZWFyY2hGaWVsZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvd25sb2FkTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgcmVhZG9ubHkgZG93bmxvYWRVcmwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYWZlVXJsIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZUlucHV0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRTZWFyY2hGaWVsZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaEZpZWxkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWREZWxldGVTZWFyY2hGaWVsZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaEZpZWxkIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IGZvcm1EYXRhJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoRmllbGQgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHZhbGlkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0ZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IG1vZGFsU2hvd2luZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IHNob3dEZWxldGVNb2RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBhY3Rpb25JdGVtczogQWN0aW9uSXRlbVtdID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiAnaW50ZXJmYWNlLmVkaXQnLFxuICAgICAgY2FsbGJhY2s6IHRoaXMuc2hvd0VkaXRNb2RhbC5iaW5kKHRoaXMpLFxuICAgICAgdHlwZTogJ25vcm1hbCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBjYWxsYmFjazogdGhpcy5zaG93RGVsZXRlTW9kYWwuYmluZCh0aGlzKSxcbiAgICAgIGxhYmVsOiAnaW50ZXJmYWNlLmRlbGV0ZScsXG4gICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICB9LFxuICBdO1xuICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzOiBDb2x1bW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICB2aWV3VHlwZTogVmlld1R5cGUuVEVYVCxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIGtleTogJ3RpdGxlJyxcbiAgICAgIGxhYmVsOiAnc2VhcmNoRmllbGRzT3ZlcnZpZXcudGl0bGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmlld1R5cGU6IFZpZXdUeXBlLlRFWFQsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBrZXk6ICdrZXknLFxuICAgICAgbGFiZWw6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5rZXknLFxuICAgIH0sXG4gICAge1xuICAgICAgdmlld1R5cGU6IFZpZXdUeXBlLlRFWFQsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBrZXk6ICdwYXRoJyxcbiAgICAgIGxhYmVsOiAnc2VhcmNoRmllbGRzT3ZlcnZpZXcucGF0aCcsXG4gICAgfSxcbiAgICB7XG4gICAgICB2aWV3VHlwZTogVmlld1R5cGUuVEVYVCxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIGtleTogJ2RhdGFUeXBlJyxcbiAgICAgIGxhYmVsOiAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZGF0YVR5cGUnLFxuICAgIH0sXG4gICAge1xuICAgICAgdmlld1R5cGU6IFZpZXdUeXBlLlRFWFQsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBrZXk6ICdmaWVsZFR5cGUnLFxuICAgICAgbGFiZWw6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5maWVsZFR5cGUnLFxuICAgIH0sXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IGRyb3Bkb3duQ29sdW1ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PFRhYmxlQ29sdW1uPj4oW1xuICAgIHtcbiAgICAgIGxhYmVsVHJhbnNsYXRpb25LZXk6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5pZCcsXG4gICAgICBkYXRhS2V5OiAna2V5JyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsVHJhbnNsYXRpb25LZXk6ICdzZWFyY2hGaWVsZHNPdmVydmlldy50ZXh0JyxcbiAgICAgIGRhdGFLZXk6ICd2YWx1ZScsXG4gICAgfSxcbiAgXSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBEQVRBX1RZUEVTOiBBcnJheTxTZWFyY2hGaWVsZERhdGFUeXBlPiA9IFtcbiAgICAndGV4dCcsXG4gICAgJ251bWJlcicsXG4gICAgJ2RhdGUnLFxuICAgICdkYXRldGltZScsXG4gICAgJ2Jvb2xlYW4nLFxuICBdO1xuXG4gIHB1YmxpYyByZWFkb25seSBkYXRhVHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2VcbiAgICAuc3RyZWFtKCdrZXknKVxuICAgIC5waXBlKFxuICAgICAgbWFwKCgpID0+XG4gICAgICAgIHRoaXMuREFUQV9UWVBFUy5tYXAoZGF0YVR5cGUgPT4gKHtcbiAgICAgICAgICBpZDogZGF0YVR5cGUsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkcy4ke2RhdGFUeXBlfWApLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBkYXRhVHlwZUlzQm9vbGVhbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhVHlwZUlzVGV4dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBBTExfRklFTERfVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkRmllbGRUeXBlPiA9IFtcbiAgICAnc2luZ2xlJyxcbiAgICAncmFuZ2UnLFxuICAgICdzaW5nbGUtc2VsZWN0LWRyb3Bkb3duJyxcbiAgICAnbXVsdGktc2VsZWN0LWRyb3Bkb3duJyxcbiAgXTtcbiAgcHJpdmF0ZSByZWFkb25seSBOT05fVEVYVF9GSUVMRF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRGaWVsZFR5cGU+ID0gWydzaW5nbGUnLCAncmFuZ2UnXTtcbiAgcHJpdmF0ZSByZWFkb25seSBCT09MRUFOX0ZJRUxEX1RZUEVTOiBBcnJheTxTZWFyY2hGaWVsZEZpZWxkVHlwZT4gPSBbJ3NpbmdsZSddO1xuICBwdWJsaWMgcmVhZG9ubHkgZmllbGRUeXBlSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFNlbGVjdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGF0YVR5cGVJc0Jvb2xlYW4kLFxuICAgIHRoaXMuZGF0YVR5cGVJc1RleHQkLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2RhdGFUeXBlSXNCb29sZWFuLCBkYXRhVHlwZUlzVGV4dF0pID0+IHtcbiAgICAgIGlmIChkYXRhVHlwZUlzQm9vbGVhbikge1xuICAgICAgICByZXR1cm4gdGhpcy5CT09MRUFOX0ZJRUxEX1RZUEVTLm1hcChmaWVsZFR5cGUgPT4gKHtcbiAgICAgICAgICBpZDogZmllbGRUeXBlLFxuICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke2ZpZWxkVHlwZX1gKSxcbiAgICAgICAgfSkpO1xuICAgICAgfSBlbHNlIGlmICghZGF0YVR5cGVJc1RleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuTk9OX1RFWFRfRklFTERfVFlQRVMubWFwKGZpZWxkVHlwZSA9PiAoe1xuICAgICAgICAgIGlkOiBmaWVsZFR5cGUsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7ZmllbGRUeXBlfWApLFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLkFMTF9GSUVMRF9UWVBFUy5tYXAoZmllbGRUeXBlID0+ICh7XG4gICAgICAgIGlkOiBmaWVsZFR5cGUsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke2ZpZWxkVHlwZX1gKSxcbiAgICAgIH0pKTtcbiAgICB9KVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFUQ0hfVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkTWF0Y2hUeXBlPiA9IFsnZXhhY3QnLCAnbGlrZSddO1xuICBwdWJsaWMgcmVhZG9ubHkgbWF0Y2hUeXBlSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFNlbGVjdEl0ZW0+PiA9IHRoaXMudHJhbnNsYXRlU2VydmljZVxuICAgIC5zdHJlYW0oJ2tleScpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKCkgPT5cbiAgICAgICAgdGhpcy5NQVRDSF9UWVBFUy5tYXAobWF0Y2hUeXBlID0+ICh7XG4gICAgICAgICAgaWQ6IG1hdGNoVHlwZSxcbiAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHttYXRjaFR5cGV9YCksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHJpdmF0ZSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMucm91dGUucGFyYW1zLnBpcGUoXG4gICAgbWFwKHBhcmFtcyA9PiBwYXJhbXMubmFtZSB8fCAnJyksXG4gICAgZmlsdGVyKGRvY0RlZk5hbWUgPT4gISFkb2NEZWZOYW1lKSxcbiAgICB0YXAoKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZykgPT4gKHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUgPSBkb2N1bWVudERlZmluaXRpb25OYW1lKSlcbiAgKTtcblxuICBwcml2YXRlIGNhY2hlZFNlYXJjaEZpZWxkcyE6IEFycmF5PFNlYXJjaEZpZWxkPjtcblxuICBwdWJsaWMgc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQ6IGJvb2xlYW47XG4gIHB1YmxpYyBsb2FkaW5nU2VhcmNoRmllbGRzID0gdHJ1ZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlZnJlc2hTZWFyY2hGaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudWxsPihudWxsKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaEZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgdGhpcy5yZWZyZXNoU2VhcmNoRmllbGRzJCxcbiAgXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lXSkgPT5cbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldERvY3VtZW50U2VhcmNoRmllbGRzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpXG4gICAgKSxcbiAgICB0YXAoc2VhcmNoRmllbGRzID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PiB7XG4gICAgICAgIGlmIChzZWFyY2hGaWVsZHMgJiYgQXJyYXkuaXNBcnJheShzZWFyY2hGaWVsZHMpICYmIHNlYXJjaEZpZWxkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuc2V0RG93bmxvYWQoZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgc2VhcmNoRmllbGRzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSksXG4gICAgdGFwKHNlYXJjaEZpZWxkcyA9PiB7XG4gICAgICB0aGlzLmNhY2hlZFNlYXJjaEZpZWxkcyA9IHNlYXJjaEZpZWxkcztcbiAgICAgIHRoaXMubG9hZGluZ1NlYXJjaEZpZWxkcyA9IGZhbHNlO1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRyYW5zbGF0ZWRTZWFyY2hGaWVsZHMkOiBPYnNlcnZhYmxlPEFycmF5PFNlYXJjaEZpZWxkPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLnNlYXJjaEZpZWxkcyQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbc2VhcmNoRmllbGRzXSkgPT5cbiAgICAgIHNlYXJjaEZpZWxkcy5tYXAoc2VhcmNoRmllbGQgPT4gKHtcbiAgICAgICAgLi4uc2VhcmNoRmllbGQsXG4gICAgICAgIHRpdGxlOiBzZWFyY2hGaWVsZC50aXRsZSA/IHNlYXJjaEZpZWxkLnRpdGxlIDogJycsXG4gICAgICAgIGRhdGFUeXBlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzLiR7c2VhcmNoRmllbGQuZGF0YVR5cGV9YCksXG4gICAgICAgIG1hdGNoVHlwZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7c2VhcmNoRmllbGQubWF0Y2hUeXBlfWApLFxuICAgICAgICBmaWVsZFR5cGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke3NlYXJjaEZpZWxkLmZpZWxkVHlwZX1gKSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZmllbGRUeXBlSXNEcm9wZG93biQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VsZWN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RHJvcGRvd25EYXRhUHJvdmlkZXJzKCksXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbcHJvdmlkZXJzXSkgPT5cbiAgICAgIHByb3ZpZGVycy5tYXAocHJvdmlkZXIgPT4gKHtcbiAgICAgICAgaWQ6IHByb3ZpZGVyLFxuICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtwcm92aWRlcn1gKSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1vZGlmaWVkRHJvcGRvd25WYWx1ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNdWx0aUlucHV0VmFsdWVzPihbXSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGluaXRpYWxEcm9wZG93blZhbHVlcyQ6IE9ic2VydmFibGU8TXVsdGlJbnB1dFZhbHVlcz4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgIHRoaXMuZm9ybURhdGEkLFxuICBdKS5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxuICAgICAgKFtwcmV2RG9jdW1lbnREZWZpbml0aW9uTmFtZSwgcHJldkZvcm1EYXRhXSwgW2N1cnJEb2N1bWVudERlZmluaXRpb25OYW1lLCBjdXJyRm9ybURhdGFdKSA9PlxuICAgICAgICBwcmV2RG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PT0gY3VyckRvY3VtZW50RGVmaW5pdGlvbk5hbWUgJiZcbiAgICAgICAgcHJldkZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlciA9PT0gY3VyckZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlciAmJlxuICAgICAgICBwcmV2Rm9ybURhdGE/LmtleSA9PT0gY3VyckZvcm1EYXRhPy5rZXlcbiAgICApLFxuICAgIHN3aXRjaE1hcCgoW2RvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGZvcm1EYXRhXSkgPT4ge1xuICAgICAgaWYgKCFmb3JtRGF0YSB8fCAhZm9ybURhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgIC5nZXREcm9wZG93bkRhdGEoZm9ybURhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXIsIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGZvcm1EYXRhLmtleSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKGRyb3Bkb3duRGF0YSA9PlxuICAgICAgICAgICAgZHJvcGRvd25EYXRhXG4gICAgICAgICAgICAgID8gT2JqZWN0LmtleXMoZHJvcGRvd25EYXRhKS5tYXAoZHJvcGRvd25GaWVsZEtleSA9PiAoe1xuICAgICAgICAgICAgICAgICAga2V5OiBkcm9wZG93bkZpZWxkS2V5LFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IGRyb3Bkb3duRGF0YVtkcm9wZG93bkZpZWxkS2V5XSxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaG93TWF0Y2hUeXBlcyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRhdGFUeXBlSXNUZXh0JCxcbiAgICB0aGlzLmZpZWxkVHlwZUlzRHJvcGRvd24kLFxuICBdKS5waXBlKG1hcCgoW2RhdGFUeXBlSXNUZXh0LCBmaWVsZFR5cGVJc0Ryb3Bkb3duXSkgPT4gZGF0YVR5cGVJc1RleHQgJiYgIWZpZWxkVHlwZUlzRHJvcGRvd24pKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgc2hvd1JlYWRvbmx5RHJvcGRvd25UYWJsZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRhdGFUeXBlSXNUZXh0JCxcbiAgICB0aGlzLmZpZWxkVHlwZUlzRHJvcGRvd24kLFxuICAgIHRoaXMuZm9ybURhdGEkLFxuICBdKS5waXBlKFxuICAgIG1hcChcbiAgICAgIChbZGF0YVR5cGVJc1RleHQsIGZpZWxkVHlwZUlzRHJvcGRvd24sIGZvcm1EYXRhXSkgPT5cbiAgICAgICAgZGF0YVR5cGVJc1RleHQgJiZcbiAgICAgICAgZmllbGRUeXBlSXNEcm9wZG93biAmJlxuICAgICAgICAhIWZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlciAmJlxuICAgICAgICAhdGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhmb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIpXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaG93SW5wdXREcm9wZG93blRhYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGF0YVR5cGVJc1RleHQkLFxuICAgIHRoaXMuZmllbGRUeXBlSXNEcm9wZG93biQsXG4gICAgdGhpcy5mb3JtRGF0YSQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtkYXRhVHlwZUlzVGV4dCwgZmllbGRUeXBlSXNEcm9wZG93biwgZm9ybURhdGFdKSA9PlxuICAgICAgICBkYXRhVHlwZUlzVGV4dCAmJlxuICAgICAgICBmaWVsZFR5cGVJc0Ryb3Bkb3duICYmXG4gICAgICAgICEhZm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyICYmXG4gICAgICAgIHRoaXMuZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMoZm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgQ0FSQk9OX1RIRU1FID0gJ3doaXRlJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXJBbGwoW0Fycm93RG93bjE2LCBBcnJvd1VwMTZdKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5TZWxlY3RlZFNlYXJjaEZpZWxkU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3Blbk1vZGFsU2hvd2luZ1N1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2hGaWVsZENsaWNrZWQoc2VhcmNoRmllbGQ6IFNlYXJjaEZpZWxkLCBzZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0JC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShpbnB1dERpc2FibGVkID0+IHtcbiAgICAgIGlmICghaW5wdXREaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkID0gc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQ7XG4gICAgICAgIGNvbnN0IHNlYXJjaEZpZWxkVG9TZWxlY3QgPSB0aGlzLmNhY2hlZFNlYXJjaEZpZWxkcy5maW5kKFxuICAgICAgICAgIGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGQua2V5XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hGaWVsZCQubmV4dChzZWFyY2hGaWVsZFRvU2VsZWN0IHx8ICh7fSBhcyBTZWFyY2hGaWVsZCkpO1xuICAgICAgICB0aGlzLnNob3dNb2RhbCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGZvcm1WYWx1ZUNoYW5nZShkYXRhOiBTZWFyY2hGaWVsZCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZGF0YVR5cGVJc1RleHQkLCBkYXRhLmRhdGFUeXBlID09PSAndGV4dCcpO1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZGF0YVR5cGVJc0Jvb2xlYW4kLCBkYXRhLmRhdGFUeXBlID09PSAnYm9vbGVhbicpO1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZmllbGRUeXBlSXNEcm9wZG93biQsIHRoaXMuaXNGaWVsZFR5cGVEcm9wZG93bihkYXRhLmZpZWxkVHlwZSkpO1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMuZm9ybURhdGEkLCBkYXRhKTtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLnZhbGlkJCwgdGhpcy5pc1ZhbGlkKGRhdGEpKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBkcm9wZG93bkRhdGFsaXN0Q2hhbmdlKGRhdGE6IE11bHRpSW5wdXRPdXRwdXQpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGlmaWVkRHJvcGRvd25WYWx1ZXMkLm5leHQoZGF0YSBhcyBNdWx0aUlucHV0VmFsdWVzKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vdmVSb3dDbGljayhtb3ZlRXZlbnQ6IE1vdmVSb3dFdmVudCwgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qge2luZGV4LCBkaXJlY3Rpb259ID0gbW92ZUV2ZW50O1xuICAgIGNvbnN0IG1vdmVVcCA9IGRpcmVjdGlvbiA9PT0gTW92ZVJvd0RpcmVjdGlvbi5VUDtcbiAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbLi4udGhpcy5jYWNoZWRTZWFyY2hGaWVsZHNdO1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkUm93ID0gc2VhcmNoRmllbGRzW2luZGV4XTtcblxuICAgIGNvbnN0IHNlYXJjaEZpZWxkSW5kZXggPSBzZWFyY2hGaWVsZHMuZmluZEluZGV4KGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGRSb3cua2V5KTtcbiAgICBjb25zdCBmb3VuZFNlYXJjaEZpZWxkID0gey4uLnNlYXJjaEZpZWxkc1tzZWFyY2hGaWVsZEluZGV4XX07XG4gICAgY29uc3QgZmlsdGVyZWRTZWFyY2hGaWVsZHMgPSBzZWFyY2hGaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmtleSAhPT0gc2VhcmNoRmllbGRSb3cua2V5KTtcbiAgICBjb25zdCBtdWx0aXBsZVNlYXJjaEZpZWxkcyA9IHNlYXJjaEZpZWxkcz8ubGVuZ3RoID4gMTtcblxuICAgIGlmIChtdWx0aXBsZVNlYXJjaEZpZWxkcyAmJiBtb3ZlVXAgJiYgc2VhcmNoRmllbGRJbmRleCA+IDApIHtcbiAgICAgIGNvbnN0IHNlYXJjaEZpZWxkQmVmb3JlS2V5ID0gYCR7c2VhcmNoRmllbGRzW3NlYXJjaEZpZWxkSW5kZXggLSAxXS5rZXl9YDtcbiAgICAgIGNvbnN0IHNlYXJjaEZpZWxkQmVmb3JlSW5kZXggPSBmaWx0ZXJlZFNlYXJjaEZpZWxkcy5maW5kSW5kZXgoXG4gICAgICAgIGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGRCZWZvcmVLZXlcbiAgICAgICk7XG4gICAgICBmaWx0ZXJlZFNlYXJjaEZpZWxkcy5zcGxpY2Uoc2VhcmNoRmllbGRCZWZvcmVJbmRleCwgMCwgZm91bmRTZWFyY2hGaWVsZCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZpZWxkcyhkb2N1bWVudERlZmluaXRpb25OYW1lLCBmaWx0ZXJlZFNlYXJjaEZpZWxkcyk7XG4gICAgfSBlbHNlIGlmIChtdWx0aXBsZVNlYXJjaEZpZWxkcyAmJiAhbW92ZVVwICYmIHNlYXJjaEZpZWxkSW5kZXggPCBzZWFyY2hGaWVsZHM/Lmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2VhcmNoRmllbGRBZnRlcktleSA9IGAke3NlYXJjaEZpZWxkc1tzZWFyY2hGaWVsZEluZGV4ICsgMV0ua2V5fWA7XG4gICAgICBjb25zdCBzZWFyY2hGaWVsZEFmdGVySW5kZXggPSBmaWx0ZXJlZFNlYXJjaEZpZWxkcy5maW5kSW5kZXgoXG4gICAgICAgIGZpZWxkID0+IGZpZWxkLmtleSA9PT0gc2VhcmNoRmllbGRBZnRlcktleVxuICAgICAgKTtcbiAgICAgIGZpbHRlcmVkU2VhcmNoRmllbGRzLnNwbGljZShzZWFyY2hGaWVsZEFmdGVySW5kZXggKyAxLCAwLCBmb3VuZFNlYXJjaEZpZWxkKTtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmllbGRzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGZpbHRlcmVkU2VhcmNoRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25EZWxldGVTZWxlY3RlZFNlYXJjaEZpZWxkQ29uZmlybShzZWxlY3RlZFNlYXJjaEZpZWxkOiBTZWFyY2hGaWVsZCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0KCk7XG5cbiAgICBpZiAodGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhzZWxlY3RlZFNlYXJjaEZpZWxkPy5kcm9wZG93bkRhdGFQcm92aWRlcikpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgIC5kZWxldGVEcm9wZG93bkRhdGEoXG4gICAgICAgICAgc2VsZWN0ZWRTZWFyY2hGaWVsZD8uZHJvcGRvd25EYXRhUHJvdmlkZXIgPz8gJycsXG4gICAgICAgICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICBzZWxlY3RlZFNlYXJjaEZpZWxkLmtleVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgLmRlbGV0ZURvY3VtZW50U2VhcmNoKHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHNlbGVjdGVkU2VhcmNoRmllbGQua2V5KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgICAgdGhpcy5oaWRlTW9kYWwoKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlU2VhcmNoRmllbGQoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQoKTtcblxuICAgIHRoaXMuZm9ybURhdGEkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGZvcm1EYXRhID0+IHtcbiAgICAgIGlmICghZm9ybURhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWFwcGVkRm9ybURhdGE6IFNlYXJjaEZpZWxkID0ge1xuICAgICAgICAuLi5mb3JtRGF0YSxcbiAgICAgICAgbWF0Y2hUeXBlOlxuICAgICAgICAgICF0aGlzLmlzRmllbGRUeXBlRHJvcGRvd24oZm9ybURhdGE/LmZpZWxkVHlwZSkgJiYgZm9ybURhdGE/LmRhdGFUeXBlID09PSAndGV4dCdcbiAgICAgICAgICAgID8gZm9ybURhdGEubWF0Y2hUeXBlXG4gICAgICAgICAgICA6ICdleGFjdCcsXG4gICAgICAgIGZpZWxkVHlwZTogZm9ybURhdGEuZGF0YVR5cGUgIT09ICdib29sZWFuJyA/IGZvcm1EYXRhLmZpZWxkVHlwZSA6ICdzaW5nbGUnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcHJldkZvcm1EYXRhID0gdGhpcy5zZWxlY3RlZFNlYXJjaEZpZWxkJC52YWx1ZTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhwcmV2Rm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyKSAmJlxuICAgICAgICBwcmV2Rm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyICE9PSBtYXBwZWRGb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXJcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgICAgIC5kZWxldGVEcm9wZG93bkRhdGEoXG4gICAgICAgICAgICBwcmV2Rm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyID8/ICcnLFxuICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgIHByZXZGb3JtRGF0YT8ua2V5ID8/ICcnXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMobWFwcGVkRm9ybURhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXIpKSB7XG4gICAgICAgIHRoaXMubW9kaWZpZWREcm9wZG93blZhbHVlcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZHJvcGRvd25WYWx1ZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBkcm9wZG93blZhbHVlcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBrZXlWYWx1ZSkgPT4gKHsuLi5hY2MsIFtrZXlWYWx1ZS5rZXldOiBrZXlWYWx1ZS52YWx1ZX0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgICAgICAucG9zdERyb3Bkb3duRGF0YShcbiAgICAgICAgICAgICAgbWFwcGVkRm9ybURhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXIgPz8gJycsXG4gICAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICAgIG1hcHBlZEZvcm1EYXRhLmtleSxcbiAgICAgICAgICAgICAgcmVxdWVzdFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UucG9zdERvY3VtZW50U2VhcmNoKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIG1hcHBlZEZvcm1EYXRhKS5zdWJzY3JpYmUoXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgICAgICAgdGhpcy5oaWRlTW9kYWwoKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFNlYXJjaEZpZWxkcygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld0ZpZWxkcyA9IFsuLi50aGlzLmNhY2hlZFNlYXJjaEZpZWxkc107XG4gICAgICAgIGNvbnN0IGluZGV4VG9SZXBsYWNlID0gbmV3RmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5rZXkgPT09IG1hcHBlZEZvcm1EYXRhLmtleSk7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkRmllbGRzID0gbmV3RmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5rZXkgIT09IG1hcHBlZEZvcm1EYXRhLmtleSk7XG5cbiAgICAgICAgZmlsdGVyZWRGaWVsZHMuc3BsaWNlKGluZGV4VG9SZXBsYWNlLCAwLCBtYXBwZWRGb3JtRGF0YSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmllbGRzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGZpbHRlcmVkRmllbGRzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTZWFyY2hGaWVsZHMoXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLFxuICAgIG5ld1NlYXJjaEZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0KCk7XG5cbiAgICB0aGlzLmRvY3VtZW50U2VydmljZS5wdXREb2N1bWVudFNlYXJjaChkb2N1bWVudERlZmluaXRpb25OYW1lLCBuZXdTZWFyY2hGaWVsZHMpLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMoKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uTW9kYWxDbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXh0SWZDaGFuZ2VkKGJlaGF2aW91clN1YmplY3QkOiBCZWhhdmlvclN1YmplY3Q8YW55PiwgdmFsdWU6IGFueSkge1xuICAgIGlmIChKU09OLnN0cmluZ2lmeShiZWhhdmlvdXJTdWJqZWN0JC52YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkge1xuICAgICAgYmVoYXZpb3VyU3ViamVjdCQubmV4dCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkKGRhdGE6IFNlYXJjaEZpZWxkKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsaWRNYXRjaFR5cGUgPVxuICAgICAgZGF0YS5kYXRhVHlwZSA9PT0gJ3RleHQnICYmICF0aGlzLmlzRmllbGRUeXBlRHJvcGRvd24oZGF0YS5maWVsZFR5cGUpID8gZGF0YS5tYXRjaFR5cGUgOiB0cnVlO1xuICAgIGNvbnN0IHZhbGlkRHJvcGRvd25EYXRhUHJvdmlkZXIgPSB0aGlzLmlzRmllbGRUeXBlRHJvcGRvd24oZGF0YS5maWVsZFR5cGUpXG4gICAgICA/IGRhdGEuZHJvcGRvd25EYXRhUHJvdmlkZXJcbiAgICAgIDogdHJ1ZTtcbiAgICBjb25zdCBjb250YWluc0FsbFZhbHVlcyA9ICEhKFxuICAgICAgZGF0YS5rZXkgJiZcbiAgICAgIGRhdGEuZGF0YVR5cGUgJiZcbiAgICAgIHZhbGlkTWF0Y2hUeXBlICYmXG4gICAgICB2YWxpZERyb3Bkb3duRGF0YVByb3ZpZGVyICYmXG4gICAgICBkYXRhLnBhdGggJiZcbiAgICAgIGRhdGEuZmllbGRUeXBlXG4gICAgKTtcbiAgICBjb25zdCBrZXlJc1VuaXF1ZSA9XG4gICAgICAhdGhpcy5zZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZCB8fFxuICAgICAgdGhpcy5jYWNoZWRTZWFyY2hGaWVsZHMuZmluZEluZGV4KGZpZWxkID0+IGZpZWxkLmtleSA9PT0gZGF0YS5rZXkpID09PSAtMTtcblxuICAgIHJldHVybiBjb250YWluc0FsbFZhbHVlcyAmJiBrZXlJc1VuaXF1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGaWVsZFR5cGVEcm9wZG93bihmaWVsZFR5cGU/OiBTZWFyY2hGaWVsZEZpZWxkVHlwZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWVsZFR5cGUgPT09ICdzaW5nbGUtc2VsZWN0LWRyb3Bkb3duJyB8fCBmaWVsZFR5cGUgPT09ICdtdWx0aS1zZWxlY3QtZHJvcGRvd24nO1xuICB9XG5cbiAgcHJpdmF0ZSBkcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhkcm9wZG93bkRhdGFQcm92aWRlcj86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkcm9wZG93bkRhdGFQcm92aWRlciA9PT0gJ2Ryb3Bkb3duRGF0YWJhc2VEYXRhUHJvdmlkZXInO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuU2VsZWN0ZWRTZWFyY2hGaWVsZFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hGaWVsZCQuc3Vic2NyaWJlKHNlbGVjdGVkU2VhcmNoRmllbGQgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0ZWRTZWFyY2hGaWVsZCkgdGhpcy5zaG93TW9kYWwoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb3Blbk1vZGFsU2hvd2luZ1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubW9kYWxTaG93aW5nJC5zdWJzY3JpYmUobW9kYWxTaG93aW5nID0+IHtcbiAgICAgICAgaWYgKG1vZGFsU2hvd2luZykge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93RmllbGRzJC5uZXh0KHRydWUpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93RmllbGRzJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB9LCBDQVJCT05fQ09OU1RBTlRTLm1vZGFsQW5pbWF0aW9uTXMpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldERvd25sb2FkKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZywgc2VhcmNoRmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4pOiB2b2lkIHtcbiAgICB0aGlzLmRvd25sb2FkTmFtZSQubmV4dChgJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS5qc29uYCk7XG4gICAgdGhpcy5kb3dubG9hZFVybCQubmV4dChcbiAgICAgIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXG4gICAgICAgICdkYXRhOnRleHQvanNvbjtjaGFyc2V0PVVURi04LCcgK1xuICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh7c2VhcmNoRmllbGRzfSwgbnVsbCwgMikpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZUlucHV0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0JC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsU2hvd2luZyQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxTaG93aW5nJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFNlYXJjaEZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dEZWxldGVNb2RhbChzZWFyY2hGaWVsZDogU2VhcmNoRmllbGQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRGVsZXRlU2VhcmNoRmllbGQkLm5leHQoc2VhcmNoRmllbGQpO1xuICAgIHRoaXMuc2hvd0RlbGV0ZU1vZGFsJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93RWRpdE1vZGFsKHNlYXJjaEZpZWxkOiBTZWFyY2hGaWVsZCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoRmllbGRDbGlja2VkKHNlYXJjaEZpZWxkLCBmYWxzZSk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBzZWFyY2hGaWVsZHM6IHRyYW5zbGF0ZWRTZWFyY2hGaWVsZHMkIHwgYXN5bmMsXG4gICAgZG93bmxvYWRVcmw6IGRvd25sb2FkVXJsJCB8IGFzeW5jLFxuICAgIGRvd25sb2FkTmFtZTogZG93bmxvYWROYW1lJCB8IGFzeW5jLFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUkIHwgYXN5bmMsXG4gICAgdmFsaWQ6IHZhbGlkJCB8IGFzeW5jLFxuICAgIGRpc2FibGVJbnB1dDogZGlzYWJsZUlucHV0JCB8IGFzeW5jXG4gIH0gYXMgb2JzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3Q7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kYWw7IGNvbnRleHQ6IHtvYnM6IG9ic31cIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48dmFsdGltby1jb25maXJtYXRpb24tbW9kYWxcbiAgY29uZmlybUJ1dHRvblRleHRUcmFuc2xhdGlvbktleT1cImludGVyZmFjZS5kZWxldGVcIlxuICBjb25maXJtQnV0dG9uVHlwZT1cImRhbmdlclwiXG4gIGNvbnRlbnRUcmFuc2xhdGlvbktleT1cImRvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLmRlbGV0ZVRleHRcIlxuICBbb3V0cHV0T25Db25maXJtXT1cInNlbGVjdGVkRGVsZXRlU2VhcmNoRmllbGQkIHwgYXN5bmNcIlxuICBbc2hvd01vZGFsU3ViamVjdCRdPVwic2hvd0RlbGV0ZU1vZGFsJFwiXG4gIHRpdGxlVHJhbnNsYXRpb25LZXk9XCJpbnRlcmZhY2UuZGVsZXRlXCJcbiAgKGNvbmZpcm1FdmVudCk9XCJvbkRlbGV0ZVNlbGVjdGVkU2VhcmNoRmllbGRDb25maXJtKCRldmVudClcIlxuPjwvdmFsdGltby1jb25maXJtYXRpb24tbW9kYWw+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9ucyBsZXQtb2JzPVwib2JzXCI+XG4gIDxidXR0b25cbiAgICBjZHNCdXR0b249XCJnaG9zdFwiXG4gICAgaWNvbk9ubHk9XCJ0cnVlXCJcbiAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAhb2JzLmRvd25sb2FkVXJsIHx8ICFvYnMuZG93bmxvYWROYW1lIHx8IG9icy5zZWFyY2hGaWVsZHM/Lmxlbmd0aCA8PSAwIHx8IG9icy5kaXNhYmxlSW5wdXRcbiAgICBcIlxuICAgIFtkb3dubG9hZF09XCJvYnMuZG93bmxvYWROYW1lXCJcbiAgICBbaHJlZl09XCJvYnMuZG93bmxvYWRVcmxcIlxuICA+XG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImRvd25sb2FkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1NlYXJjaEZpZWxkcyB8fCBvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAoY2xpY2spPVwic2VhcmNoRmllbGRDbGlja2VkKCRldmVudCwgdHJ1ZSlcIlxuICA+XG4gICAgPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuXG4gICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmFkZFJvdycgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3QgbGV0LW9icz1cIm9ic1wiPlxuICA8dmFsdGltby1jYXJib24tbGlzdFxuICAgIFthY3Rpb25JdGVtc109XCJhY3Rpb25JdGVtc1wiXG4gICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgIFtoZWFkZXJdPVwiZmFsc2VcIlxuICAgIFtpdGVtc109XCJvYnMuc2VhcmNoRmllbGRzXCJcbiAgICBbbG9hZGluZ109XCIhb2JzLnNlYXJjaEZpZWxkc1wiXG4gICAgW21vdmluZ1Jvd3NFbmFibGVkXT1cInRydWVcIlxuICAgIChyb3dDbGlja2VkKT1cInNlYXJjaEZpZWxkQ2xpY2tlZCgkZXZlbnQsIGZhbHNlKVwiXG4gICAgKG1vdmVSb3cpPVwib25Nb3ZlUm93Q2xpY2soJGV2ZW50LCBvYnMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgY2FyYm9uVG9vbGJhckNvbnRlbnRcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uczsgY29udGV4dDoge29iczogb2JzfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5ub1NlYXJjaGZpZWxkc1RpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3Lm5vU2VhcmNoZmllbGRzRGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIDwvdmFsdGltby1jYXJib24tbGlzdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kYWwgbGV0LW9icz1cIm9ic1wiPlxuICA8Y2RzLW1vZGFsXG4gICAgdmFsdGltb0Nkc01vZGFsXG4gICAgW3RpdGxlXT1cIlxuICAgICAgc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGRcbiAgICAgICAgPyAoJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmFkZFJvdycgfCB0cmFuc2xhdGUpXG4gICAgICAgIDogKCdzZWFyY2hGaWVsZHNPdmVydmlldy5lZGl0JyB8IHRyYW5zbGF0ZSlcbiAgICBcIlxuICAgIFtvcGVuXT1cIm1vZGFsU2hvd2luZyQgfCBhc3luY1wiXG4gICAgW3Nob3dGb290ZXJdPVwidHJ1ZVwiXG4gID5cbiAgICA8Y2RzLW1vZGFsLWhlYWRlciBbc2hvd0Nsb3NlQnV0dG9uXT1cInRydWVcIiAoY2xvc2VTZWxlY3QpPVwib25Nb2RhbENsb3NlKClcIj5cbiAgICAgIDxoMyBjZHNNb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICAgIHt7XG4gICAgICAgICAgKHNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkID8gJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmFkZFJvdycgOiAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZWRpdCcpXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICB9fVxuICAgICAgPC9oMz5cbiAgICA8L2Nkcy1tb2RhbC1oZWFkZXI+XG5cbiAgICA8c2VjdGlvbiBjZHNNb2RhbENvbnRlbnQ+XG4gICAgICA8di1mb3JtXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJmb3JtVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgKHNob3dGaWVsZHMkIHwgYXN5bmMpICYmIHtcbiAgICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWxlY3RlZFNlYXJjaEZpZWxkJCB8IGFzeW5jXG4gICAgICAgICAgfSBhcyBzZWFyY2hPYnNcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHYtaW5wdXRcbiAgICAgICAgICBuYW1lPVwidGl0bGVcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtkZWZhdWx0VmFsdWVdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy50aXRsZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdi1pbnB1dD5cblxuICAgICAgICA8di1pbnB1dFxuICAgICAgICAgIG5hbWU9XCJrZXlcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcua2V5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8ua2V5XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dCB8fCAhc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICBbd2lkdGhQeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmtleScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdi1pbnB1dD5cblxuICAgICAgICA8di1pbnB1dFxuICAgICAgICAgIG5hbWU9XCJwYXRoXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnBhdGgnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtkZWZhdWx0VmFsdWVdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy5wYXRoXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMucGF0aCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdi1pbnB1dD5cblxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cImRhdGFUeXBlSXRlbXMkIHwgYXN5bmMgYXMgZGF0YVR5cGVJdGVtc1wiXG4gICAgICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJvcFVwXT1cImZhbHNlXCJcbiAgICAgICAgICBbaXRlbXNdPVwiZGF0YVR5cGVJdGVtc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5kYXRhVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICBuYW1lPVwiZGF0YVR5cGVcIlxuICAgICAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRdPVwic2VhcmNoT2JzLnNlYXJjaEZpZWxkPy5kYXRhVHlwZVwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmRhdGFUeXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2NhcmJvblRoZW1lXT1cIkNBUkJPTl9USEVNRVwiXG4gICAgICAgID48L3Ytc2VsZWN0PlxuXG4gICAgICAgIDx2LXNlbGVjdFxuICAgICAgICAgICpuZ0lmPVwiKHNob3dNYXRjaFR5cGVzJCB8IGFzeW5jKSAmJiAobWF0Y2hUeXBlSXRlbXMkIHwgYXN5bmMpIGFzIG1hdGNoVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgIFtkcm9wVXBdPVwiZmFsc2VcIlxuICAgICAgICAgIFtpdGVtc109XCJtYXRjaFR5cGVJdGVtc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5tYXRjaFR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgbmFtZT1cIm1hdGNoVHlwZVwiXG4gICAgICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/Lm1hdGNoVHlwZVwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLm1hdGNoVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+PC92LXNlbGVjdD5cblxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cImZpZWxkVHlwZUl0ZW1zJCB8IGFzeW5jIGFzIGZpZWxkVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgIFtkcm9wVXBdPVwiZmFsc2VcIlxuICAgICAgICAgIFtpdGVtc109XCJmaWVsZFR5cGVJdGVtc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5maWVsZFR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgbmFtZT1cImZpZWxkVHlwZVwiXG4gICAgICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/LmZpZWxkVHlwZVwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmZpZWxkVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+PC92LXNlbGVjdD5cblxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGZpZWxkVHlwZUlzRHJvcGRvd24kIHwgYXN5bmMpICYmXG4gICAgICAgICAgICAoZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lcyQgfCBhc3luYykgYXMgZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lc1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJvcFVwXT1cImZhbHNlXCJcbiAgICAgICAgICBbaXRlbXNdPVwiZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5kcm9wZG93bkRhdGFQcm92aWRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICAgICAgbmFtZT1cImRyb3Bkb3duRGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8uZHJvcGRvd25EYXRhUHJvdmlkZXJcIlxuICAgICAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5kcm9wZG93bkRhdGFQcm92aWRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+PC92LXNlbGVjdD5cblxuICAgICAgICA8dmFsdGltby1jYXJib24tbXVsdGktaW5wdXRcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKHNob3dJbnB1dERyb3Bkb3duVGFibGUkIHwgYXN5bmMpICYmXG4gICAgICAgICAgICAoaW5pdGlhbERyb3Bkb3duVmFsdWVzJCB8IGFzeW5jKSBhcyBpbml0aWFsRHJvcGRvd25WYWx1ZXNcbiAgICAgICAgICBcIlxuICAgICAgICAgIG5hbWU9XCJkcm9wZG93blZhbHVlc1wiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5kcm9wZG93bkxpc3RWYWx1ZXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICB0eXBlPVwia2V5VmFsdWVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbZGVmYXVsdFZhbHVlc109XCJpbml0aWFsRHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgIFttYXJnaW5dPVwidHJ1ZVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5kcm9wZG93bkxpc3RWYWx1ZXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZHJvcGRvd25EYXRhbGlzdENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBbY2FyYm9uVGhlbWVdPVwiQ0FSQk9OX1RIRU1FXCJcbiAgICAgICAgPlxuICAgICAgICA8L3ZhbHRpbW8tY2FyYm9uLW11bHRpLWlucHV0PlxuXG4gICAgICAgIDx2LXRhYmxlXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChzaG93UmVhZG9ubHlEcm9wZG93blRhYmxlJCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgKGluaXRpYWxEcm9wZG93blZhbHVlcyQgfCBhc3luYykgYXMgaW5pdGlhbERyb3Bkb3duVmFsdWVzXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbaXRlbXNdPVwiaW5pdGlhbERyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICBbY29sdW1uc109XCJkcm9wZG93bkNvbHVtbnMkIHwgYXN5bmNcIlxuICAgICAgICAgIFtzaG93RWRpdEJ1dHRvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgIFtpdGVtc1RyYW5zbGF0aW9uS2V5XT1cIidzZWFyY2hGaWVsZHNPdmVydmlldydcIlxuICAgICAgICAgIFtzaG93UGFnaW5hdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgW21vYmlsZUJyZWFrcG9pbnRQeF09XCIyMDBcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+PC92LXRhYmxlPlxuICAgICAgPC92LWZvcm0+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPGNkcy1tb2RhbC1mb290ZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc0Zvb3Rlck1vZGFsOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9jZHMtbW9kYWwtZm9vdGVyPlxuICA8L2Nkcy1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uc0Zvb3Rlck1vZGFsIGxldC1vYnM9XCJvYnNcIj5cbiAgPGJ1dHRvbiBjZHNCdXR0b249XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwib25Nb2RhbENsb3NlKClcIiBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiPlxuICAgIHt7ICdpbnRlcmZhY2UuY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgY2RzQnV0dG9uPVwicHJpbWFyeVwiXG4gICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXQgfHwgIW9icy52YWxpZFwiXG4gICAgKGNsaWNrKT1cInNhdmVTZWFyY2hGaWVsZChvYnMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcIlxuICA+XG4gICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnN1Ym1pdCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzL2Rvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtZmllbGRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFHWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUVMLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFNaEIsdUJBQXVCLEVBQ3ZCLFFBQVEsR0FDVCxNQUFNLHFCQUFxQixDQUFDO0FBUzdCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUVILEVBQUUsRUFDRixZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVFkLE1BQU0sT0FBTyxzQ0FBc0M7SUFnUmpELFlBQ21CLGVBQWdDLEVBQ2hDLEtBQXFCLEVBQ3JCLGdCQUFrQyxFQUNsQyxTQUF1QixFQUN2QixXQUF3QjtRQUp4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LElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxlQUFlLENBQUMsV0FBd0I7UUFDOUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxhQUFhLENBQUMsV0FBd0I7UUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDOytHQTNqQlUsc0NBQXNDO21HQUF0QyxzQ0FBc0MseUhDckVuRCw2cVZBb1NBOzs0RkQvTmEsc0NBQXNDO2tCQU5sRCxTQUFTOytCQUNFLDBDQUEwQyxtQkFHbkMsdUJBQXVCLENBQUMsTUFBTTtxTUFHckMsV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXIsIFNhZmVVcmx9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QXJyb3dEb3duMTYsIEFycm93VXAxNn0gZnJvbSAnQGNhcmJvbi9pY29ucyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aW9uSXRlbSxcbiAgQ0FSQk9OX0NPTlNUQU5UUyxcbiAgQ29sdW1uQ29uZmlnLFxuICBNb3ZlUm93RGlyZWN0aW9uLFxuICBNb3ZlUm93RXZlbnQsXG4gIE11bHRpSW5wdXRPdXRwdXQsXG4gIE11bHRpSW5wdXRWYWx1ZXMsXG4gIFNlbGVjdEl0ZW0sXG4gIFRhYmxlQ29sdW1uLFxuICBWYWx1ZVBhdGhTZWxlY3RvclByZWZpeCxcbiAgVmlld1R5cGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgU2VhcmNoRmllbGQsXG4gIFNlYXJjaEZpZWxkRGF0YVR5cGUsXG4gIFNlYXJjaEZpZWxkRmllbGRUeXBlLFxuICBTZWFyY2hGaWVsZE1hdGNoVHlwZSxcbn0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0ljb25TZXJ2aWNlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llck1hbmFnZW1lbnRTZWFyY2hGaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBPdXRwdXQoKSBzZWFyY2hGaWVsZDogRXZlbnRFbWl0dGVyPFNlYXJjaEZpZWxkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZG93bmxvYWROYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHB1YmxpYyByZWFkb25seSBkb3dubG9hZFVybCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNhZmVVcmwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBkaXNhYmxlSW5wdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZFNlYXJjaEZpZWxkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoRmllbGQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZERlbGV0ZVNlYXJjaEZpZWxkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoRmllbGQgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwdWJsaWMgcmVhZG9ubHkgZm9ybURhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hGaWVsZCB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsaWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWFkb25seSBzaG93RmllbGRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgbW9kYWxTaG93aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvd0RlbGV0ZU1vZGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFjdGlvbkl0ZW1zOiBBY3Rpb25JdGVtW10gPSBbXG4gICAge1xuICAgICAgbGFiZWw6ICdpbnRlcmZhY2UuZWRpdCcsXG4gICAgICBjYWxsYmFjazogdGhpcy5zaG93RWRpdE1vZGFsLmJpbmQodGhpcyksXG4gICAgICB0eXBlOiAnbm9ybWFsJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGNhbGxiYWNrOiB0aGlzLnNob3dEZWxldGVNb2RhbC5iaW5kKHRoaXMpLFxuICAgICAgbGFiZWw6ICdpbnRlcmZhY2UuZGVsZXRlJyxcbiAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgIH0sXG4gIF07XG4gIHB1YmxpYyByZWFkb25seSBmaWVsZHM6IENvbHVtbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAga2V5OiAndGl0bGUnLFxuICAgICAgbGFiZWw6ICdzZWFyY2hGaWVsZHNPdmVydmlldy50aXRsZScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2aWV3VHlwZTogVmlld1R5cGUuVEVYVCxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIGtleTogJ2tleScsXG4gICAgICBsYWJlbDogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmtleScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2aWV3VHlwZTogVmlld1R5cGUuVEVYVCxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIGtleTogJ3BhdGgnLFxuICAgICAgbGFiZWw6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5wYXRoJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHZpZXdUeXBlOiBWaWV3VHlwZS5URVhULFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAga2V5OiAnZGF0YVR5cGUnLFxuICAgICAgbGFiZWw6ICdzZWFyY2hGaWVsZHNPdmVydmlldy5kYXRhVHlwZScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2aWV3VHlwZTogVmlld1R5cGUuVEVYVCxcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgIGtleTogJ2ZpZWxkVHlwZScsXG4gICAgICBsYWJlbDogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmZpZWxkVHlwZScsXG4gICAgfSxcbiAgXTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZHJvcGRvd25Db2x1bW5zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VGFibGVDb2x1bW4+PihbXG4gICAge1xuICAgICAgbGFiZWxUcmFuc2xhdGlvbktleTogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmlkJyxcbiAgICAgIGRhdGFLZXk6ICdrZXknLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWxUcmFuc2xhdGlvbktleTogJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnRleHQnLFxuICAgICAgZGF0YUtleTogJ3ZhbHVlJyxcbiAgICB9LFxuICBdKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERBVEFfVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkRGF0YVR5cGU+ID0gW1xuICAgICd0ZXh0JyxcbiAgICAnbnVtYmVyJyxcbiAgICAnZGF0ZScsXG4gICAgJ2RhdGV0aW1lJyxcbiAgICAnYm9vbGVhbicsXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFUeXBlSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFNlbGVjdEl0ZW0+PiA9IHRoaXMudHJhbnNsYXRlU2VydmljZVxuICAgIC5zdHJlYW0oJ2tleScpXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKCkgPT5cbiAgICAgICAgdGhpcy5EQVRBX1RZUEVTLm1hcChkYXRhVHlwZSA9PiAoe1xuICAgICAgICAgIGlkOiBkYXRhVHlwZSxcbiAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzLiR7ZGF0YVR5cGV9YCksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRhdGFUeXBlSXNCb29sZWFuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFUeXBlSXNUZXh0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IEFMTF9GSUVMRF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRGaWVsZFR5cGU+ID0gW1xuICAgICdzaW5nbGUnLFxuICAgICdyYW5nZScsXG4gICAgJ3NpbmdsZS1zZWxlY3QtZHJvcGRvd24nLFxuICAgICdtdWx0aS1zZWxlY3QtZHJvcGRvd24nLFxuICBdO1xuICBwcml2YXRlIHJlYWRvbmx5IE5PTl9URVhUX0ZJRUxEX1RZUEVTOiBBcnJheTxTZWFyY2hGaWVsZEZpZWxkVHlwZT4gPSBbJ3NpbmdsZScsICdyYW5nZSddO1xuICBwcml2YXRlIHJlYWRvbmx5IEJPT0xFQU5fRklFTERfVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkRmllbGRUeXBlPiA9IFsnc2luZ2xlJ107XG4gIHB1YmxpYyByZWFkb25seSBmaWVsZFR5cGVJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VsZWN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kYXRhVHlwZUlzQm9vbGVhbiQsXG4gICAgdGhpcy5kYXRhVHlwZUlzVGV4dCQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbZGF0YVR5cGVJc0Jvb2xlYW4sIGRhdGFUeXBlSXNUZXh0XSkgPT4ge1xuICAgICAgaWYgKGRhdGFUeXBlSXNCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkJPT0xFQU5fRklFTERfVFlQRVMubWFwKGZpZWxkVHlwZSA9PiAoe1xuICAgICAgICAgIGlkOiBmaWVsZFR5cGUsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7ZmllbGRUeXBlfWApLFxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2UgaWYgKCFkYXRhVHlwZUlzVGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5OT05fVEVYVF9GSUVMRF9UWVBFUy5tYXAoZmllbGRUeXBlID0+ICh7XG4gICAgICAgICAgaWQ6IGZpZWxkVHlwZSxcbiAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtmaWVsZFR5cGV9YCksXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuQUxMX0ZJRUxEX1RZUEVTLm1hcChmaWVsZFR5cGUgPT4gKHtcbiAgICAgICAgaWQ6IGZpZWxkVHlwZSxcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7ZmllbGRUeXBlfWApLFxuICAgICAgfSkpO1xuICAgIH0pXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBNQVRDSF9UWVBFUzogQXJyYXk8U2VhcmNoRmllbGRNYXRjaFR5cGU+ID0gWydleGFjdCcsICdsaWtlJ107XG4gIHB1YmxpYyByZWFkb25seSBtYXRjaFR5cGVJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VsZWN0SXRlbT4+ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgLnN0cmVhbSgna2V5JylcbiAgICAucGlwZShcbiAgICAgIG1hcCgoKSA9PlxuICAgICAgICB0aGlzLk1BVENIX1RZUEVTLm1hcChtYXRjaFR5cGUgPT4gKHtcbiAgICAgICAgICBpZDogbWF0Y2hUeXBlLFxuICAgICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke21hdGNoVHlwZX1gKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKTtcblxuICBwcml2YXRlIF9kb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25OYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcy5uYW1lIHx8ICcnKSxcbiAgICBmaWx0ZXIoZG9jRGVmTmFtZSA9PiAhIWRvY0RlZk5hbWUpLFxuICAgIHRhcCgoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKSA9PiAodGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpKVxuICApO1xuXG4gIHByaXZhdGUgY2FjaGVkU2VhcmNoRmllbGRzITogQXJyYXk8U2VhcmNoRmllbGQ+O1xuXG4gIHB1YmxpYyBzZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZDogYm9vbGVhbjtcbiAgcHVibGljIGxvYWRpbmdTZWFyY2hGaWVsZHMgPSB0cnVlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaFNlYXJjaEZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoRmllbGRzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWFyY2hGaWVsZD4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMkLFxuICBdKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoW2RvY3VtZW50RGVmaW5pdGlvbk5hbWVdKSA9PlxuICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2UuZ2V0RG9jdW1lbnRTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICApLFxuICAgIHRhcChzZWFyY2hGaWVsZHMgPT4ge1xuICAgICAgdGhpcy5kb2N1bWVudERlZmluaXRpb25OYW1lJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShkb2N1bWVudERlZmluaXRpb25OYW1lID0+IHtcbiAgICAgICAgaWYgKHNlYXJjaEZpZWxkcyAmJiBBcnJheS5pc0FycmF5KHNlYXJjaEZpZWxkcykgJiYgc2VhcmNoRmllbGRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5zZXREb3dubG9hZChkb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWFyY2hGaWVsZHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSxcbiAgICB0YXAoc2VhcmNoRmllbGRzID0+IHtcbiAgICAgIHRoaXMuY2FjaGVkU2VhcmNoRmllbGRzID0gc2VhcmNoRmllbGRzO1xuICAgICAgdGhpcy5sb2FkaW5nU2VhcmNoRmllbGRzID0gZmFsc2U7XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsYXRlZFNlYXJjaEZpZWxkcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuc2VhcmNoRmllbGRzJCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtzZWFyY2hGaWVsZHNdKSA9PlxuICAgICAgc2VhcmNoRmllbGRzLm1hcChzZWFyY2hGaWVsZCA9PiAoe1xuICAgICAgICAuLi5zZWFyY2hGaWVsZCxcbiAgICAgICAgdGl0bGU6IHNlYXJjaEZpZWxkLnRpdGxlID8gc2VhcmNoRmllbGQudGl0bGUgOiAnJyxcbiAgICAgICAgZGF0YVR5cGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHMuJHtzZWFyY2hGaWVsZC5kYXRhVHlwZX1gKSxcbiAgICAgICAgbWF0Y2hUeXBlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc2VhcmNoRmllbGRzT3ZlcnZpZXcuJHtzZWFyY2hGaWVsZC5tYXRjaFR5cGV9YCksXG4gICAgICAgIGZpZWxkVHlwZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkc092ZXJ2aWV3LiR7c2VhcmNoRmllbGQuZmllbGRUeXBlfWApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWVsZFR5cGVJc0Ryb3Bkb3duJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSBkcm9wZG93bkRhdGFQcm92aWRlck5hbWVzJDogT2JzZXJ2YWJsZTxBcnJheTxTZWxlY3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREcm9wZG93bkRhdGFQcm92aWRlcnMoKSxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtwcm92aWRlcnNdKSA9PlxuICAgICAgcHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiAoe1xuICAgICAgICBpZDogcHJvdmlkZXIsXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBzZWFyY2hGaWVsZHNPdmVydmlldy4ke3Byb3ZpZGVyfWApLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kaWZpZWREcm9wZG93blZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE11bHRpSW5wdXRWYWx1ZXM+KFtdKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaW5pdGlhbERyb3Bkb3duVmFsdWVzJDogT2JzZXJ2YWJsZTxNdWx0aUlucHV0VmFsdWVzPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQsXG4gICAgdGhpcy5mb3JtRGF0YSQsXG4gIF0pLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXG4gICAgICAoW3ByZXZEb2N1bWVudERlZmluaXRpb25OYW1lLCBwcmV2Rm9ybURhdGFdLCBbY3VyckRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIGN1cnJGb3JtRGF0YV0pID0+XG4gICAgICAgIHByZXZEb2N1bWVudERlZmluaXRpb25OYW1lID09PSBjdXJyRG9jdW1lbnREZWZpbml0aW9uTmFtZSAmJlxuICAgICAgICBwcmV2Rm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyID09PSBjdXJyRm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyICYmXG4gICAgICAgIHByZXZGb3JtRGF0YT8ua2V5ID09PSBjdXJyRm9ybURhdGE/LmtleVxuICAgICksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgZm9ybURhdGFdKSA9PiB7XG4gICAgICBpZiAoIWZvcm1EYXRhIHx8ICFmb3JtRGF0YS5kcm9wZG93bkRhdGFQcm92aWRlcikge1xuICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgICAgLmdldERyb3Bkb3duRGF0YShmb3JtRGF0YS5kcm9wZG93bkRhdGFQcm92aWRlciwgZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgZm9ybURhdGEua2V5KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoZHJvcGRvd25EYXRhID0+XG4gICAgICAgICAgICBkcm9wZG93bkRhdGFcbiAgICAgICAgICAgICAgPyBPYmplY3Qua2V5cyhkcm9wZG93bkRhdGEpLm1hcChkcm9wZG93bkZpZWxkS2V5ID0+ICh7XG4gICAgICAgICAgICAgICAgICBrZXk6IGRyb3Bkb3duRmllbGRLZXksXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogZHJvcGRvd25EYXRhW2Ryb3Bkb3duRmllbGRLZXldLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICA6IFtdXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNob3dNYXRjaFR5cGVzJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGF0YVR5cGVJc1RleHQkLFxuICAgIHRoaXMuZmllbGRUeXBlSXNEcm9wZG93biQsXG4gIF0pLnBpcGUobWFwKChbZGF0YVR5cGVJc1RleHQsIGZpZWxkVHlwZUlzRHJvcGRvd25dKSA9PiBkYXRhVHlwZUlzVGV4dCAmJiAhZmllbGRUeXBlSXNEcm9wZG93bikpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzaG93UmVhZG9ubHlEcm9wZG93blRhYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGF0YVR5cGVJc1RleHQkLFxuICAgIHRoaXMuZmllbGRUeXBlSXNEcm9wZG93biQsXG4gICAgdGhpcy5mb3JtRGF0YSQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtkYXRhVHlwZUlzVGV4dCwgZmllbGRUeXBlSXNEcm9wZG93biwgZm9ybURhdGFdKSA9PlxuICAgICAgICBkYXRhVHlwZUlzVGV4dCAmJlxuICAgICAgICBmaWVsZFR5cGVJc0Ryb3Bkb3duICYmXG4gICAgICAgICEhZm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyICYmXG4gICAgICAgICF0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyU3VwcG9ydHNVcGRhdGVzKGZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlcilcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHNob3dJbnB1dERyb3Bkb3duVGFibGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kYXRhVHlwZUlzVGV4dCQsXG4gICAgdGhpcy5maWVsZFR5cGVJc0Ryb3Bkb3duJCxcbiAgICB0aGlzLmZvcm1EYXRhJCxcbiAgXSkucGlwZShcbiAgICBtYXAoXG4gICAgICAoW2RhdGFUeXBlSXNUZXh0LCBmaWVsZFR5cGVJc0Ryb3Bkb3duLCBmb3JtRGF0YV0pID0+XG4gICAgICAgIGRhdGFUeXBlSXNUZXh0ICYmXG4gICAgICAgIGZpZWxkVHlwZUlzRHJvcGRvd24gJiZcbiAgICAgICAgISFmb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIgJiZcbiAgICAgICAgdGhpcy5kcm9wZG93bkRhdGFQcm92aWRlclN1cHBvcnRzVXBkYXRlcyhmb3JtRGF0YT8uZHJvcGRvd25EYXRhUHJvdmlkZXIpXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBDQVJCT05fVEhFTUUgPSAnd2hpdGUnO1xuXG4gIHB1YmxpYyByZWFkb25seSBWYWx1ZVBhdGhTZWxlY3RvclByZWZpeCA9IFZhbHVlUGF0aFNlbGVjdG9yUHJlZml4O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlckFsbChbQXJyb3dEb3duMTYsIEFycm93VXAxNl0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlblNlbGVjdGVkU2VhcmNoRmllbGRTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuTW9kYWxTaG93aW5nU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaEZpZWxkQ2xpY2tlZChzZWFyY2hGaWVsZDogU2VhcmNoRmllbGQsIHNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGlucHV0RGlzYWJsZWQgPT4ge1xuICAgICAgaWYgKCFpbnB1dERpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQgPSBzZWFyY2hGaWVsZEFjdGlvblR5cGVJc0FkZDtcbiAgICAgICAgY29uc3Qgc2VhcmNoRmllbGRUb1NlbGVjdCA9IHRoaXMuY2FjaGVkU2VhcmNoRmllbGRzLmZpbmQoXG4gICAgICAgICAgZmllbGQgPT4gZmllbGQua2V5ID09PSBzZWFyY2hGaWVsZC5rZXlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaEZpZWxkJC5uZXh0KHNlYXJjaEZpZWxkVG9TZWxlY3QgfHwgKHt9IGFzIFNlYXJjaEZpZWxkKSk7XG4gICAgICAgIHRoaXMuc2hvd01vZGFsKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZm9ybVZhbHVlQ2hhbmdlKGRhdGE6IFNlYXJjaEZpZWxkKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm5leHRJZkNoYW5nZWQodGhpcy5kYXRhVHlwZUlzVGV4dCQsIGRhdGEuZGF0YVR5cGUgPT09ICd0ZXh0Jyk7XG4gICAgICB0aGlzLm5leHRJZkNoYW5nZWQodGhpcy5kYXRhVHlwZUlzQm9vbGVhbiQsIGRhdGEuZGF0YVR5cGUgPT09ICdib29sZWFuJyk7XG4gICAgICB0aGlzLm5leHRJZkNoYW5nZWQodGhpcy5maWVsZFR5cGVJc0Ryb3Bkb3duJCwgdGhpcy5pc0ZpZWxkVHlwZURyb3Bkb3duKGRhdGEuZmllbGRUeXBlKSk7XG4gICAgICB0aGlzLm5leHRJZkNoYW5nZWQodGhpcy5mb3JtRGF0YSQsIGRhdGEpO1xuICAgICAgdGhpcy5uZXh0SWZDaGFuZ2VkKHRoaXMudmFsaWQkLCB0aGlzLmlzVmFsaWQoZGF0YSkpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIHBhdGhWYWx1ZUNoYW5nZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1EYXRhJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShjdXJyZW50RGF0YSA9PiB7XG4gICAgICBjb25zdCBuZXdEYXRhID0gey4uLmN1cnJlbnREYXRhLCBwYXRofTtcbiAgICAgIHRoaXMubmV4dElmQ2hhbmdlZCh0aGlzLmZvcm1EYXRhJCwgbmV3RGF0YSk7XG4gICAgICB0aGlzLm5leHRJZkNoYW5nZWQodGhpcy52YWxpZCQsIHRoaXMuaXNWYWxpZChuZXdEYXRhKSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZHJvcGRvd25EYXRhbGlzdENoYW5nZShkYXRhOiBNdWx0aUlucHV0T3V0cHV0KTogdm9pZCB7XG4gICAgdGhpcy5tb2RpZmllZERyb3Bkb3duVmFsdWVzJC5uZXh0KGRhdGEgYXMgTXVsdGlJbnB1dFZhbHVlcyk7XG4gIH1cblxuICBwdWJsaWMgb25Nb3ZlUm93Q2xpY2sobW92ZUV2ZW50OiBNb3ZlUm93RXZlbnQsIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHtpbmRleCwgZGlyZWN0aW9ufSA9IG1vdmVFdmVudDtcbiAgICBjb25zdCBtb3ZlVXAgPSBkaXJlY3Rpb24gPT09IE1vdmVSb3dEaXJlY3Rpb24uVVA7XG4gICAgY29uc3Qgc2VhcmNoRmllbGRzID0gWy4uLnRoaXMuY2FjaGVkU2VhcmNoRmllbGRzXTtcbiAgICBjb25zdCBzZWFyY2hGaWVsZFJvdyA9IHNlYXJjaEZpZWxkc1tpbmRleF07XG5cbiAgICBjb25zdCBzZWFyY2hGaWVsZEluZGV4ID0gc2VhcmNoRmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5rZXkgPT09IHNlYXJjaEZpZWxkUm93LmtleSk7XG4gICAgY29uc3QgZm91bmRTZWFyY2hGaWVsZCA9IHsuLi5zZWFyY2hGaWVsZHNbc2VhcmNoRmllbGRJbmRleF19O1xuICAgIGNvbnN0IGZpbHRlcmVkU2VhcmNoRmllbGRzID0gc2VhcmNoRmllbGRzLmZpbHRlcihmaWVsZCA9PiBmaWVsZC5rZXkgIT09IHNlYXJjaEZpZWxkUm93LmtleSk7XG4gICAgY29uc3QgbXVsdGlwbGVTZWFyY2hGaWVsZHMgPSBzZWFyY2hGaWVsZHM/Lmxlbmd0aCA+IDE7XG5cbiAgICBpZiAobXVsdGlwbGVTZWFyY2hGaWVsZHMgJiYgbW92ZVVwICYmIHNlYXJjaEZpZWxkSW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBzZWFyY2hGaWVsZEJlZm9yZUtleSA9IGAke3NlYXJjaEZpZWxkc1tzZWFyY2hGaWVsZEluZGV4IC0gMV0ua2V5fWA7XG4gICAgICBjb25zdCBzZWFyY2hGaWVsZEJlZm9yZUluZGV4ID0gZmlsdGVyZWRTZWFyY2hGaWVsZHMuZmluZEluZGV4KFxuICAgICAgICBmaWVsZCA9PiBmaWVsZC5rZXkgPT09IHNlYXJjaEZpZWxkQmVmb3JlS2V5XG4gICAgICApO1xuICAgICAgZmlsdGVyZWRTZWFyY2hGaWVsZHMuc3BsaWNlKHNlYXJjaEZpZWxkQmVmb3JlSW5kZXgsIDAsIGZvdW5kU2VhcmNoRmllbGQpO1xuICAgICAgdGhpcy51cGRhdGVTZWFyY2hGaWVsZHMoZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgZmlsdGVyZWRTZWFyY2hGaWVsZHMpO1xuICAgIH0gZWxzZSBpZiAobXVsdGlwbGVTZWFyY2hGaWVsZHMgJiYgIW1vdmVVcCAmJiBzZWFyY2hGaWVsZEluZGV4IDwgc2VhcmNoRmllbGRzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNlYXJjaEZpZWxkQWZ0ZXJLZXkgPSBgJHtzZWFyY2hGaWVsZHNbc2VhcmNoRmllbGRJbmRleCArIDFdLmtleX1gO1xuICAgICAgY29uc3Qgc2VhcmNoRmllbGRBZnRlckluZGV4ID0gZmlsdGVyZWRTZWFyY2hGaWVsZHMuZmluZEluZGV4KFxuICAgICAgICBmaWVsZCA9PiBmaWVsZC5rZXkgPT09IHNlYXJjaEZpZWxkQWZ0ZXJLZXlcbiAgICAgICk7XG4gICAgICBmaWx0ZXJlZFNlYXJjaEZpZWxkcy5zcGxpY2Uoc2VhcmNoRmllbGRBZnRlckluZGV4ICsgMSwgMCwgZm91bmRTZWFyY2hGaWVsZCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZpZWxkcyhkb2N1bWVudERlZmluaXRpb25OYW1lLCBmaWx0ZXJlZFNlYXJjaEZpZWxkcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uRGVsZXRlU2VsZWN0ZWRTZWFyY2hGaWVsZENvbmZpcm0oc2VsZWN0ZWRTZWFyY2hGaWVsZDogU2VhcmNoRmllbGQpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCgpO1xuXG4gICAgaWYgKHRoaXMuZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMoc2VsZWN0ZWRTZWFyY2hGaWVsZD8uZHJvcGRvd25EYXRhUHJvdmlkZXIpKSB7XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgICAuZGVsZXRlRHJvcGRvd25EYXRhKFxuICAgICAgICAgIHNlbGVjdGVkU2VhcmNoRmllbGQ/LmRyb3Bkb3duRGF0YVByb3ZpZGVyID8/ICcnLFxuICAgICAgICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgc2VsZWN0ZWRTZWFyY2hGaWVsZC5rZXlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5kZWxldGVEb2N1bWVudFNlYXJjaCh0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWxlY3RlZFNlYXJjaEZpZWxkLmtleSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgICAgIHRoaXMuaGlkZU1vZGFsKCk7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoU2VhcmNoRmllbGRzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbmFibGVJbnB1dCgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVNlYXJjaEZpZWxkKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZUlucHV0KCk7XG5cbiAgICB0aGlzLmZvcm1EYXRhJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmb3JtRGF0YSA9PiB7XG4gICAgICBpZiAoIWZvcm1EYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hcHBlZEZvcm1EYXRhOiBTZWFyY2hGaWVsZCA9IHtcbiAgICAgICAgLi4uZm9ybURhdGEsXG4gICAgICAgIG1hdGNoVHlwZTpcbiAgICAgICAgICAhdGhpcy5pc0ZpZWxkVHlwZURyb3Bkb3duKGZvcm1EYXRhPy5maWVsZFR5cGUpICYmIGZvcm1EYXRhPy5kYXRhVHlwZSA9PT0gJ3RleHQnXG4gICAgICAgICAgICA/IGZvcm1EYXRhLm1hdGNoVHlwZVxuICAgICAgICAgICAgOiAnZXhhY3QnLFxuICAgICAgICBmaWVsZFR5cGU6IGZvcm1EYXRhLmRhdGFUeXBlICE9PSAnYm9vbGVhbicgPyBmb3JtRGF0YS5maWVsZFR5cGUgOiAnc2luZ2xlJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHByZXZGb3JtRGF0YSA9IHRoaXMuc2VsZWN0ZWRTZWFyY2hGaWVsZCQudmFsdWU7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMocHJldkZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlcikgJiZcbiAgICAgICAgcHJldkZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlciAhPT0gbWFwcGVkRm9ybURhdGE/LmRyb3Bkb3duRGF0YVByb3ZpZGVyXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgICAgICAuZGVsZXRlRHJvcGRvd25EYXRhKFxuICAgICAgICAgICAgcHJldkZvcm1EYXRhPy5kcm9wZG93bkRhdGFQcm92aWRlciA/PyAnJyxcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICBwcmV2Rm9ybURhdGE/LmtleSA/PyAnJ1xuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRyb3Bkb3duRGF0YVByb3ZpZGVyU3VwcG9ydHNVcGRhdGVzKG1hcHBlZEZvcm1EYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyKSkge1xuICAgICAgICB0aGlzLm1vZGlmaWVkRHJvcGRvd25WYWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGRyb3Bkb3duVmFsdWVzID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gZHJvcGRvd25WYWx1ZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywga2V5VmFsdWUpID0+ICh7Li4uYWNjLCBba2V5VmFsdWUua2V5XToga2V5VmFsdWUudmFsdWV9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgICAgICAgLnBvc3REcm9wZG93bkRhdGEoXG4gICAgICAgICAgICAgIG1hcHBlZEZvcm1EYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyID8/ICcnLFxuICAgICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgICBtYXBwZWRGb3JtRGF0YS5rZXksXG4gICAgICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnBvc3REb2N1bWVudFNlYXJjaChkb2N1bWVudERlZmluaXRpb25OYW1lLCBtYXBwZWRGb3JtRGF0YSkuc3Vic2NyaWJlKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgICAgIHRoaXMuaGlkZU1vZGFsKCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hTZWFyY2hGaWVsZHMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdGaWVsZHMgPSBbLi4udGhpcy5jYWNoZWRTZWFyY2hGaWVsZHNdO1xuICAgICAgICBjb25zdCBpbmRleFRvUmVwbGFjZSA9IG5ld0ZpZWxkcy5maW5kSW5kZXgoZmllbGQgPT4gZmllbGQua2V5ID09PSBtYXBwZWRGb3JtRGF0YS5rZXkpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQua2V5ICE9PSBtYXBwZWRGb3JtRGF0YS5rZXkpO1xuXG4gICAgICAgIGZpbHRlcmVkRmllbGRzLnNwbGljZShpbmRleFRvUmVwbGFjZSwgMCwgbWFwcGVkRm9ybURhdGEpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZpZWxkcyhkb2N1bWVudERlZmluaXRpb25OYW1lLCBmaWx0ZXJlZEZpZWxkcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU2VhcmNoRmllbGRzKFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyxcbiAgICBuZXdTZWFyY2hGaWVsZHM6IEFycmF5PFNlYXJjaEZpZWxkPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCgpO1xuXG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2UucHV0RG9jdW1lbnRTZWFyY2goZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgbmV3U2VhcmNoRmllbGRzKS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlSW5wdXQoKTtcbiAgICAgICAgdGhpcy5oaWRlTW9kYWwoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoU2VhcmNoRmllbGRzKCk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmVuYWJsZUlucHV0KCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1vZGFsQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5oaWRlTW9kYWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dElmQ2hhbmdlZChiZWhhdmlvdXJTdWJqZWN0JDogQmVoYXZpb3JTdWJqZWN0PGFueT4sIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoYmVoYXZpb3VyU3ViamVjdCQudmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpIHtcbiAgICAgIGJlaGF2aW91clN1YmplY3QkLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZChkYXRhOiBTZWFyY2hGaWVsZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbGlkTWF0Y2hUeXBlID1cbiAgICAgIGRhdGEuZGF0YVR5cGUgPT09ICd0ZXh0JyAmJiAhdGhpcy5pc0ZpZWxkVHlwZURyb3Bkb3duKGRhdGEuZmllbGRUeXBlKSA/IGRhdGEubWF0Y2hUeXBlIDogdHJ1ZTtcbiAgICBjb25zdCB2YWxpZERyb3Bkb3duRGF0YVByb3ZpZGVyID0gdGhpcy5pc0ZpZWxkVHlwZURyb3Bkb3duKGRhdGEuZmllbGRUeXBlKVxuICAgICAgPyBkYXRhLmRyb3Bkb3duRGF0YVByb3ZpZGVyXG4gICAgICA6IHRydWU7XG4gICAgY29uc3QgY29udGFpbnNBbGxWYWx1ZXMgPSAhIShcbiAgICAgIGRhdGEua2V5ICYmXG4gICAgICBkYXRhLmRhdGFUeXBlICYmXG4gICAgICB2YWxpZE1hdGNoVHlwZSAmJlxuICAgICAgdmFsaWREcm9wZG93bkRhdGFQcm92aWRlciAmJlxuICAgICAgZGF0YS5wYXRoICYmXG4gICAgICBkYXRhLmZpZWxkVHlwZVxuICAgICk7XG4gICAgY29uc3Qga2V5SXNVbmlxdWUgPVxuICAgICAgIXRoaXMuc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGQgfHxcbiAgICAgIHRoaXMuY2FjaGVkU2VhcmNoRmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5rZXkgPT09IGRhdGEua2V5KSA9PT0gLTE7XG5cbiAgICByZXR1cm4gY29udGFpbnNBbGxWYWx1ZXMgJiYga2V5SXNVbmlxdWU7XG4gIH1cblxuICBwcml2YXRlIGlzRmllbGRUeXBlRHJvcGRvd24oZmllbGRUeXBlPzogU2VhcmNoRmllbGRGaWVsZFR5cGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmllbGRUeXBlID09PSAnc2luZ2xlLXNlbGVjdC1kcm9wZG93bicgfHwgZmllbGRUeXBlID09PSAnbXVsdGktc2VsZWN0LWRyb3Bkb3duJztcbiAgfVxuXG4gIHByaXZhdGUgZHJvcGRvd25EYXRhUHJvdmlkZXJTdXBwb3J0c1VwZGF0ZXMoZHJvcGRvd25EYXRhUHJvdmlkZXI/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZHJvcGRvd25EYXRhUHJvdmlkZXIgPT09ICdkcm9wZG93bkRhdGFiYXNlRGF0YVByb3ZpZGVyJztcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNlbGVjdGVkU2VhcmNoRmllbGRTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoRmllbGQkLnN1YnNjcmliZShzZWxlY3RlZFNlYXJjaEZpZWxkID0+IHtcbiAgICAgICAgaWYgKHNlbGVjdGVkU2VhcmNoRmllbGQpIHRoaXMuc2hvd01vZGFsKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Nb2RhbFNob3dpbmdTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm1vZGFsU2hvd2luZyQuc3Vic2NyaWJlKG1vZGFsU2hvd2luZyA9PiB7XG4gICAgICAgIGlmIChtb2RhbFNob3dpbmcpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0ZpZWxkcyQubmV4dCh0cnVlKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0ZpZWxkcyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgfSwgQ0FSQk9OX0NPTlNUQU5UUy5tb2RhbEFuaW1hdGlvbk1zKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREb3dubG9hZChkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsIHNlYXJjaEZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+KTogdm9pZCB7XG4gICAgdGhpcy5kb3dubG9hZE5hbWUkLm5leHQoYCR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0uanNvbmApO1xuICAgIHRoaXMuZG93bmxvYWRVcmwkLm5leHQoXG4gICAgICB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxuICAgICAgICAnZGF0YTp0ZXh0L2pzb247Y2hhcnNldD1VVEYtOCwnICtcbiAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoe3NlYXJjaEZpZWxkc30sIG51bGwsIDIpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVJbnB1dCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlSW5wdXQkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFNob3dpbmckLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsU2hvd2luZyQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hTZWFyY2hGaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoU2VhcmNoRmllbGRzJC5uZXh0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93RGVsZXRlTW9kYWwoc2VhcmNoRmllbGQ6IFNlYXJjaEZpZWxkKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZERlbGV0ZVNlYXJjaEZpZWxkJC5uZXh0KHNlYXJjaEZpZWxkKTtcbiAgICB0aGlzLnNob3dEZWxldGVNb2RhbCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0VkaXRNb2RhbChzZWFyY2hGaWVsZDogU2VhcmNoRmllbGQpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEZpZWxkQ2xpY2tlZChzZWFyY2hGaWVsZCwgZmFsc2UpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJ7XG4gICAgc2VhcmNoRmllbGRzOiB0cmFuc2xhdGVkU2VhcmNoRmllbGRzJCB8IGFzeW5jLFxuICAgIGRvd25sb2FkVXJsOiBkb3dubG9hZFVybCQgfCBhc3luYyxcbiAgICBkb3dubG9hZE5hbWU6IGRvd25sb2FkTmFtZSQgfCBhc3luYyxcbiAgICBkb2N1bWVudERlZmluaXRpb25OYW1lOiBkb2N1bWVudERlZmluaXRpb25OYW1lJCB8IGFzeW5jLFxuICAgIHZhbGlkOiB2YWxpZCQgfCBhc3luYyxcbiAgICBkaXNhYmxlSW5wdXQ6IGRpc2FibGVJbnB1dCQgfCBhc3luY1xuICB9IGFzIG9ic1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0OyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vZGFsOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPHZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsXG4gIGNvbmZpcm1CdXR0b25UZXh0VHJhbnNsYXRpb25LZXk9XCJpbnRlcmZhY2UuZGVsZXRlXCJcbiAgY29uZmlybUJ1dHRvblR5cGU9XCJkYW5nZXJcIlxuICBjb250ZW50VHJhbnNsYXRpb25LZXk9XCJkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy5kZWxldGVUZXh0XCJcbiAgW291dHB1dE9uQ29uZmlybV09XCJzZWxlY3RlZERlbGV0ZVNlYXJjaEZpZWxkJCB8IGFzeW5jXCJcbiAgW3Nob3dNb2RhbFN1YmplY3QkXT1cInNob3dEZWxldGVNb2RhbCRcIlxuICB0aXRsZVRyYW5zbGF0aW9uS2V5PVwiaW50ZXJmYWNlLmRlbGV0ZVwiXG4gIChjb25maXJtRXZlbnQpPVwib25EZWxldGVTZWxlY3RlZFNlYXJjaEZpZWxkQ29uZmlybSgkZXZlbnQpXCJcbj48L3ZhbHRpbW8tY29uZmlybWF0aW9uLW1vZGFsPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnMgbGV0LW9icz1cIm9ic1wiPlxuICA8YnV0dG9uXG4gICAgY2RzQnV0dG9uPVwiZ2hvc3RcIlxuICAgIGljb25Pbmx5PVwidHJ1ZVwiXG4gICAgZGF0YS10ZXN0aWQ9XCJkb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWRvd25sb2FkXCJcbiAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAhb2JzLmRvd25sb2FkVXJsIHx8ICFvYnMuZG93bmxvYWROYW1lIHx8IG9icy5zZWFyY2hGaWVsZHM/Lmxlbmd0aCA8PSAwIHx8IG9icy5kaXNhYmxlSW5wdXRcbiAgICBcIlxuICAgIFtkb3dubG9hZF09XCJvYnMuZG93bmxvYWROYW1lXCJcbiAgICBbaHJlZl09XCJvYnMuZG93bmxvYWRVcmxcIlxuICA+XG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImRvd25sb2FkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICBkYXRhLXRlc3RpZD1cImRvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtYWRkXCJcbiAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1NlYXJjaEZpZWxkcyB8fCBvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAoY2xpY2spPVwic2VhcmNoRmllbGRDbGlja2VkKCRldmVudCwgdHJ1ZSlcIlxuICA+XG4gICAgPHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuXG4gICAge3sgJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmFkZFJvdycgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpc3QgbGV0LW9icz1cIm9ic1wiPlxuICA8dmFsdGltby1jYXJib24tbGlzdFxuICAgIFthY3Rpb25JdGVtc109XCJhY3Rpb25JdGVtc1wiXG4gICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgIFtoZWFkZXJdPVwiZmFsc2VcIlxuICAgIFtpdGVtc109XCJvYnMuc2VhcmNoRmllbGRzXCJcbiAgICBbbG9hZGluZ109XCIhb2JzLnNlYXJjaEZpZWxkc1wiXG4gICAgW21vdmluZ1Jvd3NFbmFibGVkXT1cInRydWVcIlxuICAgIChyb3dDbGlja2VkKT1cInNlYXJjaEZpZWxkQ2xpY2tlZCgkZXZlbnQsIGZhbHNlKVwiXG4gICAgKG1vdmVSb3cpPVwib25Nb3ZlUm93Q2xpY2soJGV2ZW50LCBvYnMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgY2FyYm9uVG9vbGJhckNvbnRlbnRcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uczsgY29udGV4dDoge29iczogb2JzfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgPHZhbHRpbW8tbm8tcmVzdWx0c1xuICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5ub1NlYXJjaGZpZWxkc1RpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3Lm5vU2VhcmNoZmllbGRzRGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICA+PC92YWx0aW1vLW5vLXJlc3VsdHM+XG4gIDwvdmFsdGltby1jYXJib24tbGlzdD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kYWwgbGV0LW9icz1cIm9ic1wiPlxuICA8Y2RzLW1vZGFsXG4gICAgdmFsdGltb0Nkc01vZGFsXG4gICAgW3RpdGxlXT1cIlxuICAgICAgc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGRcbiAgICAgICAgPyAoJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmFkZFJvdycgfCB0cmFuc2xhdGUpXG4gICAgICAgIDogKCdzZWFyY2hGaWVsZHNPdmVydmlldy5lZGl0JyB8IHRyYW5zbGF0ZSlcbiAgICBcIlxuICAgIFtvcGVuXT1cIm1vZGFsU2hvd2luZyQgfCBhc3luY1wiXG4gICAgW3Nob3dGb290ZXJdPVwidHJ1ZVwiXG4gID5cbiAgICA8Y2RzLW1vZGFsLWhlYWRlciBbc2hvd0Nsb3NlQnV0dG9uXT1cInRydWVcIiAoY2xvc2VTZWxlY3QpPVwib25Nb2RhbENsb3NlKClcIj5cbiAgICAgIDxoMyBjZHNNb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICAgIHt7XG4gICAgICAgICAgKHNlYXJjaEZpZWxkQWN0aW9uVHlwZUlzQWRkID8gJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LmFkZFJvdycgOiAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuZWRpdCcpXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICB9fVxuICAgICAgPC9oMz5cbiAgICA8L2Nkcy1tb2RhbC1oZWFkZXI+XG5cbiAgICA8c2VjdGlvbiBjZHNNb2RhbENvbnRlbnQ+XG4gICAgICA8di1mb3JtXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJmb3JtVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgKHNob3dGaWVsZHMkIHwgYXN5bmMpICYmIHtcbiAgICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWxlY3RlZFNlYXJjaEZpZWxkJCB8IGFzeW5jXG4gICAgICAgICAgfSBhcyBzZWFyY2hPYnNcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHYtaW5wdXRcbiAgICAgICAgICBuYW1lPVwidGl0bGVcIlxuICAgICAgICAgIGRhdGFUZXN0SWQ9XCJkb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLXRpdGxlXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3LnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8udGl0bGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbY2FyYm9uVGhlbWVdPVwiQ0FSQk9OX1RIRU1FXCJcbiAgICAgICAgPlxuICAgICAgICA8L3YtaW5wdXQ+XG5cbiAgICAgICAgPHYtaW5wdXRcbiAgICAgICAgICBuYW1lPVwia2V5XCJcbiAgICAgICAgICBkYXRhVGVzdElkPVwiZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1rZXlcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcua2V5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8ua2V5XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dCB8fCAhc2VhcmNoRmllbGRBY3Rpb25UeXBlSXNBZGRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICBbd2lkdGhQeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmtleScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICA+XG4gICAgICAgIDwvdi1pbnB1dD5cblxuICAgICAgICA8dmFsdGltby12YWx1ZS1wYXRoLXNlbGVjdG9yXG4gICAgICAgICAgbmFtZT1cInBhdGhcIlxuICAgICAgICAgIFtsYWJlbF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcucGF0aCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLnBhdGgnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbbWFyZ2luWGxdPVwidHJ1ZVwiXG4gICAgICAgICAgW2RvY3VtZW50RGVmaW5pdGlvbk5hbWVdPVwiZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgfCBhc3luY1wiXG4gICAgICAgICAgW3ByZWZpeGVzXT1cIltWYWx1ZVBhdGhTZWxlY3RvclByZWZpeC5ET0MsIFZhbHVlUGF0aFNlbGVjdG9yUHJlZml4LkNBU0VdXCJcbiAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8ucGF0aFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlSW5wdXRcIlxuICAgICAgICA+PC92YWx0aW1vLXZhbHVlLXBhdGgtc2VsZWN0b3I+XG5cbiAgICAgICAgPHYtc2VsZWN0XG4gICAgICAgICAgKm5nSWY9XCJkYXRhVHlwZUl0ZW1zJCB8IGFzeW5jIGFzIGRhdGFUeXBlSXRlbXNcIlxuICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2Ryb3BVcF09XCJmYWxzZVwiXG4gICAgICAgICAgW2l0ZW1zXT1cImRhdGFUeXBlSXRlbXNcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuc2VhcmNoRmllbGRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuZGF0YVR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgbmFtZT1cImRhdGFUeXBlXCJcbiAgICAgICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8uZGF0YVR5cGVcIlxuICAgICAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5kYXRhVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICAgIGRhdGFUZXN0SWQ9XCJkb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWRhdGFUeXBlc1wiXG4gICAgICAgID48L3Ytc2VsZWN0PlxuXG4gICAgICAgIDx2LXNlbGVjdFxuICAgICAgICAgICpuZ0lmPVwiKHNob3dNYXRjaFR5cGVzJCB8IGFzeW5jKSAmJiAobWF0Y2hUeXBlSXRlbXMkIHwgYXN5bmMpIGFzIG1hdGNoVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgIFtkcm9wVXBdPVwiZmFsc2VcIlxuICAgICAgICAgIFtpdGVtc109XCJtYXRjaFR5cGVJdGVtc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5tYXRjaFR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgbmFtZT1cIm1hdGNoVHlwZVwiXG4gICAgICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/Lm1hdGNoVHlwZVwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLm1hdGNoVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICAgIGRhdGFUZXN0SWQ9XCJkb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLW1hdGNoVHlwZXNcIlxuICAgICAgICA+PC92LXNlbGVjdD5cblxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cImZpZWxkVHlwZUl0ZW1zJCB8IGFzeW5jIGFzIGZpZWxkVHlwZUl0ZW1zXCJcbiAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgIFtkcm9wVXBdPVwiZmFsc2VcIlxuICAgICAgICAgIFtpdGVtc109XCJmaWVsZFR5cGVJdGVtc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5maWVsZFR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW21hcmdpbl09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgbmFtZT1cImZpZWxkVHlwZVwiXG4gICAgICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJzZWFyY2hPYnMuc2VhcmNoRmllbGQ/LmZpZWxkVHlwZVwiXG4gICAgICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidzZWFyY2hGaWVsZHNPdmVydmlld1Rvb2x0aXBzLmZpZWxkVHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICAgIGRhdGFUZXN0SWQ9XCJkb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWZpZWxkVHlwZXNcIlxuICAgICAgICA+PC92LXNlbGVjdD5cblxuICAgICAgICA8di1zZWxlY3RcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGZpZWxkVHlwZUlzRHJvcGRvd24kIHwgYXN5bmMpICYmXG4gICAgICAgICAgICAoZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lcyQgfCBhc3luYykgYXMgZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lc1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICBbZHJvcFVwXT1cImZhbHNlXCJcbiAgICAgICAgICBbaXRlbXNdPVwiZHJvcGRvd25EYXRhUHJvdmlkZXJOYW1lc1wiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5zZWFyY2hGaWVsZFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidzZWFyY2hGaWVsZHNPdmVydmlldy5kcm9wZG93bkRhdGFQcm92aWRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZUlucHV0XCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICAgICAgbmFtZT1cImRyb3Bkb3duRGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cInNlYXJjaE9icy5zZWFyY2hGaWVsZD8uZHJvcGRvd25EYXRhUHJvdmlkZXJcIlxuICAgICAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXdUb29sdGlwcy5kcm9wZG93bkRhdGFQcm92aWRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtjYXJib25UaGVtZV09XCJDQVJCT05fVEhFTUVcIlxuICAgICAgICAgIGRhdGFUZXN0SWQ9XCJkb3NzaWVyLW1hbmFnZW1lbnQtc2VhcmNoLWRyb3Bkb3duRGF0YVByb3ZpZGVyXCJcbiAgICAgICAgPjwvdi1zZWxlY3Q+XG5cbiAgICAgICAgPHZhbHRpbW8tY2FyYm9uLW11bHRpLWlucHV0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChzaG93SW5wdXREcm9wZG93blRhYmxlJCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgKGluaXRpYWxEcm9wZG93blZhbHVlcyQgfCBhc3luYykgYXMgaW5pdGlhbERyb3Bkb3duVmFsdWVzXG4gICAgICAgICAgXCJcbiAgICAgICAgICBuYW1lPVwiZHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcuZHJvcGRvd25MaXN0VmFsdWVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgdHlwZT1cImtleVZhbHVlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gICAgICAgICAgW2RlZmF1bHRWYWx1ZXNdPVwiaW5pdGlhbERyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICBbbWFyZ2luXT1cInRydWVcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJmYWxzZVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ3NlYXJjaEZpZWxkc092ZXJ2aWV3VG9vbHRpcHMuZHJvcGRvd25MaXN0VmFsdWVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImRyb3Bkb3duRGF0YWxpc3RDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW2NhcmJvblRoZW1lXT1cIkNBUkJPTl9USEVNRVwiXG4gICAgICAgID5cbiAgICAgICAgPC92YWx0aW1vLWNhcmJvbi1tdWx0aS1pbnB1dD5cblxuICAgICAgICA8di10YWJsZVxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAoc2hvd1JlYWRvbmx5RHJvcGRvd25UYWJsZSQgfCBhc3luYykgJiZcbiAgICAgICAgICAgIChpbml0aWFsRHJvcGRvd25WYWx1ZXMkIHwgYXN5bmMpIGFzIGluaXRpYWxEcm9wZG93blZhbHVlc1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2l0ZW1zXT1cImluaXRpYWxEcm9wZG93blZhbHVlc1wiXG4gICAgICAgICAgW2NvbHVtbnNdPVwiZHJvcGRvd25Db2x1bW5zJCB8IGFzeW5jXCJcbiAgICAgICAgICBbc2hvd0VkaXRCdXR0b25zXT1cImZhbHNlXCJcbiAgICAgICAgICBbaXRlbXNUcmFuc2xhdGlvbktleV09XCInc2VhcmNoRmllbGRzT3ZlcnZpZXcnXCJcbiAgICAgICAgICBbc2hvd1BhZ2luYXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIFttb2JpbGVCcmVha3BvaW50UHhdPVwiMjAwXCJcbiAgICAgICAgICBbY2FyYm9uVGhlbWVdPVwiQ0FSQk9OX1RIRU1FXCJcbiAgICAgICAgPjwvdi10YWJsZT5cbiAgICAgIDwvdi1mb3JtPlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxjZHMtbW9kYWwtZm9vdGVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNGb290ZXJNb2RhbDsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvY2RzLW1vZGFsLWZvb3Rlcj5cbiAgPC9jZHMtbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnNGb290ZXJNb2RhbCBsZXQtb2JzPVwib2JzXCI+XG4gIDxidXR0b25cbiAgICBkYXRhLXRlc3RpZD1cImRvc3NpZXItbWFuYWdlbWVudC1zZWFyY2gtY2xvc2VcIlxuICAgIGNkc0J1dHRvbj1cInNlY29uZGFyeVwiXG4gICAgKGNsaWNrKT1cIm9uTW9kYWxDbG9zZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dFwiXG4gID5cbiAgICB7eyAnaW50ZXJmYWNlLmNhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIGRhdGEtdGVzdGlkPVwiZG9zc2llci1tYW5hZ2VtZW50LXNlYXJjaC1zYXZlXCJcbiAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVJbnB1dCB8fCAhb2JzLnZhbGlkXCJcbiAgICAoY2xpY2spPVwic2F2ZVNlYXJjaEZpZWxkKG9icy5kb2N1bWVudERlZmluaXRpb25OYW1lKVwiXG4gID5cbiAgICB7eyAnc2VhcmNoRmllbGRzT3ZlcnZpZXcuc3VibWl0JyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -266,7 +266,7 @@ export class DossierManagementStatusModalComponent {
266
266
  };
267
267
  }
268
268
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierManagementStatusModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.IconService }, { token: i3.CaseStatusService }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
269
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DossierManagementStatusModalComponent, selector: "valtimo-dossier-management-status-modal", inputs: { type: "type", prefill: "prefill", usedKeys: "usedKeys", documentDefinitionName: "documentDefinitionName" }, outputs: { closeModalEvent: "closeModalEvent" }, 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<cds-modal\n valtimoCdsModal\n *ngIf=\"{\n isAdd: isAdd$ | async,\n isEdit: isEdit$ | async,\n isClosed: isClosed$ | async,\n editingKey: editingKey$ | async,\n disabled: disabled$ | async\n } as obs\"\n [open]=\"!obs.isClosed\"\n size=\"sm\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onClose()\">\n <h3 cdsModalHeaderHeading>\n {{ obs.isAdd ? ('dossierManagement.statuses.add' | translate) : '' }}\n {{ obs.isEdit ? ('dossierManagement.statuses.edit' | translate) : '' }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"statusForm; context: {obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #colorDropdownItemTemplate let-item=\"item\">\n <div class=\"dropdown-color-tag\">\n <cds-tag *ngIf=\"item && item.content\" class=\"cds-tag--no-margin\" [type]=\"item?.tagType\">\n {{ 'interface.tagType.' + item?.tagType | translate }}\n </cds-tag>\n </div>\n</ng-template>\n\n<ng-template #statusForm let-obs=\"obs\">\n <form [formGroup]=\"statusFormGroup\" class=\"status-form\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.title' | translate }}\n\n <input cdsText formControlName=\"title\" [attr.modal-primary-focus]=\"true\" />\n </cds-label>\n\n <cds-label>\n {{ 'dossierManagement.statuses.columns.key' | translate }}\n\n <div class=\"edit-key-input\">\n <input\n cdsText\n formControlName=\"key\"\n [readOnly]=\"!obs.editingKey\"\n [placeholder]=\"\n obs.isAdd && !obs.editingKey\n ? ('dossierManagement.statuses.keyAutoGenerated' | translate)\n : ''\n \"\n />\n\n <cds-icon-button\n *ngIf=\"!obs.editingKey && obs.isAdd\"\n [disabled]=\"obs.disabled\"\n (click)=\"editKeyButtonClick()\"\n kind=\"secondary\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n </cds-label>\n\n <div class=\"horizontal-inputs\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.color' | translate }}\n\n <cds-dropdown\n [id]=\"'status-color-dropdown'\"\n [appendInline]=\"false\"\n [placeholder]=\"'dossierManagement.statuses.colorPlaceholder' | translate\"\n (selected)=\"colorDropdownChange($event)\"\n >\n <cds-dropdown-list [items]=\"colorListItems$\" [listTpl]=\"colorDropdownItemTemplate\">\n </cds-dropdown-list>\n </cds-dropdown>\n </cds-label>\n\n <cds-toggle\n [label]=\"'dossierManagement.statuses.visibleTitle' | translate\"\n [onText]=\"'dossierManagement.statuses.visible' | translate\"\n [offText]=\"'dossierManagement.statuses.invisible' | translate\"\n [disabled]=\"obs.disabled\"\n [checked]=\"visibleInCaseListByDefault?.value\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </div>\n </form>\n</ng-template>\n\n<ng-template #buttons let-obs=\"obs\">\n <button cdsButton=\"secondary\" (click)=\"onClose()\" [disabled]=\"obs.disabled\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isAdd\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"addStatus()\"\n >\n {{ 'interface.add' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isEdit\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"editStatus()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n</ng-template>\n", styles: [".status-form{display:flex;flex-direction:column;gap:16px}.edit-key-input{height:40px;display:flex;width:100%;flex-direction:row;gap:16px;align-items:flex-end}.edit-key-input input:read-only{color:var(--cds-text-disabled)}::ng-deep .horizontal-inputs{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}::ng-deep .horizontal-inputs .cds--label{width:100%;display:flex;flex-direction:column;gap:8px}::ng-deep .dropdown-color-tag .cds--tag{margin-top:-4px;margin-left:2px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i2.IconButton, selector: "cds-icon-button, ibm-icon-button", inputs: ["buttonNgClass", "buttonAttributes", "buttonId", "kind", "size", "type", "isExpressive", "disabled", "description"], outputs: ["click", "focus", "blur", "tooltipClick"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i2.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: i6.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]" }, { kind: "component", type: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i2.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "skeleton"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
269
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DossierManagementStatusModalComponent, selector: "valtimo-dossier-management-status-modal", inputs: { type: "type", prefill: "prefill", usedKeys: "usedKeys", documentDefinitionName: "documentDefinitionName" }, outputs: { closeModalEvent: "closeModalEvent" }, 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<cds-modal\n valtimoCdsModal\n *ngIf=\"{\n isAdd: isAdd$ | async,\n isEdit: isEdit$ | async,\n isClosed: isClosed$ | async,\n editingKey: editingKey$ | async,\n disabled: disabled$ | async\n } as obs\"\n [open]=\"!obs.isClosed\"\n size=\"sm\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onClose()\">\n <h3 cdsModalHeaderHeading>\n {{ obs.isAdd ? ('dossierManagement.statuses.add' | translate) : '' }}\n {{ obs.isEdit ? ('dossierManagement.statuses.edit' | translate) : '' }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"statusForm; context: {obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #colorDropdownItemTemplate let-item=\"item\">\n <div class=\"dropdown-color-tag\">\n <cds-tag *ngIf=\"item && item.content\" class=\"cds-tag--no-margin\" [type]=\"item?.tagType\">\n {{ 'interface.tagType.' + item?.tagType | translate }}\n </cds-tag>\n </div>\n</ng-template>\n\n<ng-template #statusForm let-obs=\"obs\">\n <form [formGroup]=\"statusFormGroup\" class=\"status-form\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.title' | translate }}\n\n <input cdsText formControlName=\"title\" [attr.modal-primary-focus]=\"true\" />\n </cds-label>\n\n <cds-label>\n {{ 'dossierManagement.statuses.columns.key' | translate }}\n\n <div class=\"edit-key-input\">\n <input\n cdsText\n formControlName=\"key\"\n [readOnly]=\"!obs.editingKey\"\n [placeholder]=\"\n obs.isAdd && !obs.editingKey\n ? ('dossierManagement.statuses.keyAutoGenerated' | translate)\n : ''\n \"\n />\n\n <cds-icon-button\n *ngIf=\"!obs.editingKey && obs.isAdd\"\n [disabled]=\"obs.disabled\"\n (click)=\"editKeyButtonClick()\"\n kind=\"secondary\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n </cds-label>\n\n <div class=\"horizontal-inputs\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.color' | translate }}\n\n <cds-dropdown\n [id]=\"'status-color-dropdown'\"\n [appendInline]=\"false\"\n [placeholder]=\"'dossierManagement.statuses.colorPlaceholder' | translate\"\n (selected)=\"colorDropdownChange($event)\"\n >\n <cds-dropdown-list [items]=\"colorListItems$\" [listTpl]=\"colorDropdownItemTemplate\">\n </cds-dropdown-list>\n </cds-dropdown>\n </cds-label>\n\n <cds-toggle\n [label]=\"'dossierManagement.statuses.visibleTitle' | translate\"\n [onText]=\"'dossierManagement.statuses.visible' | translate\"\n [offText]=\"'dossierManagement.statuses.invisible' | translate\"\n [disabled]=\"obs.disabled\"\n [checked]=\"visibleInCaseListByDefault?.value\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </div>\n </form>\n</ng-template>\n\n<ng-template #buttons let-obs=\"obs\">\n <button cdsButton=\"secondary\" (click)=\"onClose()\" [disabled]=\"obs.disabled\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isAdd\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"addStatus()\"\n >\n {{ 'interface.add' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isEdit\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"editStatus()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n</ng-template>\n", styles: [".status-form{display:flex;flex-direction:column;gap:16px}.edit-key-input{height:40px;display:flex;width:100%;flex-direction:row;gap:16px;align-items:flex-end}.edit-key-input input:read-only{color:var(--cds-text-disabled)}::ng-deep .horizontal-inputs{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}::ng-deep .horizontal-inputs .cds--label{width:100%;display:flex;flex-direction:column;gap:8px}::ng-deep .dropdown-color-tag .cds--tag{margin-top:-4px;margin-left:2px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i2.IconButton, selector: "cds-icon-button, ibm-icon-button", inputs: ["buttonNgClass", "buttonAttributes", "buttonId", "kind", "size", "type", "isExpressive", "disabled", "description"], outputs: ["click", "focus", "blur", "tooltipClick"] }, { kind: "directive", type: i2.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i2.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "directive", type: i6.ValtimoCdsModalDirective, selector: "[valtimoCdsModal]" }, { kind: "component", type: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "component", type: i2.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "skeleton"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
270
270
  }
271
271
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierManagementStatusModalComponent, decorators: [{
272
272
  type: Component,