@valtimo/dossier-management 12.6.1 → 12.8.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 (38) hide show
  1. package/esm2022/lib/components/dossier-management-detail/dossier-management-detail.component.mjs +2 -2
  2. package/esm2022/lib/components/dossier-management-list-columns/dossier-management-list-columns.component.mjs +1 -1
  3. package/esm2022/lib/components/dossier-management-search-fields/dossier-management-search-fields.component.mjs +1 -1
  4. package/esm2022/lib/components/dossier-management-widget-configurators/collection/dossier-management-widget-collection.component.mjs +22 -10
  5. package/esm2022/lib/components/dossier-management-widget-configurators/custom/dossier-management-widget-custom.component.mjs +17 -12
  6. package/esm2022/lib/components/dossier-management-widget-configurators/fields/column/dossier-management-widget-fields-column.component.mjs +18 -5
  7. package/esm2022/lib/components/dossier-management-widget-configurators/fields/dossier-management-widget-fields.component.mjs +15 -10
  8. package/esm2022/lib/components/dossier-management-widget-configurators/formio/dossier-management-widget-formio.component.mjs +14 -9
  9. package/esm2022/lib/components/dossier-management-widget-configurators/index.mjs +4 -3
  10. package/esm2022/lib/components/dossier-management-widget-configurators/process-selector/dossier-management-widget-process-selector.component.mjs +100 -0
  11. package/esm2022/lib/components/dossier-management-widget-configurators/table/dossier-management-widget-table.component.mjs +23 -11
  12. package/esm2022/lib/components/dossier-management-widget-tab/editor/dossier-management-widgets-editor.component.mjs +12 -1
  13. package/esm2022/lib/components/dossier-management-widget-wizard/dossier-management-widget-wizard.component.mjs +2 -2
  14. package/esm2022/lib/services/widget-wizard.service.mjs +5 -2
  15. package/fesm2022/valtimo-dossier-management.mjs +512 -371
  16. package/fesm2022/valtimo-dossier-management.mjs.map +1 -1
  17. package/lib/components/dossier-management-detail/dossier-management-detail.component.d.ts.map +1 -1
  18. package/lib/components/dossier-management-widget-configurators/collection/dossier-management-widget-collection.component.d.ts +10 -3
  19. package/lib/components/dossier-management-widget-configurators/collection/dossier-management-widget-collection.component.d.ts.map +1 -1
  20. package/lib/components/dossier-management-widget-configurators/custom/dossier-management-widget-custom.component.d.ts +8 -5
  21. package/lib/components/dossier-management-widget-configurators/custom/dossier-management-widget-custom.component.d.ts.map +1 -1
  22. package/lib/components/dossier-management-widget-configurators/fields/column/dossier-management-widget-fields-column.component.d.ts +6 -2
  23. package/lib/components/dossier-management-widget-configurators/fields/column/dossier-management-widget-fields-column.component.d.ts.map +1 -1
  24. package/lib/components/dossier-management-widget-configurators/fields/dossier-management-widget-fields.component.d.ts +6 -2
  25. package/lib/components/dossier-management-widget-configurators/fields/dossier-management-widget-fields.component.d.ts.map +1 -1
  26. package/lib/components/dossier-management-widget-configurators/formio/dossier-management-widget-formio.component.d.ts +4 -1
  27. package/lib/components/dossier-management-widget-configurators/formio/dossier-management-widget-formio.component.d.ts.map +1 -1
  28. package/lib/components/dossier-management-widget-configurators/index.d.ts +3 -2
  29. package/lib/components/dossier-management-widget-configurators/index.d.ts.map +1 -1
  30. package/lib/components/dossier-management-widget-configurators/process-selector/dossier-management-widget-process-selector.component.d.ts +29 -0
  31. package/lib/components/dossier-management-widget-configurators/process-selector/dossier-management-widget-process-selector.component.d.ts.map +1 -0
  32. package/lib/components/dossier-management-widget-configurators/table/dossier-management-widget-table.component.d.ts +10 -3
  33. package/lib/components/dossier-management-widget-configurators/table/dossier-management-widget-table.component.d.ts.map +1 -1
  34. package/lib/components/dossier-management-widget-tab/editor/dossier-management-widgets-editor.component.d.ts +1 -0
  35. package/lib/components/dossier-management-widget-tab/editor/dossier-management-widgets-editor.component.d.ts.map +1 -1
  36. package/lib/services/widget-wizard.service.d.ts +2 -1
  37. package/lib/services/widget-wizard.service.d.ts.map +1 -1
  38. package/package.json +1 -1
@@ -18,9 +18,9 @@ import { ChangeDetectionStrategy, Component, computed, EventEmitter, HostBinding
18
18
  import { ReactiveFormsModule, Validators, } from '@angular/forms';
19
19
  import { TrashCan16 } from '@carbon/icons';
20
20
  import { TranslateModule } from '@ngx-translate/core';
21
- import { InputLabelModule } from '@valtimo/components';
21
+ import { InputLabelModule, ValuePathSelectorComponent, ValuePathSelectorPrefix, } from '@valtimo/components';
22
22
  import { CaseWidgetDisplayTypeKey, CaseWidgetType, } from '@valtimo/dossier';
23
- import { AccordionModule, ButtonModule, DropdownModule, IconModule, InputModule, } from 'carbon-components-angular';
23
+ import { AccordionModule, ButtonModule, CheckboxModule, DropdownModule, IconModule, InputModule, } from 'carbon-components-angular';
24
24
  import { debounceTime, Subscription } from 'rxjs';
25
25
  import * as i0 from "@angular/core";
26
26
  import * as i1 from "@valtimo/components";
@@ -49,7 +49,9 @@ export class DossierManagementWidgetFieldsColumnComponent {
49
49
  this.class = 'valtimo-dossier-management-widget-field-column';
50
50
  this.addTranslateKey = 'widgetTabManagement.content.fields.add';
51
51
  this.isFieldWidget = false;
52
+ this.showHideWhenEmptyCheckbox = false;
52
53
  this.columnUpdateEvent = new EventEmitter();
54
+ this.ValuePathSelectorPrefix = ValuePathSelectorPrefix;
53
55
  this.formGroup = this.fb.group({
54
56
  rows: this.fb.array([]),
55
57
  });
@@ -79,6 +81,7 @@ export class DossierManagementWidgetFieldsColumnComponent {
79
81
  title: this.fb.control('', Validators.required),
80
82
  content: this.fb.control('', Validators.required),
81
83
  ellipsisCharacterLimit: this.fb.control(null, Validators.pattern('[1-9][0-9]*')),
84
+ hideWhenEmpty: this.fb.control(false),
82
85
  }));
83
86
  }
84
87
  onDeleteRowClick(event, formArray, index) {
@@ -115,6 +118,7 @@ export class DossierManagementWidgetFieldsColumnComponent {
115
118
  row.displayProperties?.type === CaseWidgetDisplayTypeKey.TEXT) && {
116
119
  ellipsisCharacterLimit: this.fb.control(row.displayProperties?.ellipsisCharacterLimit ?? null, Validators.pattern('[1-9][0-9]*')),
117
120
  }),
121
+ hideWhenEmpty: this.fb.control(row.displayProperties?.hideWhenEmpty ?? false),
118
122
  ...([CaseWidgetDisplayTypeKey.NUMBER, CaseWidgetDisplayTypeKey.PERCENT].includes(row.displayProperties?.type) && {
119
123
  digitsInfo: this.fb.control(row.displayProperties.digitsInfo ?? ''),
120
124
  }),
@@ -163,6 +167,7 @@ export class DossierManagementWidgetFieldsColumnComponent {
163
167
  ...(!!row?.ellipsisCharacterLimit && {
164
168
  ellipsisCharacterLimit: row.ellipsisCharacterLimit,
165
169
  }),
170
+ ...(!!row?.hideWhenEmpty && { hideWhenEmpty: row.hideWhenEmpty }),
166
171
  ...(!!row?.currencyCode && { currencyCode: row.currencyCode }),
167
172
  ...(!!row?.display && { display: row.display }),
168
173
  ...(!!row?.digitsInfo && { digitsInfo: row.digitsInfo }),
@@ -177,7 +182,7 @@ export class DossierManagementWidgetFieldsColumnComponent {
177
182
  }));
178
183
  }
