@stemy/ngx-dynamic-form 10.2.33 → 13.0.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 (48) hide show
  1. package/esm2020/ngx-dynamic-form/common-types.mjs +97 -0
  2. package/esm2020/ngx-dynamic-form/components/base/dynamic-base-form-array.component.mjs +85 -0
  3. package/esm2020/ngx-dynamic-form/components/base/dynamic-base-form-control-container.component.mjs +109 -0
  4. package/esm2020/ngx-dynamic-form/components/base/dynamic-base-form-group.component.mjs +74 -0
  5. package/esm2020/ngx-dynamic-form/components/base/dynamic-base-form.component.mjs +158 -0
  6. package/esm2020/ngx-dynamic-form/directives/async-submit.directive.mjs +111 -0
  7. package/esm2020/ngx-dynamic-form/ngx-dynamic-form.imports.mjs +22 -0
  8. package/esm2020/ngx-dynamic-form/ngx-dynamic-form.module.mjs +115 -0
  9. package/esm2020/ngx-dynamic-form/services/dynamic-form.service.mjs +451 -0
  10. package/{esm2015/ngx-dynamic-form/utils/dynamic-form-array.model.js → esm2020/ngx-dynamic-form/utils/dynamic-form-array.model.mjs} +0 -0
  11. package/esm2020/ngx-dynamic-form/utils/form-select-subject.mjs +23 -0
  12. package/{esm2015/ngx-dynamic-form/utils/form-subject.js → esm2020/ngx-dynamic-form/utils/form-subject.mjs} +0 -0
  13. package/{esm2015/ngx-dynamic-form/utils/misc.js → esm2020/ngx-dynamic-form/utils/misc.mjs} +0 -0
  14. package/{esm2015/ngx-dynamic-form/utils/validators.js → esm2020/ngx-dynamic-form/utils/validators.mjs} +0 -0
  15. package/{esm2015/public_api.js → esm2020/public_api.mjs} +1 -1
  16. package/esm2020/stemy-ngx-dynamic-form.mjs +5 -0
  17. package/fesm2015/{stemy-ngx-dynamic-form.js → stemy-ngx-dynamic-form.mjs} +295 -189
  18. package/fesm2015/stemy-ngx-dynamic-form.mjs.map +1 -0
  19. package/fesm2020/stemy-ngx-dynamic-form.mjs +1311 -0
  20. package/fesm2020/stemy-ngx-dynamic-form.mjs.map +1 -0
  21. package/ngx-dynamic-form/common-types.d.ts +4 -0
  22. package/ngx-dynamic-form/components/base/dynamic-base-form-array.component.d.ts +3 -0
  23. package/ngx-dynamic-form/components/base/dynamic-base-form-control-container.component.d.ts +3 -0
  24. package/ngx-dynamic-form/components/base/dynamic-base-form-group.component.d.ts +3 -0
  25. package/ngx-dynamic-form/components/base/dynamic-base-form.component.d.ts +3 -0
  26. package/ngx-dynamic-form/directives/async-submit.directive.d.ts +3 -0
  27. package/ngx-dynamic-form/ngx-dynamic-form.imports.d.ts +10 -0
  28. package/ngx-dynamic-form/ngx-dynamic-form.module.d.ts +14 -9
  29. package/ngx-dynamic-form/services/dynamic-form.service.d.ts +3 -0
  30. package/package.json +42 -23
  31. package/public_api.d.ts +1 -1
  32. package/stemy-ngx-dynamic-form.d.ts +1 -1
  33. package/bundles/stemy-ngx-dynamic-form.umd.js +0 -1774
  34. package/bundles/stemy-ngx-dynamic-form.umd.js.map +0 -1
  35. package/bundles/stemy-ngx-dynamic-form.umd.min.js +0 -2
  36. package/bundles/stemy-ngx-dynamic-form.umd.min.js.map +0 -1
  37. package/esm2015/ngx-dynamic-form/common-types.js +0 -97
  38. package/esm2015/ngx-dynamic-form/components/base/dynamic-base-form-array.component.js +0 -79
  39. package/esm2015/ngx-dynamic-form/components/base/dynamic-base-form-control-container.component.js +0 -102
  40. package/esm2015/ngx-dynamic-form/components/base/dynamic-base-form-group.component.js +0 -65
  41. package/esm2015/ngx-dynamic-form/components/base/dynamic-base-form.component.js +0 -140
  42. package/esm2015/ngx-dynamic-form/directives/async-submit.directive.js +0 -100
  43. package/esm2015/ngx-dynamic-form/ngx-dynamic-form.module.js +0 -87
  44. package/esm2015/ngx-dynamic-form/services/dynamic-form.service.js +0 -457
  45. package/esm2015/ngx-dynamic-form/utils/form-select-subject.js +0 -24
  46. package/esm2015/stemy-ngx-dynamic-form.js +0 -6
  47. package/fesm2015/stemy-ngx-dynamic-form.js.map +0 -1
  48. package/stemy-ngx-dynamic-form.metadata.json +0 -1
