@valtimo/zgw 12.0.0 → 12.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/esm2022/lib/components/dossier-management-zgw/dossier-management-zgw.component.mjs +61 -13
  2. package/esm2022/lib/models/dossier-management-zgw.model.mjs +5 -3
  3. package/esm2022/lib/modules/documenten-api/components/documenten-api-column-modal/documenten-api-column-modal.component.mjs +115 -242
  4. package/esm2022/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.mjs +57 -85
  5. package/esm2022/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.mjs +171 -100
  6. package/esm2022/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.mjs +174 -0
  7. package/esm2022/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +244 -106
  8. package/esm2022/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.mjs +115 -0
  9. package/esm2022/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.mjs +164 -0
  10. package/esm2022/lib/modules/documenten-api/components/index.mjs +5 -2
  11. package/esm2022/lib/modules/documenten-api/formio/documenten-api-uploader/documenten-api-uploader.component.mjs +3 -3
  12. package/esm2022/lib/modules/documenten-api/models/configured-column.model.mjs +12 -2
  13. package/esm2022/lib/modules/documenten-api/models/documenten-api-filter.model.mjs +17 -0
  14. package/esm2022/lib/modules/documenten-api/models/documenten-api-metadata.model.mjs +1 -1
  15. package/esm2022/lib/modules/documenten-api/models/documenten-api-tag.model.mjs +17 -0
  16. package/esm2022/lib/modules/documenten-api/models/documenten-api-version.model.mjs +1 -1
  17. package/esm2022/lib/modules/documenten-api/models/documenten-api.model.mjs +22 -2
  18. package/esm2022/lib/modules/documenten-api/models/index.mjs +2 -1
  19. package/esm2022/lib/modules/documenten-api/services/documenten-api-column.service.mjs +10 -9
  20. package/esm2022/lib/modules/documenten-api/services/documenten-api-document.service.mjs +10 -3
  21. package/esm2022/lib/modules/documenten-api/services/documenten-api-link-process.service.mjs +1 -16
  22. package/esm2022/lib/modules/documenten-api/services/documenten-api-tag.service.mjs +36 -0
  23. package/esm2022/lib/modules/documenten-api/services/documenten-api-version.service.mjs +4 -1
  24. package/esm2022/lib/modules/documenten-api/services/index.mjs +3 -2
  25. package/esm2022/lib/modules/objecten-api/components/zaakobjecten/zaakobjecten.component.mjs +2 -2
  26. package/esm2022/lib/modules/zaakdetails/components/document-objecten-api-sync/document-objecten-api-sync.component.mjs +1 -1
  27. package/esm2022/lib/services/dossier-management-zgw.service.mjs +8 -4
  28. package/esm2022/lib/zgw.module.mjs +22 -5
  29. package/fesm2022/valtimo-zgw.mjs +1378 -781
  30. package/fesm2022/valtimo-zgw.mjs.map +1 -1
  31. package/lib/components/dossier-management-zgw/dossier-management-zgw.component.d.ts +16 -5
  32. package/lib/components/dossier-management-zgw/dossier-management-zgw.component.d.ts.map +1 -1
  33. package/lib/models/dossier-management-zgw.model.d.ts +12 -2
  34. package/lib/models/dossier-management-zgw.model.d.ts.map +1 -1
  35. package/lib/modules/documenten-api/components/documenten-api-column-modal/documenten-api-column-modal.component.d.ts +33 -63
  36. package/lib/modules/documenten-api/components/documenten-api-column-modal/documenten-api-column-modal.component.d.ts.map +1 -1
  37. package/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.d.ts +18 -20
  38. package/lib/modules/documenten-api/components/documenten-api-columns/documenten-api-columns.component.d.ts.map +1 -1
  39. package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts +38 -20
  40. package/lib/modules/documenten-api/components/documenten-api-documents/documenten-api-documents.component.d.ts.map +1 -1
  41. package/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.d.ts +47 -0
  42. package/lib/modules/documenten-api/components/documenten-api-filter/documenten-api-filter.component.d.ts.map +1 -0
  43. package/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts +76 -39
  44. package/lib/modules/documenten-api/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +1 -1
  45. package/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.d.ts +33 -0
  46. package/lib/modules/documenten-api/components/documenten-api-tag-modal/documenten-api-tag-modal.component.d.ts.map +1 -0
  47. package/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.d.ts +46 -0
  48. package/lib/modules/documenten-api/components/documenten-api-tags/documenten-api-tags.component.d.ts.map +1 -0
  49. package/lib/modules/documenten-api/components/index.d.ts +4 -1
  50. package/lib/modules/documenten-api/components/index.d.ts.map +1 -1
  51. package/lib/modules/documenten-api/models/configured-column.model.d.ts +8 -2
  52. package/lib/modules/documenten-api/models/configured-column.model.d.ts.map +1 -1
  53. package/lib/modules/documenten-api/models/documenten-api-filter.model.d.ts +10 -0
  54. package/lib/modules/documenten-api/models/documenten-api-filter.model.d.ts.map +1 -0
  55. package/lib/modules/documenten-api/models/documenten-api-metadata.model.d.ts +10 -9
  56. package/lib/modules/documenten-api/models/documenten-api-metadata.model.d.ts.map +1 -1
  57. package/lib/modules/documenten-api/models/documenten-api-tag.model.d.ts +5 -0
  58. package/lib/modules/documenten-api/models/documenten-api-tag.model.d.ts.map +1 -0
  59. package/lib/modules/documenten-api/models/documenten-api-version.model.d.ts +7 -1
  60. package/lib/modules/documenten-api/models/documenten-api-version.model.d.ts.map +1 -1
  61. package/lib/modules/documenten-api/models/documenten-api.model.d.ts +37 -12
  62. package/lib/modules/documenten-api/models/documenten-api.model.d.ts.map +1 -1
  63. package/lib/modules/documenten-api/models/index.d.ts +1 -0
  64. package/lib/modules/documenten-api/models/index.d.ts.map +1 -1
  65. package/lib/modules/documenten-api/services/documenten-api-column.service.d.ts +3 -2
  66. package/lib/modules/documenten-api/services/documenten-api-column.service.d.ts.map +1 -1
  67. package/lib/modules/documenten-api/services/documenten-api-document.service.d.ts +3 -2
  68. package/lib/modules/documenten-api/services/documenten-api-document.service.d.ts.map +1 -1
  69. package/lib/modules/documenten-api/services/documenten-api-link-process.service.d.ts.map +1 -1
  70. package/lib/modules/documenten-api/services/documenten-api-tag.service.d.ts +17 -0
  71. package/lib/modules/documenten-api/services/documenten-api-tag.service.d.ts.map +1 -0
  72. package/lib/modules/documenten-api/services/documenten-api-version.service.d.ts +2 -1
  73. package/lib/modules/documenten-api/services/documenten-api-version.service.d.ts.map +1 -1
  74. package/lib/modules/documenten-api/services/index.d.ts +2 -1
  75. package/lib/modules/documenten-api/services/index.d.ts.map +1 -1
  76. package/lib/modules/zaakdetails/components/document-objecten-api-sync/document-objecten-api-sync.component.d.ts.map +1 -1
  77. package/lib/services/dossier-management-zgw.service.d.ts +2 -0
  78. package/lib/services/dossier-management-zgw.service.d.ts.map +1 -1
  79. package/lib/zgw.module.d.ts.map +1 -1
  80. package/package.json +1 -1
@@ -13,289 +13,162 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import { CommonModule } from '@angular/common';
16
17
  import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
17
- import { BehaviorSubject, combineLatest, map, Subscription, switchMap, take, tap, } from 'rxjs';
18
- import { CARBON_CONSTANTS } from '@valtimo/components';
19
- import { ReactiveFormsModule, Validators, } from '@angular/forms';
20
- import { InternalCaseStatusColor, InternalCaseStatusUtils, } from '@valtimo/document';
21
- import { ButtonModule, DropdownModule, InputModule, ModalModule, TagModule, ToggleModule, } from 'carbon-components-angular';
22
- import { Edit16 } from '@carbon/icons';
18
+ import { ReactiveFormsModule, Validators } from '@angular/forms';
23
19
  import { TranslateModule } from '@ngx-translate/core';
24
- import { CommonModule } from '@angular/common';
20
+ import { ButtonModule, DropdownModule, InputModule, ModalModule, NotificationModule, RadioModule, } from 'carbon-components-angular';
21
+ import { BehaviorSubject, combineLatest, map, Subscription, switchMap } from 'rxjs';
22
+ import { CARBON_CONSTANTS } from '@valtimo/components';
25
23
  import * as i0 from "@angular/core";
26
24
  import * as i1 from "@angular/forms";