179
184
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierManagementWidgetFieldsColumnComponent, deps: [{ token: i1.CdsThemeService }, { token: i0.ChangeDetectorRef }, { token: i2.FormBuilder }, { token: i3.IconService }, { token: i4.TranslateService }, { token: i5.WidgetFieldsService }, { token: i5.WidgetWizardService }], target: i0.ɵɵFactoryTarget.Component }); }
180
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierManagementWidgetFieldsColumnComponent, isStandalone: true, selector: "valtimo-dossier-management-widget-fields-column", inputs: { columnData: "columnData", addTranslateKey: "addTranslateKey", isFieldWidget: "isFieldWidget", fieldWidthDropdown: "fieldWidthDropdown" }, outputs: { columnUpdateEvent: "columnUpdateEvent" }, host: { properties: { "class": "this.class" } }, 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<form\n *ngIf=\"inputTheme$ | async as inputTheme\"\n class=\"valtimo-dossier-management-widget-field-column\"\n [formGroup]=\"formGroup\"\n>\n <cds-accordion formArrayName=\"rows\" align=\"start\" size=\"sm\">\n @for (formRow of formRows.controls; track $index) {\n <cds-accordion-item\n [title]=\"fieldTitle\"\n [context]=\"{count: $count, index: $index, title: formRow.get('title')?.value}\"\n [expanded]=\"$index === 0\"\n class=\"valtimo-dossier-management-widget-field-column__item\"\n >\n <form\n [formGroup]=\"formRow\"\n class=\"valtimo-dossier-management-widget-field-column__container\"\n >\n <div\n class=\"valtimo-dossier-management-widget-field-column__content\"\n [class.valtimo-dossier-management-widget-field-column__content--collection]=\"\n !!fieldWidthDropdown\n \"\n >\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.title' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.' + widgetType() + '.titleTooltip' | translate\n \"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.titlePlaceholder' | translate\"\n type=\"text\"\n formControlName=\"title\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.value' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.' + widgetType() + '.valueTooltip' | translate\n \"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.valuePlaceholder' | translate\"\n type=\"text\"\n formControlName=\"content\"\n />\n </cds-text-label>\n\n <cds-dropdown\n [attr.data-carbon-theme]=\"inputTheme\"\n [label]=\"'widgetTabManagement.content.fields.type' | translate\"\n [dropUp]=\"false\"\n [placeholder]=\"'widgetTabManagement.content.fields.typePlaceholder' | translate\"\n (selected)=\"onTypeSelected(formRow, $event)\"\n formControlName=\"type\"\n >\n <cds-dropdown-list [items]=\"getDisplayItemsSelected(formRow)\"></cds-dropdown-list>\n </cds-dropdown>\n\n <ng-container\n *ngTemplateOutlet=\"fieldWidthDropdown; context: {index: $index}\"\n ></ng-container>\n </div>\n\n <div class=\"valtimo-dossier-management-widget-field-column__options\">\n @switch (formRow.get('type').value.id) {\n @case (CaseWidgetDisplayTypeKey.CURRENCY) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.currencyCode' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.currencyCodeTooltip' | translate\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.currencyCodePlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"currencyCode\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.display' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.displayTooltip' | translate\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.displayPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"display\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate: {minFractionDigits: 2, maxFractionDigits: 2}\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.digitsInfoPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.DATE) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.format' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.dateFormatTooltip' | translate\"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.formatPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"format\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.DATE_TIME) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.format' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.dateTimeFormatTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.formatPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"format\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.ENUM) {\n <div\n class=\"valtimo-dossier-management-widget-field-column__enum\"\n formArrayName=\"values\"\n >\n @for (rowValue of formRow.get('values')?.controls; track $index) {\n <form\n [formGroup]=\"rowValue\"\n class=\"valtimo-dossier-management-widget-field-column__enum-form\"\n >\n <cds-text-label>\n <v-input-label\n *ngIf=\"$index === 0\"\n [title]=\"'widgetTabManagement.content.fields.enumValue' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.enumValueTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n [attr.data-carbon-theme]=\"inputTheme\"\n cdsText\n [placeholder]=\"'widgetTabManagement.content.fields.enumValue' | translate\"\n type=\"text\"\n formControlName=\"key\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n *ngIf=\"$index === 0\"\n [title]=\"'widgetTabManagement.content.fields.enumDisplay' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.enumDisplayTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.enumDisplay' | translate\n \"\n type=\"text\"\n formControlName=\"value\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n [iconOnly]=\"true\"\n class=\"valtimo-dossier-management-widget-field-column__delete-button enum\"\n (click)=\"onDeleteRowClick($event, formRow.get('values'), $index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button\n cdsButton=\"primary\"\n size=\"sm\"\n (click)=\"onAddEnumValueClick(formRow.get('values'))\"\n >\n {{ 'widgetTabManagement.content.fields.addEnum' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n }\n @case (CaseWidgetDisplayTypeKey.NUMBER) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate\n : {\n minFractionDigits: 0,\n maxFractionDigits: 3,\n }\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.PERCENT) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate\n : {\n minFractionDigits: 0,\n maxFractionDigits: 0,\n }\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n }\n\n <cds-text-label\n *ngIf=\"\n formRow.get('type').value.id === CaseWidgetDisplayTypeKey.TEXT && isFieldWidget\n \"\n >\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.ellipsisCharacterLimit' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.ellipsisCharacterLimitTooltip' | translate\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.ellipsisCharacterLimitPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"ellipsisCharacterLimit\"\n />\n </cds-text-label>\n </div>\n </form>\n </cds-accordion-item>\n }\n </cds-accordion>\n\n <button cdsButton=\"primary\" size=\"sm\" (click)=\"addField()\">\n {{ addTranslateKey | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</form>\n\n<ng-template #fieldTitle let-count=\"count\" let-index=\"index\" let-title=\"title\">\n <div class=\"valtimo-dossier-management-widget-field-column__title\">\n {{ title || ('widgetTabManagement.content.fields.titlePlaceholder' | translate) }}\n\n <button\n cdsButton=\"danger\"\n [disabled]=\"count === 1\"\n [iconOnly]=\"true\"\n (click)=\"onDeleteRowClick($event, formRows, index)\"\n class=\"valtimo-dossier-management-widget-field-column__delete-button\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n</ng-template>\n", styles: [".valtimo-dossier-management-widget-field-column{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__item,.valtimo-dossier-management-widget-field-column__cotainer{background:var(--cds-layer-01)}.valtimo-dossier-management-widget-field-column__item .cds--accordion__content{padding-inline-end:20px}.valtimo-dossier-management-widget-field-column__container{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__content{display:grid;grid-template-columns:1fr 1fr 180px;align-items:flex-end;gap:16px}.valtimo-dossier-management-widget-field-column__content--collection{grid-template-columns:1fr 1fr 180px 180px}.valtimo-dossier-management-widget-field-column__title{display:flex;justify-content:space-between;align-items:center;width:100%;padding:8px}.valtimo-dossier-management-widget-field-column__delete-button{display:flex;align-items:center;justify-content:center;padding:0;align-self:center}.valtimo-dossier-management-widget-field-column__delete-button.enum{align-self:flex-end}.valtimo-dossier-management-widget-field-column__options{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.valtimo-dossier-management-widget-field-column__enum{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__enum-form{display:grid;grid-template-columns:1fr 1fr auto;align-items:flex-end;gap:16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3.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: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: AccordionModule }, { kind: "component", type: i3.Accordion, selector: "cds-accordion, ibm-accordion", inputs: ["align", "size", "skeleton"] }, { kind: "component", type: i3.AccordionItem, selector: "cds-accordion-item, ibm-accordion-item", inputs: ["title", "context", "id", "skeleton", "expanded", "disabled"], outputs: ["selected"] }, { kind: "ngmodule", type: InputLabelModule }, { kind: "component", type: i1.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
185
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierManagementWidgetFieldsColumnComponent, isStandalone: true, selector: "valtimo-dossier-management-widget-fields-column", inputs: { columnData: "columnData", addTranslateKey: "addTranslateKey", isFieldWidget: "isFieldWidget", documentDefinitionName: "documentDefinitionName", fieldWidthDropdown: "fieldWidthDropdown", selectedCollection: "selectedCollection", showHideWhenEmptyCheckbox: "showHideWhenEmptyCheckbox" }, outputs: { columnUpdateEvent: "columnUpdateEvent" }, host: { properties: { "class": "this.class" } }, 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<form\n *ngIf=\"inputTheme$ | async as inputTheme\"\n class=\"valtimo-dossier-management-widget-field-column\"\n [formGroup]=\"formGroup\"\n>\n <cds-accordion formArrayName=\"rows\" align=\"start\" size=\"sm\">\n @for (formRow of formRows.controls; track $index) {\n <cds-accordion-item\n [title]=\"fieldTitle\"\n [context]=\"{count: $count, index: $index, title: formRow.get('title')?.value}\"\n [expanded]=\"$index === 0\"\n class=\"valtimo-dossier-management-widget-field-column__item\"\n >\n <form\n [formGroup]=\"formRow\"\n class=\"valtimo-dossier-management-widget-field-column__container\"\n >\n <div\n class=\"valtimo-dossier-management-widget-field-column__content\"\n [class.valtimo-dossier-management-widget-field-column__content--collection]=\"\n !!fieldWidthDropdown\n \"\n >\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.title' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.' + widgetType() + '.titleTooltip' | translate\n \"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.titlePlaceholder' | translate\"\n type=\"text\"\n formControlName=\"title\"\n />\n </cds-text-label>\n\n <cds-dropdown\n [attr.data-carbon-theme]=\"inputTheme\"\n [label]=\"'widgetTabManagement.content.fields.type' | translate\"\n [dropUp]=\"false\"\n [placeholder]=\"'widgetTabManagement.content.fields.typePlaceholder' | translate\"\n (selected)=\"onTypeSelected(formRow, $event)\"\n formControlName=\"type\"\n >\n <cds-dropdown-list [items]=\"getDisplayItemsSelected(formRow)\"></cds-dropdown-list>\n </cds-dropdown>\n\n <ng-container\n *ngTemplateOutlet=\"fieldWidthDropdown; context: {index: $index}\"\n ></ng-container>\n\n <div class=\"valtimo-dossier-management-widget-field-column__path-selector\">\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.value' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.' + widgetType() + '.valueTooltip' | translate\n \"\n >\n </v-input-label>\n\n <valtimo-value-path-selector\n formControlName=\"content\"\n [documentDefinitionName]=\"documentDefinitionName\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [parentItem]=\"selectedCollection\"\n ></valtimo-value-path-selector>\n </div>\n </div>\n\n <div class=\"valtimo-dossier-management-widget-field-column__options\">\n @switch (formRow.get('type').value.id) {\n @case (CaseWidgetDisplayTypeKey.CURRENCY) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.currencyCode' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.currencyCodeTooltip' | translate\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.currencyCodePlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"currencyCode\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.display' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.displayTooltip' | translate\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.displayPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"display\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate: {minFractionDigits: 2, maxFractionDigits: 2}\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.digitsInfoPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.DATE) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.format' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.dateFormatTooltip' | translate\"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.formatPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"format\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.DATE_TIME) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.format' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.dateTimeFormatTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.formatPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"format\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.ENUM) {\n <div\n class=\"valtimo-dossier-management-widget-field-column__enum\"\n formArrayName=\"values\"\n >\n @for (rowValue of formRow.get('values')?.controls; track $index) {\n <form\n [formGroup]=\"rowValue\"\n class=\"valtimo-dossier-management-widget-field-column__enum-form\"\n >\n <cds-text-label>\n <v-input-label\n *ngIf=\"$index === 0\"\n [title]=\"'widgetTabManagement.content.fields.enumValue' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.enumValueTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n [attr.data-carbon-theme]=\"inputTheme\"\n cdsText\n [placeholder]=\"'widgetTabManagement.content.fields.enumValue' | translate\"\n type=\"text\"\n formControlName=\"key\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n *ngIf=\"$index === 0\"\n [title]=\"'widgetTabManagement.content.fields.enumDisplay' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.enumDisplayTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.enumDisplay' | translate\n \"\n type=\"text\"\n formControlName=\"value\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n [iconOnly]=\"true\"\n class=\"valtimo-dossier-management-widget-field-column__delete-button enum\"\n (click)=\"onDeleteRowClick($event, formRow.get('values'), $index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button\n cdsButton=\"primary\"\n size=\"sm\"\n (click)=\"onAddEnumValueClick(formRow.get('values'))\"\n >\n {{ 'widgetTabManagement.content.fields.addEnum' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n }\n @case (CaseWidgetDisplayTypeKey.NUMBER) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate\n : {\n minFractionDigits: 0,\n maxFractionDigits: 3,\n }\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.PERCENT) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate\n : {\n minFractionDigits: 0,\n maxFractionDigits: 0,\n }\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n }\n\n <cds-text-label\n *ngIf=\"\n formRow.get('type').value.id === CaseWidgetDisplayTypeKey.TEXT && isFieldWidget\n \"\n >\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.ellipsisCharacterLimit' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.ellipsisCharacterLimitTooltip' | translate\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.ellipsisCharacterLimitPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"ellipsisCharacterLimit\"\n />\n </cds-text-label>\n\n <cds-checkbox *ngIf=\"showHideWhenEmptyCheckbox\" formControlName=\"hideWhenEmpty\">\n {{ 'widgetTabManagement.content.hideWhenEmpty' | translate }}\n </cds-checkbox>\n </div>\n </form>\n </cds-accordion-item>\n }\n </cds-accordion>\n\n <button cdsButton=\"primary\" size=\"sm\" (click)=\"addField()\">\n {{ addTranslateKey | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</form>\n\n<ng-template #fieldTitle let-count=\"count\" let-index=\"index\" let-title=\"title\">\n <div class=\"valtimo-dossier-management-widget-field-column__title\">\n {{ title || ('widgetTabManagement.content.fields.titlePlaceholder' | translate) }}\n\n <button\n cdsButton=\"danger\"\n [disabled]=\"count === 1\"\n [iconOnly]=\"true\"\n (click)=\"onDeleteRowClick($event, formRows, index)\"\n class=\"valtimo-dossier-management-widget-field-column__delete-button\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n</ng-template>\n", styles: [".valtimo-dossier-management-widget-field-column{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__item,.valtimo-dossier-management-widget-field-column__cotainer{background:var(--cds-layer-01)}.valtimo-dossier-management-widget-field-column__item .cds--accordion__content{padding-inline-end:20px}.valtimo-dossier-management-widget-field-column__container{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__content{display:grid;grid-template-columns:1fr 180px 1fr;align-items:flex-end;gap:16px}.valtimo-dossier-management-widget-field-column__content--collection{grid-template-columns:1fr 180px 180px 1fr}.valtimo-dossier-management-widget-field-column__path-selector{display:flex;flex-direction:column}.valtimo-dossier-management-widget-field-column__title{display:flex;justify-content:space-between;align-items:center;width:100%;padding:8px}.valtimo-dossier-management-widget-field-column__delete-button{display:flex;align-items:center;justify-content:center;padding:0;align-self:center}.valtimo-dossier-management-widget-field-column__delete-button.enum{align-self:flex-end}.valtimo-dossier-management-widget-field-column__options{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.valtimo-dossier-management-widget-field-column__enum{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__enum-form{display:grid;grid-template-columns:1fr 1fr auto;align-items:flex-end;gap:16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3.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: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: AccordionModule }, { kind: "component", type: i3.Accordion, selector: "cds-accordion, ibm-accordion", inputs: ["align", "size", "skeleton"] }, { kind: "component", type: i3.AccordionItem, selector: "cds-accordion-item, ibm-accordion-item", inputs: ["title", "context", "id", "skeleton", "expanded", "disabled"], outputs: ["selected"] }, { kind: "ngmodule", type: InputLabelModule }, { kind: "component", type: i1.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "component", type: ValuePathSelectorComponent, selector: "valtimo-value-path-selector", inputs: ["name", "appendInline", "margin", "marginLg", "marginXl", "disabled", "documentDefinitionName", "version", "prefixes", "label", "tooltip", "required", "showDocumentDefinitionSelector", "notation", "defaultValue", "type", "parentItem"], outputs: ["valueChangeEvent", "collectionSelected"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i3.Checkbox, selector: "cds-checkbox, ibm-checkbox", inputs: ["disabled", "skeleton", "hideLabel", "name", "id", "required", "value", "ariaLabel", "ariaLabelledby", "indeterminate", "checked"], outputs: ["click", "checkedChange", "indeterminateChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
181
186
  }