@@ -0,0 +1,451 @@
1
+ import { EventEmitter, Inject, Injectable, Injector } from "@angular/core";
2
+ import { FormArray, FormGroup } from "@angular/forms";
3
+ import { Subject } from "rxjs";
4
+ import { DynamicCheckboxModel, DynamicFileUploadModel, DynamicFormArrayModel as DynamicFormArrayModelBase, DynamicFormGroupModel, DynamicFormService as Base, DynamicInputModel, DynamicSelectModel, DynamicTextAreaModel } from "@ng-dynamic-forms/core";
5
+ import { ObjectUtils, OpenApiService, StringUtils } from "@stemy/ngx-utils";
6
+ import { isStringWithVal } from "../utils/misc";
7
+ import { FormSelectSubject } from "../utils/form-select-subject";
8
+ import { FormSubject } from "../utils/form-subject";
9
+ import { DynamicFormArrayModel } from "../utils/dynamic-form-array.model";
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@ng-dynamic-forms/core";
12
+ import * as i2 from "@stemy/ngx-utils";
13
+ export class DynamicFormService extends Base {
14
+ constructor(cs, vs, openApi, injector) {
15
+ super(cs, vs);
16
+ this.openApi = openApi;
17
+ this.injector = injector;
18
+ this.onDetectChanges = new EventEmitter();
19
+ }
20
+ get api() {
21
+ return this.openApi.api;
22
+ }
23
+ get language() {
24
+ return this.api.language;
25
+ }
26
+ patchGroup(value, formModel, formGroup) {
27
+ this.patchValueRecursive(value, formModel, formGroup);
28
+ this.detectChanges();
29
+ formGroup.patchValue(ObjectUtils.copy(value));
30
+ }
31
+ patchForm(value, component) {
32
+ this.patchValueRecursive(value, component.model, component.group);
33
+ this.detectChanges(component);
34
+ component.group.patchValue(value);
35
+ }
36
+ serialize(formModel, formGroup) {
37
+ return this.serializeRecursive(formModel, formGroup);
38
+ }
39
+ notifyChanges(formModel, formGroup, root) {
40
+ this.notifyChangesRecursive(formModel, formGroup, root);
41
+ }
42
+ updateSelectOptions(formControlModel, formControl, root) {
43
+ if (formControlModel instanceof DynamicSelectModel) {
44
+ let options = formControlModel.options$;
45
+ if (options instanceof FormSubject) {
46
+ options.notify(formControlModel, formControl, root);
47
+ return;
48
+ }
49
+ while (options instanceof Subject && options.source) {
50
+ options = options.source;
51
+ if (options instanceof FormSubject) {
52
+ options.notify(formControlModel, formControl, root);
53
+ }
54
+ }
55
+ }
56
+ }
57
+ showErrors(form) {
58
+ this.showErrorsForGroup(form.group);
59
+ this.detectChanges(form);
60
+ }
61
+ detectChanges(formComponent) {
62
+ super.detectChanges(formComponent);
63
+ this.onDetectChanges.emit(formComponent);
64
+ }
65
+ patchValueRecursive(value, formModel, formGroup) {
66
+ Object.keys(value).forEach(key => {
67
+ const subModel = this.findModelById(key, formModel);
68
+ const subValue = value[key];
69
+ if (!subModel)
70
+ return;
71
+ const subControl = this.findControlByModel(subModel, formGroup);
72
+ if (subModel instanceof DynamicSelectModel && ObjectUtils.isObject(subValue)) {
73
+ value[key] = subValue.id || subValue._id || subValue;
74
+ return;
75
+ }
76
+ if (subModel instanceof DynamicFormArrayModelBase) {
77
+ const length = Array.isArray(subValue) ? subValue.length : 0;
78
+ const subArray = subControl;
79
+ while (subModel.size > length) {
80
+ this.removeFormArrayGroup(0, subArray, subModel);
81
+ }
82
+ while (subModel.size < length) {
83
+ this.insertFormArrayGroup(subModel.size, subArray, subModel);
84
+ }
85
+ for (let i = 0; i < length; i++) {
86
+ const itemModel = subModel.get(i);
87
+ this.patchValueRecursive(subValue[i], itemModel.group, subArray.at(i));
88
+ }
89
+ return;
90
+ }
91
+ if (subModel instanceof DynamicFormGroupModel) {
92
+ this.patchValueRecursive(subValue, subModel.group, subControl);
93
+ }
94
+ });
95
+ }
96
+ async serializeRecursive(formModel, formGroup) {
97
+ const result = {};
98
+ if (!formModel || !formGroup || !formGroup.value)
99
+ return result;
100
+ for (const i in formModel) {
101
+ const subModel = formModel[i];
102
+ const subControl = this.findControlByModel(subModel, formGroup);
103
+ const serializer = subModel.additional?.serializer;
104
+ if (ObjectUtils.isFunction(serializer)) {
105
+ result[subModel.id] = await serializer(subModel, subControl);
106
+ continue;
107
+ }
108
+ if (subModel instanceof DynamicFormArrayModelBase) {
109
+ const length = Array.isArray(subControl.value) ? subControl.value.length : 0;
110
+ const subArray = subControl;
111
+ const resArray = [];
112
+ for (let i = 0; i < length; i++) {
113
+ const itemModel = subModel.get(i);
114
+ resArray.push(await this.serializeRecursive(itemModel.group, subArray.at(i)));
115
+ }
116
+ result[subModel.id] = resArray;
117
+ continue;
118
+ }
119
+ if (subModel instanceof DynamicFormGroupModel) {
120
+ result[subModel.id] = await this.serializeRecursive(subModel.group, subControl);
121
+ continue;
122
+ }
123
+ if (subModel instanceof DynamicInputModel && !ObjectUtils.isNullOrUndefined(subControl.value)) {
124
+ result[subModel.id] = subModel.inputType == "number"
125
+ ? parseFloat((`${subControl.value}` || "0").replace(/,/gi, ".")) ?? null
126
+ : subControl.value;
127
+ continue;
128
+ }
129
+ result[subModel.id] = subControl.value;
130
+ }
131
+ return result;
132
+ }
133
+ notifyChangesRecursive(formModel, formGroup, root) {
134
+ if (!formModel || !formGroup)
135
+ return;
136
+ for (const i in formModel) {
137
+ const subModel = formModel[i];
138
+ const subControl = this.findControlByModel(subModel, formGroup);
139
+ if (subModel instanceof DynamicFormArrayModelBase) {
140
+ const length = Array.isArray(subControl.value) ? subControl.value.length : 0;
141
+ const subArray = subControl;
142
+ for (let i = 0; i < length; i++) {
143
+ const itemModel = subModel.get(i);
144
+ this.notifyChangesRecursive(itemModel.group, subArray.at(i), root);
145
+ }
146
+ continue;
147
+ }
148
+ if (subModel instanceof DynamicFormGroupModel) {
149
+ this.notifyChangesRecursive(subModel.group, subControl, root);
150
+ continue;
151
+ }
152
+ this.updateSelectOptions(subModel, subControl, root);
153
+ }
154
+ }
155
+ showErrorsForGroup(formGroup) {
156
+ if (!formGroup)
157
+ return;
158
+ formGroup.markAsTouched({ onlySelf: true });
159
+ const controls = Object.keys(formGroup.controls).map(id => formGroup.controls[id]);
160
+ this.showErrorsForControls(controls);
161
+ }
162
+ showErrorsForControls(controls) {
163
+ controls.forEach(control => {
164
+ if (control instanceof FormGroup) {
165
+ this.showErrorsForGroup(control);
166
+ return;
167
+ }
168
+ control.markAsTouched({ onlySelf: true });
169
+ if (control instanceof FormArray) {
170
+ this.showErrorsForControls(control.controls);
171
+ }
172
+ });
173
+ }
174
+ async getFormModelForSchema(name, customizeModel) {
175
+ this.api.cache = {};
176
+ this.schemas = await this.openApi.getSchemas();
177
+ const customizeModels = (property, schema, modelType, config) => {
178
+ const model = new modelType(config);
179
+ if (!ObjectUtils.isFunction(customizeModel))
180
+ return [model];
181
+ const res = customizeModel(property, schema, model, config, this.injector);
182
+ return Array.isArray(res) ? res : [res];
183
+ };
184
+ return this.getFormModelForSchemaDef(this.schemas[name], customizeModels);
185
+ }
186
+ getFormModelForSchemaDef(schema, customizeModels) {
187
+ if (!schema)
188
+ return [];
189
+ const keys = Object.keys(schema.properties || {});
190
+ const controls = [];
191
+ for (const p of keys) {
192
+ const property = schema.properties[p];
193
+ controls.push(...this.getFormControlModels(property, schema, customizeModels));
194
+ }
195
+ return controls.filter(t => null !== t);
196
+ }
197
+ getFormControlModels(property, schema, customizeModels) {
198
+ const $enum = property.items?.enum || property.enum;
199
+ if (Array.isArray($enum) || isStringWithVal(property.optionsPath) || isStringWithVal(property.endpoint)) {
200
+ return customizeModels(property, schema, DynamicSelectModel, this.getFormSelectConfig(property, schema));
201
+ }
202
+ switch (property.type) {
203
+ case "string":
204
+ case "number":
205
+ case "integer":
206
+ return customizeModels(property, schema, DynamicInputModel, this.getFormInputConfig(property, schema));
207
+ case "textarea":
208
+ return customizeModels(property, schema, DynamicTextAreaModel, this.getFormTextareaConfig(property, schema));
209
+ case "boolean":
210
+ return customizeModels(property, schema, DynamicCheckboxModel, this.getFormCheckboxConfig(property, schema));
211
+ case "array":
212
+ if (property.items?.$ref || property.$ref) {
213
+ return customizeModels(property, schema, DynamicFormArrayModel, this.getFormArrayConfig(property, schema, customizeModels));
214
+ }
215
+ else {
216
+ return customizeModels(property, schema, DynamicInputModel, this.getFormInputConfig(property, schema));
217
+ }
218
+ case "file":
219
+ return customizeModels(property, schema, DynamicFileUploadModel, this.getFormUploadConfig(property, schema));
220
+ }
221
+ if (property.$ref) {
222
+ return customizeModels(property, schema, DynamicFormGroupModel, this.getFormGroupConfig(property, schema, customizeModels));
223
+ }
224
+ return [];
225
+ }
226
+ findModelByPath(parent, path) {
227
+ if (path.length == 0)
228
+ return parent;
229
+ const next = path.shift();
230
+ if (Array.isArray(parent)) {
231
+ return this.findModelByPath(parent.find(t => t.id == next), path);
232
+ }
233
+ if (parent instanceof DynamicFormGroupModel) {
234
+ return this.findModelByPath(parent.group.find(t => t.id == next), path);
235
+ }
236
+ if (parent instanceof DynamicFormArrayModel) {
237
+ return this.findModelByPath(parent.groups.find(t => t.index == next), path);
238
+ }
239
+ return parent;
240
+ }
241
+ getFormControlConfig(property, schema) {
242
+ const validators = this.getValidators(property, schema);
243
+ const errorMessages = Object.keys(validators).reduce((res, key) => {
244
+ res[key] = `error.${key}`;
245
+ return res;
246
+ }, {});
247
+ return {
248
+ id: property.id,
249
+ label: ObjectUtils.isString(property.label) ? property.label : property.id,
250
+ hidden: property.hidden,
251
+ disabled: property.disabled,
252
+ validators,
253
+ errorMessages,
254
+ additional: Object.assign({}, property)
255
+ };
256
+ }
257
+ getFormArrayConfig(property, schema, customizeModels) {
258
+ const ref = property.items?.$ref || property.$ref || "";
259
+ const subSchema = this.schemas[ref.split("/").pop()];
260
+ return Object.assign(this.getFormControlConfig(property, schema), {
261
+ groupFactory: () => this.getFormModelForSchemaDef(subSchema, customizeModels),
262
+ useTabs: property.useTabs || false
263
+ });
264
+ }
265
+ getFormGroupConfig(property, schema, customizeModels) {
266
+ const ref = property.$ref || "";
267
+ const subSchema = this.schemas[ref.split("/").pop()];
268
+ return Object.assign(this.getFormControlConfig(property, schema), { group: this.getFormModelForSchemaDef(subSchema, customizeModels) });
269
+ }
270
+ getFormInputConfig(property, schema) {
271
+ let inputType = StringUtils.has(property.id, "password", "Password") ? "password" : (property.format || property.items?.type || property.type);
272
+ switch (inputType) {
273
+ case "boolean":
274
+ inputType = "checkbox";
275
+ break;
276
+ case "textarea":
277
+ inputType = "textarea";
278
+ break;
279
+ case "integer":
280
+ inputType = "number";
281
+ break;
282
+ }
283
+ const sub = property.type == "array" ? property.items || property : property;
284
+ return Object.assign(this.getFormControlConfig(property, schema), {
285
+ inputType,
286
+ autoComplete: property.autoComplete || "off",
287
+ multiple: property.type == "array",
288
+ accept: ObjectUtils.isString(property.accept) ? property.accept : null,
289
+ mask: ObjectUtils.isString(property.mask) ? property.mask : null,
290
+ pattern: ObjectUtils.isString(property.pattern) ? property.pattern : null,
291
+ step: isNaN(sub.step) ? (isNaN(property.step) ? 1 : property.step) : sub.step,
292
+ min: isNaN(sub.minimum) ? Number.MIN_SAFE_INTEGER : sub.minimum,
293
+ max: isNaN(sub.maximum) ? Number.MAX_SAFE_INTEGER : sub.maximum,
294
+ minLength: isNaN(sub.minLength) ? Number.MIN_SAFE_INTEGER : sub.minLength,
295
+ maxLength: isNaN(sub.maxLength) ? Number.MAX_SAFE_INTEGER : sub.maxLength,
296
+ placeholder: property.placeholder || ""
297
+ });
298
+ }
299
+ getFormTextareaConfig(property, schema) {
300
+ return Object.assign(this.getFormControlConfig(property, schema), {
301
+ cols: property.cols || null,
302
+ rows: property.rows || 10,
303
+ wrap: property.wrap || false,
304
+ autoComplete: property.autoComplete || "off",
305
+ multiple: property.type == "array"
306
+ });
307
+ }
308
+ getFormSelectConfig(property, schema) {
309
+ return Object.assign(this.getFormControlConfig(property, schema), {
310
+ options: this.getFormSelectOptions(property, schema),
311
+ multiple: property.type == "array"
312
+ });
313
+ }
314
+ getFormCheckboxConfig(property, schema) {
315
+ return Object.assign(this.getFormControlConfig(property, schema), {
316
+ indeterminate: property.indeterminate === true
317
+ });
318
+ }
319
+ async translateOptions(options) {
320
+ if (!options)
321
+ return [];
322
+ for (const option of options) {
323
+ option.label = await this.language.getTranslation(option.label);
324
+ }
325
+ return options;
326
+ }
327
+ getFormSelectOptions(property, schema) {
328
+ const $enum = property.items?.enum || property.enum;
329
+ if (Array.isArray($enum)) {
330
+ return new FormSelectSubject(() => {
331
+ const options = $enum.map(value => {
332
+ const label = property.translatable ? `${property.id}.${value}` : `${value}`;
333
+ return { value, label };
334
+ });
335
+ return this.translateOptions(options);
336
+ });
337
+ }
338
+ if (isStringWithVal(property.optionsPath)) {
339
+ return new FormSelectSubject((formModel, control, root, indexes) => {
340
+ let path = property.optionsPath;
341
+ let target = control;
342
+ let model = formModel;
343
+ if (path.startsWith("$root")) {
344
+ path = path.substr(5);
345
+ while (target.parent) {
346
+ target = target.parent;
347
+ }
348
+ model = root;
349
+ }
350
+ while (path.startsWith(".")) {
351
+ path = path.substr(1);
352
+ if (target.parent) {
353
+ target = target.parent;
354
+ }
355
+ model = model.parent || root;
356
+ }
357
+ Object.keys(indexes).forEach(key => {
358
+ path = path.replace(key, indexes[key]);
359
+ });
360
+ model = this.findModelByPath(model, path.split("."));
361
+ const modelOptions = (model instanceof DynamicSelectModel ? model.options : []);
362
+ const value = ObjectUtils.getValue(target.value, path);
363
+ const options = (!ObjectUtils.isArray(value) ? [] : value).map(value => {
364
+ const modelOption = modelOptions.find(t => t.value == value);
365
+ return { value, label: modelOption?.label || value };
366
+ });
367
+ return this.translateOptions(options);
368
+ });
369
+ }
370
+ return new FormSelectSubject(async () => {
371
+ this.api.cache[property.endpoint] = this.api.cache[property.endpoint] || this.api.list(property.endpoint, this.api.makeListParams(1, -1)).then(result => {
372
+ return result.items.map(i => {
373
+ return { value: i.id || i._id, label: i[property.labelField] || i.label || i.id || i._id };
374
+ });
375
+ });
376
+ const options = (await this.api.cache[property.endpoint]).map(t => Object.assign({}, t));
377
+ return this.translateOptions(options);
378
+ });
379
+ }
380
+ getFormUploadConfig(property, schema) {
381
+ const url = this.api.url(property.url || "assets");
382
+ const { accept, autoUpload, maxSize, minSize, removeUrl, showFileList } = property;
383
+ return Object.assign(this.getFormControlConfig(property, schema), {
384
+ url,
385
+ accept,
386
+ autoUpload,
387
+ maxSize,
388
+ minSize,
389
+ removeUrl,
390
+ showFileList
391
+ });
392
+ }
393
+ getValidators(property, schema) {
394
+ const validators = {};
395
+ if (ObjectUtils.isArray(schema.required) && schema.required.indexOf(property.id) >= 0) {
396
+ validators.required = null;
397
+ }
398
+ this.addPropertyValidators(validators, property);
399
+ this.addItemsValidators(validators, property.items);
400
+ return validators;
401
+ }
402
+ addPropertyValidators(validators, property) {
403
+ if (!property)
404
+ return;
405
+ if (!isNaN(property.minLength)) {
406
+ validators.minLength = property.minLength;
407
+ }
408
+ if (!isNaN(property.maxLength)) {
409
+ validators.maxLength = property.maxLength;
410
+ }
411
+ if (!isNaN(property.minimum)) {
412
+ validators.min = property.minimum;
413
+ }
414
+ if (!isNaN(property.maximum)) {
415
+ validators.max = property.maximum;
416
+ }
417
+ switch (property.format) {
418
+ case "email":
419
+ validators.email = null;
420
+ break;
421
+ }
422
+ }
423
+ addItemsValidators(validators, items) {
424
+ if (!items)
425
+ return;
426
+ if (!isNaN(items.minLength)) {
427
+ validators.itemsMinLength = items.minLength;
428
+ }
429
+ if (!isNaN(items.maxLength)) {
430
+ validators.itemsMaxLength = items.maxLength;
431
+ }
432
+ if (!isNaN(items.minimum)) {
433
+ validators.itemsMinValue = items.minimum;
434
+ }
435
+ if (!isNaN(items.maximum)) {
436
+ validators.itemsMaxValue = items.maximum;
437
+ }
438
+ }
439
+ }
440
+ DynamicFormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: DynamicFormService, deps: [{ token: i1.DynamicFormComponentService }, { token: i1.DynamicFormValidationService }, { token: OpenApiService }, { token: Injector }], target: i0.ɵɵFactoryTarget.Injectable });
441
+ DynamicFormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: DynamicFormService });
442
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: DynamicFormService, decorators: [{
443
+ type: Injectable
444
+ }], ctorParameters: function () { return [{ type: i1.DynamicFormComponentService }, { type: i1.DynamicFormValidationService }, { type: i2.OpenApiService, decorators: [{
445
+ type: Inject,
446
+ args: [OpenApiService]
447
+ }] }, { type: i0.Injector, decorators: [{
448
+ type: Inject,
449
+ args: [Injector]
450
+ }] }]; } });
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LWR5bmFtaWMtZm9ybS9zZXJ2aWNlcy9keW5hbWljLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBa0IsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUNILG9CQUFvQixFQUVwQixzQkFBc0IsRUFFdEIscUJBQXFCLElBQUkseUJBQXlCLEVBS2xELHFCQUFxQixFQUlyQixrQkFBa0IsSUFBSSxJQUFJLEVBSTFCLGlCQUFpQixFQUVqQixrQkFBa0IsRUFFbEIsb0JBQW9CLEVBR3ZCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQU1ILFdBQVcsRUFDWCxjQUFjLEVBQ2QsV0FBVyxFQUNkLE1BQU0sa0JBQWtCLENBQUM7QUFJMUIsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFDLHFCQUFxQixFQUE4QixNQUFNLG1DQUFtQyxDQUFDOzs7O0FBSXJHLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxJQUFJO0lBYXhDLFlBQVksRUFBK0IsRUFDL0IsRUFBZ0MsRUFDQyxPQUF1QixFQUM3QixRQUFrQjtRQUNyRCxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRjJCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQzdCLGFBQVEsR0FBUixR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QkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVTs7MEJBZ0JNLE1BQU07MkJBQUMsY0FBYzs7MEJBQ3JCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge1N1YmplY3R9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7XHJcbiAgICBEeW5hbWljQ2hlY2tib3hNb2RlbCxcclxuICAgIER5bmFtaWNDaGVja2JveE1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY0ZpbGVVcGxvYWRNb2RlbCxcclxuICAgIER5bmFtaWNGaWxlVXBsb2FkTW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljRm9ybUFycmF5TW9kZWwgYXMgRHluYW1pY0Zvcm1BcnJheU1vZGVsQmFzZSxcclxuICAgIER5bmFtaWNGb3JtQ29tcG9uZW50LFxyXG4gICAgRHluYW1pY0Zvcm1Db21wb25lbnRTZXJ2aWNlLFxyXG4gICAgRHluYW1pY0Zvcm1Db250cm9sTW9kZWwsXHJcbiAgICBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtR3JvdXBNb2RlbCxcclxuICAgIER5bmFtaWNGb3JtR3JvdXBNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNGb3JtTW9kZWwsIER5bmFtaWNGb3JtT3B0aW9uLFxyXG4gICAgRHluYW1pY0Zvcm1PcHRpb25Db25maWcsXHJcbiAgICBEeW5hbWljRm9ybVNlcnZpY2UgYXMgQmFzZSxcclxuICAgIER5bmFtaWNGb3JtVmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBEeW5hbWljRm9ybVZhbHVlQ29udHJvbE1vZGVsLFxyXG4gICAgRHluYW1pY0Zvcm1WYWx1ZUNvbnRyb2xNb2RlbENvbmZpZyxcclxuICAgIER5bmFtaWNJbnB1dE1vZGVsLFxyXG4gICAgRHluYW1pY0lucHV0TW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljU2VsZWN0TW9kZWwsXHJcbiAgICBEeW5hbWljU2VsZWN0TW9kZWxDb25maWcsXHJcbiAgICBEeW5hbWljVGV4dEFyZWFNb2RlbCxcclxuICAgIER5bmFtaWNUZXh0QXJlYU1vZGVsQ29uZmlnLFxyXG4gICAgRHluYW1pY1ZhbGlkYXRvcnNDb25maWdcclxufSBmcm9tIFwiQG5nLWR5bmFtaWMtZm9ybXMvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgSUFwaVNlcnZpY2UsXHJcbiAgICBJTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgSU9wZW5BcGlTY2hlbWEsXHJcbiAgICBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LFxyXG4gICAgSU9wZW5BcGlTY2hlbWFzLFxyXG4gICAgT2JqZWN0VXRpbHMsXHJcbiAgICBPcGVuQXBpU2VydmljZSxcclxuICAgIFN0cmluZ1V0aWxzXHJcbn0gZnJvbSBcIkBzdGVteS9uZ3gtdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7Rm9ybUNvbnRyb2xTZXJpYWxpemVyLCBGb3JtTW9kZWxDdXN0b21pemVyLCBGb3JtTW9kZWxDdXN0b21pemVyV3JhcCwgTW9kZWxUeXBlfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5pbXBvcnQge2lzU3RyaW5nV2l0aFZhbH0gZnJvbSBcIi4uL3V0aWxzL21pc2NcIjtcclxuaW1wb3J0IHtGb3JtU2VsZWN0U3ViamVjdH0gZnJvbSBcIi4uL3V0aWxzL2Zvcm0tc2VsZWN0LXN1YmplY3RcIjtcclxuaW1wb3J0IHtGb3JtU3ViamVjdH0gZnJvbSBcIi4uL3V0aWxzL2Zvcm0tc3ViamVjdFwiO1xyXG5pbXBvcnQge0R5bmFtaWNGb3JtQXJyYXlNb2RlbCwgRHluYW1pY0Zvcm1BcnJheU1vZGVsQ29uZmlnfSBmcm9tIFwiLi4vdXRpbHMvZHluYW1pYy1mb3JtLWFycmF5Lm1vZGVsXCI7XHJcbmltcG9ydCB7RHluYW1pY1BhdGhhYmxlfSBmcm9tIFwiQG5nLWR5bmFtaWMtZm9ybXMvY29yZS9saWIvbW9kZWwvbWlzYy9keW5hbWljLWZvcm0tY29udHJvbC1wYXRoLm1vZGVsXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljRm9ybVNlcnZpY2UgZXh0ZW5kcyBCYXNlIHtcclxuXHJcbiAgICBnZXQgYXBpKCk6IElBcGlTZXJ2aWNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuQXBpLmFwaTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGFuZ3VhZ2UoKTogSUxhbmd1YWdlU2VydmljZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmxhbmd1YWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRvbmx5IG9uRGV0ZWN0Q2hhbmdlczogRXZlbnRFbWl0dGVyPER5bmFtaWNGb3JtQ29tcG9uZW50PjtcclxuICAgIHByb3RlY3RlZCBzY2hlbWFzOiBJT3BlbkFwaVNjaGVtYXM7XHJcblxyXG4gICAgY29uc3RydWN0b3IoY3M6IER5bmFtaWNGb3JtQ29tcG9uZW50U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHZzOiBEeW5hbWljRm9ybVZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChPcGVuQXBpU2VydmljZSkgcmVhZG9ubHkgb3BlbkFwaTogT3BlbkFwaVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KEluamVjdG9yKSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihjcywgdnMpO1xyXG4gICAgICAgIHRoaXMub25EZXRlY3RDaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRm9ybUNvbXBvbmVudD4oKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEdyb3VwKHZhbHVlOiBhbnksIGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUodmFsdWUsIGZvcm1Nb2RlbCwgZm9ybUdyb3VwKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBmb3JtR3JvdXAucGF0Y2hWYWx1ZShPYmplY3RVdGlscy5jb3B5KHZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hGb3JtKHZhbHVlOiBhbnksIGNvbXBvbmVudDogRHluYW1pY0Zvcm1Db21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUodmFsdWUsIGNvbXBvbmVudC5tb2RlbCwgY29tcG9uZW50Lmdyb3VwKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoY29tcG9uZW50KTtcclxuICAgICAgICBjb21wb25lbnQuZ3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VyaWFsaXplKGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVJlY3Vyc2l2ZShmb3JtTW9kZWwsIGZvcm1Hcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgbm90aWZ5Q2hhbmdlcyhmb3JtTW9kZWw6IER5bmFtaWNGb3JtTW9kZWwsIGZvcm1Hcm91cDogRm9ybUdyb3VwLCByb290OiBEeW5hbWljRm9ybU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGZvcm1Nb2RlbCwgZm9ybUdyb3VwLCByb290KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTZWxlY3RPcHRpb25zKGZvcm1Db250cm9sTW9kZWw6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsLCBmb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sLCByb290OiBEeW5hbWljRm9ybU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGZvcm1Db250cm9sTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljU2VsZWN0TW9kZWwpIHtcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBmb3JtQ29udHJvbE1vZGVsLm9wdGlvbnMkO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZvcm1TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLm5vdGlmeShmb3JtQ29udHJvbE1vZGVsLCBmb3JtQ29udHJvbCwgcm9vdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUgKG9wdGlvbnMgaW5zdGFuY2VvZiBTdWJqZWN0ICYmIG9wdGlvbnMuc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5zb3VyY2U7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyBpbnN0YW5jZW9mIEZvcm1TdWJqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ub3RpZnkoZm9ybUNvbnRyb2xNb2RlbCwgZm9ybUNvbnRyb2wsIHJvb3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvcnMoZm9ybTogRHluYW1pY0Zvcm1Db21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dFcnJvcnNGb3JHcm91cChmb3JtLmdyb3VwKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGV0ZWN0Q2hhbmdlcyhmb3JtQ29tcG9uZW50PzogRHluYW1pY0Zvcm1Db21wb25lbnQpIHtcclxuICAgICAgICBzdXBlci5kZXRlY3RDaGFuZ2VzKGZvcm1Db21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMub25EZXRlY3RDaGFuZ2VzLmVtaXQoZm9ybUNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHBhdGNoVmFsdWVSZWN1cnNpdmUodmFsdWU6IGFueSwgZm9ybU1vZGVsOiBEeW5hbWljRm9ybU1vZGVsLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1Yk1vZGVsID0gdGhpcy5maW5kTW9kZWxCeUlkKGtleSwgZm9ybU1vZGVsKTtcclxuICAgICAgICAgICAgY29uc3Qgc3ViVmFsdWUgPSB2YWx1ZVtrZXldO1xyXG4gICAgICAgICAgICBpZiAoIXN1Yk1vZGVsKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkNvbnRyb2wgPSB0aGlzLmZpbmRDb250cm9sQnlNb2RlbChzdWJNb2RlbCwgZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY1NlbGVjdE1vZGVsICYmIE9iamVjdFV0aWxzLmlzT2JqZWN0KHN1YlZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVba2V5XSA9IHN1YlZhbHVlLmlkIHx8IHN1YlZhbHVlLl9pZCB8fCBzdWJWYWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5TW9kZWxCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBBcnJheS5pc0FycmF5KHN1YlZhbHVlKSA/IHN1YlZhbHVlLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJBcnJheSA9IHN1YkNvbnRyb2wgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKHN1Yk1vZGVsLnNpemUgPiBsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZvcm1BcnJheUdyb3VwKDAsIHN1YkFycmF5LCBzdWJNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoc3ViTW9kZWwuc2l6ZSA8IGxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Rm9ybUFycmF5R3JvdXAoc3ViTW9kZWwuc2l6ZSwgc3ViQXJyYXksIHN1Yk1vZGVsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtTW9kZWwgPSBzdWJNb2RlbC5nZXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXRjaFZhbHVlUmVjdXJzaXZlKHN1YlZhbHVlW2ldLCBpdGVtTW9kZWwuZ3JvdXAsIHN1YkFycmF5LmF0KGkpIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY0Zvcm1Hcm91cE1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGNoVmFsdWVSZWN1cnNpdmUoc3ViVmFsdWUsIHN1Yk1vZGVsLmdyb3VwLCBzdWJDb250cm9sIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgc2VyaWFsaXplUmVjdXJzaXZlKGZvcm1Nb2RlbDogRHluYW1pY0Zvcm1Nb2RlbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGlmICghZm9ybU1vZGVsIHx8ICFmb3JtR3JvdXAgfHwgIWZvcm1Hcm91cC52YWx1ZSkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gZm9ybU1vZGVsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1Yk1vZGVsID0gZm9ybU1vZGVsW2ldIGFzIER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWw8YW55PjtcclxuICAgICAgICAgICAgY29uc3Qgc3ViQ29udHJvbCA9IHRoaXMuZmluZENvbnRyb2xCeU1vZGVsKHN1Yk1vZGVsLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVyID0gc3ViTW9kZWwuYWRkaXRpb25hbD8uc2VyaWFsaXplciBhcyBGb3JtQ29udHJvbFNlcmlhbGl6ZXI7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc0Z1bmN0aW9uKHNlcmlhbGl6ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbc3ViTW9kZWwuaWRdID0gYXdhaXQgc2VyaWFsaXplcihzdWJNb2RlbCwgc3ViQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5TW9kZWxCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBBcnJheS5pc0FycmF5KHN1YkNvbnRyb2wudmFsdWUpID8gc3ViQ29udHJvbC52YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyYXkgPSBzdWJDb250cm9sIGFzIEZvcm1BcnJheTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc0FycmF5ID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbU1vZGVsID0gc3ViTW9kZWwuZ2V0KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc0FycmF5LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VyaWFsaXplUmVjdXJzaXZlKGl0ZW1Nb2RlbC5ncm91cCwgc3ViQXJyYXkuYXQoaSkgYXMgRm9ybUdyb3VwKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbc3ViTW9kZWwuaWRdID0gcmVzQXJyYXk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUdyb3VwTW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtzdWJNb2RlbC5pZF0gPSBhd2FpdCB0aGlzLnNlcmlhbGl6ZVJlY3Vyc2l2ZShzdWJNb2RlbC5ncm91cCwgc3ViQ29udHJvbCBhcyBGb3JtR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgRHluYW1pY0lucHV0TW9kZWwgJiYgIU9iamVjdFV0aWxzLmlzTnVsbE9yVW5kZWZpbmVkKHN1YkNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbc3ViTW9kZWwuaWRdID0gc3ViTW9kZWwuaW5wdXRUeXBlID09IFwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICA/IHBhcnNlRmxvYXQoKGAke3N1YkNvbnRyb2wudmFsdWV9YCB8fCBcIjBcIikucmVwbGFjZSgvLC9naSwgXCIuXCIpKSA/PyBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgOiBzdWJDb250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0W3N1Yk1vZGVsLmlkXSA9IHN1YkNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG5vdGlmeUNoYW5nZXNSZWN1cnNpdmUoZm9ybU1vZGVsOiBEeW5hbWljRm9ybU1vZGVsLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgcm9vdDogRHluYW1pY0Zvcm1Nb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghZm9ybU1vZGVsIHx8ICFmb3JtR3JvdXApIHJldHVybjtcclxuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gZm9ybU1vZGVsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1Yk1vZGVsID0gZm9ybU1vZGVsW2ldIGFzIER5bmFtaWNGb3JtVmFsdWVDb250cm9sTW9kZWw8YW55PjtcclxuICAgICAgICAgICAgY29uc3Qgc3ViQ29udHJvbCA9IHRoaXMuZmluZENvbnRyb2xCeU1vZGVsKHN1Yk1vZGVsLCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5TW9kZWxCYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBBcnJheS5pc0FycmF5KHN1YkNvbnRyb2wudmFsdWUpID8gc3ViQ29udHJvbC52YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViQXJyYXkgPSBzdWJDb250cm9sIGFzIEZvcm1BcnJheTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtTW9kZWwgPSBzdWJNb2RlbC5nZXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKGl0ZW1Nb2RlbC5ncm91cCwgc3ViQXJyYXkuYXQoaSkgYXMgRm9ybUdyb3VwLCByb290KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdWJNb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNGb3JtR3JvdXBNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzUmVjdXJzaXZlKHN1Yk1vZGVsLmdyb3VwLCBzdWJDb250cm9sIGFzIEZvcm1Hcm91cCwgcm9vdCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdE9wdGlvbnMoc3ViTW9kZWwsIHN1YkNvbnRyb2wsIHJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2hvd0Vycm9yc0Zvckdyb3VwKGZvcm1Hcm91cDogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFmb3JtR3JvdXApIHJldHVybjtcclxuICAgICAgICBmb3JtR3JvdXAubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcclxuICAgICAgICBjb25zdCBjb250cm9scyA9IE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykubWFwKGlkID0+IGZvcm1Hcm91cC5jb250cm9sc1tpZF0pO1xyXG4gICAgICAgIHRoaXMuc2hvd0Vycm9yc0ZvckNvbnRyb2xzKGNvbnRyb2xzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2hvd0Vycm9yc0ZvckNvbnRyb2xzKGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcnNGb3JHcm91cChjb250cm9sKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcnNGb3JDb250cm9scyhjb250cm9sLmNvbnRyb2xzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEZvcm1Nb2RlbEZvclNjaGVtYShuYW1lOiBzdHJpbmcsIGN1c3RvbWl6ZU1vZGVsPzogRm9ybU1vZGVsQ3VzdG9taXplcik6IFByb21pc2U8RHluYW1pY0Zvcm1Nb2RlbD4ge1xyXG4gICAgICAgIHRoaXMuYXBpLmNhY2hlID0ge307XHJcbiAgICAgICAgdGhpcy5zY2hlbWFzID0gYXdhaXQgdGhpcy5vcGVuQXBpLmdldFNjaGVtYXMoKTtcclxuICAgICAgICBjb25zdCBjdXN0b21pemVNb2RlbHM6IEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwID0gKFxyXG4gICAgICAgICAgICBwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSxcclxuICAgICAgICAgICAgbW9kZWxUeXBlOiBNb2RlbFR5cGUsIGNvbmZpZzogRHluYW1pY0Zvcm1Db250cm9sTW9kZWxDb25maWcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgbW9kZWxUeXBlKGNvbmZpZyk7XHJcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbHMuaXNGdW5jdGlvbihjdXN0b21pemVNb2RlbCkpIHJldHVybiBbbW9kZWxdO1xyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBjdXN0b21pemVNb2RlbChwcm9wZXJ0eSwgc2NoZW1hLCBtb2RlbCwgY29uZmlnLCB0aGlzLmluamVjdG9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVzKSA/IHJlcyA6IFtyZXNdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybU1vZGVsRm9yU2NoZW1hRGVmKHRoaXMuc2NoZW1hc1tuYW1lXSwgY3VzdG9taXplTW9kZWxzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybU1vZGVsRm9yU2NoZW1hRGVmKHNjaGVtYTogSU9wZW5BcGlTY2hlbWEsIGN1c3RvbWl6ZU1vZGVsczogRm9ybU1vZGVsQ3VzdG9taXplcldyYXApOiBEeW5hbWljRm9ybU1vZGVsIHtcclxuICAgICAgICBpZiAoIXNjaGVtYSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEucHJvcGVydGllcyB8fCB7fSk7XHJcbiAgICAgICAgY29uc3QgY29udHJvbHM6IER5bmFtaWNGb3JtTW9kZWwgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHAgb2Yga2V5cykge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHNjaGVtYS5wcm9wZXJ0aWVzW3BdO1xyXG4gICAgICAgICAgICBjb250cm9scy5wdXNoKC4uLnRoaXMuZ2V0Rm9ybUNvbnRyb2xNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgY3VzdG9taXplTW9kZWxzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb250cm9scy5maWx0ZXIodCA9PiBudWxsICE9PSB0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybUNvbnRyb2xNb2RlbHMocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEsIGN1c3RvbWl6ZU1vZGVsczogRm9ybU1vZGVsQ3VzdG9taXplcldyYXApOiBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbFtdIHtcclxuICAgICAgICBjb25zdCAkZW51bSA9IHByb3BlcnR5Lml0ZW1zPy5lbnVtIHx8IHByb3BlcnR5LmVudW07XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJGVudW0pIHx8IGlzU3RyaW5nV2l0aFZhbChwcm9wZXJ0eS5vcHRpb25zUGF0aCkgfHwgaXNTdHJpbmdXaXRoVmFsKHByb3BlcnR5LmVuZHBvaW50KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNTZWxlY3RNb2RlbCwgdGhpcy5nZXRGb3JtU2VsZWN0Q29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljSW5wdXRNb2RlbCwgdGhpcy5nZXRGb3JtSW5wdXRDb25maWcocHJvcGVydHksIHNjaGVtYSkpO1xyXG4gICAgICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY1RleHRBcmVhTW9kZWwsIHRoaXMuZ2V0Rm9ybVRleHRhcmVhQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY0NoZWNrYm94TW9kZWwsIHRoaXMuZ2V0Rm9ybUNoZWNrYm94Q29uZmlnKHByb3BlcnR5LCBzY2hlbWEpKTtcclxuICAgICAgICAgICAgY2FzZSBcImFycmF5XCI6XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuaXRlbXM/LiRyZWYgfHwgcHJvcGVydHkuJHJlZikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXN0b21pemVNb2RlbHMocHJvcGVydHksIHNjaGVtYSwgRHluYW1pY0Zvcm1BcnJheU1vZGVsLCB0aGlzLmdldEZvcm1BcnJheUNvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hLCBjdXN0b21pemVNb2RlbHMpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljSW5wdXRNb2RlbCwgdGhpcy5nZXRGb3JtSW5wdXRDb25maWcocHJvcGVydHksIHNjaGVtYSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFwiZmlsZVwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1c3RvbWl6ZU1vZGVscyhwcm9wZXJ0eSwgc2NoZW1hLCBEeW5hbWljRmlsZVVwbG9hZE1vZGVsLCB0aGlzLmdldEZvcm1VcGxvYWRDb25maWcocHJvcGVydHksIHNjaGVtYSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvcGVydHkuJHJlZikge1xyXG4gICAgICAgICAgICByZXR1cm4gY3VzdG9taXplTW9kZWxzKHByb3BlcnR5LCBzY2hlbWEsIER5bmFtaWNGb3JtR3JvdXBNb2RlbCwgdGhpcy5nZXRGb3JtR3JvdXBDb25maWcocHJvcGVydHksIHNjaGVtYSwgY3VzdG9taXplTW9kZWxzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBmaW5kTW9kZWxCeVBhdGgocGFyZW50OiBEeW5hbWljUGF0aGFibGUgfCBEeW5hbWljRm9ybU1vZGVsLCBwYXRoOiBzdHJpbmdbXSk6IER5bmFtaWNQYXRoYWJsZSB7XHJcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09IDApIHJldHVybiBwYXJlbnQgYXMgRHluYW1pY1BhdGhhYmxlO1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBwYXRoLnNoaWZ0KCkgYXMgYW55O1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmVudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZE1vZGVsQnlQYXRoKHBhcmVudC5maW5kKHQgPT4gdC5pZCA9PSBuZXh0KSwgcGF0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUdyb3VwTW9kZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZE1vZGVsQnlQYXRoKHBhcmVudC5ncm91cC5maW5kKHQgPT4gdC5pZCA9PSBuZXh0KSwgcGF0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBEeW5hbWljRm9ybUFycmF5TW9kZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZE1vZGVsQnlQYXRoKHBhcmVudC5ncm91cHMuZmluZCh0ID0+IHQuaW5kZXggPT0gbmV4dCksIHBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY0Zvcm1WYWx1ZUNvbnRyb2xNb2RlbENvbmZpZzxhbnk+IHtcclxuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRWYWxpZGF0b3JzKHByb3BlcnR5LCBzY2hlbWEpO1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBPYmplY3Qua2V5cyh2YWxpZGF0b3JzKS5yZWR1Y2UoKHJlcywga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIHJlc1trZXldID0gYGVycm9yLiR7a2V5fWA7XHJcbiAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiBwcm9wZXJ0eS5pZCxcclxuICAgICAgICAgICAgbGFiZWw6IE9iamVjdFV0aWxzLmlzU3RyaW5nKHByb3BlcnR5LmxhYmVsKSA/IHByb3BlcnR5LmxhYmVsIDogcHJvcGVydHkuaWQsXHJcbiAgICAgICAgICAgIGhpZGRlbjogcHJvcGVydHkuaGlkZGVuLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogcHJvcGVydHkuZGlzYWJsZWQsXHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMsXHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIGFkZGl0aW9uYWw6IE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnR5KVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybUFycmF5Q29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hLCBjdXN0b21pemVNb2RlbHM6IEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwKTogRHluYW1pY0Zvcm1BcnJheU1vZGVsQ29uZmlnIHtcclxuICAgICAgICBjb25zdCByZWYgPSBwcm9wZXJ0eS5pdGVtcz8uJHJlZiB8fCBwcm9wZXJ0eS4kcmVmIHx8IFwiXCI7XHJcbiAgICAgICAgY29uc3Qgc3ViU2NoZW1hID0gdGhpcy5zY2hlbWFzW3JlZi5zcGxpdChcIi9cIikucG9wKCldO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBncm91cEZhY3Rvcnk6ICgpID0+IHRoaXMuZ2V0Rm9ybU1vZGVsRm9yU2NoZW1hRGVmKHN1YlNjaGVtYSwgY3VzdG9taXplTW9kZWxzKSxcclxuICAgICAgICAgICAgICAgIHVzZVRhYnM6IHByb3BlcnR5LnVzZVRhYnMgfHwgZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybUdyb3VwQ29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hLCBjdXN0b21pemVNb2RlbHM6IEZvcm1Nb2RlbEN1c3RvbWl6ZXJXcmFwKTogRHluYW1pY0Zvcm1Hcm91cE1vZGVsQ29uZmlnIHtcclxuICAgICAgICBjb25zdCByZWYgPSBwcm9wZXJ0eS4kcmVmIHx8IFwiXCI7XHJcbiAgICAgICAgY29uc3Qgc3ViU2NoZW1hID0gdGhpcy5zY2hlbWFzW3JlZi5zcGxpdChcIi9cIikucG9wKCldO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksIHtncm91cDogdGhpcy5nZXRGb3JtTW9kZWxGb3JTY2hlbWFEZWYoc3ViU2NoZW1hLCBjdXN0b21pemVNb2RlbHMpfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybUlucHV0Q29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY0lucHV0TW9kZWxDb25maWcge1xyXG4gICAgICAgIGxldCBpbnB1dFR5cGUgPSBTdHJpbmdVdGlscy5oYXMocHJvcGVydHkuaWQsIFwicGFzc3dvcmRcIiwgXCJQYXNzd29yZFwiKSA/IFwicGFzc3dvcmRcIiA6IChwcm9wZXJ0eS5mb3JtYXQgfHwgcHJvcGVydHkuaXRlbXM/LnR5cGUgfHwgcHJvcGVydHkudHlwZSk7XHJcbiAgICAgICAgc3dpdGNoIChpbnB1dFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9IFwiY2hlY2tib3hcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcclxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9IFwidGV4dGFyZWFcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiaW50ZWdlclwiOlxyXG4gICAgICAgICAgICAgICAgaW5wdXRUeXBlID0gXCJudW1iZXJcIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdWIgPSBwcm9wZXJ0eS50eXBlID09IFwiYXJyYXlcIiA/IHByb3BlcnR5Lml0ZW1zIHx8IHByb3BlcnR5IDogcHJvcGVydHk7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSxcclxuICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZTogcHJvcGVydHkuYXV0b0NvbXBsZXRlIHx8IFwib2ZmXCIsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogcHJvcGVydHkudHlwZSA9PSBcImFycmF5XCIsXHJcbiAgICAgICAgICAgICAgICBhY2NlcHQ6IE9iamVjdFV0aWxzLmlzU3RyaW5nKHByb3BlcnR5LmFjY2VwdCkgPyBwcm9wZXJ0eS5hY2NlcHQgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgbWFzazogT2JqZWN0VXRpbHMuaXNTdHJpbmcocHJvcGVydHkubWFzaykgPyBwcm9wZXJ0eS5tYXNrIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHBhdHRlcm46IE9iamVjdFV0aWxzLmlzU3RyaW5nKHByb3BlcnR5LnBhdHRlcm4pID8gcHJvcGVydHkucGF0dGVybiA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGVwOiBpc05hTihzdWIuc3RlcCkgPyAoaXNOYU4ocHJvcGVydHkuc3RlcCkgPyAxIDogcHJvcGVydHkuc3RlcCkgOiBzdWIuc3RlcCxcclxuICAgICAgICAgICAgICAgIG1pbjogaXNOYU4oc3ViLm1pbmltdW0pID8gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgOiBzdWIubWluaW11bSxcclxuICAgICAgICAgICAgICAgIG1heDogaXNOYU4oc3ViLm1heGltdW0pID8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgOiBzdWIubWF4aW11bSxcclxuICAgICAgICAgICAgICAgIG1pbkxlbmd0aDogaXNOYU4oc3ViLm1pbkxlbmd0aCkgPyBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiA6IHN1Yi5taW5MZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg6IGlzTmFOKHN1Yi5tYXhMZW5ndGgpID8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgOiBzdWIubWF4TGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BlcnR5LnBsYWNlaG9sZGVyIHx8IFwiXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybVRleHRhcmVhQ29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY1RleHRBcmVhTW9kZWxDb25maWcge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb2xzOiBwcm9wZXJ0eS5jb2xzIHx8IG51bGwsXHJcbiAgICAgICAgICAgICAgICByb3dzOiBwcm9wZXJ0eS5yb3dzIHx8IDEwLFxyXG4gICAgICAgICAgICAgICAgd3JhcDogcHJvcGVydHkud3JhcCB8fCBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZTogcHJvcGVydHkuYXV0b0NvbXBsZXRlIHx8IFwib2ZmXCIsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogcHJvcGVydHkudHlwZSA9PSBcImFycmF5XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Rm9ybVNlbGVjdENvbmZpZyhwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSwgc2NoZW1hOiBJT3BlbkFwaVNjaGVtYSk6IER5bmFtaWNTZWxlY3RNb2RlbENvbmZpZzxhbnk+IHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtQ29udHJvbENvbmZpZyhwcm9wZXJ0eSwgc2NoZW1hKSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5nZXRGb3JtU2VsZWN0T3B0aW9ucyhwcm9wZXJ0eSwgc2NoZW1hKSxcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBwcm9wZXJ0eS50eXBlID09IFwiYXJyYXlcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtQ2hlY2tib3hDb25maWcocHJvcGVydHk6IElPcGVuQXBpU2NoZW1hUHJvcGVydHksIHNjaGVtYTogSU9wZW5BcGlTY2hlbWEpOiBEeW5hbWljQ2hlY2tib3hNb2RlbENvbmZpZyB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWcocHJvcGVydHksIHNjaGVtYSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU6IHByb3BlcnR5LmluZGV0ZXJtaW5hdGUgPT09IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIHRyYW5zbGF0ZU9wdGlvbnMob3B0aW9uczogRHluYW1pY0Zvcm1PcHRpb25Db25maWc8YW55PltdKTogUHJvbWlzZTxEeW5hbWljRm9ybU9wdGlvbkNvbmZpZzxhbnk+W10+IHtcclxuICAgICAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbi5sYWJlbCA9IGF3YWl0IHRoaXMubGFuZ3VhZ2UuZ2V0VHJhbnNsYXRpb24ob3B0aW9uLmxhYmVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldEZvcm1TZWxlY3RPcHRpb25zKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKSB7XHJcbiAgICAgICAgY29uc3QgJGVudW0gPSBwcm9wZXJ0eS5pdGVtcz8uZW51bSB8fCBwcm9wZXJ0eS5lbnVtO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KCRlbnVtKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvcm1TZWxlY3RTdWJqZWN0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSAkZW51bS5tYXAodmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gcHJvcGVydHkudHJhbnNsYXRhYmxlID8gYCR7cHJvcGVydHkuaWR9LiR7dmFsdWV9YCA6IGAke3ZhbHVlfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZSwgbGFiZWx9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nV2l0aFZhbChwcm9wZXJ0eS5vcHRpb25zUGF0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtU2VsZWN0U3ViamVjdCgoZm9ybU1vZGVsLCBjb250cm9sLCByb290LCBpbmRleGVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IHByb3BlcnR5Lm9wdGlvbnNQYXRoIGFzIHN0cmluZztcclxuICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSBjb250cm9sO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1vZGVsOiBEeW5hbWljUGF0aGFibGUgfCBEeW5hbWljRm9ybU1vZGVsID0gZm9ybU1vZGVsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIiRyb290XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICh0YXJnZXQucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsID0gcm9vdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlIChwYXRoLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsID0gKG1vZGVsIGFzIER5bmFtaWNQYXRoYWJsZSkucGFyZW50IHx8IHJvb3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpbmRleGVzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShrZXksIGluZGV4ZXNba2V5XSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIG1vZGVsID0gdGhpcy5maW5kTW9kZWxCeVBhdGgobW9kZWwsIHBhdGguc3BsaXQoXCIuXCIpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsT3B0aW9ucyA9IChtb2RlbCBpbnN0YW5jZW9mIER5bmFtaWNTZWxlY3RNb2RlbCA/IG1vZGVsLm9wdGlvbnMgOiBbXSkgYXMgRHluYW1pY0Zvcm1PcHRpb248YW55PltdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBPYmplY3RVdGlscy5nZXRWYWx1ZSh0YXJnZXQudmFsdWUsIHBhdGgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9ICghT2JqZWN0VXRpbHMuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHZhbHVlKS5tYXAodmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsT3B0aW9uID0gbW9kZWxPcHRpb25zLmZpbmQodCA9PiB0LnZhbHVlID09IHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlLCBsYWJlbDogbW9kZWxPcHRpb24/LmxhYmVsIHx8IHZhbHVlfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlT3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgRm9ybVNlbGVjdFN1YmplY3QoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFwaS5jYWNoZVtwcm9wZXJ0eS5lbmRwb2ludF0gPSB0aGlzLmFwaS5jYWNoZVtwcm9wZXJ0eS5lbmRwb2ludF0gfHwgdGhpcy5hcGkubGlzdChwcm9wZXJ0eS5lbmRwb2ludCwgdGhpcy5hcGkubWFrZUxpc3RQYXJhbXMoMSwgLTEpKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZW1zLm1hcChpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiBpLmlkIHx8IGkuX2lkLCBsYWJlbDogaVtwcm9wZXJ0eS5sYWJlbEZpZWxkXSB8fCBpLmxhYmVsIHx8IGkuaWQgfHwgaS5faWR9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gKGF3YWl0IHRoaXMuYXBpLmNhY2hlW3Byb3BlcnR5LmVuZHBvaW50XSkubWFwKHQgPT4gT2JqZWN0LmFzc2lnbih7fSwgdCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRGb3JtVXBsb2FkQ29uZmlnKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY0ZpbGVVcGxvYWRNb2RlbENvbmZpZyB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5hcGkudXJsKHByb3BlcnR5LnVybCB8fCBcImFzc2V0c1wiKTtcclxuICAgICAgICBjb25zdCB7YWNjZXB0LCBhdXRvVXBsb2FkLCBtYXhTaXplLCBtaW5TaXplLCByZW1vdmVVcmwsIHNob3dGaWxlTGlzdH0gPSBwcm9wZXJ0eTtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih0aGlzLmdldEZvcm1Db250cm9sQ29uZmlnKHByb3BlcnR5LCBzY2hlbWEpLCB7XHJcbiAgICAgICAgICAgIHVybCxcclxuICAgICAgICAgICAgYWNjZXB0LFxyXG4gICAgICAgICAgICBhdXRvVXBsb2FkLFxyXG4gICAgICAgICAgICBtYXhTaXplLFxyXG4gICAgICAgICAgICBtaW5TaXplLFxyXG4gICAgICAgICAgICByZW1vdmVVcmwsXHJcbiAgICAgICAgICAgIHNob3dGaWxlTGlzdFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRWYWxpZGF0b3JzKHByb3BlcnR5OiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5LCBzY2hlbWE6IElPcGVuQXBpU2NoZW1hKTogRHluYW1pY1ZhbGlkYXRvcnNDb25maWcge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IER5bmFtaWNWYWxpZGF0b3JzQ29uZmlnID0ge307XHJcbiAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzQXJyYXkoc2NoZW1hLnJlcXVpcmVkKSAmJiBzY2hlbWEucmVxdWlyZWQuaW5kZXhPZihwcm9wZXJ0eS5pZCkgPj0gMCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLnJlcXVpcmVkID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eVZhbGlkYXRvcnModmFsaWRhdG9ycywgcHJvcGVydHkpO1xyXG4gICAgICAgIHRoaXMuYWRkSXRlbXNWYWxpZGF0b3JzKHZhbGlkYXRvcnMsIHByb3BlcnR5Lml0ZW1zKTtcclxuICAgICAgICByZXR1cm4gdmFsaWRhdG9ycztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYWRkUHJvcGVydHlWYWxpZGF0b3JzKHZhbGlkYXRvcnM6IER5bmFtaWNWYWxpZGF0b3JzQ29uZmlnLCBwcm9wZXJ0eTogSU9wZW5BcGlTY2hlbWFQcm9wZXJ0eSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghcHJvcGVydHkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWlzTmFOKHByb3BlcnR5Lm1pbkxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5taW5MZW5ndGggPSBwcm9wZXJ0eS5taW5MZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNOYU4ocHJvcGVydHkubWF4TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLm1heExlbmd0aCA9IHByb3BlcnR5Lm1heExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc05hTihwcm9wZXJ0eS5taW5pbXVtKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLm1pbiA9IHByb3BlcnR5Lm1pbmltdW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNOYU4ocHJvcGVydHkubWF4aW11bSkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5tYXggPSBwcm9wZXJ0eS5tYXhpbXVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzd2l0Y2ggKHByb3BlcnR5LmZvcm1hdCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiZW1haWxcIjpcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMuZW1haWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhZGRJdGVtc1ZhbGlkYXRvcnModmFsaWRhdG9yczogRHluYW1pY1ZhbGlkYXRvcnNDb25maWcsIGl0ZW1zOiBJT3BlbkFwaVNjaGVtYVByb3BlcnR5KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFpdGVtcykgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXNOYU4oaXRlbXMubWluTGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLml0ZW1zTWluTGVuZ3RoID0gaXRlbXMubWluTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmFOKGl0ZW1zLm1heExlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9ycy5pdGVtc01heExlbmd0aCA9IGl0ZW1zLm1heExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc05hTihpdGVtcy5taW5pbXVtKSkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JzLml0ZW1zTWluVmFsdWUgPSBpdGVtcy5taW5pbXVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzTmFOKGl0ZW1zLm1heGltdW0pKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMuaXRlbXNNYXhWYWx1ZSA9IGl0ZW1zLm1heGltdW07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,23 @@
1
+ import { FormSubject } from "./form-subject";
2
+ export class FormSelectSubject extends FormSubject {
3
+ handleNotifiedValue(controlModel, control, val) {
4
+ val.then(options => {
5
+ this.next(options);
6
+ if (options.length == 0)
7
+ return;
8
+ const currentVal = control.value;
9
+ if (controlModel.multiple) {
10
+ const correctVal = (currentVal || []).filter(t => options.findIndex(o => o.value == t) >= 0);
11
+ if (correctVal.length !== currentVal?.length) {
12
+ control.setValue(correctVal, { onlySelf: true, emitEvent: false });
13
+ }
14
+ return;
15
+ }
16
+ const option = options.find(t => t.value == currentVal);
17
+ if (!option) {
18
+ control.setValue(options[0]?.value ?? null, { onlySelf: true, emitEvent: false });
19
+ }
20
+ });
21
+ }
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zZWxlY3Qtc3ViamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtZHluYW1pYy1mb3JtL3V0aWxzL2Zvcm0tc2VsZWN0LXN1YmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE1BQU0sT0FBTyxpQkFBNEQsU0FBUSxXQUFjO0lBRWpGLG1CQUFtQixDQUFDLFlBQXFDLEVBQUUsT0FBd0IsRUFBRSxHQUFlO1FBQzFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25CLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDO2dCQUFFLE9BQU87WUFDaEMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNqQyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3ZCLE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM3RixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLE1BQU0sRUFBRTtvQkFDMUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO2lCQUNwRTtnQkFDRCxPQUFPO2FBQ1Y7WUFDRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNULE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO2FBQ25GO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fic3RyYWN0Q29udHJvbH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7RHluYW1pY0Zvcm1PcHRpb25Db25maWcsIER5bmFtaWNTZWxlY3RNb2RlbH0gZnJvbSBcIkBuZy1keW5hbWljLWZvcm1zL2NvcmVcIjtcclxuaW1wb3J0IHtGb3JtU3ViamVjdH0gZnJvbSBcIi4vZm9ybS1zdWJqZWN0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRm9ybVNlbGVjdFN1YmplY3Q8VCBleHRlbmRzIER5bmFtaWNGb3JtT3B0aW9uQ29uZmlnPGFueT5bXT4gZXh0ZW5kcyBGb3JtU3ViamVjdDxUPiB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGhhbmRsZU5vdGlmaWVkVmFsdWUoY29udHJvbE1vZGVsOiBEeW5hbWljU2VsZWN0TW9kZWw8YW55PiwgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCB2YWw6IFByb21pc2U8VD4pIHtcclxuICAgICAgICB2YWwudGhlbihvcHRpb25zID0+IHtcclxuICAgICAgICAgICAgdGhpcy5uZXh0KG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsID0gY29udHJvbC52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2xNb2RlbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29ycmVjdFZhbCA9IChjdXJyZW50VmFsIHx8IFtdKS5maWx0ZXIodCA9PiBvcHRpb25zLmZpbmRJbmRleChvID0+IG8udmFsdWUgPT0gdCkgPj0gMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29ycmVjdFZhbC5sZW5ndGggIT09IGN1cnJlbnRWYWw/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoY29ycmVjdFZhbCwge29ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9ucy5maW5kKHQgPT4gdC52YWx1ZSA9PSBjdXJyZW50VmFsKTtcclxuICAgICAgICAgICAgaWYgKCFvcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUob3B0aW9uc1swXT8udmFsdWUgPz8gbnVsbCwge29ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -10,4 +10,4 @@ export { DynamicBaseFormArrayComponent } from "./ngx-dynamic-form/components/bas
10
10
  export { DynamicBaseFormControlContainerComponent } from "./ngx-dynamic-form/components/base/dynamic-base-form-control-container.component";
11
11
  export { DynamicBaseFormGroupComponent } from "./ngx-dynamic-form/components/base/dynamic-base-form-group.component";
12
12
  export { NgxDynamicFormModule } from "./ngx-dynamic-form/ngx-dynamic-form.module";
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFpQkgsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixpQkFBaUIsRUFDcEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQ0gsWUFBWSxFQUNaLDJCQUEyQixFQUMzQixhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3hCLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUE4QixxQkFBcUIsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ3JILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUVsRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUVwRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUUxRixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUN4RyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxzRUFBc0UsQ0FBQztBQUNuSCxPQUFPLEVBQ0gsd0NBQXdDLEVBQzNDLE1BQU0sa0ZBQWtGLENBQUM7QUFDMUYsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sc0VBQXNFLENBQUM7QUFFbkgsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNENBQTRDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xyXG4gICAgSUR5bmFtaWNGb3JtRXZlbnQsXHJcbiAgICBJRHluYW1pY0Zvcm0sXHJcbiAgICBPbkNyZWF0ZWRGb3JtQ29udHJvbCxcclxuICAgIEZvcm1Db250cm9sU2VyaWFsaXplcixcclxuICAgIEZvcm1Nb2RlbEN1c3RvbWl6ZXIsXHJcbiAgICBEeW5hbWljRm9ybVN0YXRlLFxyXG4gICAgRHluYW1pY0Zvcm1VcGRhdGVPbixcclxuICAgIElGb3JtQ29udHJvbCxcclxuICAgIElGb3JtQ29udHJvbE9wdGlvbixcclxuICAgIElEeW5hbWljRm9ybVRlbXBsYXRlcyxcclxuICAgIElEeW5hbWljRm9ybUNvbmZpZyxcclxuICAgIElEeW5hbWljU2luZ2xlRm9ybUNvbmZpZyxcclxuICAgIElEeW5hbWljTXVsdGlGb3JtQ29uZmlnLFxyXG4gICAgSUR5bmFtaWNGb3Jtc0NvbmZpZ3MsXHJcbiAgICBBc3luY1N1Ym1pdE1ldGhvZCxcclxuICAgIElEeW5hbWljRm9ybUluZm8sXHJcbiAgICBkZWZhdWx0U2VyaWFsaXplcixcclxuICAgIEZvcm1TZXJpYWxpemFibGUsXHJcbiAgICBGb3JtSW5wdXQsXHJcbiAgICBGb3JtU2VsZWN0LFxyXG4gICAgRm9ybVN0YXRpYyxcclxuICAgIEZvcm1Nb2RlbCxcclxuICAgIEZvcm1GaWxlLFxyXG4gICAgZGVmaW5lRm9ybUNvbnRyb2wsXHJcbiAgICBnZXRGb3JtQ29udHJvbCxcclxuICAgIGdldEZvcm1TZXJpYWxpemVyLFxyXG4gICAgY3JlYXRlRm9ybUlucHV0LFxyXG4gICAgY3JlYXRlRm9ybVNlbGVjdCxcclxuICAgIGNyZWF0ZUZvcm1TdGF0aWMsXHJcbiAgICBjcmVhdGVGb3JtTW9kZWwsXHJcbiAgICBjcmVhdGVGb3JtQ29udHJvbFxyXG59IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5leHBvcnQge1xyXG4gICAgdmFsaWRhdGVKU09OLFxyXG4gICAgdmFsaWRhdGVSZXF1aXJlZFRyYW5zbGF0aW9uLFxyXG4gICAgdmFsaWRhdGVQaG9uZSxcclxuICAgIHZhbGlkYXRlSXRlbXNNaW5MZW5ndGgsXHJcbiAgICB2YWxpZGF0ZUl0ZW1zTWF4TGVuZ3RoLFxyXG4gICAgdmFsaWRhdGVJdGVtc01pblZhbHVlLFxyXG4gICAgdmFsaWRhdGVJdGVtc01heFZhbHVlXHJcbn0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS91dGlscy92YWxpZGF0b3JzXCI7XHJcblxyXG5leHBvcnQge0R5bmFtaWNGb3JtQXJyYXlNb2RlbENvbmZpZywgRHluYW1pY0Zvcm1BcnJheU1vZGVsfSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3V0aWxzL2R5bmFtaWMtZm9ybS1hcnJheS5tb2RlbFwiO1xyXG5leHBvcnQge0Zvcm1TZWxlY3RTdWJqZWN0fSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3V0aWxzL2Zvcm0tc2VsZWN0LXN1YmplY3RcIjtcclxuZXhwb3J0IHtGb3JtU3ViamVjdH0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS91dGlscy9mb3JtLXN1YmplY3RcIjtcclxuXHJcbmV4cG9ydCB7RHluYW1pY0Zvcm1TZXJ2aWNlfSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3NlcnZpY2VzL2R5bmFtaWMtZm9ybS5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQge0FzeW5jU3VibWl0RGlyZWN0aXZlfSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2RpcmVjdGl2ZXMvYXN5bmMtc3VibWl0LmRpcmVjdGl2ZVwiO1xyXG5cclxuZXhwb3J0IHtEeW5hbWljQmFzZUZvcm1Db21wb25lbnR9IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vY29tcG9uZW50cy9iYXNlL2R5bmFtaWMtYmFzZS1mb3JtLmNvbXBvbmVudFwiO1xyXG5leHBvcnQge0R5bmFtaWNCYXNlRm9ybUFycmF5Q29tcG9uZW50fSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvYmFzZS9keW5hbWljLWJhc2UtZm9ybS1hcnJheS5jb21wb25lbnRcIjtcclxuZXhwb3J0IHtcclxuICAgIER5bmFtaWNCYXNlRm9ybUNvbnRyb2xDb250YWluZXJDb21wb25lbnRcclxufSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvYmFzZS9keW5hbWljLWJhc2UtZm9ybS1jb250cm9sLWNvbnRhaW5lci5jb21wb25lbnRcIjtcclxuZXhwb3J0IHtEeW5hbWljQmFzZUZvcm1Hcm91cENvbXBvbmVudH0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS9jb21wb25lbnRzL2Jhc2UvZHluYW1pYy1iYXNlLWZvcm0tZ3JvdXAuY29tcG9uZW50XCI7XHJcblxyXG5leHBvcnQge05neER5bmFtaWNGb3JtTW9kdWxlfSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL25neC1keW5hbWljLWZvcm0ubW9kdWxlXCI7XHJcbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFpQkgsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixpQkFBaUIsRUFFcEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQ0gsWUFBWSxFQUNaLDJCQUEyQixFQUMzQixhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3hCLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUE4QixxQkFBcUIsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ3JILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUVsRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUVwRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUUxRixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUN4RyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxzRUFBc0UsQ0FBQztBQUNuSCxPQUFPLEVBQ0gsd0NBQXdDLEVBQzNDLE1BQU0sa0ZBQWtGLENBQUM7QUFDMUYsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sc0VBQXNFLENBQUM7QUFFbkgsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNENBQTRDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xyXG4gICAgSUR5bmFtaWNGb3JtRXZlbnQsXHJcbiAgICBJRHluYW1pY0Zvcm0sXHJcbiAgICBPbkNyZWF0ZWRGb3JtQ29udHJvbCxcclxuICAgIEZvcm1Db250cm9sU2VyaWFsaXplcixcclxuICAgIEZvcm1Nb2RlbEN1c3RvbWl6ZXIsXHJcbiAgICBEeW5hbWljRm9ybVN0YXRlLFxyXG4gICAgRHluYW1pY0Zvcm1VcGRhdGVPbixcclxuICAgIElGb3JtQ29udHJvbCxcclxuICAgIElGb3JtQ29udHJvbE9wdGlvbixcclxuICAgIElEeW5hbWljRm9ybVRlbXBsYXRlcyxcclxuICAgIElEeW5hbWljRm9ybUNvbmZpZyxcclxuICAgIElEeW5hbWljU2luZ2xlRm9ybUNvbmZpZyxcclxuICAgIElEeW5hbWljTXVsdGlGb3JtQ29uZmlnLFxyXG4gICAgSUR5bmFtaWNGb3Jtc0NvbmZpZ3MsXHJcbiAgICBBc3luY1N1Ym1pdE1ldGhvZCxcclxuICAgIElEeW5hbWljRm9ybUluZm8sXHJcbiAgICBkZWZhdWx0U2VyaWFsaXplcixcclxuICAgIEZvcm1TZXJpYWxpemFibGUsXHJcbiAgICBGb3JtSW5wdXQsXHJcbiAgICBGb3JtU2VsZWN0LFxyXG4gICAgRm9ybVN0YXRpYyxcclxuICAgIEZvcm1Nb2RlbCxcclxuICAgIEZvcm1GaWxlLFxyXG4gICAgZGVmaW5lRm9ybUNvbnRyb2wsXHJcbiAgICBnZXRGb3JtQ29udHJvbCxcclxuICAgIGdldEZvcm1TZXJpYWxpemVyLFxyXG4gICAgY3JlYXRlRm9ybUlucHV0LFxyXG4gICAgY3JlYXRlRm9ybVNlbGVjdCxcclxuICAgIGNyZWF0ZUZvcm1TdGF0aWMsXHJcbiAgICBjcmVhdGVGb3JtTW9kZWwsXHJcbiAgICBjcmVhdGVGb3JtQ29udHJvbCxcclxuICAgIElEeW5hbWljRm9ybU1vZHVsZUNvbmZpZ1xyXG59IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5leHBvcnQge1xyXG4gICAgdmFsaWRhdGVKU09OLFxyXG4gICAgdmFsaWRhdGVSZXF1aXJlZFRyYW5zbGF0aW9uLFxyXG4gICAgdmFsaWRhdGVQaG9uZSxcclxuICAgIHZhbGlkYXRlSXRlbXNNaW5MZW5ndGgsXHJcbiAgICB2YWxpZGF0ZUl0ZW1zTWF4TGVuZ3RoLFxyXG4gICAgdmFsaWRhdGVJdGVtc01pblZhbHVlLFxyXG4gICAgdmFsaWRhdGVJdGVtc01heFZhbHVlXHJcbn0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS91dGlscy92YWxpZGF0b3JzXCI7XHJcblxyXG5leHBvcnQge0R5bmFtaWNGb3JtQXJyYXlNb2RlbENvbmZpZywgRHluYW1pY0Zvcm1BcnJheU1vZGVsfSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3V0aWxzL2R5bmFtaWMtZm9ybS1hcnJheS5tb2RlbFwiO1xyXG5leHBvcnQge0Zvcm1TZWxlY3RTdWJqZWN0fSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3V0aWxzL2Zvcm0tc2VsZWN0LXN1YmplY3RcIjtcclxuZXhwb3J0IHtGb3JtU3ViamVjdH0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS91dGlscy9mb3JtLXN1YmplY3RcIjtcclxuXHJcbmV4cG9ydCB7RHluYW1pY0Zvcm1TZXJ2aWNlfSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL3NlcnZpY2VzL2R5bmFtaWMtZm9ybS5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQge0FzeW5jU3VibWl0RGlyZWN0aXZlfSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2RpcmVjdGl2ZXMvYXN5bmMtc3VibWl0LmRpcmVjdGl2ZVwiO1xyXG5cclxuZXhwb3J0IHtEeW5hbWljQmFzZUZvcm1Db21wb25lbnR9IGZyb20gXCIuL25neC1keW5hbWljLWZvcm0vY29tcG9uZW50cy9iYXNlL2R5bmFtaWMtYmFzZS1mb3JtLmNvbXBvbmVudFwiO1xyXG5leHBvcnQge0R5bmFtaWNCYXNlRm9ybUFycmF5Q29tcG9uZW50fSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvYmFzZS9keW5hbWljLWJhc2UtZm9ybS1hcnJheS5jb21wb25lbnRcIjtcclxuZXhwb3J0IHtcclxuICAgIER5bmFtaWNCYXNlRm9ybUNvbnRyb2xDb250YWluZXJDb21wb25lbnRcclxufSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvYmFzZS9keW5hbWljLWJhc2UtZm9ybS1jb250cm9sLWNvbnRhaW5lci5jb21wb25lbnRcIjtcclxuZXhwb3J0IHtEeW5hbWljQmFzZUZvcm1Hcm91cENvbXBvbmVudH0gZnJvbSBcIi4vbmd4LWR5bmFtaWMtZm9ybS9jb21wb25lbnRzL2Jhc2UvZHluYW1pYy1iYXNlLWZvcm0tZ3JvdXAuY29tcG9uZW50XCI7XHJcblxyXG5leHBvcnQge05neER5bmFtaWNGb3JtTW9kdWxlfSBmcm9tIFwiLi9uZ3gtZHluYW1pYy1mb3JtL25neC1keW5hbWljLWZvcm0ubW9kdWxlXCI7XHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlbXktbmd4LWR5bmFtaWMtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGVteS1uZ3gtZHluYW1pYy1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=