27
- import * as i2 from "carbon-components-angular";
28
- import * as i3 from "@valtimo/document";
29
- import * as i4 from "@ngx-translate/core";
30
- import * as i5 from "@angular/common";
25
+ import * as i2 from "@ngx-translate/core";
26
+ import * as i3 from "../../services";
27
+ import * as i4 from "@angular/common";
28
+ import * as i5 from "carbon-components-angular";
31
29
  export class DocumentenApiColumnModalComponent {
30
+ set prefillColumn(value) {
31
+ if (!value)
32
+ return;
33
+ const column = { content: value.key, selected: true, column: value };
34
+ const defaultSort = value.defaultSort ?? 'noDefault';
35
+ this.formGroup.patchValue({ column, defaultSort });
36
+ this.formGroup.get('column')?.disable();
37
+ this._prefillColumn = [column];
38
+ }
39
+ get prefillColumn() {
40
+ return this._prefillColumn;
41
+ }
32
42
  set type(value) {
33
- this._type.next(value);
34
- if (value === 'closed') {
35
- setTimeout(() => {
36
- this._typeAnimationDelay$.next(value);
37
- }, CARBON_CONSTANTS.modalAnimationMs);
38
- }
39
- else {
40
- this._typeAnimationDelay$.next(value);
43
+ this._type = value;
44
+ if (value === 'edit') {
45
+ this.formGroup.get('column')?.disable;
41
46
  }
42
47
  }
43
- set prefill(value) {
44
- this._prefillStatus.next(value);
48
+ get type() {
49
+ return this._type;
45
50
  }
46
- get visibleInCaseListByDefault() {
47
- return this.statusFormGroup?.get('visibleInCaseListByDefault');
51
+ set availableColumns(value) {
52
+ if (!value)
53
+ return;
54
+ this._availableColumns$.next(value);
48
55
  }
49
- get key() {
50
- return this.statusFormGroup?.get('key');
56
+ set configuredColumns(value) {
57
+ if (!value)
58
+ return;
59
+ this._defaultSortedColumn = value.find((column) => !!column.defaultSort);
51
60
  }
52
- get title() {
53
- return this.statusFormGroup?.get('title');
54
- }
55
- get color() {
56
- return this.statusFormGroup?.get('color');
57
- }
58
- get invalid() {
59
- return !!this.statusFormGroup?.invalid;
60
- }
61
- get pristine() {
62
- return !!this.statusFormGroup?.pristine;
63
- }
64
- constructor(fb, iconService, caseStatusService, translateService) {
61
+ constructor(fb, translateService, zgwDocumentenApiColumnService) {
65
62
  this.fb = fb;
66
- this.iconService = iconService;
67
- this.caseStatusService = caseStatusService;
68
63
  this.translateService = translateService;
69
- this.closeModalEvent = new EventEmitter();
70
- this._type = new BehaviorSubject(undefined);
71
- this._typeAnimationDelay$ = new BehaviorSubject(undefined);
72
- this._prefillStatus = new BehaviorSubject(undefined);
73
- this.isClosed$ = this._type.pipe(map(type => type === 'closed'));
74
- this.statusFormGroup = this.fb.group({
75
- title: this.fb.control('', Validators.required),
76
- key: this.fb.control('', [Validators.required, this.uniqueKeyValidator()]),
77
- visibleInCaseListByDefault: this.fb.control(true, Validators.required),
78
- color: this.fb.control('', Validators.required),
79
- });
80
- this.isEdit$ = combineLatest([this._typeAnimationDelay$, this._prefillStatus]).pipe(tap(([type, prefillStatus]) => {
81
- if (type === 'edit' && prefillStatus)
82
- this.prefillForm(prefillStatus);
83
- }), map(([type]) => type === 'edit'));
84
- this.isAdd$ = this._typeAnimationDelay$.pipe(map(type => type === 'add'), tap(isAdd => {
85
- if (isAdd)
86
- this.resetForm();
87
- }));
88
- this.disabled$ = new BehaviorSubject(false);
89
- this.COLORS = [
90
- InternalCaseStatusColor.Red,
91
- InternalCaseStatusColor.Magenta,
92
- InternalCaseStatusColor.Purple,
93
- InternalCaseStatusColor.Blue,
94
- InternalCaseStatusColor.Teal,
95
- InternalCaseStatusColor.Green,
96
- InternalCaseStatusColor.Cyan,
97
- InternalCaseStatusColor.Gray,
98
- InternalCaseStatusColor.CoolGray,
99
- InternalCaseStatusColor.WarmGray,
100
- InternalCaseStatusColor.HighContrast,
101
- InternalCaseStatusColor.Outline,
102
- ];
103
- this._selectedColor$ = new BehaviorSubject(undefined);
104
- this.colorListItems$ = combineLatest([
105
- this._selectedColor$,
64
+ this.zgwDocumentenApiColumnService = zgwDocumentenApiColumnService;
65
+ this._availableColumns$ = new BehaviorSubject([]);
66
+ this.availableColumns$ = combineLatest([
67
+ this._availableColumns$,
106
68
  this.translateService.stream('key'),
107
- ]).pipe(map(([selectedColor]) => this.COLORS.map(color => ({
108
- selected: color === selectedColor,
109
- content: this.translateService.instant('interface.tagType.' +
110
- InternalCaseStatusUtils.getTagTypeFromInternalCaseStatusColor(color)),
111
- color,
112
- tagType: InternalCaseStatusUtils.getTagTypeFromInternalCaseStatusColor(color),
69
+ ]).pipe(map(([columns]) => columns.map((column) => ({
70
+ content: this.translateService.instant(`zgw.documentColumns.${column.key}`),
71
+ selected: false,
72
+ column,
113
73
  }))));
114
- this._editingKey$ = new BehaviorSubject(false);
115
- this.editingKey$ = this._editingKey$.pipe(tap(editing => {
116
- if (editing) {
117
- this.key?.enable();
118
- }
119
- else {
120
- this.key?.disable();
121
- }
122
- }));
123
- this._originalStatusKey$ = new BehaviorSubject('');
74
+ this.closeModal = new EventEmitter();
75
+ this.formGroup = this.fb.group({
76
+ column: this.fb.control({ content: '', selected: false, column: {} }, Validators.required),
77
+ defaultSort: this.fb.control('noDefault'),
78
+ });
79
+ this._notificationMessage$ = new BehaviorSubject('zgw.columns.defaultWarning');
80
+ this.notificationObj$ = combineLatest([
81
+ this._notificationMessage$,
82
+ this.translateService.stream('key'),
83
+ ]).pipe(map(([message]) => ({
84
+ type: 'warning',
85
+ lowContrast: true,
86
+ title: this.translateService.instant('interface.warning'),
87
+ message: this.translateService.instant(message),
88
+ showClose: false,
89
+ })));
90
+ this.showRadioButtons = true;
124
91
  this._subscriptions = new Subscription();
125
- this.iconService.registerAll([Edit16]);
126
92
  }
127
93
  ngOnInit() {
128
- this.openAutoKeySubscription();
94
+ this.openDisableRadioSubscription();
129
95
  }
130
96
  ngOnDestroy() {
131
97
  this._subscriptions.unsubscribe();
132
98
  }
133
- onClose() {
134
- this.close();
135
- }
136
- toggleCheckedChange(checked) {
137
- this.statusFormGroup.patchValue({
138
- visibleInCaseListByDefault: checked,
139
- });
140
- this.statusFormGroup.markAsDirty();
141
- }
142
- addStatus() {
143
- this.disable();
144
- this.caseStatusService
145
- .saveInternalCaseStatus(this.documentDefinitionName, this.getFormValue())
146
- .subscribe({
147
- next: () => {
148
- this.enable();
149
- this.closeAndRefresh();
150
- },
151
- error: () => {
152
- this.enable(false);
153
- },
154
- });
155
- }
156
- editStatus() {
157
- this.disable();
158
- this._originalStatusKey$
159
- .pipe(take(1), switchMap(originalStatusKey => this.caseStatusService.updateInternalCaseStatus(this.documentDefinitionName, originalStatusKey, this.getFormValue())))
160
- .subscribe({
161
- next: () => {
162
- this.enable();
163
- this.closeAndRefresh();
164
- },
165
- error: () => {
166
- this.enable(false);
167
- },
168
- });
169
- }
170
- editKeyButtonClick() {
171
- this._editingKey$.next(true);
172
- }
173
- colorDropdownChange(event) {
174
- const newColor = event?.item?.color;
175
- if (newColor) {
176
- this._selectedColor$.next(newColor);
177
- this.statusFormGroup.patchValue({ color: newColor });
178
- this.statusFormGroup.markAsDirty();
99
+ onClose(refresh = false) {
100
+ this.closeModal.emit(refresh ? 'closeAndRefresh' : 'close');
101
+ setTimeout(() => {
102
+ this.formGroup.reset();
103
+ this.formGroup.enable();
104
+ this.showRadioButtons = true;
105
+ this._notificationMessage$.next('zgw.columns.defaultWarning');
106
+ this._prefillColumn = null;
107
+ }, CARBON_CONSTANTS.modalAnimationMs);
108
+ }
109
+ updateColumn() {
110
+ const columnValue = this.formGroup.get('column')?.value;
111
+ if (!columnValue || !this.definitionName) {
112
+ return;
179
113
  }
180
- }
181
- prefillForm(prefillStatus) {
182
- this._originalStatusKey$.next(prefillStatus.key);
183
- this.statusFormGroup.patchValue({
184
- key: prefillStatus.key,
185
- title: prefillStatus.title,
186
- visibleInCaseListByDefault: prefillStatus.visibleInCaseListByDefault,
187
- color: prefillStatus.color,
188
- });
189
- this._selectedColor$.next(prefillStatus.color);
190
- this.statusFormGroup.markAsPristine();
191
- this.resetEditingKey();
192
- }
193
- resetForm() {
194
- this.statusFormGroup.patchValue({
195
- key: '',
196
- title: '',
197
- visibleInCaseListByDefault: true,
198
- color: InternalCaseStatusColor.Blue,
114
+ const defaultSortValue = this.formGroup.get('defaultSort')?.value;
115
+ const defaultSort = !defaultSortValue
116
+ ? null
117
+ : defaultSortValue === 'noDefault'
118
+ ? null
119
+ : defaultSortValue;
120
+ const column = { ...columnValue.column, defaultSort };
121
+ if (!!this._defaultSortedColumn &&
122
+ this._defaultSortedColumn.key !== column.key &&
123
+ !!column.defaultSort) {
124
+ this.zgwDocumentenApiColumnService
125
+ .updateColumn(this.definitionName, {
126
+ ...this._defaultSortedColumn,
127
+ defaultSort: null,
128
+ })
129
+ .pipe(switchMap(() => this.zgwDocumentenApiColumnService.updateColumn(this.definitionName, column)))
130
+ .subscribe(() => {
131
+ this.onClose(true);
132
+ });
133
+ return;
134
+ }
135
+ this.zgwDocumentenApiColumnService.updateColumn(this.definitionName, column).subscribe(() => {
136
+ this.onClose(true);
199
137
  });
200
- this._selectedColor$.next(InternalCaseStatusColor.Blue);
201
- this.statusFormGroup.markAsPristine();
202
- this.resetEditingKey();
203
- }
204
- resetEditingKey() {
205
- this._editingKey$.next(false);
206
138
  }
207
- openAutoKeySubscription() {
208
- this._subscriptions.add(combineLatest([this.isAdd$, this.title.valueChanges, this.editingKey$]).subscribe(([isAdd, titleValue, editingKey]) => {
209
- if (isAdd && !editingKey) {
210
- if (titleValue) {
211
- this.statusFormGroup.patchValue({ key: this.getUniqueKey(titleValue) });
212
- }
213
- else {
214
- this.clearKey();
215
- }
216
- }
139
+ openDisableRadioSubscription() {
140
+ this._subscriptions.add(this.formGroup.get('column')?.valueChanges.subscribe(columnValue => {
141
+ this.showRadioButtons = !!columnValue?.column.sortable;
142
+ this._notificationMessage$.next(this.showRadioButtons ? 'zgw.columns.defaultWarning' : 'zgw.columns.notSortable');
217
143
  }));
218
144
  }
219
- getUniqueKey(title) {
220
- const dashCaseKey = `${title}`
221
- .toLowerCase()
222
- .replace(/[^a-z0-9-_]+|-[^a-z0-9]+/g, '-')
223
- .replace(/_[-_]+/g, '_')
224
- .replace(/^[^a-z]+/g, '');
225
- const usedKeys = this.usedKeys;
226
- if (!usedKeys.includes(dashCaseKey)) {
227
- return dashCaseKey;
228
- }
229
- return this.getUniqueKeyWithNumber(dashCaseKey, usedKeys);
230
- }
231
- getUniqueKeyWithNumber(dashCaseKey, usedKeys) {
232
- const numbersFromCurrentKey = (dashCaseKey.match(/^\d+|\d+\b|\d+(?=\w)/g) || []).map((numberValue) => +numberValue);
233
- const lastNumberFromCurrentKey = numbersFromCurrentKey.length > 0 && numbersFromCurrentKey[numbersFromCurrentKey.length - 1];
234
- const newKey = lastNumberFromCurrentKey
235
- ? `${dashCaseKey.replace(`${lastNumberFromCurrentKey}`, `${lastNumberFromCurrentKey + 1}`)}`
236
- : `${dashCaseKey}-1`;
237
- if (usedKeys.includes(newKey)) {
238
- return this.getUniqueKeyWithNumber(newKey, usedKeys);
239
- }
240
- return newKey;
241
- }
242
- clearKey() {
243
- this.statusFormGroup.patchValue({ key: '' });
244
- }
245
- uniqueKeyValidator() {
246
- return (control) => this.usedKeys?.every((key) => key !== control.value)
247
- ? null
248
- : { uniqueKey: { value: control.value } };
249
- }
250
- disable() {
251
- this.disabled$.next(true);
252
- this.statusFormGroup.disable();
253
- }
254
- enable(delay = true) {
255
- setTimeout(() => {
256
- this.disabled$.next(false);
257
- this.statusFormGroup.enable();
258
- }, delay ? CARBON_CONSTANTS.modalAnimationMs : 0);
259
- }
260
- close() {
261
- this.closeModalEvent.emit('close');
262
- }
263
- closeAndRefresh() {
264
- this.closeModalEvent.emit('closeAndRefresh');
265
- }
266
- getFormValue() {
267
- return {
268
- key: this.key.value,
269
- title: this.title.value,
270
- visibleInCaseListByDefault: this.visibleInCaseListByDefault.value,
271
- color: this.color.value,
272
- };
273
- }
274
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DocumentenApiColumnModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.IconService }, { token: i3.CaseStatusService }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
275
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: DocumentenApiColumnModalComponent, isStandalone: true, selector: "valtimo-documenten-api-column-modal", inputs: { type: "type", prefill: "prefill", usedKeys: "usedKeys", documentDefinitionName: "documentDefinitionName" }, outputs: { closeModalEvent: "closeModalEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n valtimoCdsModal\n *ngIf=\"{\n isAdd: isAdd$ | async,\n isEdit: isEdit$ | async,\n isClosed: isClosed$ | async,\n editingKey: editingKey$ | async,\n disabled: disabled$ | async\n } as obs\"\n [open]=\"!obs.isClosed\"\n size=\"sm\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onClose()\">\n <h3 cdsModalHeaderHeading>\n {{ obs.isAdd ? ('dossierManagement.statuses.add' | translate) : '' }}\n {{ obs.isEdit ? ('dossierManagement.statuses.edit' | translate) : '' }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"statusForm; context: {obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #colorDropdownItemTemplate let-item=\"item\">\n <div class=\"dropdown-color-tag\">\n <cds-tag *ngIf=\"item && item.content\" class=\"cds-tag--no-margin\" [type]=\"item?.tagType\">\n {{ 'interface.tagType.' + item?.tagType | translate }}\n </cds-tag>\n </div>\n</ng-template>\n\n<ng-template #statusForm let-obs=\"obs\">\n <form [formGroup]=\"statusFormGroup\" class=\"status-form\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.title' | translate }}\n\n <input cdsText formControlName=\"title\" [attr.modal-primary-focus]=\"true\" />\n </cds-label>\n\n <cds-label>\n {{ 'dossierManagement.statuses.columns.key' | translate }}\n\n <div class=\"edit-key-input\">\n <input\n cdsText\n formControlName=\"key\"\n [disabled]=\"!obs.editingKey\"\n [placeholder]=\"\n obs.isAdd && !obs.editingKey\n ? ('dossierManagement.statuses.keyAutoGenerated' | translate)\n : ''\n \"\n />\n\n <cds-icon-button\n *ngIf=\"!obs.editingKey && obs.isAdd\"\n [disabled]=\"obs.disabled\"\n (click)=\"editKeyButtonClick()\"\n kind=\"secondary\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n </cds-label>\n\n <div class=\"horizontal-inputs\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.color' | translate }}\n\n <cds-dropdown\n [appendInline]=\"false\"\n [placeholder]=\"'dossierManagement.statuses.colorPlaceholder' | translate\"\n (selected)=\"colorDropdownChange($event)\"\n >\n <cds-dropdown-list [items]=\"colorListItems$\" [listTpl]=\"colorDropdownItemTemplate\">\n </cds-dropdown-list>\n </cds-dropdown>\n </cds-label>\n\n <cds-toggle\n [label]=\"'dossierManagement.statuses.visibleTitle' | translate\"\n [onText]=\"'dossierManagement.statuses.visible' | translate\"\n [offText]=\"'dossierManagement.statuses.invisible' | translate\"\n [disabled]=\"obs.disabled\"\n [checked]=\"visibleInCaseListByDefault?.value\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </div>\n </form>\n</ng-template>\n\n<ng-template #buttons let-obs=\"obs\">\n <button cdsButton=\"secondary\" (click)=\"onClose()\" [disabled]=\"obs.disabled\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isAdd\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"addStatus()\"\n >\n {{ 'interface.add' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isEdit\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"editStatus()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n</ng-template>\n", styles: [".status-form{display:flex;flex-direction:column;gap:16px}.edit-key-input{height:40px;display:flex;width:100%;flex-direction:row;gap:16px;align-items:flex-end}::ng-deep .horizontal-inputs{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}::ng-deep .horizontal-inputs .cds--label{width:100%;display:flex;flex-direction:column;gap:8px}::ng-deep .dropdown-color-tag .cds--tag{margin-top:-4px;margin-left:2px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i2.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i2.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i2.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i2.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i2.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i2.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i2.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i2.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i2.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i2.IconButton, selector: "cds-icon-button, ibm-icon-button", inputs: ["buttonNgClass", "buttonAttributes", "buttonId", "kind", "size", "type", "isExpressive", "disabled", "description"], outputs: ["click", "focus", "blur", "tooltipClick"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i2.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i2.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: ToggleModule }, { kind: "component", type: i2.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "skeleton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
145
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DocumentenApiColumnModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.TranslateService }, { token: i3.DocumentenApiColumnService }], target: i0.ɵɵFactoryTarget.Component }); }
146
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: DocumentenApiColumnModalComponent, isStandalone: true, selector: "valtimo-documenten-api-column-modal", inputs: { definitionName: "definitionName", prefillColumn: "prefillColumn", type: "type", availableColumns: "availableColumns", configuredColumns: "configuredColumns" }, outputs: { closeModal: "closeModal" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal valtimoCdsModal [open]=\"type !== 'closed'\" size=\"sm\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onClose()\">\n <h3 cdsModalHeaderHeading>\n {{ (type === 'add' ? 'zgw.columns.add' : 'zgw.columns.edit') | translate }}\n </h3>\n </cds-modal-header>\n\n <form\n class=\"valtimo-documenten-api-column-modal__content\"\n cdsModalContent\n [formGroup]=\"formGroup\"\n >\n <cds-dropdown\n formControlName=\"column\"\n [label]=\"'zgw.columns.column' | translate\"\n [dropUp]=\"false\"\n >\n <cds-dropdown-list\n [items]=\"!prefillColumn ? (availableColumns$ | async) : prefillColumn\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-radio-group *ngIf=\"showRadioButtons\" legend=\"Default sort\" formControlName=\"defaultSort\">\n <cds-radio value=\"noDefault\"> {{ 'interface.sorting.noDefault' | translate }} </cds-radio>\n\n <cds-radio value=\"DESC\"> {{ 'interface.sorting.descending' | translate }} </cds-radio>\n\n <cds-radio value=\"ASC\"> {{ 'interface.sorting.ascending' | translate }} </cds-radio>\n </cds-radio-group>\n\n <cds-inline-notification [notificationObj]=\"notificationObj$ | async\"></cds-inline-notification>\n </form>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"onClose()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"formGroup.invalid\" (click)=\"updateColumn()\">\n {{ (type === 'add' ? 'interface.add' : 'interface.save') | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-documenten-api-column-modal__content{display:flex;flex-direction:column;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: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i5.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i5.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "component", type: i5.ModalFooter, selector: "cds-modal-footer, ibm-modal-footer" }, { kind: "directive", type: i5.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }, { kind: "directive", type: i5.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: InputModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i5.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i5.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: RadioModule }, { kind: "component", type: i5.Radio, selector: "cds-radio, ibm-radio", inputs: ["checked", "name", "disabled", "labelPlacement", "ariaLabelledby", "ariaLabel", "required", "value", "skeleton", "id"], outputs: ["change"] }, { kind: "component", type: i5.RadioGroup, selector: "cds-radio-group, ibm-radio-group", inputs: ["selected", "value", "name", "disabled", "skeleton", "orientation", "labelPlacement", "legend", "ariaLabel", "ariaLabelledby", "helperText", "invalid", "invalidText", "warn", "warnText"], outputs: ["change"] }, { kind: "ngmodule", type: NotificationModule }, { kind: "component", type: i5.Notification, selector: "cds-notification, cds-inline-notification, ibm-notification, ibm-inline-notification", inputs: ["notificationObj"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
276
147
  }
277
148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: DocumentenApiColumnModalComponent, decorators: [{
278
149
  type: Component,
279
150
  args: [{ selector: 'valtimo-documenten-api-column-modal', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
280
151
  CommonModule,
281
152
  ModalModule,
282
- TagModule,
283
153
  TranslateModule,
284
154
  InputModule,
285
155
  ReactiveFormsModule,
286
156
  ButtonModule,
287
157
  DropdownModule,
288
- ToggleModule,
289
- ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n valtimoCdsModal\n *ngIf=\"{\n isAdd: isAdd$ | async,\n isEdit: isEdit$ | async,\n isClosed: isClosed$ | async,\n editingKey: editingKey$ | async,\n disabled: disabled$ | async\n } as obs\"\n [open]=\"!obs.isClosed\"\n size=\"sm\"\n>\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onClose()\">\n <h3 cdsModalHeaderHeading>\n {{ obs.isAdd ? ('dossierManagement.statuses.add' | translate) : '' }}\n {{ obs.isEdit ? ('dossierManagement.statuses.edit' | translate) : '' }}\n </h3>\n </cds-modal-header>\n\n <section cdsModalContent>\n <ng-container *ngTemplateOutlet=\"statusForm; context: {obs: obs}\"></ng-container>\n </section>\n\n <cds-modal-footer>\n <ng-container *ngTemplateOutlet=\"buttons; context: {obs: obs}\"></ng-container>\n </cds-modal-footer>\n</cds-modal>\n\n<ng-template #colorDropdownItemTemplate let-item=\"item\">\n <div class=\"dropdown-color-tag\">\n <cds-tag *ngIf=\"item && item.content\" class=\"cds-tag--no-margin\" [type]=\"item?.tagType\">\n {{ 'interface.tagType.' + item?.tagType | translate }}\n </cds-tag>\n </div>\n</ng-template>\n\n<ng-template #statusForm let-obs=\"obs\">\n <form [formGroup]=\"statusFormGroup\" class=\"status-form\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.title' | translate }}\n\n <input cdsText formControlName=\"title\" [attr.modal-primary-focus]=\"true\" />\n </cds-label>\n\n <cds-label>\n {{ 'dossierManagement.statuses.columns.key' | translate }}\n\n <div class=\"edit-key-input\">\n <input\n cdsText\n formControlName=\"key\"\n [disabled]=\"!obs.editingKey\"\n [placeholder]=\"\n obs.isAdd && !obs.editingKey\n ? ('dossierManagement.statuses.keyAutoGenerated' | translate)\n : ''\n \"\n />\n\n <cds-icon-button\n *ngIf=\"!obs.editingKey && obs.isAdd\"\n [disabled]=\"obs.disabled\"\n (click)=\"editKeyButtonClick()\"\n kind=\"secondary\"\n >\n <svg class=\"cds--btn__icon\" cdsIcon=\"edit\" size=\"16\"></svg>\n </cds-icon-button>\n </div>\n </cds-label>\n\n <div class=\"horizontal-inputs\">\n <cds-label>\n {{ 'dossierManagement.statuses.columns.color' | translate }}\n\n <cds-dropdown\n [appendInline]=\"false\"\n [placeholder]=\"'dossierManagement.statuses.colorPlaceholder' | translate\"\n (selected)=\"colorDropdownChange($event)\"\n >\n <cds-dropdown-list [items]=\"colorListItems$\" [listTpl]=\"colorDropdownItemTemplate\">\n </cds-dropdown-list>\n </cds-dropdown>\n </cds-label>\n\n <cds-toggle\n [label]=\"'dossierManagement.statuses.visibleTitle' | translate\"\n [onText]=\"'dossierManagement.statuses.visible' | translate\"\n [offText]=\"'dossierManagement.statuses.invisible' | translate\"\n [disabled]=\"obs.disabled\"\n [checked]=\"visibleInCaseListByDefault?.value\"\n (checkedChange)=\"toggleCheckedChange($event)\"\n ></cds-toggle>\n </div>\n </form>\n</ng-template>\n\n<ng-template #buttons let-obs=\"obs\">\n <button cdsButton=\"secondary\" (click)=\"onClose()\" [disabled]=\"obs.disabled\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isAdd\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"addStatus()\"\n >\n {{ 'interface.add' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.isEdit\"\n cdsButton=\"primary\"\n [disabled]=\"invalid || pristine || obs.disabled\"\n (click)=\"editStatus()\"\n >\n {{ 'interface.save' | translate }}\n </button>\n</ng-template>\n", styles: [".status-form{display:flex;flex-direction:column;gap:16px}.edit-key-input{height:40px;display:flex;width:100%;flex-direction:row;gap:16px;align-items:flex-end}::ng-deep .horizontal-inputs{display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}::ng-deep .horizontal-inputs .cds--label{width:100%;display:flex;flex-direction:column;gap:8px}::ng-deep .dropdown-color-tag .cds--tag{margin-top:-4px;margin-left:2px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
290
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.IconService }, { type: i3.CaseStatusService }, { type: i4.TranslateService }], propDecorators: { type: [{
158
+ RadioModule,
159
+ NotificationModule,
160
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal valtimoCdsModal [open]=\"type !== 'closed'\" size=\"sm\">\n <cds-modal-header showCloseButton=\"true\" (closeSelect)=\"onClose()\">\n <h3 cdsModalHeaderHeading>\n {{ (type === 'add' ? 'zgw.columns.add' : 'zgw.columns.edit') | translate }}\n </h3>\n </cds-modal-header>\n\n <form\n class=\"valtimo-documenten-api-column-modal__content\"\n cdsModalContent\n [formGroup]=\"formGroup\"\n >\n <cds-dropdown\n formControlName=\"column\"\n [label]=\"'zgw.columns.column' | translate\"\n [dropUp]=\"false\"\n >\n <cds-dropdown-list\n [items]=\"!prefillColumn ? (availableColumns$ | async) : prefillColumn\"\n ></cds-dropdown-list>\n </cds-dropdown>\n\n <cds-radio-group *ngIf=\"showRadioButtons\" legend=\"Default sort\" formControlName=\"defaultSort\">\n <cds-radio value=\"noDefault\"> {{ 'interface.sorting.noDefault' | translate }} </cds-radio>\n\n <cds-radio value=\"DESC\"> {{ 'interface.sorting.descending' | translate }} </cds-radio>\n\n <cds-radio value=\"ASC\"> {{ 'interface.sorting.ascending' | translate }} </cds-radio>\n </cds-radio-group>\n\n <cds-inline-notification [notificationObj]=\"notificationObj$ | async\"></cds-inline-notification>\n </form>\n\n <cds-modal-footer>\n <button cdsButton=\"secondary\" (click)=\"onClose()\">\n {{ 'interface.cancel' | translate }}\n </button>\n\n <button cdsButton=\"primary\" [disabled]=\"formGroup.invalid\" (click)=\"updateColumn()\">\n {{ (type === 'add' ? 'interface.add' : 'interface.save') | translate }}\n </button>\n </cds-modal-footer>\n</cds-modal>\n", styles: [".valtimo-documenten-api-column-modal__content{display:flex;flex-direction:column;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"] }]
161
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.TranslateService }, { type: i3.DocumentenApiColumnService }], propDecorators: { definitionName: [{
162
+ type: Input
163
+ }], prefillColumn: [{
291
164
  type: Input
292
- }], prefill: [{
165
+ }], type: [{
293
166
  type: Input
294
- }], usedKeys: [{
167
+ }], availableColumns: [{
295
168
  type: Input
296
- }], documentDefinitionName: [{
169
+ }], configuredColumns: [{
297
170
  type: Input
298
- }], closeModalEvent: [{
171
+ }], closeModal: [{
299
172
  type: Output
300
173
  }] } });
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktY29sdW1uLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vemd3L3NyYy9saWIvbW9kdWxlcy9kb2N1bWVudGVuLWFwaS9jb21wb25lbnRzL2RvY3VtZW50ZW4tYXBpLWNvbHVtbi1tb2RhbC9kb2N1bWVudGVuLWFwaS1jb2x1bW4tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktY29sdW1uLW1vZGFsL2RvY3VtZW50ZW4tYXBpLWNvbHVtbi1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLEdBQUcsRUFFSCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBR0wsbUJBQW1CLEVBR25CLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsdUJBQXVCLEdBQ3hCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLFlBQVksRUFDWixjQUFjLEVBRWQsV0FBVyxFQUVYLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sMkJBQTJCLENBQUM7QUFD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ZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpQ29sdW1uTW9kYWxUeXBlLCBEb2N1bWVudGVuQXBpQ29sdW1uTW9kYWxUeXBlQ2xvc2VFdmVudH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q0FSQk9OX0NPTlNUQU5UU30gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JGbixcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQ2FzZVN0YXR1c1NlcnZpY2UsXG4gIEludGVybmFsQ2FzZVN0YXR1cyxcbiAgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IsXG4gIEludGVybmFsQ2FzZVN0YXR1c1V0aWxzLFxufSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIERyb3Bkb3duTW9kdWxlLFxuICBJY29uU2VydmljZSxcbiAgSW5wdXRNb2R1bGUsXG4gIExpc3RJdGVtLFxuICBNb2RhbE1vZHVsZSxcbiAgVGFnTW9kdWxlLFxuICBUb2dnbGVNb2R1bGUsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtFZGl0MTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9jdW1lbnRlbi1hcGktY29sdW1uLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RvY3VtZW50ZW4tYXBpLWNvbHVtbi1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RvY3VtZW50ZW4tYXBpLWNvbHVtbi1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNb2RhbE1vZHVsZSxcbiAgICBUYWdNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIElucHV0TW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIFRvZ2dsZU1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHR5cGUodmFsdWU6IERvY3VtZW50ZW5BcGlDb2x1bW5Nb2RhbFR5cGUpIHtcbiAgICB0aGlzLl90eXBlLm5leHQodmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlID09PSAnY2xvc2VkJykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3R5cGVBbmltYXRpb25EZWxheSQubmV4dCh2YWx1ZSk7XG4gICAgICB9LCBDQVJCT05fQ09OU1RBTlRTLm1vZGFsQW5pbWF0aW9uTXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90eXBlQW5pbWF0aW9uRGVsYXkkLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgcHJlZmlsbCh2YWx1ZTogSW50ZXJuYWxDYXNlU3RhdHVzKSB7XG4gICAgdGhpcy5fcHJlZmlsbFN0YXR1cy5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHB1YmxpYyB1c2VkS2V5cyE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBwdWJsaWMgZG9jdW1lbnREZWZpbml0aW9uTmFtZSE6IHN0cmluZztcblxuICBAT3V0cHV0KCkgcHVibGljIGNsb3NlTW9kYWxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsVHlwZUNsb3NlRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsVHlwZT4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZUFuaW1hdGlvbkRlbGF5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsVHlwZT4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ByZWZpbGxTdGF0dXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEludGVybmFsQ2FzZVN0YXR1cz4odW5kZWZpbmVkKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNDbG9zZWQkID0gdGhpcy5fdHlwZS5waXBlKG1hcCh0eXBlID0+IHR5cGUgPT09ICdjbG9zZWQnKSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0Zvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIHRpdGxlOiB0aGlzLmZiLmNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIGtleTogdGhpcy5mYi5jb250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy51bmlxdWVLZXlWYWxpZGF0b3IoKV0pLFxuICAgIHZpc2libGVJbkNhc2VMaXN0QnlEZWZhdWx0OiB0aGlzLmZiLmNvbnRyb2wodHJ1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgY29sb3I6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBpc0VkaXQkID0gY29tYmluZUxhdGVzdChbdGhpcy5fdHlwZUFuaW1hdGlvbkRlbGF5JCwgdGhpcy5fcHJlZmlsbFN0YXR1c10pLnBpcGUoXG4gICAgdGFwKChbdHlwZSwgcHJlZmlsbFN0YXR1c10pID0+IHtcbiAgICAgIGlmICh0eXBlID09PSAnZWRpdCcgJiYgcHJlZmlsbFN0YXR1cykgdGhpcy5wcmVmaWxsRm9ybShwcmVmaWxsU3RhdHVzKTtcbiAgICB9KSxcbiAgICBtYXAoKFt0eXBlXSkgPT4gdHlwZSA9PT0gJ2VkaXQnKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBpc0FkZCQgPSB0aGlzLl90eXBlQW5pbWF0aW9uRGVsYXkkLnBpcGUoXG4gICAgbWFwKHR5cGUgPT4gdHlwZSA9PT0gJ2FkZCcpLFxuICAgIHRhcChpc0FkZCA9PiB7XG4gICAgICBpZiAoaXNBZGQpIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBDT0xPUlM6IEludGVybmFsQ2FzZVN0YXR1c0NvbG9yW10gPSBbXG4gICAgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IuUmVkLFxuICAgIEludGVybmFsQ2FzZVN0YXR1c0NvbG9yLk1hZ2VudGEsXG4gICAgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IuUHVycGxlLFxuICAgIEludGVybmFsQ2FzZVN0YXR1c0NvbG9yLkJsdWUsXG4gICAgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IuVGVhbCxcbiAgICBJbnRlcm5hbENhc2VTdGF0dXNDb2xvci5HcmVlbixcbiAgICBJbnRlcm5hbENhc2VTdGF0dXNDb2xvci5DeWFuLFxuICAgIEludGVybmFsQ2FzZVN0YXR1c0NvbG9yLkdyYXksXG4gICAgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IuQ29vbEdyYXksXG4gICAgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IuV2FybUdyYXksXG4gICAgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IuSGlnaENvbnRyYXN0LFxuICAgIEludGVybmFsQ2FzZVN0YXR1c0NvbG9yLk91dGxpbmUsXG4gIF07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRDb2xvciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEludGVybmFsQ2FzZVN0YXR1c0NvbG9yPih1bmRlZmluZWQpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjb2xvckxpc3RJdGVtcyQ6IE9ic2VydmFibGU8TGlzdEl0ZW1bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9zZWxlY3RlZENvbG9yJCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtzZWxlY3RlZENvbG9yXSkgPT5cbiAgICAgIHRoaXMuQ09MT1JTLm1hcChjb2xvciA9PiAoe1xuICAgICAgICBzZWxlY3RlZDogY29sb3IgPT09IHNlbGVjdGVkQ29sb3IsXG4gICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICdpbnRlcmZhY2UudGFnVHlwZS4nICtcbiAgICAgICAgICAgIEludGVybmFsQ2FzZVN0YXR1c1V0aWxzLmdldFRhZ1R5cGVGcm9tSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IoY29sb3IpXG4gICAgICAgICksXG4gICAgICAgIGNvbG9yLFxuICAgICAgICB0YWdUeXBlOiBJbnRlcm5hbENhc2VTdGF0dXNVdGlscy5nZXRUYWdUeXBlRnJvbUludGVybmFsQ2FzZVN0YXR1c0NvbG9yKGNvbG9yKSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgZ2V0IHZpc2libGVJbkNhc2VMaXN0QnlEZWZhdWx0KCk6IEFic3RyYWN0Q29udHJvbDxib29sZWFuLCBib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzRm9ybUdyb3VwPy5nZXQoJ3Zpc2libGVJbkNhc2VMaXN0QnlEZWZhdWx0Jyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGtleSgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNGb3JtR3JvdXA/LmdldCgna2V5Jyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1c0Zvcm1Hcm91cD8uZ2V0KCd0aXRsZScpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb2xvcigpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNGb3JtR3JvdXA/LmdldCgnY29sb3InKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnN0YXR1c0Zvcm1Hcm91cD8uaW52YWxpZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJpc3RpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zdGF0dXNGb3JtR3JvdXA/LnByaXN0aW5lO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZWRpdGluZ0tleSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZWRpdGluZ0tleSQgPSB0aGlzLl9lZGl0aW5nS2V5JC5waXBlKFxuICAgIHRhcChlZGl0aW5nID0+IHtcbiAgICAgIGlmIChlZGl0aW5nKSB7XG4gICAgICAgIHRoaXMua2V5Py5lbmFibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMua2V5Py5kaXNhYmxlKCk7XG4gICAgICB9XG4gICAgfSlcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcmlnaW5hbFN0YXR1c0tleSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlU3RhdHVzU2VydmljZTogQ2FzZVN0YXR1c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvblNlcnZpY2UucmVnaXN0ZXJBbGwoW0VkaXQxNl0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkF1dG9LZXlTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQ2hlY2tlZENoYW5nZShjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXNGb3JtR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICB2aXNpYmxlSW5DYXNlTGlzdEJ5RGVmYXVsdDogY2hlY2tlZCxcbiAgICB9KTtcbiAgICB0aGlzLnN0YXR1c0Zvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgcHVibGljIGFkZFN0YXR1cygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGUoKTtcblxuICAgIHRoaXMuY2FzZVN0YXR1c1NlcnZpY2VcbiAgICAgIC5zYXZlSW50ZXJuYWxDYXNlU3RhdHVzKHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgdGhpcy5nZXRGb3JtVmFsdWUoKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgICAgICB0aGlzLmNsb3NlQW5kUmVmcmVzaCgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW5hYmxlKGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGVkaXRTdGF0dXMoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICB0aGlzLl9vcmlnaW5hbFN0YXR1c0tleSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAob3JpZ2luYWxTdGF0dXNLZXkgPT5cbiAgICAgICAgICB0aGlzLmNhc2VTdGF0dXNTZXJ2aWNlLnVwZGF0ZUludGVybmFsQ2FzZVN0YXR1cyhcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhdHVzS2V5LFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtVmFsdWUoKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgICAgIHRoaXMuY2xvc2VBbmRSZWZyZXNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbmFibGUoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZWRpdEtleUJ1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuX2VkaXRpbmdLZXkkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgY29sb3JEcm9wZG93bkNoYW5nZShldmVudDoge1xuICAgIGl0ZW06IHtjb2xvcjogc3RyaW5nOyBjb250ZW50OiBzdHJpbmc7IHNlbGVjdGVkOiBib29sZWFufTtcbiAgICBpc1VwZGF0ZTogYm9vbGVhbjtcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0NvbG9yID0gZXZlbnQ/Lml0ZW0/LmNvbG9yIGFzIEludGVybmFsQ2FzZVN0YXR1c0NvbG9yO1xuXG4gICAgaWYgKG5ld0NvbG9yKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZENvbG9yJC5uZXh0KG5ld0NvbG9yKTtcbiAgICAgIHRoaXMuc3RhdHVzRm9ybUdyb3VwLnBhdGNoVmFsdWUoe2NvbG9yOiBuZXdDb2xvcn0pO1xuICAgICAgdGhpcy5zdGF0dXNGb3JtR3JvdXAubWFya0FzRGlydHkoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZWZpbGxGb3JtKHByZWZpbGxTdGF0dXM6IEludGVybmFsQ2FzZVN0YXR1cyk6IHZvaWQge1xuICAgIHRoaXMuX29yaWdpbmFsU3RhdHVzS2V5JC5uZXh0KHByZWZpbGxTdGF0dXMua2V5KTtcbiAgICB0aGlzLnN0YXR1c0Zvcm1Hcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgIGtleTogcHJlZmlsbFN0YXR1cy5rZXksXG4gICAgICB0aXRsZTogcHJlZmlsbFN0YXR1cy50aXRsZSxcbiAgICAgIHZpc2libGVJbkNhc2VMaXN0QnlEZWZhdWx0OiBwcmVmaWxsU3RhdHVzLnZpc2libGVJbkNhc2VMaXN0QnlEZWZhdWx0LFxuICAgICAgY29sb3I6IHByZWZpbGxTdGF0dXMuY29sb3IsXG4gICAgfSk7XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2xvciQubmV4dChwcmVmaWxsU3RhdHVzLmNvbG9yKTtcbiAgICB0aGlzLnN0YXR1c0Zvcm1Hcm91cC5tYXJrQXNQcmlzdGluZSgpO1xuICAgIHRoaXMucmVzZXRFZGl0aW5nS2V5KCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXR1c0Zvcm1Hcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgIGtleTogJycsXG4gICAgICB0aXRsZTogJycsXG4gICAgICB2aXNpYmxlSW5DYXNlTGlzdEJ5RGVmYXVsdDogdHJ1ZSxcbiAgICAgIGNvbG9yOiBJbnRlcm5hbENhc2VTdGF0dXNDb2xvci5CbHVlLFxuICAgIH0pO1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sb3IkLm5leHQoSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IuQmx1ZSk7XG4gICAgdGhpcy5zdGF0dXNGb3JtR3JvdXAubWFya0FzUHJpc3RpbmUoKTtcbiAgICB0aGlzLnJlc2V0RWRpdGluZ0tleSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEVkaXRpbmdLZXkoKTogdm9pZCB7XG4gICAgdGhpcy5fZWRpdGluZ0tleSQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5BdXRvS2V5U3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5pc0FkZCQsIHRoaXMudGl0bGUudmFsdWVDaGFuZ2VzLCB0aGlzLmVkaXRpbmdLZXkkXSkuc3Vic2NyaWJlKFxuICAgICAgICAoW2lzQWRkLCB0aXRsZVZhbHVlLCBlZGl0aW5nS2V5XSkgPT4ge1xuICAgICAgICAgIGlmIChpc0FkZCAmJiAhZWRpdGluZ0tleSkge1xuICAgICAgICAgICAgaWYgKHRpdGxlVmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0dXNGb3JtR3JvdXAucGF0Y2hWYWx1ZSh7a2V5OiB0aGlzLmdldFVuaXF1ZUtleSh0aXRsZVZhbHVlKX0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhcktleSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFVuaXF1ZUtleSh0aXRsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXNoQ2FzZUtleSA9IGAke3RpdGxlfWBcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvW15hLXowLTktX10rfC1bXmEtejAtOV0rL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9fWy1fXSsvZywgJ18nKVxuICAgICAgLnJlcGxhY2UoL15bXmEtel0rL2csICcnKTtcbiAgICBjb25zdCB1c2VkS2V5cyA9IHRoaXMudXNlZEtleXM7XG5cbiAgICBpZiAoIXVzZWRLZXlzLmluY2x1ZGVzKGRhc2hDYXNlS2V5KSkge1xuICAgICAgcmV0dXJuIGRhc2hDYXNlS2V5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFVuaXF1ZUtleVdpdGhOdW1iZXIoZGFzaENhc2VLZXksIHVzZWRLZXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VW5pcXVlS2V5V2l0aE51bWJlcihkYXNoQ2FzZUtleTogc3RyaW5nLCB1c2VkS2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IG51bWJlcnNGcm9tQ3VycmVudEtleSA9IChkYXNoQ2FzZUtleS5tYXRjaCgvXlxcZCt8XFxkK1xcYnxcXGQrKD89XFx3KS9nKSB8fCBbXSkubWFwKFxuICAgICAgKG51bWJlclZhbHVlOiBzdHJpbmcpID0+ICtudW1iZXJWYWx1ZVxuICAgICk7XG4gICAgY29uc3QgbGFzdE51bWJlckZyb21DdXJyZW50S2V5ID1cbiAgICAgIG51bWJlcnNGcm9tQ3VycmVudEtleS5sZW5ndGggPiAwICYmIG51bWJlcnNGcm9tQ3VycmVudEtleVtudW1iZXJzRnJvbUN1cnJlbnRLZXkubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgbmV3S2V5ID0gbGFzdE51bWJlckZyb21DdXJyZW50S2V5XG4gICAgICA/IGAke2Rhc2hDYXNlS2V5LnJlcGxhY2UoYCR7bGFzdE51bWJlckZyb21DdXJyZW50S2V5fWAsIGAke2xhc3ROdW1iZXJGcm9tQ3VycmVudEtleSArIDF9YCl9YFxuICAgICAgOiBgJHtkYXNoQ2FzZUtleX0tMWA7XG5cbiAgICBpZiAodXNlZEtleXMuaW5jbHVkZXMobmV3S2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VW5pcXVlS2V5V2l0aE51bWJlcihuZXdLZXksIHVzZWRLZXlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3S2V5O1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhcktleSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXR1c0Zvcm1Hcm91cC5wYXRjaFZhbHVlKHtrZXk6ICcnfSk7XG4gIH1cblxuICBwcml2YXRlIHVuaXF1ZUtleVZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PlxuICAgICAgdGhpcy51c2VkS2V5cz8uZXZlcnkoKGtleTogc3RyaW5nKSA9PiBrZXkgIT09IGNvbnRyb2wudmFsdWUpXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHt1bmlxdWVLZXk6IHt2YWx1ZTogY29udHJvbC52YWx1ZX19O1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5zdGF0dXNGb3JtR3JvdXAuZGlzYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGUoZGVsYXkgPSB0cnVlKTogdm9pZCB7XG4gICAgc2V0VGltZW91dChcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuc3RhdHVzRm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgICAgfSxcbiAgICAgIGRlbGF5ID8gQ0FSQk9OX0NPTlNUQU5UUy5tb2RhbEFuaW1hdGlvbk1zIDogMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VNb2RhbEV2ZW50LmVtaXQoJ2Nsb3NlJyk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQW5kUmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlTW9kYWxFdmVudC5lbWl0KCdjbG9zZUFuZFJlZnJlc2gnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9ybVZhbHVlKCk6IEludGVybmFsQ2FzZVN0YXR1cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogdGhpcy5rZXkudmFsdWUsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZS52YWx1ZSxcbiAgICAgIHZpc2libGVJbkNhc2VMaXN0QnlEZWZhdWx0OiB0aGlzLnZpc2libGVJbkNhc2VMaXN0QnlEZWZhdWx0LnZhbHVlLFxuICAgICAgY29sb3I6IHRoaXMuY29sb3IudmFsdWUgYXMgSW50ZXJuYWxDYXNlU3RhdHVzQ29sb3IsXG4gICAgfTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48Y2RzLW1vZGFsXG4gIHZhbHRpbW9DZHNNb2RhbFxuICAqbmdJZj1cIntcbiAgICBpc0FkZDogaXNBZGQkIHwgYXN5bmMsXG4gICAgaXNFZGl0OiBpc0VkaXQkIHwgYXN5bmMsXG4gICAgaXNDbG9zZWQ6IGlzQ2xvc2VkJCB8IGFzeW5jLFxuICAgIGVkaXRpbmdLZXk6IGVkaXRpbmdLZXkkIHwgYXN5bmMsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkJCB8IGFzeW5jXG4gIH0gYXMgb2JzXCJcbiAgW29wZW5dPVwiIW9icy5pc0Nsb3NlZFwiXG4gIHNpemU9XCJzbVwiXG4+XG4gIDxjZHMtbW9kYWwtaGVhZGVyIHNob3dDbG9zZUJ1dHRvbj1cInRydWVcIiAoY2xvc2VTZWxlY3QpPVwib25DbG9zZSgpXCI+XG4gICAgPGgzIGNkc01vZGFsSGVhZGVySGVhZGluZz5cbiAgICAgIHt7IG9icy5pc0FkZCA/ICgnZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuYWRkJyB8IHRyYW5zbGF0ZSkgOiAnJyB9fVxuICAgICAge3sgb2JzLmlzRWRpdCA/ICgnZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuZWRpdCcgfCB0cmFuc2xhdGUpIDogJycgfX1cbiAgICA8L2gzPlxuICA8L2Nkcy1tb2RhbC1oZWFkZXI+XG5cbiAgPHNlY3Rpb24gY2RzTW9kYWxDb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNGb3JtOyBjb250ZXh0OiB7b2JzOiBvYnN9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvc2VjdGlvbj5cblxuICA8Y2RzLW1vZGFsLWZvb3Rlcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uczsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Nkcy1tb2RhbC1mb290ZXI+XG48L2Nkcy1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNjb2xvckRyb3Bkb3duSXRlbVRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tY29sb3ItdGFnXCI+XG4gICAgPGNkcy10YWcgKm5nSWY9XCJpdGVtICYmIGl0ZW0uY29udGVudFwiIGNsYXNzPVwiY2RzLXRhZy0tbm8tbWFyZ2luXCIgW3R5cGVdPVwiaXRlbT8udGFnVHlwZVwiPlxuICAgICAge3sgJ2ludGVyZmFjZS50YWdUeXBlLicgKyBpdGVtPy50YWdUeXBlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9jZHMtdGFnPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3RhdHVzRm9ybSBsZXQtb2JzPVwib2JzXCI+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwic3RhdHVzRm9ybUdyb3VwXCIgY2xhc3M9XCJzdGF0dXMtZm9ybVwiPlxuICAgIDxjZHMtbGFiZWw+XG4gICAgICB7eyAnZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuY29sdW1ucy50aXRsZScgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgPGlucHV0IGNkc1RleHQgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiBbYXR0ci5tb2RhbC1wcmltYXJ5LWZvY3VzXT1cInRydWVcIiAvPlxuICAgIDwvY2RzLWxhYmVsPlxuXG4gICAgPGNkcy1sYWJlbD5cbiAgICAgIHt7ICdkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy5jb2x1bW5zLmtleScgfCB0cmFuc2xhdGUgfX1cblxuICAgICAgPGRpdiBjbGFzcz1cImVkaXQta2V5LWlucHV0XCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhb2JzLmVkaXRpbmdLZXlcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgIG9icy5pc0FkZCAmJiAhb2JzLmVkaXRpbmdLZXlcbiAgICAgICAgICAgICAgPyAoJ2Rvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLmtleUF1dG9HZW5lcmF0ZWQnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8Y2RzLWljb24tYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCIhb2JzLmVkaXRpbmdLZXkgJiYgb2JzLmlzQWRkXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkXCJcbiAgICAgICAgICAoY2xpY2spPVwiZWRpdEtleUJ1dHRvbkNsaWNrKClcIlxuICAgICAgICAgIGtpbmQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyBjbGFzcz1cImNkcy0tYnRuX19pY29uXCIgY2RzSWNvbj1cImVkaXRcIiBzaXplPVwiMTZcIj48L3N2Zz5cbiAgICAgICAgPC9jZHMtaWNvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Nkcy1sYWJlbD5cblxuICAgIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWlucHV0c1wiPlxuICAgICAgPGNkcy1sYWJlbD5cbiAgICAgICAge3sgJ2Rvc3NpZXJNYW5hZ2VtZW50LnN0YXR1c2VzLmNvbHVtbnMuY29sb3InIHwgdHJhbnNsYXRlIH19XG5cbiAgICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwiZmFsc2VcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuY29sb3JQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIChzZWxlY3RlZCk9XCJjb2xvckRyb3Bkb3duQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJjb2xvckxpc3RJdGVtcyRcIiBbbGlzdFRwbF09XCJjb2xvckRyb3Bkb3duSXRlbVRlbXBsYXRlXCI+XG4gICAgICAgICAgPC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICA8L2Nkcy1sYWJlbD5cblxuICAgICAgPGNkcy10b2dnbGVcbiAgICAgICAgW2xhYmVsXT1cIidkb3NzaWVyTWFuYWdlbWVudC5zdGF0dXNlcy52aXNpYmxlVGl0bGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW29uVGV4dF09XCInZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMudmlzaWJsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbb2ZmVGV4dF09XCInZG9zc2llck1hbmFnZW1lbnQuc3RhdHVzZXMuaW52aXNpYmxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIlxuICAgICAgICBbY2hlY2tlZF09XCJ2aXNpYmxlSW5DYXNlTGlzdEJ5RGVmYXVsdD8udmFsdWVcIlxuICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJ0b2dnbGVDaGVja2VkQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvY2RzLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25zIGxldC1vYnM9XCJvYnNcIj5cbiAgPGJ1dHRvbiBjZHNCdXR0b249XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwib25DbG9zZSgpXCIgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZFwiPlxuICAgIHt7ICdpbnRlcmZhY2UuY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJvYnMuaXNBZGRcIlxuICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICAgIFtkaXNhYmxlZF09XCJpbnZhbGlkIHx8IHByaXN0aW5lIHx8IG9icy5kaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cImFkZFN0YXR1cygpXCJcbiAgPlxuICAgIHt7ICdpbnRlcmZhY2UuYWRkJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCJvYnMuaXNFZGl0XCJcbiAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICBbZGlzYWJsZWRdPVwiaW52YWxpZCB8fCBwcmlzdGluZSB8fCBvYnMuZGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJlZGl0U3RhdHVzKClcIlxuICA+XG4gICAge3sgJ2ludGVyZmFjZS5zYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktY29sdW1uLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vemd3L3NyYy9saWIvbW9kdWxlcy9kb2N1bWVudGVuLWFwaS9jb21wb25lbnRzL2RvY3VtZW50ZW4tYXBpLWNvbHVtbi1tb2RhbC9kb2N1bWVudGVuLWFwaS1jb2x1bW4tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktY29sdW1uLW1vZGFsL2RvY3VtZW50ZW4tYXBpLWNvbHVtbi1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsbUJBQW1CLEVBQUUsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUUsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxXQUFXLEVBRVgsV0FBVyxFQUVYLGtCQUFrQixFQUNsQixXQUFXLEdBQ1osTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQU85RixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFB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R1QsaUNBQWlDO2tCQWxCN0MsU0FBUzsrQkFDRSxxQ0FBcUMsbUJBRzlCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxrQkFBa0I7cUJBQ25CO3dKQUdlLGNBQWM7c0JBQTdCLEtBQUs7Z0JBR2MsYUFBYTtzQkFBaEMsS0FBSztnQkFjYyxJQUFJO3NCQUF2QixLQUFLO2dCQVdjLGdCQUFnQjtzQkFBbkMsS0FBSztnQkFvQmMsaUJBQWlCO3NCQUFwQyxLQUFLO2dCQU1JLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIEJ1dHRvbk1vZHVsZSxcbiAgRHJvcGRvd25Nb2R1bGUsXG4gIElucHV0TW9kdWxlLFxuICBMaXN0SXRlbSxcbiAgTW9kYWxNb2R1bGUsXG4gIE5vdGlmaWNhdGlvbkNvbnRlbnQsXG4gIE5vdGlmaWNhdGlvbk1vZHVsZSxcbiAgUmFkaW9Nb2R1bGUsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJlZENvbHVtbixcbiAgRG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsVHlwZSxcbiAgRG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsVHlwZUNsb3NlRXZlbnQsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge0RvY3VtZW50ZW5BcGlDb2x1bW5TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0NBUkJPTl9DT05TVEFOVFN9IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvY3VtZW50ZW4tYXBpLWNvbHVtbi1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudGVuLWFwaS1jb2x1bW4tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1jb2x1bW4tbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTW9kYWxNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIElucHV0TW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIFJhZGlvTW9kdWxlLFxuICAgIE5vdGlmaWNhdGlvbk1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwdWJsaWMgZGVmaW5pdGlvbk5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIF9wcmVmaWxsQ29sdW1uITogTGlzdEl0ZW1bXSB8IG51bGw7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgcHJlZmlsbENvbHVtbih2YWx1ZTogQ29uZmlndXJlZENvbHVtbiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbHVtbiA9IHtjb250ZW50OiB2YWx1ZS5rZXksIHNlbGVjdGVkOiB0cnVlLCBjb2x1bW46IHZhbHVlfTtcbiAgICBjb25zdCBkZWZhdWx0U29ydCA9IHZhbHVlLmRlZmF1bHRTb3J0ID8/ICdub0RlZmF1bHQnO1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoe2NvbHVtbiwgZGVmYXVsdFNvcnR9KTtcbiAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2NvbHVtbicpPy5kaXNhYmxlKCk7XG4gICAgdGhpcy5fcHJlZmlsbENvbHVtbiA9IFtjb2x1bW5dO1xuICB9XG4gIHB1YmxpYyBnZXQgcHJlZmlsbENvbHVtbigpOiBMaXN0SXRlbVtdIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZWZpbGxDb2x1bW47XG4gIH1cblxuICBwcml2YXRlIF90eXBlITogRG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsVHlwZTtcbiAgQElucHV0KCkgcHVibGljIHNldCB0eXBlKHZhbHVlOiBEb2N1bWVudGVuQXBpQ29sdW1uTW9kYWxUeXBlKSB7XG4gICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gJ2VkaXQnKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2NvbHVtbicpPy5kaXNhYmxlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IHR5cGUoKTogRG9jdW1lbnRlbkFwaUNvbHVtbk1vZGFsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9hdmFpbGFibGVDb2x1bW5zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29uZmlndXJlZENvbHVtbltdPihbXSk7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgYXZhaWxhYmxlQ29sdW1ucyh2YWx1ZTogQ29uZmlndXJlZENvbHVtbltdKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5fYXZhaWxhYmxlQ29sdW1ucyQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmxlQ29sdW1ucyQ6IE9ic2VydmFibGU8TGlzdEl0ZW1bXT4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9hdmFpbGFibGVDb2x1bW5zJCxcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc3RyZWFtKCdrZXknKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtjb2x1bW5zXSkgPT5cbiAgICAgIGNvbHVtbnMubWFwKChjb2x1bW46IENvbmZpZ3VyZWRDb2x1bW4pID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGB6Z3cuZG9jdW1lbnRDb2x1bW5zLiR7Y29sdW1uLmtleX1gKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBjb2x1bW4sXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcHJpdmF0ZSBfZGVmYXVsdFNvcnRlZENvbHVtbiE6IENvbmZpZ3VyZWRDb2x1bW4gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgY29uZmlndXJlZENvbHVtbnModmFsdWU6IENvbmZpZ3VyZWRDb2x1bW5bXSkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIHRoaXMuX2RlZmF1bHRTb3J0ZWRDb2x1bW4gPSB2YWx1ZS5maW5kKChjb2x1bW46IENvbmZpZ3VyZWRDb2x1bW4pID0+ICEhY29sdW1uLmRlZmF1bHRTb3J0KTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBjbG9zZU1vZGFsID0gbmV3IEV2ZW50RW1pdHRlcjxEb2N1bWVudGVuQXBpQ29sdW1uTW9kYWxUeXBlQ2xvc2VFdmVudD4oKTtcblxuICBwdWJsaWMgZm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgY29sdW1uOiB0aGlzLmZiLmNvbnRyb2woXG4gICAgICB7Y29udGVudDogJycsIHNlbGVjdGVkOiBmYWxzZSwgY29sdW1uOiB7fSBhcyBDb25maWd1cmVkQ29sdW1ufSxcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICApLFxuICAgIGRlZmF1bHRTb3J0OiB0aGlzLmZiLmNvbnRyb2w8J0FTQycgfCAnREVTQycgfCAnbm9EZWZhdWx0Jz4oJ25vRGVmYXVsdCcpLFxuICB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9ub3RpZmljYXRpb25NZXNzYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcbiAgICAnemd3LmNvbHVtbnMuZGVmYXVsdFdhcm5pbmcnXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSBub3RpZmljYXRpb25PYmokOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbkNvbnRlbnQ+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5fbm90aWZpY2F0aW9uTWVzc2FnZSQsXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnN0cmVhbSgna2V5JyksXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbbWVzc2FnZV0pID0+ICh7XG4gICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICBsb3dDb250cmFzdDogdHJ1ZSxcbiAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnaW50ZXJmYWNlLndhcm5pbmcnKSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1lc3NhZ2UpLFxuICAgICAgc2hvd0Nsb3NlOiBmYWxzZSxcbiAgICB9KSlcbiAgKTtcblxuICBwdWJsaWMgc2hvd1JhZGlvQnV0dG9ucyA9IHRydWU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB6Z3dEb2N1bWVudGVuQXBpQ29sdW1uU2VydmljZTogRG9jdW1lbnRlbkFwaUNvbHVtblNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5EaXNhYmxlUmFkaW9TdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZShyZWZyZXNoID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlTW9kYWwuZW1pdChyZWZyZXNoID8gJ2Nsb3NlQW5kUmVmcmVzaCcgOiAnY2xvc2UnKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgICAgdGhpcy5zaG93UmFkaW9CdXR0b25zID0gdHJ1ZTtcbiAgICAgIHRoaXMuX25vdGlmaWNhdGlvbk1lc3NhZ2UkLm5leHQoJ3pndy5jb2x1bW5zLmRlZmF1bHRXYXJuaW5nJyk7XG4gICAgICB0aGlzLl9wcmVmaWxsQ29sdW1uID0gbnVsbDtcbiAgICB9LCBDQVJCT05fQ09OU1RBTlRTLm1vZGFsQW5pbWF0aW9uTXMpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbHVtbigpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW5WYWx1ZTogTGlzdEl0ZW0gfCBudWxsIHwgdW5kZWZpbmVkID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdjb2x1bW4nKT8udmFsdWU7XG4gICAgaWYgKCFjb2x1bW5WYWx1ZSB8fCAhdGhpcy5kZWZpbml0aW9uTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0U29ydFZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdkZWZhdWx0U29ydCcpPy52YWx1ZTtcbiAgICBjb25zdCBkZWZhdWx0U29ydCA9ICFkZWZhdWx0U29ydFZhbHVlXG4gICAgICA/IG51bGxcbiAgICAgIDogZGVmYXVsdFNvcnRWYWx1ZSA9PT0gJ25vRGVmYXVsdCdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogZGVmYXVsdFNvcnRWYWx1ZTtcbiAgICBjb25zdCBjb2x1bW4gPSB7Li4uY29sdW1uVmFsdWUuY29sdW1uLCBkZWZhdWx0U29ydH07XG5cbiAgICBpZiAoXG4gICAgICAhIXRoaXMuX2RlZmF1bHRTb3J0ZWRDb2x1bW4gJiZcbiAgICAgIHRoaXMuX2RlZmF1bHRTb3J0ZWRDb2x1bW4ua2V5ICE9PSBjb2x1bW4ua2V5ICYmXG4gICAgICAhIWNvbHVtbi5kZWZhdWx0U29ydFxuICAgICkge1xuICAgICAgdGhpcy56Z3dEb2N1bWVudGVuQXBpQ29sdW1uU2VydmljZVxuICAgICAgICAudXBkYXRlQ29sdW1uKHRoaXMuZGVmaW5pdGlvbk5hbWUsIHtcbiAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0U29ydGVkQ29sdW1uLFxuICAgICAgICAgIGRlZmF1bHRTb3J0OiBudWxsLFxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuemd3RG9jdW1lbnRlbkFwaUNvbHVtblNlcnZpY2UudXBkYXRlQ29sdW1uKHRoaXMuZGVmaW5pdGlvbk5hbWUsIGNvbHVtbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkNsb3NlKHRydWUpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuemd3RG9jdW1lbnRlbkFwaUNvbHVtblNlcnZpY2UudXBkYXRlQ29sdW1uKHRoaXMuZGVmaW5pdGlvbk5hbWUsIGNvbHVtbikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMub25DbG9zZSh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRpc2FibGVSYWRpb1N1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnY29sdW1uJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoY29sdW1uVmFsdWUgPT4ge1xuICAgICAgICB0aGlzLnNob3dSYWRpb0J1dHRvbnMgPSAhIWNvbHVtblZhbHVlPy5jb2x1bW4uc29ydGFibGU7XG5cbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uTWVzc2FnZSQubmV4dChcbiAgICAgICAgICB0aGlzLnNob3dSYWRpb0J1dHRvbnMgPyAnemd3LmNvbHVtbnMuZGVmYXVsdFdhcm5pbmcnIDogJ3pndy5jb2x1bW5zLm5vdFNvcnRhYmxlJ1xuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxjZHMtbW9kYWwgdmFsdGltb0Nkc01vZGFsIFtvcGVuXT1cInR5cGUgIT09ICdjbG9zZWQnXCIgc2l6ZT1cInNtXCI+XG4gIDxjZHMtbW9kYWwtaGVhZGVyIHNob3dDbG9zZUJ1dHRvbj1cInRydWVcIiAoY2xvc2VTZWxlY3QpPVwib25DbG9zZSgpXCI+XG4gICAgPGgzIGNkc01vZGFsSGVhZGVySGVhZGluZz5cbiAgICAgIHt7ICh0eXBlID09PSAnYWRkJyA/ICd6Z3cuY29sdW1ucy5hZGQnIDogJ3pndy5jb2x1bW5zLmVkaXQnKSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvaDM+XG4gIDwvY2RzLW1vZGFsLWhlYWRlcj5cblxuICA8Zm9ybVxuICAgIGNsYXNzPVwidmFsdGltby1kb2N1bWVudGVuLWFwaS1jb2x1bW4tbW9kYWxfX2NvbnRlbnRcIlxuICAgIGNkc01vZGFsQ29udGVudFxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgPlxuICAgIDxjZHMtZHJvcGRvd25cbiAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbHVtblwiXG4gICAgICBbbGFiZWxdPVwiJ3pndy5jb2x1bW5zLmNvbHVtbicgfCB0cmFuc2xhdGVcIlxuICAgICAgW2Ryb3BVcF09XCJmYWxzZVwiXG4gICAgPlxuICAgICAgPGNkcy1kcm9wZG93bi1saXN0XG4gICAgICAgIFtpdGVtc109XCIhcHJlZmlsbENvbHVtbiA/IChhdmFpbGFibGVDb2x1bW5zJCB8IGFzeW5jKSA6IHByZWZpbGxDb2x1bW5cIlxuICAgICAgPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgPC9jZHMtZHJvcGRvd24+XG5cbiAgICA8Y2RzLXJhZGlvLWdyb3VwICpuZ0lmPVwic2hvd1JhZGlvQnV0dG9uc1wiIGxlZ2VuZD1cIkRlZmF1bHQgc29ydFwiIGZvcm1Db250cm9sTmFtZT1cImRlZmF1bHRTb3J0XCI+XG4gICAgICA8Y2RzLXJhZGlvIHZhbHVlPVwibm9EZWZhdWx0XCI+IHt7ICdpbnRlcmZhY2Uuc29ydGluZy5ub0RlZmF1bHQnIHwgdHJhbnNsYXRlIH19IDwvY2RzLXJhZGlvPlxuXG4gICAgICA8Y2RzLXJhZGlvIHZhbHVlPVwiREVTQ1wiPiB7eyAnaW50ZXJmYWNlLnNvcnRpbmcuZGVzY2VuZGluZycgfCB0cmFuc2xhdGUgfX0gPC9jZHMtcmFkaW8+XG5cbiAgICAgIDxjZHMtcmFkaW8gdmFsdWU9XCJBU0NcIj4ge3sgJ2ludGVyZmFjZS5zb3J0aW5nLmFzY2VuZGluZycgfCB0cmFuc2xhdGUgfX0gPC9jZHMtcmFkaW8+XG4gICAgPC9jZHMtcmFkaW8tZ3JvdXA+XG5cbiAgICA8Y2RzLWlubGluZS1ub3RpZmljYXRpb24gW25vdGlmaWNhdGlvbk9ial09XCJub3RpZmljYXRpb25PYmokIHwgYXN5bmNcIj48L2Nkcy1pbmxpbmUtbm90aWZpY2F0aW9uPlxuICA8L2Zvcm0+XG5cbiAgPGNkcy1tb2RhbC1mb290ZXI+XG4gICAgPGJ1dHRvbiBjZHNCdXR0b249XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwib25DbG9zZSgpXCI+XG4gICAgICB7eyAnaW50ZXJmYWNlLmNhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCJmb3JtR3JvdXAuaW52YWxpZFwiIChjbGljayk9XCJ1cGRhdGVDb2x1bW4oKVwiPlxuICAgICAge3sgKHR5cGUgPT09ICdhZGQnID8gJ2ludGVyZmFjZS5hZGQnIDogJ2ludGVyZmFjZS5zYXZlJykgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9jZHMtbW9kYWwtZm9vdGVyPlxuPC9jZHMtbW9kYWw+XG4iXX0=