182
187
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierManagementWidgetFieldsColumnComponent, decorators: [{
183
188
  type: Component,
@@ -191,7 +196,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
191
196
  IconModule,
192
197
  AccordionModule,
193
198
  InputLabelModule,
194
- ], 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<form\n *ngIf=\"inputTheme$ | async as inputTheme\"\n class=\"valtimo-dossier-management-widget-field-column\"\n [formGroup]=\"formGroup\"\n>\n <cds-accordion formArrayName=\"rows\" align=\"start\" size=\"sm\">\n @for (formRow of formRows.controls; track $index) {\n <cds-accordion-item\n [title]=\"fieldTitle\"\n [context]=\"{count: $count, index: $index, title: formRow.get('title')?.value}\"\n [expanded]=\"$index === 0\"\n class=\"valtimo-dossier-management-widget-field-column__item\"\n >\n <form\n [formGroup]=\"formRow\"\n class=\"valtimo-dossier-management-widget-field-column__container\"\n >\n <div\n class=\"valtimo-dossier-management-widget-field-column__content\"\n [class.valtimo-dossier-management-widget-field-column__content--collection]=\"\n !!fieldWidthDropdown\n \"\n >\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.title' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.' + widgetType() + '.titleTooltip' | translate\n \"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.titlePlaceholder' | translate\"\n type=\"text\"\n formControlName=\"title\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.value' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.' + widgetType() + '.valueTooltip' | translate\n \"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.valuePlaceholder' | translate\"\n type=\"text\"\n formControlName=\"content\"\n />\n </cds-text-label>\n\n <cds-dropdown\n [attr.data-carbon-theme]=\"inputTheme\"\n [label]=\"'widgetTabManagement.content.fields.type' | translate\"\n [dropUp]=\"false\"\n [placeholder]=\"'widgetTabManagement.content.fields.typePlaceholder' | translate\"\n (selected)=\"onTypeSelected(formRow, $event)\"\n formControlName=\"type\"\n >\n <cds-dropdown-list [items]=\"getDisplayItemsSelected(formRow)\"></cds-dropdown-list>\n </cds-dropdown>\n\n <ng-container\n *ngTemplateOutlet=\"fieldWidthDropdown; context: {index: $index}\"\n ></ng-container>\n </div>\n\n <div class=\"valtimo-dossier-management-widget-field-column__options\">\n @switch (formRow.get('type').value.id) {\n @case (CaseWidgetDisplayTypeKey.CURRENCY) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.currencyCode' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.currencyCodeTooltip' | translate\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.currencyCodePlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"currencyCode\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.display' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.displayTooltip' | translate\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.displayPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"display\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate: {minFractionDigits: 2, maxFractionDigits: 2}\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.digitsInfoPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.DATE) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.format' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.dateFormatTooltip' | translate\"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.formatPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"format\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.DATE_TIME) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.format' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.dateTimeFormatTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.formatPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"format\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.ENUM) {\n <div\n class=\"valtimo-dossier-management-widget-field-column__enum\"\n formArrayName=\"values\"\n >\n @for (rowValue of formRow.get('values')?.controls; track $index) {\n <form\n [formGroup]=\"rowValue\"\n class=\"valtimo-dossier-management-widget-field-column__enum-form\"\n >\n <cds-text-label>\n <v-input-label\n *ngIf=\"$index === 0\"\n [title]=\"'widgetTabManagement.content.fields.enumValue' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.enumValueTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n [attr.data-carbon-theme]=\"inputTheme\"\n cdsText\n [placeholder]=\"'widgetTabManagement.content.fields.enumValue' | translate\"\n type=\"text\"\n formControlName=\"key\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n *ngIf=\"$index === 0\"\n [title]=\"'widgetTabManagement.content.fields.enumDisplay' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.enumDisplayTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.enumDisplay' | translate\n \"\n type=\"text\"\n formControlName=\"value\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n [iconOnly]=\"true\"\n class=\"valtimo-dossier-management-widget-field-column__delete-button enum\"\n (click)=\"onDeleteRowClick($event, formRow.get('values'), $index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button\n cdsButton=\"primary\"\n size=\"sm\"\n (click)=\"onAddEnumValueClick(formRow.get('values'))\"\n >\n {{ 'widgetTabManagement.content.fields.addEnum' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n }\n @case (CaseWidgetDisplayTypeKey.NUMBER) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate\n : {\n minFractionDigits: 0,\n maxFractionDigits: 3,\n }\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.PERCENT) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate\n : {\n minFractionDigits: 0,\n maxFractionDigits: 0,\n }\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n }\n\n <cds-text-label\n *ngIf=\"\n formRow.get('type').value.id === CaseWidgetDisplayTypeKey.TEXT && isFieldWidget\n \"\n >\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.ellipsisCharacterLimit' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.ellipsisCharacterLimitTooltip' | translate\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.ellipsisCharacterLimitPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"ellipsisCharacterLimit\"\n />\n </cds-text-label>\n </div>\n </form>\n </cds-accordion-item>\n }\n </cds-accordion>\n\n <button cdsButton=\"primary\" size=\"sm\" (click)=\"addField()\">\n {{ addTranslateKey | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</form>\n\n<ng-template #fieldTitle let-count=\"count\" let-index=\"index\" let-title=\"title\">\n <div class=\"valtimo-dossier-management-widget-field-column__title\">\n {{ title || ('widgetTabManagement.content.fields.titlePlaceholder' | translate) }}\n\n <button\n cdsButton=\"danger\"\n [disabled]=\"count === 1\"\n [iconOnly]=\"true\"\n (click)=\"onDeleteRowClick($event, formRows, index)\"\n class=\"valtimo-dossier-management-widget-field-column__delete-button\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n</ng-template>\n", styles: [".valtimo-dossier-management-widget-field-column{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__item,.valtimo-dossier-management-widget-field-column__cotainer{background:var(--cds-layer-01)}.valtimo-dossier-management-widget-field-column__item .cds--accordion__content{padding-inline-end:20px}.valtimo-dossier-management-widget-field-column__container{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__content{display:grid;grid-template-columns:1fr 1fr 180px;align-items:flex-end;gap:16px}.valtimo-dossier-management-widget-field-column__content--collection{grid-template-columns:1fr 1fr 180px 180px}.valtimo-dossier-management-widget-field-column__title{display:flex;justify-content:space-between;align-items:center;width:100%;padding:8px}.valtimo-dossier-management-widget-field-column__delete-button{display:flex;align-items:center;justify-content:center;padding:0;align-self:center}.valtimo-dossier-management-widget-field-column__delete-button.enum{align-self:flex-end}.valtimo-dossier-management-widget-field-column__options{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.valtimo-dossier-management-widget-field-column__enum{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__enum-form{display:grid;grid-template-columns:1fr 1fr auto;align-items:flex-end;gap:16px}\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"] }]
199
+ ValuePathSelectorComponent,
200
+ CheckboxModule,
201
+ ], 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<form\n *ngIf=\"inputTheme$ | async as inputTheme\"\n class=\"valtimo-dossier-management-widget-field-column\"\n [formGroup]=\"formGroup\"\n>\n <cds-accordion formArrayName=\"rows\" align=\"start\" size=\"sm\">\n @for (formRow of formRows.controls; track $index) {\n <cds-accordion-item\n [title]=\"fieldTitle\"\n [context]=\"{count: $count, index: $index, title: formRow.get('title')?.value}\"\n [expanded]=\"$index === 0\"\n class=\"valtimo-dossier-management-widget-field-column__item\"\n >\n <form\n [formGroup]=\"formRow\"\n class=\"valtimo-dossier-management-widget-field-column__container\"\n >\n <div\n class=\"valtimo-dossier-management-widget-field-column__content\"\n [class.valtimo-dossier-management-widget-field-column__content--collection]=\"\n !!fieldWidthDropdown\n \"\n >\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.title' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.' + widgetType() + '.titleTooltip' | translate\n \"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.titlePlaceholder' | translate\"\n type=\"text\"\n formControlName=\"title\"\n />\n </cds-text-label>\n\n <cds-dropdown\n [attr.data-carbon-theme]=\"inputTheme\"\n [label]=\"'widgetTabManagement.content.fields.type' | translate\"\n [dropUp]=\"false\"\n [placeholder]=\"'widgetTabManagement.content.fields.typePlaceholder' | translate\"\n (selected)=\"onTypeSelected(formRow, $event)\"\n formControlName=\"type\"\n >\n <cds-dropdown-list [items]=\"getDisplayItemsSelected(formRow)\"></cds-dropdown-list>\n </cds-dropdown>\n\n <ng-container\n *ngTemplateOutlet=\"fieldWidthDropdown; context: {index: $index}\"\n ></ng-container>\n\n <div class=\"valtimo-dossier-management-widget-field-column__path-selector\">\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.value' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.' + widgetType() + '.valueTooltip' | translate\n \"\n >\n </v-input-label>\n\n <valtimo-value-path-selector\n formControlName=\"content\"\n [documentDefinitionName]=\"documentDefinitionName\"\n [prefixes]=\"[ValuePathSelectorPrefix.DOC, ValuePathSelectorPrefix.CASE]\"\n [parentItem]=\"selectedCollection\"\n ></valtimo-value-path-selector>\n </div>\n </div>\n\n <div class=\"valtimo-dossier-management-widget-field-column__options\">\n @switch (formRow.get('type').value.id) {\n @case (CaseWidgetDisplayTypeKey.CURRENCY) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.currencyCode' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.currencyCodeTooltip' | translate\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.currencyCodePlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"currencyCode\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.display' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.displayTooltip' | translate\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.displayPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"display\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate: {minFractionDigits: 2, maxFractionDigits: 2}\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.digitsInfoPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.DATE) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.format' | translate\"\n [tooltip]=\"'widgetTabManagement.content.fields.dateFormatTooltip' | translate\"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.formatPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"format\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.DATE_TIME) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.format' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.dateTimeFormatTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.formatPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"format\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.ENUM) {\n <div\n class=\"valtimo-dossier-management-widget-field-column__enum\"\n formArrayName=\"values\"\n >\n @for (rowValue of formRow.get('values')?.controls; track $index) {\n <form\n [formGroup]=\"rowValue\"\n class=\"valtimo-dossier-management-widget-field-column__enum-form\"\n >\n <cds-text-label>\n <v-input-label\n *ngIf=\"$index === 0\"\n [title]=\"'widgetTabManagement.content.fields.enumValue' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.enumValueTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n [attr.data-carbon-theme]=\"inputTheme\"\n cdsText\n [placeholder]=\"'widgetTabManagement.content.fields.enumValue' | translate\"\n type=\"text\"\n formControlName=\"key\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <v-input-label\n *ngIf=\"$index === 0\"\n [title]=\"'widgetTabManagement.content.fields.enumDisplay' | translate\"\n [tooltip]=\"\n 'widgetTabManagement.content.fields.enumDisplayTooltip' | translate\n \"\n ></v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.enumDisplay' | translate\n \"\n type=\"text\"\n formControlName=\"value\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n [iconOnly]=\"true\"\n class=\"valtimo-dossier-management-widget-field-column__delete-button enum\"\n (click)=\"onDeleteRowClick($event, formRow.get('values'), $index)\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button\n cdsButton=\"primary\"\n size=\"sm\"\n (click)=\"onAddEnumValueClick(formRow.get('values'))\"\n >\n {{ 'widgetTabManagement.content.fields.addEnum' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </div>\n }\n @case (CaseWidgetDisplayTypeKey.NUMBER) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate\n : {\n minFractionDigits: 0,\n maxFractionDigits: 3,\n }\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n @case (CaseWidgetDisplayTypeKey.PERCENT) {\n <cds-text-label>\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.digitsInfoTooltip'\n | translate\n : {\n minFractionDigits: 0,\n maxFractionDigits: 0,\n }\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"'widgetTabManagement.content.fields.digitsInfo' | translate\"\n type=\"text\"\n formControlName=\"digitsInfo\"\n />\n </cds-text-label>\n }\n }\n\n <cds-text-label\n *ngIf=\"\n formRow.get('type').value.id === CaseWidgetDisplayTypeKey.TEXT && isFieldWidget\n \"\n >\n <v-input-label\n [title]=\"'widgetTabManagement.content.fields.ellipsisCharacterLimit' | translate\"\n tooltip=\"{{\n 'widgetTabManagement.content.fields.ellipsisCharacterLimitTooltip' | translate\n }}\"\n >\n </v-input-label>\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"inputTheme\"\n [placeholder]=\"\n 'widgetTabManagement.content.fields.ellipsisCharacterLimitPlaceholder' | translate\n \"\n type=\"text\"\n formControlName=\"ellipsisCharacterLimit\"\n />\n </cds-text-label>\n\n <cds-checkbox *ngIf=\"showHideWhenEmptyCheckbox\" formControlName=\"hideWhenEmpty\">\n {{ 'widgetTabManagement.content.hideWhenEmpty' | translate }}\n </cds-checkbox>\n </div>\n </form>\n </cds-accordion-item>\n }\n </cds-accordion>\n\n <button cdsButton=\"primary\" size=\"sm\" (click)=\"addField()\">\n {{ addTranslateKey | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n</form>\n\n<ng-template #fieldTitle let-count=\"count\" let-index=\"index\" let-title=\"title\">\n <div class=\"valtimo-dossier-management-widget-field-column__title\">\n {{ title || ('widgetTabManagement.content.fields.titlePlaceholder' | translate) }}\n\n <button\n cdsButton=\"danger\"\n [disabled]=\"count === 1\"\n [iconOnly]=\"true\"\n (click)=\"onDeleteRowClick($event, formRows, index)\"\n class=\"valtimo-dossier-management-widget-field-column__delete-button\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </div>\n</ng-template>\n", styles: [".valtimo-dossier-management-widget-field-column{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__item,.valtimo-dossier-management-widget-field-column__cotainer{background:var(--cds-layer-01)}.valtimo-dossier-management-widget-field-column__item .cds--accordion__content{padding-inline-end:20px}.valtimo-dossier-management-widget-field-column__container{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__content{display:grid;grid-template-columns:1fr 180px 1fr;align-items:flex-end;gap:16px}.valtimo-dossier-management-widget-field-column__content--collection{grid-template-columns:1fr 180px 180px 1fr}.valtimo-dossier-management-widget-field-column__path-selector{display:flex;flex-direction:column}.valtimo-dossier-management-widget-field-column__title{display:flex;justify-content:space-between;align-items:center;width:100%;padding:8px}.valtimo-dossier-management-widget-field-column__delete-button{display:flex;align-items:center;justify-content:center;padding:0;align-self:center}.valtimo-dossier-management-widget-field-column__delete-button.enum{align-self:flex-end}.valtimo-dossier-management-widget-field-column__options{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.valtimo-dossier-management-widget-field-column__enum{display:flex;flex-direction:column;gap:16px}.valtimo-dossier-management-widget-field-column__enum-form{display:grid;grid-template-columns:1fr 1fr auto;align-items:flex-end;gap:16px}\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"] }]
195
202
  }], ctorParameters: () => [{ type: i1.CdsThemeService }, { type: i0.ChangeDetectorRef }, { type: i2.FormBuilder }, { type: i3.IconService }, { type: i4.TranslateService }, { type: i5.WidgetFieldsService }, { type: i5.WidgetWizardService }], propDecorators: { class: [{
196
203
  type: HostBinding,
197
204
  args: ['class']
@@ -202,9 +209,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
202
209
  type: Input
203
210
  }], isFieldWidget: [{
204
211
  type: Input
212
+ }], documentDefinitionName: [{
213
+ type: Input
205
214
  }], fieldWidthDropdown: [{
206
215
  type: Input
216
+ }], selectedCollection: [{
217
+ type: Input
218
+ }], showHideWhenEmptyCheckbox: [{
219
+ type: Input
207
220
  }], columnUpdateEvent: [{
208
221
  type: Output
209
222
  }] } });
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZHMtY29sdW1uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWNvbmZpZ3VyYXRvcnMvZmllbGRzL2NvbHVtbi9kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWZpZWxkcy1jb2x1bW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtY29uZmlndXJhdG9ycy9maWVsZHMvY29sdW1uL2Rvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGRzLWNvbHVtbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsTUFBTSxFQUdOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBS0wsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQXNDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDMUYsT0FBTyxFQUlMLHdCQUF3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Q1osY0FBYzt3QkFDZCxXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsVUFBVTt3QkFDVixlQUFlO3dCQUNmLGdCQUFnQjtxQkFDakI7MlFBR3FDLEtBQUs7c0JBQTFDLFdBQVc7dUJBQUMsT0FBTztnQkFDWSxVQUFVO3NCQUF6QyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFDUCxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1Usa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUVXLGlCQUFpQjtzQkFBakMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUFycmF5LFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUdyb3VwLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1RyYXNoQ2FuMTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDZHNUaGVtZVNlcnZpY2UsIEN1cnJlbnRDYXJib25UaGVtZSwgSW5wdXRMYWJlbE1vZHVsZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBDYXNlV2lkZ2V0Q3VycmVuY3lEaXNwbGF5VHlwZSxcbiAgQ2FzZVdpZGdldERhdGVEaXNwbGF5VHlwZSxcbiAgQ2FzZVdpZGdldERhdGVUaW1lRGlzcGxheVR5cGUsXG4gIENhc2VXaWRnZXREaXNwbGF5VHlwZUtleSxcbiAgQ2FzZVdpZGdldEVudW1EaXNwbGF5VHlwZSxcbiAgQ2FzZVdpZGdldE51bWJlckRpc3BsYXlUeXBlLFxuICBDYXNlV2lkZ2V0VGV4dERpc3BsYXlUeXBlLFxuICBDYXNlV2lkZ2V0VHlwZSxcbiAgRmllbGRzQ2FzZVdpZGdldFZhbHVlLFxufSBmcm9tICdAdmFsdGltby9kb3NzaWVyJztcbmltcG9ydCB7XG4gIEFjY29yZGlvbk1vZHVsZSxcbiAgQnV0dG9uTW9kdWxlLFxuICBEcm9wZG93bixcbiAgRHJvcGRvd25Nb2R1bGUsXG4gIEljb25Nb2R1bGUsXG4gIEljb25TZXJ2aWNlLFxuICBJbnB1dE1vZHVsZSxcbiAgTGlzdEl0ZW0sXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1dpZGdldEZpZWxkc1NlcnZpY2UsIFdpZGdldFdpemFyZFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWZpZWxkcy1jb2x1bW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZHMtY29sdW1uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZHMtY29sdW1uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgRHJvcGRvd25Nb2R1bGUsXG4gICAgSW5wdXRNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBJY29uTW9kdWxlLFxuICAgIEFjY29yZGlvbk1vZHVsZSxcbiAgICBJbnB1dExhYmVsTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyTWFuYWdlbWVudFdpZGdldEZpZWxkc0NvbHVtbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIHB1YmxpYyByZWFkb25seSBjbGFzcyA9ICd2YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGQtY29sdW1uJztcbiAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIHB1YmxpYyBjb2x1bW5EYXRhOiBGaWVsZHNDYXNlV2lkZ2V0VmFsdWVbXTtcbiAgQElucHV0KCkgcHVibGljIGFkZFRyYW5zbGF0ZUtleSA9ICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmFkZCc7XG4gIEBJbnB1dCgpIHB1YmxpYyBpc0ZpZWxkV2lkZ2V0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBmaWVsZFdpZHRoRHJvcGRvd24/OiBUZW1wbGF0ZVJlZjxEcm9wZG93bj47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBjb2x1bW5VcGRhdGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGRhdGE6IEZpZWxkc0Nhc2VXaWRnZXRWYWx1ZVtdO1xuICAgIHZhbGlkOiBib29sZWFuO1xuICB9PigpO1xuXG4gIHB1YmxpYyBmb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICByb3dzOiB0aGlzLmZiLmFycmF5PGFueT4oW10pLFxuICB9KTtcblxuICBwdWJsaWMgZ2V0IGZvcm1Sb3dzKCk6IEZvcm1BcnJheSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5nZXQoJ3Jvd3MnKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3Jvd3MnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBwdWJsaWMgZGlzcGxheVR5cGVJdGVtczogTGlzdEl0ZW1bXSA9IHRoaXMud2lkZ2V0RmllbGRzU2VydmljZS5kaXNwbGF5VHlwZUl0ZW1zO1xuXG4gIHB1YmxpYyBnZXREaXNwbGF5SXRlbXNTZWxlY3RlZChyb3c6IEFic3RyYWN0Q29udHJvbCk6IExpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLndpZGdldEZpZWxkc1NlcnZpY2UuZ2V0RGlzcGxheUl0ZW1zU2VsZWN0ZWQocm93KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBDYXNlV2lkZ2V0RGlzcGxheVR5cGVLZXkgPSBDYXNlV2lkZ2V0RGlzcGxheVR5cGVLZXk7XG4gIHB1YmxpYyByZWFkb25seSB3aWRnZXRUeXBlOiBTaWduYWw8Q2FzZVdpZGdldFR5cGU+ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy53aWRnZXRXaXphcmRTZXJ2aWNlLnNlbGVjdGVkV2lkZ2V0KCk/LnR5cGUgPz8gQ2FzZVdpZGdldFR5cGUuRklFTERTXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlucHV0VGhlbWUkOiBPYnNlcnZhYmxlPEN1cnJlbnRDYXJib25UaGVtZT4gPSB0aGlzLmNkc1RoZW1lU2VydmljZS5jdXJyZW50VGhlbWUkO1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHNUaGVtZVNlcnZpY2U6IENkc1RoZW1lU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2lkZ2V0RmllbGRzU2VydmljZTogV2lkZ2V0RmllbGRzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpZGdldFdpemFyZFNlcnZpY2U6IFdpZGdldFdpemFyZFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlcihUcmFzaENhbjE2KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgdGhpcy5vcGVuRm9ybVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICB9XG5cbiAgcHVibGljIGFkZEZpZWxkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mb3JtUm93cykgcmV0dXJuO1xuXG4gICAgdGhpcy5mb3JtUm93cy5wdXNoKFxuICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIHR5cGU6IHRoaXMuZmIuY29udHJvbDxMaXN0SXRlbT4oe2NvbnRlbnQ6ICcnLCBzZWxlY3RlZDogZmFsc2V9LCBbXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICB0aGlzLnR5cGVTZWxlY3RWYWxpZGF0b3IsXG4gICAgICAgIF0pLFxuICAgICAgICB0aXRsZTogdGhpcy5mYi5jb250cm9sPHN0cmluZz4oJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICBjb250ZW50OiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPignJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIGVsbGlwc2lzQ2hhcmFjdGVyTGltaXQ6IHRoaXMuZmIuY29udHJvbDxudW1iZXIgfCBudWxsPihcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignWzEtOV1bMC05XSonKVxuICAgICAgICApLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uRGVsZXRlUm93Q2xpY2soZXZlbnQ6IEV2ZW50LCBmb3JtQXJyYXk6IEZvcm1BcnJheSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmICghZm9ybUFycmF5KSByZXR1cm47XG5cbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICB9XG5cbiAgcHVibGljIG9uVHlwZVNlbGVjdGVkKGZvcm1Sb3c6IEZvcm1Hcm91cCwgZXZlbnQ6IHtpdGVtOiBMaXN0SXRlbX0pOiB2b2lkIHtcbiAgICB0aGlzLndpZGdldEZpZWxkc1NlcnZpY2Uub25EaXNwbGF5VHlwZVNlbGVjdGVkKFsndGl0bGUnLCAnY29udGVudCcsICd0eXBlJ10sIGZvcm1Sb3csIGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkFkZEVudW1WYWx1ZUNsaWNrKHZhbHVlc0Zvcm1BcnJheTogRm9ybUFycmF5KTogdm9pZCB7XG4gICAgdmFsdWVzRm9ybUFycmF5LnB1c2goXG4gICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAga2V5OiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICB2YWx1ZTogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdHlwZVNlbGVjdFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBudWxsIHwge1trZXk6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZTogTGlzdEl0ZW0gfCB1bmRlZmluZWQgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICghY29udHJvbFZhbHVlIHx8ICFjb250cm9sVmFsdWUuc2VsZWN0ZWQpIHJldHVybiB7ZXJyb3I6ICdUeXBlIGlzIG5vdCBzZWxlY3RlZCd9O1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFJvd0Zvcm0ocm93OiBGaWVsZHNDYXNlV2lkZ2V0VmFsdWUpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHR5cGU6IHRoaXMuZmIuY29udHJvbDxMaXN0SXRlbT4oXG4gICAgICAgIHtcbiAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgICBgd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmRpc3BsYXlUeXBlLiR7cm93LmRpc3BsYXlQcm9wZXJ0aWVzPy50eXBlID8/IENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5URVhUfWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIGlkOiByb3cuZGlzcGxheVByb3BlcnRpZXM/LnR5cGUgPz8gQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5LlRFWFQsXG4gICAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICksXG4gICAgICB0aXRsZTogdGhpcy5mYi5jb250cm9sPHN0cmluZz4ocm93LnRpdGxlLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KHJvdy52YWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAuLi4oKCFyb3cuZGlzcGxheVByb3BlcnRpZXMgfHxcbiAgICAgICAgcm93LmRpc3BsYXlQcm9wZXJ0aWVzPy50eXBlID09PSBDYXNlV2lkZ2V0RGlzcGxheVR5cGVLZXkuVEVYVCkgJiYge1xuICAgICAgICBlbGxpcHNpc0NoYXJhY3RlckxpbWl0OiB0aGlzLmZiLmNvbnRyb2w8bnVtYmVyIHwgbnVsbD4oXG4gICAgICAgICAgKHJvdy5kaXNwbGF5UHJvcGVydGllcyBhcyBDYXNlV2lkZ2V0VGV4dERpc3BsYXlUeXBlKT8uZWxsaXBzaXNDaGFyYWN0ZXJMaW1pdCA/PyBudWxsLFxuICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignWzEtOV1bMC05XSonKVxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgICAuLi4oW0Nhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5OVU1CRVIsIENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5QRVJDRU5UXS5pbmNsdWRlcyhcbiAgICAgICAgcm93LmRpc3BsYXlQcm9wZXJ0aWVzPy50eXBlIGFzIENhc2VXaWRnZXREaXNwbGF5VHlwZUtleVxuICAgICAgKSAmJiB7XG4gICAgICAgIGRpZ2l0c0luZm86IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KFxuICAgICAgICAgIChyb3cuZGlzcGxheVByb3BlcnRpZXMgYXMgQ2FzZVdpZGdldE51bWJlckRpc3BsYXlUeXBlKS5kaWdpdHNJbmZvID8/ICcnXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICAgIC4uLihyb3cuZGlzcGxheVByb3BlcnRpZXM/LnR5cGUgPT09IENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5DVVJSRU5DWSAmJiB7XG4gICAgICAgIGRpZ2l0c0luZm86IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KFxuICAgICAgICAgIChyb3cuZGlzcGxheVByb3BlcnRpZXMgYXMgQ2FzZVdpZGdldEN1cnJlbmN5RGlzcGxheVR5cGUpLmRpZ2l0c0luZm8gPz8gJydcbiAgICAgICAgKSxcbiAgICAgICAgY3VycmVuY3lDb2RlOiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPihcbiAgICAgICAgICAocm93LmRpc3BsYXlQcm9wZXJ0aWVzIGFzIENhc2VXaWRnZXRDdXJyZW5jeURpc3BsYXlUeXBlKS5jdXJyZW5jeUNvZGUgPz8gJydcbiAgICAgICAgKSxcbiAgICAgICAgZGlzcGxheTogdGhpcy5mYi5jb250cm9sPHN0cmluZz4oXG4gICAgICAgICAgKHJvdy5kaXNwbGF5UHJvcGVydGllcyBhcyBDYXNlV2lkZ2V0Q3VycmVuY3lEaXNwbGF5VHlwZSkuZGlzcGxheSA/PyAnJ1xuICAgICAgICApLFxuICAgICAgfSksXG4gICAgICAuLi4ocm93LmRpc3BsYXlQcm9wZXJ0aWVzPy50eXBlID09PSBDYXNlV2lkZ2V0RGlzcGxheVR5cGVLZXkuREFURSAmJiB7XG4gICAgICAgIGZvcm1hdDogdGhpcy5mYi5jb250cm9sPHN0cmluZz4oXG4gICAgICAgICAgKHJvdy5kaXNwbGF5UHJvcGVydGllcyBhcyBDYXNlV2lkZ2V0RGF0ZURpc3BsYXlUeXBlKS5mb3JtYXQgPz8gJydcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHJvdy5kaXNwbGF5UHJvcGVydGllcz8udHlwZSA9PT0gQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5LkRBVEVfVElNRSAmJiB7XG4gICAgICAgIGZvcm1hdDogdGhpcy5mYi5jb250cm9sPHN0cmluZz4oXG4gICAgICAgICAgKHJvdy5kaXNwbGF5UHJvcGVydGllcyBhcyBDYXNlV2lkZ2V0RGF0ZVRpbWVEaXNwbGF5VHlwZSkuZm9ybWF0ID8/ICcnXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICAgIC4uLihyb3cuZGlzcGxheVByb3BlcnRpZXM/LnR5cGUgPT09IENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5FTlVNICYmIHtcbiAgICAgICAgdmFsdWVzOiB0aGlzLmZiLmFycmF5KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKChyb3cuZGlzcGxheVByb3BlcnRpZXMgYXMgQ2FzZVdpZGdldEVudW1EaXNwbGF5VHlwZSkudmFsdWVzKS5tYXAoXG4gICAgICAgICAgICAoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KGtleSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KHZhbHVlIGFzIHN0cmluZywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb2x1bW5EYXRhKSB7XG4gICAgICB0aGlzLmFkZEZpZWxkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgcm93c0NvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ3Jvd3MnKSBhcyBGb3JtQXJyYXk7XG4gICAgaWYgKCFyb3dzQ29udHJvbCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jb2x1bW5EYXRhLmZvckVhY2goKHJvdzogRmllbGRzQ2FzZVdpZGdldFZhbHVlKSA9PiB7XG4gICAgICByb3dzQ29udHJvbC5wdXNoKHRoaXMuZ2V0Um93Rm9ybShyb3cpLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb2x1bW5VcGRhdGVFdmVudC5lbWl0KHtkYXRhOiB0aGlzLmNvbHVtbkRhdGEsIHZhbGlkOiB0cnVlfSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRm9ybVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZm9ybVJvd3M/LnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxMDApKS5zdWJzY3JpYmUoKHJvd3M6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBtYXBwZWRSb3dzOiBGaWVsZHNDYXNlV2lkZ2V0VmFsdWVbXSA9IHJvd3MubWFwKChyb3c6IGFueSB8IG51bGwpID0+ICh7XG4gICAgICAgICAga2V5OiByb3cudGl0bGUucmVwbGFjZSgvXFxXKy9nLCAnLScpLnJlcGxhY2UoL1xcLSQvLCAnJykudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB0aXRsZTogcm93LnRpdGxlLFxuICAgICAgICAgIHZhbHVlOiByb3cuY29udGVudCxcbiAgICAgICAgICAuLi4oISFyb3c/LnR5cGUuaWQgJiYge1xuICAgICAgICAgICAgZGlzcGxheVByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogcm93LnR5cGUuaWQsXG4gICAgICAgICAgICAgIC4uLighIXJvdz8uZWxsaXBzaXNDaGFyYWN0ZXJMaW1pdCAmJiB7XG4gICAgICAgICAgICAgICAgZWxsaXBzaXNDaGFyYWN0ZXJMaW1pdDogcm93LmVsbGlwc2lzQ2hhcmFjdGVyTGltaXQsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAuLi4oISFyb3c/LmN1cnJlbmN5Q29kZSAmJiB7Y3VycmVuY3lDb2RlOiByb3cuY3VycmVuY3lDb2RlfSksXG4gICAgICAgICAgICAgIC4uLighIXJvdz8uZGlzcGxheSAmJiB7ZGlzcGxheTogcm93LmRpc3BsYXl9KSxcbiAgICAgICAgICAgICAgLi4uKCEhcm93Py5kaWdpdHNJbmZvICYmIHtkaWdpdHNJbmZvOiByb3cuZGlnaXRzSW5mb30pLFxuICAgICAgICAgICAgICAuLi4oISFyb3c/LmZvcm1hdCAmJiB7Zm9ybWF0OiByb3cuZm9ybWF0fSksXG4gICAgICAgICAgICAgIC4uLighIXJvdz8udmFsdWVzICYmIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHJvdy52YWx1ZXM/LnJlZHVjZSgoYWNjLCBjdXJyKSA9PiAoey4uLmFjYywgW2N1cnIua2V5XTogY3Vyci52YWx1ZX0pLCB7fSksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmNvbHVtblVwZGF0ZUV2ZW50LmVtaXQoe2RhdGE6IG1hcHBlZFJvd3MsIHZhbGlkOiB0aGlzLmZvcm1Hcm91cC52YWxpZH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG48Zm9ybVxuICAqbmdJZj1cImlucHV0VGhlbWUkIHwgYXN5bmMgYXMgaW5wdXRUaGVtZVwiXG4gIGNsYXNzPVwidmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWZpZWxkLWNvbHVtblwiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbj5cbiAgPGNkcy1hY2NvcmRpb24gZm9ybUFycmF5TmFtZT1cInJvd3NcIiBhbGlnbj1cInN0YXJ0XCIgc2l6ZT1cInNtXCI+XG4gICAgQGZvciAoZm9ybVJvdyBvZiBmb3JtUm93cy5jb250cm9sczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8Y2RzLWFjY29yZGlvbi1pdGVtXG4gICAgICAgIFt0aXRsZV09XCJmaWVsZFRpdGxlXCJcbiAgICAgICAgW2NvbnRleHRdPVwie2NvdW50OiAkY291bnQsIGluZGV4OiAkaW5kZXgsIHRpdGxlOiBmb3JtUm93LmdldCgndGl0bGUnKT8udmFsdWV9XCJcbiAgICAgICAgW2V4cGFuZGVkXT1cIiRpbmRleCA9PT0gMFwiXG4gICAgICAgIGNsYXNzPVwidmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWZpZWxkLWNvbHVtbl9faXRlbVwiXG4gICAgICA+XG4gICAgICAgIDxmb3JtXG4gICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtUm93XCJcbiAgICAgICAgICBjbGFzcz1cInZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZC1jb2x1bW5fX2NvbnRhaW5lclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZC1jb2x1bW5fX2NvbnRlbnRcIlxuICAgICAgICAgICAgW2NsYXNzLnZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZC1jb2x1bW5fX2NvbnRlbnQtLWNvbGxlY3Rpb25dPVwiXG4gICAgICAgICAgICAgICEhZmllbGRXaWR0aERyb3Bkb3duXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMudGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuJyArIHdpZGdldFR5cGUoKSArICcudGl0bGVUb29sdGlwJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMudGl0bGVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuXG4gICAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLnZhbHVlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LicgKyB3aWRnZXRUeXBlKCkgKyAnLnZhbHVlVG9vbHRpcCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjZHNUZXh0XG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwiaW5wdXRUaGVtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLnZhbHVlUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29udGVudFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuXG4gICAgICAgICAgICA8Y2RzLWRyb3Bkb3duXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtY2FyYm9uLXRoZW1lXT1cImlucHV0VGhlbWVcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMudHlwZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbZHJvcFVwXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLnR5cGVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25UeXBlU2VsZWN0ZWQoZm9ybVJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cImdldERpc3BsYXlJdGVtc1NlbGVjdGVkKGZvcm1Sb3cpXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgICAgIDwvY2RzLWRyb3Bkb3duPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRXaWR0aERyb3Bkb3duOyBjb250ZXh0OiB7aW5kZXg6ICRpbmRleH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZC1jb2x1bW5fX29wdGlvbnNcIj5cbiAgICAgICAgICAgIEBzd2l0Y2ggKGZvcm1Sb3cuZ2V0KCd0eXBlJykudmFsdWUuaWQpIHtcbiAgICAgICAgICAgICAgQGNhc2UgKENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5DVVJSRU5DWSkge1xuICAgICAgICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5jdXJyZW5jeUNvZGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuY3VycmVuY3lDb2RlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmN1cnJlbmN5Q29kZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImN1cnJlbmN5Q29kZVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuZGlzcGxheScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaXNwbGF5VG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmRpc3BsYXlQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaWdpdHNJbmZvJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmRpZ2l0c0luZm9Ub29sdGlwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHttaW5GcmFjdGlvbkRpZ2l0czogMiwgbWF4RnJhY3Rpb25EaWdpdHM6IDJ9XG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwiaW5wdXRUaGVtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaWdpdHNJbmZvUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlnaXRzSW5mb1wiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGNhc2UgKENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5EQVRFKSB7XG4gICAgICAgICAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmZvcm1hdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kYXRlRm9ybWF0VG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgPjwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwiaW5wdXRUaGVtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5mb3JtYXRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBjYXNlIChDYXNlV2lkZ2V0RGlzcGxheVR5cGVLZXkuREFURV9USU1FKSB7XG4gICAgICAgICAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmZvcm1hdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kYXRlVGltZUZvcm1hdFRvb2x0aXAnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmZvcm1hdFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGNhc2UgKENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5FTlVNKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGQtY29sdW1uX19lbnVtXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1BcnJheU5hbWU9XCJ2YWx1ZXNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHJvd1ZhbHVlIG9mIGZvcm1Sb3cuZ2V0KCd2YWx1ZXMnKT8uY29udHJvbHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8Zm9ybVxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwicm93VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWZpZWxkLWNvbHVtbl9fZW51bS1mb3JtXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiJGluZGV4ID09PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmVudW1WYWx1ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbnVtVmFsdWVUb29sdGlwJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY2FyYm9uLXRoZW1lXT1cImlucHV0VGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjZHNUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbnVtVmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIkaW5kZXggPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuZW51bURpc3BsYXknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuZW51bURpc3BsYXlUb29sdGlwJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwiaW5wdXRUaGVtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbnVtRGlzcGxheScgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjZHNCdXR0b249XCJkYW5nZXItLWdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIkY291bnQgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGQtY29sdW1uX19kZWxldGUtYnV0dG9uIGVudW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlUm93Q2xpY2soJGV2ZW50LCBmb3JtUm93LmdldCgndmFsdWVzJyksICRpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJ0cmFzaC1jYW5cIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGRFbnVtVmFsdWVDbGljayhmb3JtUm93LmdldCgndmFsdWVzJykpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuYWRkRW51bScgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5Lk5VTUJFUikge1xuICAgICAgICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaWdpdHNJbmZvJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmRpZ2l0c0luZm9Ub29sdGlwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5GcmFjdGlvbkRpZ2l0czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEZyYWN0aW9uRGlnaXRzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmRpZ2l0c0luZm8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaWdpdHNJbmZvXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5LlBFUkNFTlQpIHtcbiAgICAgICAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuZGlnaXRzSW5mbycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwPVwie3tcbiAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaWdpdHNJbmZvVG9vbHRpcCdcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluRnJhY3Rpb25EaWdpdHM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwiaW5wdXRUaGVtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaWdpdHNJbmZvJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlnaXRzSW5mb1wiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPGNkcy10ZXh0LWxhYmVsXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgZm9ybVJvdy5nZXQoJ3R5cGUnKS52YWx1ZS5pZCA9PT0gQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5LlRFWFQgJiYgaXNGaWVsZFdpZGdldFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbGxpcHNpc0NoYXJhY3RlckxpbWl0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7XG4gICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbGxpcHNpc0NoYXJhY3RlckxpbWl0VG9vbHRpcCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbGxpcHNpc0NoYXJhY3RlckxpbWl0UGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZWxsaXBzaXNDaGFyYWN0ZXJMaW1pdFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Nkcy1hY2NvcmRpb24taXRlbT5cbiAgICB9XG4gIDwvY2RzLWFjY29yZGlvbj5cblxuICA8YnV0dG9uIGNkc0J1dHRvbj1cInByaW1hcnlcIiBzaXplPVwic21cIiAoY2xpY2spPVwiYWRkRmllbGQoKVwiPlxuICAgIHt7IGFkZFRyYW5zbGF0ZUtleSB8IHRyYW5zbGF0ZSB9fVxuXG4gICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImFkZFwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICA8L2J1dHRvbj5cbjwvZm9ybT5cblxuPG5nLXRlbXBsYXRlICNmaWVsZFRpdGxlIGxldC1jb3VudD1cImNvdW50XCIgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtdGl0bGU9XCJ0aXRsZVwiPlxuICA8ZGl2IGNsYXNzPVwidmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWZpZWxkLWNvbHVtbl9fdGl0bGVcIj5cbiAgICB7eyB0aXRsZSB8fCAoJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMudGl0bGVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGUpIH19XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJkYW5nZXJcIlxuICAgICAgW2Rpc2FibGVkXT1cImNvdW50ID09PSAxXCJcbiAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgIChjbGljayk9XCJvbkRlbGV0ZVJvd0NsaWNrKCRldmVudCwgZm9ybVJvd3MsIGluZGV4KVwiXG4gICAgICBjbGFzcz1cInZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZC1jb2x1bW5fX2RlbGV0ZS1idXR0b25cIlxuICAgID5cbiAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJ0cmFzaC1jYW5cIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZHMtY29sdW1uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci1tYW5hZ2VtZW50L3NyYy9saWIvY29tcG9uZW50cy9kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWNvbmZpZ3VyYXRvcnMvZmllbGRzL2NvbHVtbi9kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWZpZWxkcy1jb2x1bW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9kb3NzaWVyLW1hbmFnZW1lbnQvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtY29uZmlndXJhdG9ycy9maWVsZHMvY29sdW1uL2Rvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGRzLWNvbHVtbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsTUFBTSxFQUdOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBS0wsbUJBQW1CLEVBQ25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBR0wsZ0JBQWdCLEVBRWhCLDBCQUEwQixFQUMxQix1QkFBdUIsR0FDeEIsTUFBTSxxQkFBcUIs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QUMvRSxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0EvTlUsNENBQTRDO21HQUE1Qyw0Q0FBNEMseWZDL0Z6RCxrMmRBMldBLCtwRUR6UkksWUFBWSw4VkFDWixlQUFlLDJGQUNmLFlBQVksZ01BQ1osY0FBYyxnc0JBQ2QsV0FBVywyYUFDWCxtQkFBbUIsbWpDQUNuQixVQUFVLDROQUNWLGVBQWUsNFZBQ2YsZ0JBQWdCLHVQQUNoQiwwQkFBMEIsaVhBQzFCLGNBQWM7OzRGQUdMLDRDQUE0QztrQkFyQnhELFNBQVM7K0JBQ0UsaURBQWlELG1CQUcxQyx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixVQUFVO3dCQUNWLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQiwwQkFBMEI7d0JBQzFCLGNBQWM7cUJBQ2Y7MlFBR3FDLEtBQUs7c0JBQTFDLFdBQVc7dUJBQUMsT0FBTztnQkFDWSxVQUFVO3NCQUF6QyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFDUCxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1Usc0JBQXNCO3NCQUFyQyxLQUFLO2dCQUNVLGtCQUFrQjtzQkFBakMsS0FBSztnQkFDVSxrQkFBa0I7c0JBQWpDLEtBQUs7Z0JBQ1UseUJBQXlCO3NCQUF4QyxLQUFLO2dCQUVXLGlCQUFpQjtzQkFBakMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUFycmF5LFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUdyb3VwLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1RyYXNoQ2FuMTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2RzVGhlbWVTZXJ2aWNlLFxuICBDdXJyZW50Q2FyYm9uVGhlbWUsXG4gIElucHV0TGFiZWxNb2R1bGUsXG4gIFZhbHVlUGF0aEl0ZW0sXG4gIFZhbHVlUGF0aFNlbGVjdG9yQ29tcG9uZW50LFxuICBWYWx1ZVBhdGhTZWxlY3RvclByZWZpeCxcbn0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBDYXNlV2lkZ2V0Q3VycmVuY3lEaXNwbGF5VHlwZSxcbiAgQ2FzZVdpZGdldERhdGVEaXNwbGF5VHlwZSxcbiAgQ2FzZVdpZGdldERhdGVUaW1lRGlzcGxheVR5cGUsXG4gIENhc2VXaWRnZXREaXNwbGF5VHlwZUtleSxcbiAgQ2FzZVdpZGdldEVudW1EaXNwbGF5VHlwZSxcbiAgQ2FzZVdpZGdldE51bWJlckRpc3BsYXlUeXBlLFxuICBDYXNlV2lkZ2V0VGV4dERpc3BsYXlUeXBlLFxuICBDYXNlV2lkZ2V0VHlwZSxcbiAgRmllbGRzQ2FzZVdpZGdldFZhbHVlLFxufSBmcm9tICdAdmFsdGltby9kb3NzaWVyJztcbmltcG9ydCB7XG4gIEFjY29yZGlvbk1vZHVsZSxcbiAgQnV0dG9uTW9kdWxlLFxuICBDaGVja2JveE1vZHVsZSxcbiAgRHJvcGRvd24sXG4gIERyb3Bkb3duTW9kdWxlLFxuICBJY29uTW9kdWxlLFxuICBJY29uU2VydmljZSxcbiAgSW5wdXRNb2R1bGUsXG4gIExpc3RJdGVtLFxufSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtXaWRnZXRGaWVsZHNTZXJ2aWNlLCBXaWRnZXRXaXphcmRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZHMtY29sdW1uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGRzLWNvbHVtbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGRzLWNvbHVtbi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIElucHV0TW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgSWNvbk1vZHVsZSxcbiAgICBBY2NvcmRpb25Nb2R1bGUsXG4gICAgSW5wdXRMYWJlbE1vZHVsZSxcbiAgICBWYWx1ZVBhdGhTZWxlY3RvckNvbXBvbmVudCxcbiAgICBDaGVja2JveE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9zc2llck1hbmFnZW1lbnRXaWRnZXRGaWVsZHNDb2x1bW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBwdWJsaWMgcmVhZG9ubHkgY2xhc3MgPSAndmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWZpZWxkLWNvbHVtbic7XG4gIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KSBwdWJsaWMgY29sdW1uRGF0YTogRmllbGRzQ2FzZVdpZGdldFZhbHVlW107XG4gIEBJbnB1dCgpIHB1YmxpYyBhZGRUcmFuc2xhdGVLZXkgPSAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5hZGQnO1xuICBASW5wdXQoKSBwdWJsaWMgaXNGaWVsZFdpZGdldCA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgZG9jdW1lbnREZWZpbml0aW9uTmFtZT86IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGZpZWxkV2lkdGhEcm9wZG93bj86IFRlbXBsYXRlUmVmPERyb3Bkb3duPjtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkQ29sbGVjdGlvbj86IFZhbHVlUGF0aEl0ZW07XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93SGlkZVdoZW5FbXB0eUNoZWNrYm94ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBjb2x1bW5VcGRhdGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGRhdGE6IEZpZWxkc0Nhc2VXaWRnZXRWYWx1ZVtdO1xuICAgIHZhbGlkOiBib29sZWFuO1xuICB9PigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBWYWx1ZVBhdGhTZWxlY3RvclByZWZpeCA9IFZhbHVlUGF0aFNlbGVjdG9yUHJlZml4O1xuXG4gIHB1YmxpYyBmb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICByb3dzOiB0aGlzLmZiLmFycmF5PGFueT4oW10pLFxuICB9KTtcblxuICBwdWJsaWMgZ2V0IGZvcm1Sb3dzKCk6IEZvcm1BcnJheSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5nZXQoJ3Jvd3MnKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3Jvd3MnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBwdWJsaWMgZGlzcGxheVR5cGVJdGVtczogTGlzdEl0ZW1bXSA9IHRoaXMud2lkZ2V0RmllbGRzU2VydmljZS5kaXNwbGF5VHlwZUl0ZW1zO1xuXG4gIHB1YmxpYyBnZXREaXNwbGF5SXRlbXNTZWxlY3RlZChyb3c6IEFic3RyYWN0Q29udHJvbCk6IExpc3RJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLndpZGdldEZpZWxkc1NlcnZpY2UuZ2V0RGlzcGxheUl0ZW1zU2VsZWN0ZWQocm93KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBDYXNlV2lkZ2V0RGlzcGxheVR5cGVLZXkgPSBDYXNlV2lkZ2V0RGlzcGxheVR5cGVLZXk7XG4gIHB1YmxpYyByZWFkb25seSB3aWRnZXRUeXBlOiBTaWduYWw8Q2FzZVdpZGdldFR5cGU+ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy53aWRnZXRXaXphcmRTZXJ2aWNlLnNlbGVjdGVkV2lkZ2V0KCk/LnR5cGUgPz8gQ2FzZVdpZGdldFR5cGUuRklFTERTXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlucHV0VGhlbWUkOiBPYnNlcnZhYmxlPEN1cnJlbnRDYXJib25UaGVtZT4gPSB0aGlzLmNkc1RoZW1lU2VydmljZS5jdXJyZW50VGhlbWUkO1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHNUaGVtZVNlcnZpY2U6IENkc1RoZW1lU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2lkZ2V0RmllbGRzU2VydmljZTogV2lkZ2V0RmllbGRzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpZGdldFdpemFyZFNlcnZpY2U6IFdpZGdldFdpemFyZFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pY29uU2VydmljZS5yZWdpc3RlcihUcmFzaENhbjE2KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgdGhpcy5vcGVuRm9ybVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICB9XG5cbiAgcHVibGljIGFkZEZpZWxkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mb3JtUm93cykgcmV0dXJuO1xuXG4gICAgdGhpcy5mb3JtUm93cy5wdXNoKFxuICAgICAgdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIHR5cGU6IHRoaXMuZmIuY29udHJvbDxMaXN0SXRlbT4oe2NvbnRlbnQ6ICcnLCBzZWxlY3RlZDogZmFsc2V9LCBbXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICB0aGlzLnR5cGVTZWxlY3RWYWxpZGF0b3IsXG4gICAgICAgIF0pLFxuICAgICAgICB0aXRsZTogdGhpcy5mYi5jb250cm9sPHN0cmluZz4oJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICBjb250ZW50OiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPignJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIGVsbGlwc2lzQ2hhcmFjdGVyTGltaXQ6IHRoaXMuZmIuY29udHJvbDxudW1iZXIgfCBudWxsPihcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignWzEtOV1bMC05XSonKVxuICAgICAgICApLFxuICAgICAgICBoaWRlV2hlbkVtcHR5OiB0aGlzLmZiLmNvbnRyb2w8Ym9vbGVhbiB8IGZhbHNlPihmYWxzZSksXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25EZWxldGVSb3dDbGljayhldmVudDogRXZlbnQsIGZvcm1BcnJheTogRm9ybUFycmF5LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCFmb3JtQXJyYXkpIHJldHVybjtcblxuICAgIGZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XG4gIH1cblxuICBwdWJsaWMgb25UeXBlU2VsZWN0ZWQoZm9ybVJvdzogRm9ybUdyb3VwLCBldmVudDoge2l0ZW06IExpc3RJdGVtfSk6IHZvaWQge1xuICAgIHRoaXMud2lkZ2V0RmllbGRzU2VydmljZS5vbkRpc3BsYXlUeXBlU2VsZWN0ZWQoWyd0aXRsZScsICdjb250ZW50JywgJ3R5cGUnXSwgZm9ybVJvdywgZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIG9uQWRkRW51bVZhbHVlQ2xpY2sodmFsdWVzRm9ybUFycmF5OiBGb3JtQXJyYXkpOiB2b2lkIHtcbiAgICB2YWx1ZXNGb3JtQXJyYXkucHVzaChcbiAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBrZXk6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIHZhbHVlOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0eXBlU2VsZWN0VmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IG51bGwgfCB7W2tleTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgY29uc3QgY29udHJvbFZhbHVlOiBMaXN0SXRlbSB8IHVuZGVmaW5lZCA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKCFjb250cm9sVmFsdWUgfHwgIWNvbnRyb2xWYWx1ZS5zZWxlY3RlZCkgcmV0dXJuIHtlcnJvcjogJ1R5cGUgaXMgbm90IHNlbGVjdGVkJ307XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um93Rm9ybShyb3c6IEZpZWxkc0Nhc2VXaWRnZXRWYWx1ZSk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgdHlwZTogdGhpcy5mYi5jb250cm9sPExpc3RJdGVtPihcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgIGB3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZGlzcGxheVR5cGUuJHtyb3cuZGlzcGxheVByb3BlcnRpZXM/LnR5cGUgPz8gQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5LlRFWFR9YFxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgaWQ6IHJvdy5kaXNwbGF5UHJvcGVydGllcz8udHlwZSA/PyBDYXNlV2lkZ2V0RGlzcGxheVR5cGVLZXkuVEVYVCxcbiAgICAgICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgKSxcbiAgICAgIHRpdGxlOiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPihyb3cudGl0bGUsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgY29udGVudDogdGhpcy5mYi5jb250cm9sPHN0cmluZz4ocm93LnZhbHVlLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIC4uLigoIXJvdy5kaXNwbGF5UHJvcGVydGllcyB8fFxuICAgICAgICByb3cuZGlzcGxheVByb3BlcnRpZXM/LnR5cGUgPT09IENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5URVhUKSAmJiB7XG4gICAgICAgIGVsbGlwc2lzQ2hhcmFjdGVyTGltaXQ6IHRoaXMuZmIuY29udHJvbDxudW1iZXIgfCBudWxsPihcbiAgICAgICAgICAocm93LmRpc3BsYXlQcm9wZXJ0aWVzIGFzIENhc2VXaWRnZXRUZXh0RGlzcGxheVR5cGUpPy5lbGxpcHNpc0NoYXJhY3RlckxpbWl0ID8/IG51bGwsXG4gICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdbMS05XVswLTldKicpXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICAgIGhpZGVXaGVuRW1wdHk6IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgKHJvdy5kaXNwbGF5UHJvcGVydGllcyBhcyBDYXNlV2lkZ2V0VGV4dERpc3BsYXlUeXBlKT8uaGlkZVdoZW5FbXB0eSA/PyBmYWxzZVxuICAgICAgKSxcbiAgICAgIC4uLihbQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5Lk5VTUJFUiwgQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5LlBFUkNFTlRdLmluY2x1ZGVzKFxuICAgICAgICByb3cuZGlzcGxheVByb3BlcnRpZXM/LnR5cGUgYXMgQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5XG4gICAgICApICYmIHtcbiAgICAgICAgZGlnaXRzSW5mbzogdGhpcy5mYi5jb250cm9sPHN0cmluZz4oXG4gICAgICAgICAgKHJvdy5kaXNwbGF5UHJvcGVydGllcyBhcyBDYXNlV2lkZ2V0TnVtYmVyRGlzcGxheVR5cGUpLmRpZ2l0c0luZm8gPz8gJydcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHJvdy5kaXNwbGF5UHJvcGVydGllcz8udHlwZSA9PT0gQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5LkNVUlJFTkNZICYmIHtcbiAgICAgICAgZGlnaXRzSW5mbzogdGhpcy5mYi5jb250cm9sPHN0cmluZz4oXG4gICAgICAgICAgKHJvdy5kaXNwbGF5UHJvcGVydGllcyBhcyBDYXNlV2lkZ2V0Q3VycmVuY3lEaXNwbGF5VHlwZSkuZGlnaXRzSW5mbyA/PyAnJ1xuICAgICAgICApLFxuICAgICAgICBjdXJyZW5jeUNvZGU6IHRoaXMuZmIuY29udHJvbDxzdHJpbmc+KFxuICAgICAgICAgIChyb3cuZGlzcGxheVByb3BlcnRpZXMgYXMgQ2FzZVdpZGdldEN1cnJlbmN5RGlzcGxheVR5cGUpLmN1cnJlbmN5Q29kZSA/PyAnJ1xuICAgICAgICApLFxuICAgICAgICBkaXNwbGF5OiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPihcbiAgICAgICAgICAocm93LmRpc3BsYXlQcm9wZXJ0aWVzIGFzIENhc2VXaWRnZXRDdXJyZW5jeURpc3BsYXlUeXBlKS5kaXNwbGF5ID8/ICcnXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICAgIC4uLihyb3cuZGlzcGxheVByb3BlcnRpZXM/LnR5cGUgPT09IENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5EQVRFICYmIHtcbiAgICAgICAgZm9ybWF0OiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPihcbiAgICAgICAgICAocm93LmRpc3BsYXlQcm9wZXJ0aWVzIGFzIENhc2VXaWRnZXREYXRlRGlzcGxheVR5cGUpLmZvcm1hdCA/PyAnJ1xuICAgICAgICApLFxuICAgICAgfSksXG4gICAgICAuLi4ocm93LmRpc3BsYXlQcm9wZXJ0aWVzPy50eXBlID09PSBDYXNlV2lkZ2V0RGlzcGxheVR5cGVLZXkuREFURV9USU1FICYmIHtcbiAgICAgICAgZm9ybWF0OiB0aGlzLmZiLmNvbnRyb2w8c3RyaW5nPihcbiAgICAgICAgICAocm93LmRpc3BsYXlQcm9wZXJ0aWVzIGFzIENhc2VXaWRnZXREYXRlVGltZURpc3BsYXlUeXBlKS5mb3JtYXQgPz8gJydcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHJvdy5kaXNwbGF5UHJvcGVydGllcz8udHlwZSA9PT0gQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5LkVOVU0gJiYge1xuICAgICAgICB2YWx1ZXM6IHRoaXMuZmIuYXJyYXkoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoKHJvdy5kaXNwbGF5UHJvcGVydGllcyBhcyBDYXNlV2lkZ2V0RW51bURpc3BsYXlUeXBlKS52YWx1ZXMpLm1hcChcbiAgICAgICAgICAgIChba2V5LCB2YWx1ZV0pID0+XG4gICAgICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgICAgICAgIGtleTogdGhpcy5mYi5jb250cm9sPHN0cmluZz4oa2V5LCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5mYi5jb250cm9sPHN0cmluZz4odmFsdWUgYXMgc3RyaW5nLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZvcm0oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbkRhdGEpIHtcbiAgICAgIHRoaXMuYWRkRmllbGQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByb3dzQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldCgncm93cycpIGFzIEZvcm1BcnJheTtcbiAgICBpZiAoIXJvd3NDb250cm9sKSByZXR1cm47XG5cbiAgICB0aGlzLmNvbHVtbkRhdGEuZm9yRWFjaCgocm93OiBGaWVsZHNDYXNlV2lkZ2V0VmFsdWUpID0+IHtcbiAgICAgIHJvd3NDb250cm9sLnB1c2godGhpcy5nZXRSb3dGb3JtKHJvdyksIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbHVtblVwZGF0ZUV2ZW50LmVtaXQoe2RhdGE6IHRoaXMuY29sdW1uRGF0YSwgdmFsaWQ6IHRydWV9KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Gb3JtU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5mb3JtUm93cz8udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLnN1YnNjcmliZSgocm93czogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcHBlZFJvd3M6IEZpZWxkc0Nhc2VXaWRnZXRWYWx1ZVtdID0gcm93cy5tYXAoKHJvdzogYW55IHwgbnVsbCkgPT4gKHtcbiAgICAgICAgICBrZXk6IHJvdy50aXRsZS5yZXBsYWNlKC9cXFcrL2csICctJykucmVwbGFjZSgvXFwtJC8sICcnKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHRpdGxlOiByb3cudGl0bGUsXG4gICAgICAgICAgdmFsdWU6IHJvdy5jb250ZW50LFxuICAgICAgICAgIC4uLighIXJvdz8udHlwZS5pZCAmJiB7XG4gICAgICAgICAgICBkaXNwbGF5UHJvcGVydGllczoge1xuICAgICAgICAgICAgICB0eXBlOiByb3cudHlwZS5pZCxcbiAgICAgICAgICAgICAgLi4uKCEhcm93Py5lbGxpcHNpc0NoYXJhY3RlckxpbWl0ICYmIHtcbiAgICAgICAgICAgICAgICBlbGxpcHNpc0NoYXJhY3RlckxpbWl0OiByb3cuZWxsaXBzaXNDaGFyYWN0ZXJMaW1pdCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC4uLighIXJvdz8uaGlkZVdoZW5FbXB0eSAmJiB7aGlkZVdoZW5FbXB0eTogcm93LmhpZGVXaGVuRW1wdHl9KSxcbiAgICAgICAgICAgICAgLi4uKCEhcm93Py5jdXJyZW5jeUNvZGUgJiYge2N1cnJlbmN5Q29kZTogcm93LmN1cnJlbmN5Q29kZX0pLFxuICAgICAgICAgICAgICAuLi4oISFyb3c/LmRpc3BsYXkgJiYge2Rpc3BsYXk6IHJvdy5kaXNwbGF5fSksXG4gICAgICAgICAgICAgIC4uLighIXJvdz8uZGlnaXRzSW5mbyAmJiB7ZGlnaXRzSW5mbzogcm93LmRpZ2l0c0luZm99KSxcbiAgICAgICAgICAgICAgLi4uKCEhcm93Py5mb3JtYXQgJiYge2Zvcm1hdDogcm93LmZvcm1hdH0pLFxuICAgICAgICAgICAgICAuLi4oISFyb3c/LnZhbHVlcyAmJiB7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiByb3cudmFsdWVzPy5yZWR1Y2UoKGFjYywgY3VycikgPT4gKHsuLi5hY2MsIFtjdXJyLmtleV06IGN1cnIudmFsdWV9KSwge30pLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5jb2x1bW5VcGRhdGVFdmVudC5lbWl0KHtkYXRhOiBtYXBwZWRSb3dzLCB2YWxpZDogdGhpcy5mb3JtR3JvdXAudmFsaWR9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuPGZvcm1cbiAgKm5nSWY9XCJpbnB1dFRoZW1lJCB8IGFzeW5jIGFzIGlucHV0VGhlbWVcIlxuICBjbGFzcz1cInZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZC1jb2x1bW5cIlxuICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4+XG4gIDxjZHMtYWNjb3JkaW9uIGZvcm1BcnJheU5hbWU9XCJyb3dzXCIgYWxpZ249XCJzdGFydFwiIHNpemU9XCJzbVwiPlxuICAgIEBmb3IgKGZvcm1Sb3cgb2YgZm9ybVJvd3MuY29udHJvbHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgPGNkcy1hY2NvcmRpb24taXRlbVxuICAgICAgICBbdGl0bGVdPVwiZmllbGRUaXRsZVwiXG4gICAgICAgIFtjb250ZXh0XT1cIntjb3VudDogJGNvdW50LCBpbmRleDogJGluZGV4LCB0aXRsZTogZm9ybVJvdy5nZXQoJ3RpdGxlJyk/LnZhbHVlfVwiXG4gICAgICAgIFtleHBhbmRlZF09XCIkaW5kZXggPT09IDBcIlxuICAgICAgICBjbGFzcz1cInZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZC1jb2x1bW5fX2l0ZW1cIlxuICAgICAgPlxuICAgICAgICA8Zm9ybVxuICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybVJvd1wiXG4gICAgICAgICAgY2xhc3M9XCJ2YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGQtY29sdW1uX19jb250YWluZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ2YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGQtY29sdW1uX19jb250ZW50XCJcbiAgICAgICAgICAgIFtjbGFzcy52YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGQtY29sdW1uX19jb250ZW50LS1jb2xsZWN0aW9uXT1cIlxuICAgICAgICAgICAgICAhIWZpZWxkV2lkdGhEcm9wZG93blxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LicgKyB3aWRnZXRUeXBlKCkgKyAnLnRpdGxlVG9vbHRpcCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjZHNUZXh0XG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwiaW5wdXRUaGVtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLnRpdGxlUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cblxuICAgICAgICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLnR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2Ryb3BVcF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy50eXBlUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uVHlwZVNlbGVjdGVkKGZvcm1Sb3csICRldmVudClcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJnZXREaXNwbGF5SXRlbXNTZWxlY3RlZChmb3JtUm93KVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgICA8L2Nkcy1kcm9wZG93bj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkV2lkdGhEcm9wZG93bjsgY29udGV4dDoge2luZGV4OiAkaW5kZXh9XCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZC1jb2x1bW5fX3BhdGgtc2VsZWN0b3JcIj5cbiAgICAgICAgICAgICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMudmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuJyArIHdpZGdldFR5cGUoKSArICcudmFsdWVUb29sdGlwJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgIDx2YWx0aW1vLXZhbHVlLXBhdGgtc2VsZWN0b3JcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICBbZG9jdW1lbnREZWZpbml0aW9uTmFtZV09XCJkb2N1bWVudERlZmluaXRpb25OYW1lXCJcbiAgICAgICAgICAgICAgICBbcHJlZml4ZXNdPVwiW1ZhbHVlUGF0aFNlbGVjdG9yUHJlZml4LkRPQywgVmFsdWVQYXRoU2VsZWN0b3JQcmVmaXguQ0FTRV1cIlxuICAgICAgICAgICAgICAgIFtwYXJlbnRJdGVtXT1cInNlbGVjdGVkQ29sbGVjdGlvblwiXG4gICAgICAgICAgICAgID48L3ZhbHRpbW8tdmFsdWUtcGF0aC1zZWxlY3Rvcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHRpbW8tZG9zc2llci1tYW5hZ2VtZW50LXdpZGdldC1maWVsZC1jb2x1bW5fX29wdGlvbnNcIj5cbiAgICAgICAgICAgIEBzd2l0Y2ggKGZvcm1Sb3cuZ2V0KCd0eXBlJykudmFsdWUuaWQpIHtcbiAgICAgICAgICAgICAgQGNhc2UgKENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5DVVJSRU5DWSkge1xuICAgICAgICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5jdXJyZW5jeUNvZGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuY3VycmVuY3lDb2RlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmN1cnJlbmN5Q29kZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImN1cnJlbmN5Q29kZVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuZGlzcGxheScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaXNwbGF5VG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmRpc3BsYXlQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaWdpdHNJbmZvJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmRpZ2l0c0luZm9Ub29sdGlwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHttaW5GcmFjdGlvbkRpZ2l0czogMiwgbWF4RnJhY3Rpb25EaWdpdHM6IDJ9XG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwiaW5wdXRUaGVtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaWdpdHNJbmZvUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlnaXRzSW5mb1wiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGNhc2UgKENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5EQVRFKSB7XG4gICAgICAgICAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmZvcm1hdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kYXRlRm9ybWF0VG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgPjwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwiaW5wdXRUaGVtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5mb3JtYXRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBjYXNlIChDYXNlV2lkZ2V0RGlzcGxheVR5cGVLZXkuREFURV9USU1FKSB7XG4gICAgICAgICAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmZvcm1hdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kYXRlVGltZUZvcm1hdFRvb2x0aXAnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmZvcm1hdFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGNhc2UgKENhc2VXaWRnZXREaXNwbGF5VHlwZUtleS5FTlVNKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGQtY29sdW1uX19lbnVtXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1BcnJheU5hbWU9XCJ2YWx1ZXNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHJvd1ZhbHVlIG9mIGZvcm1Sb3cuZ2V0KCd2YWx1ZXMnKT8uY29udHJvbHM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8Zm9ybVxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwicm93VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWZpZWxkLWNvbHVtbl9fZW51bS1mb3JtXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiJGluZGV4ID09PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmVudW1WYWx1ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbnVtVmFsdWVUb29sdGlwJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY2FyYm9uLXRoZW1lXT1cImlucHV0VGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjZHNUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbnVtVmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIkaW5kZXggPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuZW51bURpc3BsYXknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuZW51bURpc3BsYXlUb29sdGlwJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwiaW5wdXRUaGVtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbnVtRGlzcGxheScgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjZHNCdXR0b249XCJkYW5nZXItLWdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIkY291bnQgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGQtY29sdW1uX19kZWxldGUtYnV0dG9uIGVudW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlUm93Q2xpY2soJGV2ZW50LCBmb3JtUm93LmdldCgndmFsdWVzJyksICRpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiIGNkc0ljb249XCJ0cmFzaC1jYW5cIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGRFbnVtVmFsdWVDbGljayhmb3JtUm93LmdldCgndmFsdWVzJykpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuYWRkRW51bScgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5Lk5VTUJFUikge1xuICAgICAgICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaWdpdHNJbmZvJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAgICd3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmRpZ2l0c0luZm9Ub29sdGlwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5GcmFjdGlvbkRpZ2l0czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEZyYWN0aW9uRGlnaXRzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIid3aWRnZXRUYWJNYW5hZ2VtZW50LmNvbnRlbnQuZmllbGRzLmRpZ2l0c0luZm8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaWdpdHNJbmZvXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5LlBFUkNFTlQpIHtcbiAgICAgICAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5maWVsZHMuZGlnaXRzSW5mbycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwPVwie3tcbiAgICAgICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaWdpdHNJbmZvVG9vbHRpcCdcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluRnJhY3Rpb25EaWdpdHM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvdi1pbnB1dC1sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXJib24tdGhlbWVdPVwiaW5wdXRUaGVtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5kaWdpdHNJbmZvJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlnaXRzSW5mb1wiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPGNkcy10ZXh0LWxhYmVsXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgZm9ybVJvdy5nZXQoJ3R5cGUnKS52YWx1ZS5pZCA9PT0gQ2FzZVdpZGdldERpc3BsYXlUeXBlS2V5LlRFWFQgJiYgaXNGaWVsZFdpZGdldFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbGxpcHNpc0NoYXJhY3RlckxpbWl0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7XG4gICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbGxpcHNpc0NoYXJhY3RlckxpbWl0VG9vbHRpcCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC92LWlucHV0LWxhYmVsPlxuXG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhcmJvbi10aGVtZV09XCJpbnB1dFRoZW1lXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy5lbGxpcHNpc0NoYXJhY3RlckxpbWl0UGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZWxsaXBzaXNDaGFyYWN0ZXJMaW1pdFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuXG4gICAgICAgICAgICA8Y2RzLWNoZWNrYm94ICpuZ0lmPVwic2hvd0hpZGVXaGVuRW1wdHlDaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cImhpZGVXaGVuRW1wdHlcIj5cbiAgICAgICAgICAgICAge3sgJ3dpZGdldFRhYk1hbmFnZW1lbnQuY29udGVudC5oaWRlV2hlbkVtcHR5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9jZHMtY2hlY2tib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvY2RzLWFjY29yZGlvbi1pdGVtPlxuICAgIH1cbiAgPC9jZHMtYWNjb3JkaW9uPlxuXG4gIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIHNpemU9XCJzbVwiIChjbGljayk9XCJhZGRGaWVsZCgpXCI+XG4gICAge3sgYWRkVHJhbnNsYXRlS2V5IHwgdHJhbnNsYXRlIH19XG5cbiAgICA8c3ZnIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIiBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjE2XCI+PC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9mb3JtPlxuXG48bmctdGVtcGxhdGUgI2ZpZWxkVGl0bGUgbGV0LWNvdW50PVwiY291bnRcIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC10aXRsZT1cInRpdGxlXCI+XG4gIDxkaXYgY2xhc3M9XCJ2YWx0aW1vLWRvc3NpZXItbWFuYWdlbWVudC13aWRnZXQtZmllbGQtY29sdW1uX190aXRsZVwiPlxuICAgIHt7IHRpdGxlIHx8ICgnd2lkZ2V0VGFiTWFuYWdlbWVudC5jb250ZW50LmZpZWxkcy50aXRsZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZSkgfX1cblxuICAgIDxidXR0b25cbiAgICAgIGNkc0J1dHRvbj1cImRhbmdlclwiXG4gICAgICBbZGlzYWJsZWRdPVwiY291bnQgPT09IDFcIlxuICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlUm93Q2xpY2soJGV2ZW50LCBmb3JtUm93cywgaW5kZXgpXCJcbiAgICAgIGNsYXNzPVwidmFsdGltby1kb3NzaWVyLW1hbmFnZW1lbnQtd2lkZ2V0LWZpZWxkLWNvbHVtbl9fZGVsZXRlLWJ1dHRvblwiXG4gICAgPlxuICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cInRyYXNoLWNhblwiIHNpemU9XCIxNlwiPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=