@ngx-formly/core 7.1.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -9
- package/fesm2022/ngx-formly-core-json-schema.mjs +159 -39
- package/fesm2022/ngx-formly-core-json-schema.mjs.map +1 -1
- package/fesm2022/ngx-formly-core-preset.mjs +4 -4
- package/fesm2022/ngx-formly-core-preset.mjs.map +1 -1
- package/fesm2022/ngx-formly-core-select.mjs +28 -21
- package/fesm2022/ngx-formly-core-select.mjs.map +1 -1
- package/fesm2022/ngx-formly-core-testing.mjs +3 -3
- package/fesm2022/ngx-formly-core-testing.mjs.map +1 -1
- package/fesm2022/ngx-formly-core.mjs +181 -89
- package/fesm2022/ngx-formly-core.mjs.map +1 -1
- package/index.d.ts +738 -3
- package/json-schema/index.d.ts +39 -5
- package/package.json +2 -12
- package/preset/index.d.ts +13 -5
- package/select/index.d.ts +44 -5
- package/testing/index.d.ts +37 -5
- package/esm2022/json-schema/formly-json-schema.service.mjs +0 -728
- package/esm2022/json-schema/ngx-formly-core-json-schema.mjs +0 -5
- package/esm2022/json-schema/public_api.mjs +0 -2
- package/esm2022/lib/components/formly.field.mjs +0 -292
- package/esm2022/lib/components/formly.form.mjs +0 -171
- package/esm2022/lib/components/formly.template.mjs +0 -36
- package/esm2022/lib/core.config.mjs +0 -66
- package/esm2022/lib/core.mjs +0 -20
- package/esm2022/lib/core.module.mjs +0 -74
- package/esm2022/lib/extensions/core/core.mjs +0 -144
- package/esm2022/lib/extensions/field-expression/field-expression.mjs +0 -8
- package/esm2022/lib/extensions/field-expression/utils.mjs +0 -459
- package/esm2022/lib/extensions/field-expression-legacy/field-expression.mjs +0 -249
- package/esm2022/lib/extensions/field-expression-legacy/utils.mjs +0 -20
- package/esm2022/lib/extensions/field-form/field-form.mjs +0 -141
- package/esm2022/lib/extensions/field-form/utils.mjs +0 -100
- package/esm2022/lib/extensions/field-validation/field-validation.mjs +0 -135
- package/esm2022/lib/models/config.mjs +0 -2
- package/esm2022/lib/models/fieldconfig.cache.mjs +0 -2
- package/esm2022/lib/models/fieldconfig.mjs +0 -2
- package/esm2022/lib/models/index.mjs +0 -4
- package/esm2022/lib/services/formly.builder.mjs +0 -98
- package/esm2022/lib/services/formly.config.mjs +0 -236
- package/esm2022/lib/templates/field-array.type.mjs +0 -84
- package/esm2022/lib/templates/field-template.type.mjs +0 -34
- package/esm2022/lib/templates/field.type.mjs +0 -57
- package/esm2022/lib/templates/field.wrapper.mjs +0 -21
- package/esm2022/lib/templates/formly.attributes.mjs +0 -201
- package/esm2022/lib/templates/formly.group.mjs +0 -31
- package/esm2022/lib/templates/formly.validation-message.mjs +0 -84
- package/esm2022/lib/utils.mjs +0 -313
- package/esm2022/ngx-formly-core.mjs +0 -5
- package/esm2022/preset/ngx-formly-core-preset.mjs +0 -5
- package/esm2022/preset/preset-substitution.extension.mjs +0 -30
- package/esm2022/preset/preset.config.mjs +0 -11
- package/esm2022/preset/preset.module.mjs +0 -18
- package/esm2022/preset/public_api.mjs +0 -3
- package/esm2022/public_api.mjs +0 -5
- package/esm2022/select/ngx-formly-core-select.mjs +0 -5
- package/esm2022/select/public_api.mjs +0 -3
- package/esm2022/select/select-options.pipe.mjs +0 -108
- package/esm2022/select/select.module.mjs +0 -16
- package/esm2022/testing/component-factory.mjs +0 -86
- package/esm2022/testing/ngx-formly-core-testing.mjs +0 -5
- package/esm2022/testing/public_api.mjs +0 -2
- package/json-schema/formly-json-schema.service.d.ts +0 -31
- package/json-schema/public_api.d.ts +0 -1
- package/lib/components/formly.field.d.ts +0 -44
- package/lib/components/formly.form.d.ts +0 -50
- package/lib/components/formly.template.d.ts +0 -19
- package/lib/core.config.d.ts +0 -11
- package/lib/core.d.ts +0 -20
- package/lib/core.module.d.ts +0 -18
- package/lib/extensions/core/core.d.ts +0 -14
- package/lib/extensions/field-expression/field-expression.d.ts +0 -4
- package/lib/extensions/field-expression/utils.d.ts +0 -4
- package/lib/extensions/field-expression-legacy/field-expression.d.ts +0 -16
- package/lib/extensions/field-expression-legacy/utils.d.ts +0 -5
- package/lib/extensions/field-form/field-form.d.ts +0 -11
- package/lib/extensions/field-form/utils.d.ts +0 -7
- package/lib/extensions/field-validation/field-validation.d.ts +0 -11
- package/lib/models/config.d.ts +0 -90
- package/lib/models/fieldconfig.cache.d.ts +0 -50
- package/lib/models/fieldconfig.d.ts +0 -243
- package/lib/models/index.d.ts +0 -3
- package/lib/services/formly.builder.d.ts +0 -18
- package/lib/services/formly.config.d.ts +0 -56
- package/lib/templates/field-array.type.d.ts +0 -22
- package/lib/templates/field-template.type.d.ts +0 -12
- package/lib/templates/field.type.d.ts +0 -30
- package/lib/templates/field.wrapper.d.ts +0 -12
- package/lib/templates/formly.attributes.d.ts +0 -52
- package/lib/templates/formly.group.d.ts +0 -7
- package/lib/templates/formly.validation-message.d.ts +0 -23
- package/lib/utils.d.ts +0 -47
- package/preset/preset-substitution.extension.d.ts +0 -13
- package/preset/preset.config.d.ts +0 -2
- package/preset/preset.module.d.ts +0 -7
- package/preset/public_api.d.ts +0 -2
- package/public_api.d.ts +0 -1
- package/select/public_api.d.ts +0 -2
- package/select/select-options.pipe.d.ts +0 -33
- package/select/select.module.d.ts +0 -7
- package/testing/component-factory.d.ts +0 -35
- package/testing/public_api.d.ts +0 -1
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { Validators } from '@angular/forms';
|
|
2
|
-
import { FORMLY_VALIDATORS, defineHiddenProp, isPromise, observe, clone, isObject, hasKey } from '../../utils';
|
|
3
|
-
import { updateValidity } from '../field-form/utils';
|
|
4
|
-
import { isObservable } from 'rxjs';
|
|
5
|
-
import { map } from 'rxjs/operators';
|
|
6
|
-
export class FieldValidationExtension {
|
|
7
|
-
constructor(config) {
|
|
8
|
-
this.config = config;
|
|
9
|
-
}
|
|
10
|
-
onPopulate(field) {
|
|
11
|
-
this.initFieldValidation(field, 'validators');
|
|
12
|
-
this.initFieldValidation(field, 'asyncValidators');
|
|
13
|
-
}
|
|
14
|
-
initFieldValidation(field, type) {
|
|
15
|
-
const validators = [];
|
|
16
|
-
if (type === 'validators' && !(field.hasOwnProperty('fieldGroup') && !hasKey(field))) {
|
|
17
|
-
validators.push(this.getPredefinedFieldValidation(field));
|
|
18
|
-
}
|
|
19
|
-
if (field[type]) {
|
|
20
|
-
for (const validatorName of Object.keys(field[type])) {
|
|
21
|
-
validatorName === 'validation'
|
|
22
|
-
? validators.push(...field[type].validation.map((v) => this.wrapNgValidatorFn(field, v)))
|
|
23
|
-
: validators.push(this.wrapNgValidatorFn(field, field[type][validatorName], validatorName));
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
defineHiddenProp(field, '_' + type, validators);
|
|
27
|
-
}
|
|
28
|
-
getPredefinedFieldValidation(field) {
|
|
29
|
-
let VALIDATORS = [];
|
|
30
|
-
FORMLY_VALIDATORS.forEach((opt) => observe(field, ['props', opt], ({ currentValue, firstChange }) => {
|
|
31
|
-
VALIDATORS = VALIDATORS.filter((o) => o !== opt);
|
|
32
|
-
if (opt === 'required' && currentValue != null && typeof currentValue !== 'boolean') {
|
|
33
|
-
console.warn(`Formly: Invalid prop 'required' of type '${typeof currentValue}', expected 'boolean' (Field:${field.key}).`);
|
|
34
|
-
}
|
|
35
|
-
if (currentValue != null && currentValue !== false) {
|
|
36
|
-
VALIDATORS.push(opt);
|
|
37
|
-
}
|
|
38
|
-
if (!firstChange && field.formControl) {
|
|
39
|
-
updateValidity(field.formControl);
|
|
40
|
-
}
|
|
41
|
-
}));
|
|
42
|
-
return (control) => {
|
|
43
|
-
if (VALIDATORS.length === 0) {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
return Validators.compose(VALIDATORS.map((opt) => () => {
|
|
47
|
-
const value = field.props[opt];
|
|
48
|
-
switch (opt) {
|
|
49
|
-
case 'required':
|
|
50
|
-
return Validators.required(control);
|
|
51
|
-
case 'pattern':
|
|
52
|
-
return Validators.pattern(value)(control);
|
|
53
|
-
case 'minLength':
|
|
54
|
-
const minLengthResult = Validators.minLength(value)(control);
|
|
55
|
-
const minLengthKey = this.config.getValidatorMessage('minlength') || field.validation?.messages?.minlength
|
|
56
|
-
? 'minlength'
|
|
57
|
-
: 'minLength';
|
|
58
|
-
return minLengthResult ? { [minLengthKey]: minLengthResult.minlength } : null;
|
|
59
|
-
case 'maxLength':
|
|
60
|
-
const maxLengthResult = Validators.maxLength(value)(control);
|
|
61
|
-
const maxLengthKey = this.config.getValidatorMessage('maxlength') || field.validation?.messages?.maxlength
|
|
62
|
-
? 'maxlength'
|
|
63
|
-
: 'maxLength';
|
|
64
|
-
return maxLengthResult ? { [maxLengthKey]: maxLengthResult.maxlength } : null;
|
|
65
|
-
case 'min':
|
|
66
|
-
return Validators.min(value)(control);
|
|
67
|
-
case 'max':
|
|
68
|
-
return Validators.max(value)(control);
|
|
69
|
-
default:
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
}))(control);
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
wrapNgValidatorFn(field, validator, validatorName) {
|
|
76
|
-
let validatorOption;
|
|
77
|
-
if (typeof validator === 'string') {
|
|
78
|
-
validatorOption = clone(this.config.getValidator(validator));
|
|
79
|
-
}
|
|
80
|
-
if (typeof validator === 'object' && validator.name) {
|
|
81
|
-
validatorOption = clone(this.config.getValidator(validator.name));
|
|
82
|
-
if (validator.options) {
|
|
83
|
-
validatorOption.options = validator.options;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
if (typeof validator === 'object' && validator.expression) {
|
|
87
|
-
const { expression, ...options } = validator;
|
|
88
|
-
validatorOption = {
|
|
89
|
-
name: validatorName,
|
|
90
|
-
validation: expression,
|
|
91
|
-
options: Object.keys(options).length > 0 ? options : null,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
if (typeof validator === 'function') {
|
|
95
|
-
validatorOption = {
|
|
96
|
-
name: validatorName,
|
|
97
|
-
validation: validator,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
return (control) => {
|
|
101
|
-
const errors = validatorOption.validation(control, field, validatorOption.options);
|
|
102
|
-
if (isPromise(errors)) {
|
|
103
|
-
return errors.then((v) => this.handleResult(field, validatorName ? !!v : v, validatorOption));
|
|
104
|
-
}
|
|
105
|
-
if (isObservable(errors)) {
|
|
106
|
-
return errors.pipe(map((v) => this.handleResult(field, validatorName ? !!v : v, validatorOption)));
|
|
107
|
-
}
|
|
108
|
-
return this.handleResult(field, validatorName ? !!errors : errors, validatorOption);
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
handleResult(field, errors, { name, options }) {
|
|
112
|
-
if (typeof errors === 'boolean') {
|
|
113
|
-
errors = errors ? null : { [name]: options ? options : true };
|
|
114
|
-
}
|
|
115
|
-
const ctrl = field.formControl;
|
|
116
|
-
ctrl?._childrenErrors?.[name]?.();
|
|
117
|
-
if (isObject(errors)) {
|
|
118
|
-
Object.keys(errors).forEach((name) => {
|
|
119
|
-
const errorPath = errors[name].errorPath ? errors[name].errorPath : options?.errorPath;
|
|
120
|
-
const childCtrl = errorPath ? field.formControl.get(errorPath) : null;
|
|
121
|
-
if (childCtrl) {
|
|
122
|
-
const { errorPath: _errorPath, ...opts } = errors[name];
|
|
123
|
-
childCtrl.setErrors({ ...(childCtrl.errors || {}), [name]: opts });
|
|
124
|
-
!ctrl._childrenErrors && defineHiddenProp(ctrl, '_childrenErrors', {});
|
|
125
|
-
ctrl._childrenErrors[name] = () => {
|
|
126
|
-
const { [name]: _toDelete, ...childErrors } = childCtrl.errors || {};
|
|
127
|
-
childCtrl.setErrors(Object.keys(childErrors).length === 0 ? null : childErrors);
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
return errors;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtdmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9saWIvZXh0ZW5zaW9ucy9maWVsZC12YWxpZGF0aW9uL2ZpZWxkLXZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFtQixVQUFVLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUFvQixNQUFvQjtRQUFwQixXQUFNLEdBQU4sTUFBTSxDQUFjO0lBQUcsQ0FBQztJQUU1QyxVQUFVLENBQUMsS0FBNkI7UUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQTZCLEVBQUUsSUFBc0M7UUFDL0YsTUFBTSxVQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JGLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEIsS0FBSyxNQUFNLGFBQWEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELGFBQWEsS0FBSyxZQUFZO29CQUM1QixDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlGLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDaEcsQ0FBQztRQUNILENBQUM7UUFFRCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sNEJBQTRCLENBQUMsS0FBNkI7UUFDaEUsSUFBSSxVQUFVLEdBQWEsRUFBRSxDQUFDO1FBQzlCLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ2hDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1lBQy9ELFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxHQUFHLEtBQUssVUFBVSxJQUFJLFlBQVksSUFBSSxJQUFJLElBQUksT0FBTyxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3BGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNENBQTRDLE9BQU8sWUFBWSxnQ0FDN0QsS0FBSyxDQUFDLEdBQ1IsSUFBSSxDQUNMLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxZQUFZLElBQUksSUFBSSxJQUFJLFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDbkQsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RDLGNBQWMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixPQUFPLENBQUMsT0FBd0IsRUFBRSxFQUFFO1lBQ2xDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUN2QixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Z0JBQzNCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLFFBQVEsR0FBRyxFQUFFLENBQUM7b0JBQ1osS0FBSyxVQUFVO3dCQUNiLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdEMsS0FBSyxTQUFTO3dCQUNaLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDNUMsS0FBSyxXQUFXO3dCQUNkLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzdELE1BQU0sWUFBWSxHQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVM7NEJBQ25GLENBQUMsQ0FBQyxXQUFXOzRCQUNiLENBQUMsQ0FBQyxXQUFXLENBQUM7d0JBRWxCLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ2hGLEtBQUssV0FBVzt3QkFDZCxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUM3RCxNQUFNLFlBQVksR0FDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTOzRCQUNuRixDQUFDLENBQUMsV0FBVzs0QkFDYixDQUFDLENBQUMsV0FBVyxDQUFDO3dCQUVsQixPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNoRixLQUFLLEtBQUs7d0JBQ1IsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN4QyxLQUFLLEtBQUs7d0JBQ1IsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN4Qzt3QkFDRSxPQUFPLElBQUksQ0FBQztnQkFDaEIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUNGLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBNkIsRUFBRSxTQUFjLEVBQUUsYUFBc0I7UUFDN0YsSUFBSSxlQUFnQyxDQUFDO1FBQ3JDLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEQsZUFBZSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdEIsZUFBZSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzFELE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFDN0MsZUFBZSxHQUFHO2dCQUNoQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSTthQUMxRCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksT0FBTyxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEMsZUFBZSxHQUFHO2dCQUNoQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsVUFBVSxFQUFFLFNBQVM7YUFDdEIsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLENBQUMsT0FBd0IsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sTUFBTSxHQUFRLGVBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEYsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ2hHLENBQUM7WUFFRCxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN6QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckcsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDdEYsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUE2QixFQUFFLE1BQVcsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQW1CO1FBQ2pHLElBQUksT0FBTyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hFLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQy9CLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFFbEMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNuQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDO2dCQUV2RixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RFLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2QsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3hELFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBRW5FLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3ZFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFO3dCQUNoQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQzt3QkFDckUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ2xGLENBQUMsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybWx5Q29uZmlnIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybWx5LmNvbmZpZyc7XG5pbXBvcnQgeyBGb3JtbHlFeHRlbnNpb24sIFZhbGlkYXRvck9wdGlvbiwgRm9ybWx5RmllbGRDb25maWdDYWNoZSB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRk9STUxZX1ZBTElEQVRPUlMsIGRlZmluZUhpZGRlblByb3AsIGlzUHJvbWlzZSwgb2JzZXJ2ZSwgY2xvbmUsIGlzT2JqZWN0LCBoYXNLZXkgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyB1cGRhdGVWYWxpZGl0eSB9IGZyb20gJy4uL2ZpZWxkLWZvcm0vdXRpbHMnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBGaWVsZFZhbGlkYXRpb25FeHRlbnNpb24gaW1wbGVtZW50cyBGb3JtbHlFeHRlbnNpb24ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogRm9ybWx5Q29uZmlnKSB7fVxuXG4gIG9uUG9wdWxhdGUoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICB0aGlzLmluaXRGaWVsZFZhbGlkYXRpb24oZmllbGQsICd2YWxpZGF0b3JzJyk7XG4gICAgdGhpcy5pbml0RmllbGRWYWxpZGF0aW9uKGZpZWxkLCAnYXN5bmNWYWxpZGF0b3JzJyk7XG4gIH1cblxuICBwcml2YXRlIGluaXRGaWVsZFZhbGlkYXRpb24oZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsIHR5cGU6ICd2YWxpZGF0b3JzJyB8ICdhc3luY1ZhbGlkYXRvcnMnKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xuICAgIGlmICh0eXBlID09PSAndmFsaWRhdG9ycycgJiYgIShmaWVsZC5oYXNPd25Qcm9wZXJ0eSgnZmllbGRHcm91cCcpICYmICFoYXNLZXkoZmllbGQpKSkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMuZ2V0UHJlZGVmaW5lZEZpZWxkVmFsaWRhdGlvbihmaWVsZCkpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZFt0eXBlXSkge1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3JOYW1lIG9mIE9iamVjdC5rZXlzKGZpZWxkW3R5cGVdKSkge1xuICAgICAgICB2YWxpZGF0b3JOYW1lID09PSAndmFsaWRhdGlvbidcbiAgICAgICAgICA/IHZhbGlkYXRvcnMucHVzaCguLi5maWVsZFt0eXBlXS52YWxpZGF0aW9uLm1hcCgodjogYW55KSA9PiB0aGlzLndyYXBOZ1ZhbGlkYXRvckZuKGZpZWxkLCB2KSkpXG4gICAgICAgICAgOiB2YWxpZGF0b3JzLnB1c2godGhpcy53cmFwTmdWYWxpZGF0b3JGbihmaWVsZCwgZmllbGRbdHlwZV1bdmFsaWRhdG9yTmFtZV0sIHZhbGlkYXRvck5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWZpbmVIaWRkZW5Qcm9wKGZpZWxkLCAnXycgKyB0eXBlLCB2YWxpZGF0b3JzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJlZGVmaW5lZEZpZWxkVmFsaWRhdGlvbihmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSk6IFZhbGlkYXRvckZuIHtcbiAgICBsZXQgVkFMSURBVE9SUzogc3RyaW5nW10gPSBbXTtcbiAgICBGT1JNTFlfVkFMSURBVE9SUy5mb3JFYWNoKChvcHQpID0+XG4gICAgICBvYnNlcnZlKGZpZWxkLCBbJ3Byb3BzJywgb3B0XSwgKHsgY3VycmVudFZhbHVlLCBmaXJzdENoYW5nZSB9KSA9PiB7XG4gICAgICAgIFZBTElEQVRPUlMgPSBWQUxJREFUT1JTLmZpbHRlcigobykgPT4gbyAhPT0gb3B0KTtcbiAgICAgICAgaWYgKG9wdCA9PT0gJ3JlcXVpcmVkJyAmJiBjdXJyZW50VmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgY3VycmVudFZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgRm9ybWx5OiBJbnZhbGlkIHByb3AgJ3JlcXVpcmVkJyBvZiB0eXBlICcke3R5cGVvZiBjdXJyZW50VmFsdWV9JywgZXhwZWN0ZWQgJ2Jvb2xlYW4nIChGaWVsZDoke1xuICAgICAgICAgICAgICBmaWVsZC5rZXlcbiAgICAgICAgICAgIH0pLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCAmJiBjdXJyZW50VmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgVkFMSURBVE9SUy5wdXNoKG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaXJzdENoYW5nZSAmJiBmaWVsZC5mb3JtQ29udHJvbCkge1xuICAgICAgICAgIHVwZGF0ZVZhbGlkaXR5KGZpZWxkLmZvcm1Db250cm9sKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICBpZiAoVkFMSURBVE9SUy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBWYWxpZGF0b3JzLmNvbXBvc2UoXG4gICAgICAgIFZBTElEQVRPUlMubWFwKChvcHQpID0+ICgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLnByb3BzW29wdF07XG4gICAgICAgICAgc3dpdGNoIChvcHQpIHtcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucmVxdWlyZWQoY29udHJvbCk7XG4gICAgICAgICAgICBjYXNlICdwYXR0ZXJuJzpcbiAgICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybih2YWx1ZSkoY29udHJvbCk7XG4gICAgICAgICAgICBjYXNlICdtaW5MZW5ndGgnOlxuICAgICAgICAgICAgICBjb25zdCBtaW5MZW5ndGhSZXN1bHQgPSBWYWxpZGF0b3JzLm1pbkxlbmd0aCh2YWx1ZSkoY29udHJvbCk7XG4gICAgICAgICAgICAgIGNvbnN0IG1pbkxlbmd0aEtleSA9XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZ2V0VmFsaWRhdG9yTWVzc2FnZSgnbWlubGVuZ3RoJykgfHwgZmllbGQudmFsaWRhdGlvbj8ubWVzc2FnZXM/Lm1pbmxlbmd0aFxuICAgICAgICAgICAgICAgICAgPyAnbWlubGVuZ3RoJ1xuICAgICAgICAgICAgICAgICAgOiAnbWluTGVuZ3RoJztcblxuICAgICAgICAgICAgICByZXR1cm4gbWluTGVuZ3RoUmVzdWx0ID8geyBbbWluTGVuZ3RoS2V5XTogbWluTGVuZ3RoUmVzdWx0Lm1pbmxlbmd0aCB9IDogbnVsbDtcbiAgICAgICAgICAgIGNhc2UgJ21heExlbmd0aCc6XG4gICAgICAgICAgICAgIGNvbnN0IG1heExlbmd0aFJlc3VsdCA9IFZhbGlkYXRvcnMubWF4TGVuZ3RoKHZhbHVlKShjb250cm9sKTtcbiAgICAgICAgICAgICAgY29uc3QgbWF4TGVuZ3RoS2V5ID1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5nZXRWYWxpZGF0b3JNZXNzYWdlKCdtYXhsZW5ndGgnKSB8fCBmaWVsZC52YWxpZGF0aW9uPy5tZXNzYWdlcz8ubWF4bGVuZ3RoXG4gICAgICAgICAgICAgICAgICA/ICdtYXhsZW5ndGgnXG4gICAgICAgICAgICAgICAgICA6ICdtYXhMZW5ndGgnO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtYXhMZW5ndGhSZXN1bHQgPyB7IFttYXhMZW5ndGhLZXldOiBtYXhMZW5ndGhSZXN1bHQubWF4bGVuZ3RoIH0gOiBudWxsO1xuICAgICAgICAgICAgY2FzZSAnbWluJzpcbiAgICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMubWluKHZhbHVlKShjb250cm9sKTtcbiAgICAgICAgICAgIGNhc2UgJ21heCc6XG4gICAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLm1heCh2YWx1ZSkoY29udHJvbCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKSEoY29udHJvbCk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcE5nVmFsaWRhdG9yRm4oZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsIHZhbGlkYXRvcjogYW55LCB2YWxpZGF0b3JOYW1lPzogc3RyaW5nKSB7XG4gICAgbGV0IHZhbGlkYXRvck9wdGlvbjogVmFsaWRhdG9yT3B0aW9uO1xuICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsaWRhdG9yT3B0aW9uID0gY2xvbmUodGhpcy5jb25maWcuZ2V0VmFsaWRhdG9yKHZhbGlkYXRvcikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yID09PSAnb2JqZWN0JyAmJiB2YWxpZGF0b3IubmFtZSkge1xuICAgICAgdmFsaWRhdG9yT3B0aW9uID0gY2xvbmUodGhpcy5jb25maWcuZ2V0VmFsaWRhdG9yKHZhbGlkYXRvci5uYW1lKSk7XG4gICAgICBpZiAodmFsaWRhdG9yLm9wdGlvbnMpIHtcbiAgICAgICAgdmFsaWRhdG9yT3B0aW9uLm9wdGlvbnMgPSB2YWxpZGF0b3Iub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbGlkYXRvciA9PT0gJ29iamVjdCcgJiYgdmFsaWRhdG9yLmV4cHJlc3Npb24pIHtcbiAgICAgIGNvbnN0IHsgZXhwcmVzc2lvbiwgLi4ub3B0aW9ucyB9ID0gdmFsaWRhdG9yO1xuICAgICAgdmFsaWRhdG9yT3B0aW9uID0ge1xuICAgICAgICBuYW1lOiB2YWxpZGF0b3JOYW1lLFxuICAgICAgICB2YWxpZGF0aW9uOiBleHByZXNzaW9uLFxuICAgICAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwID8gb3B0aW9ucyA6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YWxpZGF0b3JPcHRpb24gPSB7XG4gICAgICAgIG5hbWU6IHZhbGlkYXRvck5hbWUsXG4gICAgICAgIHZhbGlkYXRpb246IHZhbGlkYXRvcixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yczogYW55ID0gdmFsaWRhdG9yT3B0aW9uLnZhbGlkYXRpb24oY29udHJvbCwgZmllbGQsIHZhbGlkYXRvck9wdGlvbi5vcHRpb25zKTtcbiAgICAgIGlmIChpc1Byb21pc2UoZXJyb3JzKSkge1xuICAgICAgICByZXR1cm4gZXJyb3JzLnRoZW4oKHYpID0+IHRoaXMuaGFuZGxlUmVzdWx0KGZpZWxkLCB2YWxpZGF0b3JOYW1lID8gISF2IDogdiwgdmFsaWRhdG9yT3B0aW9uKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc09ic2VydmFibGUoZXJyb3JzKSkge1xuICAgICAgICByZXR1cm4gZXJyb3JzLnBpcGUobWFwKCh2KSA9PiB0aGlzLmhhbmRsZVJlc3VsdChmaWVsZCwgdmFsaWRhdG9yTmFtZSA/ICEhdiA6IHYsIHZhbGlkYXRvck9wdGlvbikpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzdWx0KGZpZWxkLCB2YWxpZGF0b3JOYW1lID8gISFlcnJvcnMgOiBlcnJvcnMsIHZhbGlkYXRvck9wdGlvbik7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVzdWx0KGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCBlcnJvcnM6IGFueSwgeyBuYW1lLCBvcHRpb25zIH06IFZhbGlkYXRvck9wdGlvbikge1xuICAgIGlmICh0eXBlb2YgZXJyb3JzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGVycm9ycyA9IGVycm9ycyA/IG51bGwgOiB7IFtuYW1lXTogb3B0aW9ucyA/IG9wdGlvbnMgOiB0cnVlIH07XG4gICAgfVxuXG4gICAgY29uc3QgY3RybCA9IGZpZWxkLmZvcm1Db250cm9sO1xuICAgIGN0cmw/Ll9jaGlsZHJlbkVycm9ycz8uW25hbWVdPy4oKTtcblxuICAgIGlmIChpc09iamVjdChlcnJvcnMpKSB7XG4gICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JQYXRoID0gZXJyb3JzW25hbWVdLmVycm9yUGF0aCA/IGVycm9yc1tuYW1lXS5lcnJvclBhdGggOiBvcHRpb25zPy5lcnJvclBhdGg7XG5cbiAgICAgICAgY29uc3QgY2hpbGRDdHJsID0gZXJyb3JQYXRoID8gZmllbGQuZm9ybUNvbnRyb2wuZ2V0KGVycm9yUGF0aCkgOiBudWxsO1xuICAgICAgICBpZiAoY2hpbGRDdHJsKSB7XG4gICAgICAgICAgY29uc3QgeyBlcnJvclBhdGg6IF9lcnJvclBhdGgsIC4uLm9wdHMgfSA9IGVycm9yc1tuYW1lXTtcbiAgICAgICAgICBjaGlsZEN0cmwuc2V0RXJyb3JzKHsgLi4uKGNoaWxkQ3RybC5lcnJvcnMgfHwge30pLCBbbmFtZV06IG9wdHMgfSk7XG5cbiAgICAgICAgICAhY3RybC5fY2hpbGRyZW5FcnJvcnMgJiYgZGVmaW5lSGlkZGVuUHJvcChjdHJsLCAnX2NoaWxkcmVuRXJyb3JzJywge30pO1xuICAgICAgICAgIGN0cmwuX2NoaWxkcmVuRXJyb3JzW25hbWVdID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBbbmFtZV06IF90b0RlbGV0ZSwgLi4uY2hpbGRFcnJvcnMgfSA9IGNoaWxkQ3RybC5lcnJvcnMgfHwge307XG4gICAgICAgICAgICBjaGlsZEN0cmwuc2V0RXJyb3JzKE9iamVjdC5rZXlzKGNoaWxkRXJyb3JzKS5sZW5ndGggPT09IDAgPyBudWxsIDogY2hpbGRFcnJvcnMpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvcmUvc3JjL2xpYi9tb2RlbHMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JzLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJy4vZmllbGRjb25maWcnO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnLi8uLi90ZW1wbGF0ZXMvZmllbGQudHlwZSc7XG5pbXBvcnQgeyBGaWVsZFdyYXBwZXIgfSBmcm9tICcuLi90ZW1wbGF0ZXMvZmllbGQud3JhcHBlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5RXh0ZW5zaW9uPEYgZXh0ZW5kcyBGb3JtbHlGaWVsZENvbmZpZyA9IEZvcm1seUZpZWxkQ29uZmlnPiB7XG4gIHByaW9yaXR5PzogbnVtYmVyO1xuXG4gIHByZVBvcHVsYXRlPyhmaWVsZDogRik6IHZvaWQ7XG4gIG9uUG9wdWxhdGU/KGZpZWxkOiBGKTogdm9pZDtcbiAgcG9zdFBvcHVsYXRlPyhmaWVsZDogRik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZU9wdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgY29tcG9uZW50PzogVHlwZTxGaWVsZFR5cGU+O1xuICB3cmFwcGVycz86IHN0cmluZ1tdO1xuICBleHRlbmRzPzogc3RyaW5nO1xuICBkZWZhdWx0T3B0aW9ucz86IEZvcm1seUZpZWxkQ29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdyYXBwZXJPcHRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbXBvbmVudDogVHlwZTxGaWVsZFdyYXBwZXI+O1xuICB0eXBlcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgdHlwZSBGaWVsZFZhbGlkYXRvckZuID0gKFxuICBjOiBBYnN0cmFjdENvbnRyb2wsXG4gIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgb3B0aW9ucz86IHsgW2lkOiBzdHJpbmddOiBhbnkgfSxcbikgPT4gVmFsaWRhdGlvbkVycm9ycyB8IG51bGw7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdG9yT3B0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWxpZGF0aW9uOiBGaWVsZFZhbGlkYXRvckZuO1xuICBvcHRpb25zPzogeyBbaWQ6IHN0cmluZ106IGFueSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbk9wdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZXh0ZW5zaW9uOiBGb3JtbHlFeHRlbnNpb247XG4gIHByaW9yaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmcgfCAoKGVycm9yOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmVzZXRPcHRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgfCBGb3JtbHlGaWVsZENvbmZpZ1ByZXNldFByb3ZpZGVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1seUZpZWxkQ29uZmlnUHJlc2V0UHJvdmlkZXIge1xuICBnZXRDb25maWd1cmF0aW9uOiAoKSA9PiBGb3JtbHlGaWVsZENvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWdPcHRpb24ge1xuICB0eXBlcz86IFR5cGVPcHRpb25bXTtcbiAgd3JhcHBlcnM/OiBXcmFwcGVyT3B0aW9uW107XG4gIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JPcHRpb25bXTtcbiAgZXh0ZW5zaW9ucz86IEV4dGVuc2lvbk9wdGlvbltdO1xuICB2YWxpZGF0aW9uTWVzc2FnZXM/OiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvbltdO1xuICBleHRyYXM/OiB7XG4gICAgaW1tdXRhYmxlPzogYm9vbGVhbjtcbiAgICBzaG93RXJyb3I/OiAoZmllbGQ6IEZpZWxkVHlwZSkgPT4gYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIG9wdGlvbiB3aGljaCBmb3JtbHkgcmVseSBvbiB0byBjaGVjayBmaWVsZCBleHByZXNzaW9uIHByb3BlcnRpZXMuXG4gICAgICogLSBgbW9kZWxDaGFuZ2VgOiBwZXJmb3JtIGEgY2hlY2sgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGZvcm0gY29udHJvbCBjaGFuZ2VzLlxuICAgICAqIC0gYGNoYW5nZURldGVjdGlvbkNoZWNrYDogdHJpZ2dlcnMgYW4gaW1tZWRpYXRlIGNoZWNrIHdoZW4gYG5nRG9DaGVja2AgaXMgY2FsbGVkLlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdG8gYG1vZGVsQ2hhbmdlYC5cbiAgICAgKi9cbiAgICBjaGVja0V4cHJlc3Npb25Pbj86ICdtb2RlbENoYW5nZScgfCAnY2hhbmdlRGV0ZWN0aW9uQ2hlY2snO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBsYXppbHkgcmVuZGVyIGZpZWxkIGNvbXBvbmVudHMgb3Igbm90IHdoZW4gbWFya2VkIGFzIGhpZGRlbi5cbiAgICAgKiAtIGB0cnVlYDogbGF6aWx5IHJlbmRlciBmaWVsZCBjb21wb25lbnRzLlxuICAgICAqIC0gYGZhbHNlYDogcmVuZGVyIGZpZWxkIGNvbXBvbmVudHMgYW5kIHVzZSBDU1MgdG8gY29udHJvbCB0aGVpciB2aXNpYmlsaXR5LlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqL1xuICAgIGxhenlSZW5kZXI/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hlbiBgdHJ1ZWAsIHJlc2V0IHRoZSB2YWx1ZSBvZiBhIGhpZGRlbiBmaWVsZC5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICAgKi9cbiAgICByZXNldEZpZWxkT25IaWRlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmVuZGVyIGZpZWxkcyBpbnNpZGUgPGZvcm1seS1maWVsZD4gY29tcG9uZW50IG9yIG5vdC5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICAgKi9cbiAgICByZW5kZXJGb3JtbHlGaWVsZEVsZW1lbnQ/OiBib29sZWFuO1xuICB9O1xuICBwcmVzZXRzPzogUHJlc2V0T3B0aW9uW107XG59XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRjb25maWcuY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL21vZGVscy9maWVsZGNvbmZpZy5jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYsIEluamVjdG9yLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICcuLi90ZW1wbGF0ZXMvZmllbGQudHlwZSc7XG5pbXBvcnQgeyBGb3JtbHlFeHRlbnNpb24gfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5Rm9ybU9wdGlvbnMgfSBmcm9tICcuL2ZpZWxkY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlIGV4dGVuZHMgRm9ybWx5RmllbGRDb25maWcge1xuICBmb3JtPzogVW50eXBlZEZvcm1Hcm91cCB8IFVudHlwZWRGb3JtQXJyYXk7XG4gIG1vZGVsPzogYW55O1xuICBmb3JtQ29udHJvbD86IEFic3RyYWN0Q29udHJvbCAmIHtcbiAgICBfZmllbGRzPzogRm9ybWx5RmllbGRDb25maWdDYWNoZVtdO1xuICAgIF9jaGlsZHJlbkVycm9ycz86IHsgW2lkOiBzdHJpbmddOiAoKSA9PiB2b2lkIH07XG4gIH07XG4gIHBhcmVudD86IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGU7XG4gIG9wdGlvbnM/OiBGb3JtbHlGb3JtT3B0aW9uc0NhY2hlO1xuICBzaGFyZUZvcm1Db250cm9sPzogYm9vbGVhbjtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIF9sb2NhbEZpZWxkcz86IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGVbXTtcbiAgX2VsZW1lbnRSZWZzPzogRWxlbWVudFJlZltdO1xuICBfZXhwcmVzc2lvbnM/OiB7XG4gICAgW3Byb3BlcnR5OiBzdHJpbmddOiB7XG4gICAgICBjYWxsYmFjaz86IChpbmdvcmVDYWNoZTogYm9vbGVhbikgPT4gYm9vbGVhbjtcbiAgICAgIHBhdGhzPzogc3RyaW5nW107XG4gICAgICBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb24gfCBudWxsO1xuICAgICAgdmFsdWUkPzogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIH07XG4gIH07XG4gIF9oaWRlPzogYm9vbGVhbjtcbiAgX3ZhbGlkYXRvcnM/OiBWYWxpZGF0b3JGbltdO1xuICBfYXN5bmNWYWxpZGF0b3JzPzogQXN5bmNWYWxpZGF0b3JGbltdO1xuICBfY29tcG9uZW50UmVmcz86IChDb21wb25lbnRSZWY8RmllbGRUeXBlPiB8IEVtYmVkZGVkVmlld1JlZjxGaWVsZFR5cGU+KVtdO1xuICBfcHJveHlJbnN0YW5jZT86IEZvcm1seUV4dGVuc2lvbjtcbiAgX2tleVBhdGg/OiB7XG4gICAga2V5OiBGb3JtbHlGaWVsZENvbmZpZ1sna2V5J107XG4gICAgcGF0aDogc3RyaW5nW107XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5Rm9ybU9wdGlvbnNDYWNoZSBleHRlbmRzIEZvcm1seUZvcm1PcHRpb25zIHtcbiAgY2hlY2tFeHByZXNzaW9ucz86IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcsIGluZ29yZUNhY2hlPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgX3ZpZXdDb250YWluZXJSZWY/OiBWaWV3Q29udGFpbmVyUmVmO1xuICBfaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgX2hpZGRlbkZpZWxkc0ZvckNoZWNrPzogeyBmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZTsgZGVmYXVsdD86IGJvb2xlYW4gfVtdO1xuICBfaW5pdGlhbE1vZGVsPzogYW55O1xuICBfZGV0ZWN0Q2hhbmdlcz86IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHZvaWQ7XG59XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRjb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL21vZGVscy9maWVsZGNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgVW50eXBlZEZvcm1Hcm91cCxcbiAgVW50eXBlZEZvcm1BcnJheSxcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gIFZhbGlkYXRvckZuLFxuICBBc3luY1ZhbGlkYXRvckZuLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICcuLi90ZW1wbGF0ZXMvZmllbGQudHlwZSc7XG5pbXBvcnQgeyBGaWVsZFdyYXBwZXIgfSBmcm9tICcuLi90ZW1wbGF0ZXMvZmllbGQud3JhcHBlcic7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvbiB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbnR5cGUgRmllbGRFeHByZXNzaW9uPFQgPSBhbnk+ID0gc3RyaW5nIHwgKChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IFQpIHwgT2JzZXJ2YWJsZTxUPjtcbnR5cGUgRmllbGRFeHByZXNzaW9ucyA9IHsgW3Byb3BlcnR5OiBzdHJpbmddOiBGaWVsZEV4cHJlc3Npb24gfSAmIHtcbiAgY2xhc3NOYW1lPzogRmllbGRFeHByZXNzaW9uPHN0cmluZz47XG4gIGhpZGU/OiBGaWVsZEV4cHJlc3Npb248Ym9vbGVhbj47XG4gICdwcm9wcy5kaXNhYmxlZCc/OiBGaWVsZEV4cHJlc3Npb248Ym9vbGVhbj47XG4gICdwcm9wcy5yZXF1aXJlZCc/OiBGaWVsZEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1seUZpZWxkQ29uZmlnPFByb3BzID0gRm9ybWx5RmllbGRQcm9wcyAmIHsgW2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBzdHJpbmddOiBhbnkgfT4ge1xuICAvKipcbiAgICogVGhlIGtleSB0aGF0IHJlbGF0ZXMgdG8gdGhlIG1vZGVsLiBUaGlzIHdpbGwgbGluayB0aGUgZmllbGQgdmFsdWUgdG8gdGhlIG1vZGVsXG4gICAqL1xuICBrZXk/OiBzdHJpbmcgfCBudW1iZXIgfCAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuXG4gIC8qKlxuICAgKiBUaGlzIHNob3VsZCBiZSBhIGZvcm1seS1maWVsZCB0eXBlIGFkZGVkIGVpdGhlciBieSB5b3Ugb3IgYSBwbHVnaW4uIE1vcmUgaW5mb3JtYXRpb24gb3ZlciBhdCBDcmVhdGluZyBGb3JtbHkgRmllbGRzLlxuICAgKi9cbiAgdHlwZT86IHN0cmluZyB8IFR5cGU8RmllbGRUeXBlPjtcblxuICAvKipcbiAgICogVXNlIGBkZWZhdWx0VmFsdWVgIHRvIGluaXRpYWxpemUgaXQgdGhlIG1vZGVsLiBJZiB0aGlzIGlzIHByb3ZpZGVkIGFuZCB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIGF0IGNvbXBpbGUtdGltZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHZhbHVlIG9mIHRoZSBtb2RlbCB3aWxsIGJlIGFzc2lnbmVkIHRvIGBkZWZhdWx0VmFsdWVgLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgYGlkYCBvZiB5b3VyIGZpZWxkLiBOb3RlLCB0aGUgYGlkYCBpcyBnZW5lcmF0ZWQgaWYgbm90IHNldC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB5b3Ugd2lzaCwgeW91IGNhbiBzcGVjaWZ5IGEgc3BlY2lmaWMgYG5hbWVgIGZvciB5b3VyIGZpZWxkLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UncmUgcG9zdGluZyB0aGUgZm9ybSB0byBhIHNlcnZlciB1c2luZyB0ZWNobmlxdWVzIG9mIHllc3Rlci15ZWFyLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyBpcyByZXNlcnZlZCBmb3IgdGhlIHRlbXBsYXRlcy4gQW55IHRlbXBsYXRlLXNwZWNpZmljIG9wdGlvbnMgZ28gaW4gaGVyZS4gTG9vayBhdCB5b3VyIHNwZWNpZmljIHRlbXBsYXRlIGltcGxlbWVudGF0aW9uIHRvIGtub3cgdGhlIG9wdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMuXG4gICAqL1xuICBwcm9wcz86IFByb3BzO1xuXG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYHByb3BzYCBpbnN0ZWFkLiAqL1xuICB0ZW1wbGF0ZU9wdGlvbnM/OiBGb3JtbHlUZW1wbGF0ZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFuIG9iamVjdCB3aXRoIGEgZmV3IHVzZWZ1bCBwcm9wZXJ0aWVzXG4gICAqIC0gYHZhbGlkYXRpb24ubWVzc2FnZXNgOiBBIG1hcCBvZiBtZXNzYWdlIG5hbWVzIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgd2hlbiB0aGUgZmllbGQgaGFzIGVycm9ycy5cbiAgICogLSBgdmFsaWRhdGlvbi5zaG93YDogQSBib29sZWFuIHlvdSBhcyB0aGUgZGV2ZWxvcGVyIGNhbiBzZXQgdG8gZm9yY2UgZGlzcGxheWluZyBlcnJvcnMgd2hhdGV2ZXIgdGhlIHN0YXRlIG9mIGZpZWxkLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSdyZSB0cnlpbmcgdG8gY2FsbCB0aGUgdXNlcidzIGF0dGVudGlvbiB0byBzb21lIGZpZWxkcyBmb3Igc29tZSByZWFzb24uXG4gICAqL1xuICB2YWxpZGF0aW9uPzoge1xuICAgIG1lc3NhZ2VzPzogeyBbbWVzc2FnZVByb3BlcnRpZXM6IHN0cmluZ106IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uWydtZXNzYWdlJ10gfSAmIHtcbiAgICAgIC8qKiBAZGVwcmVjYXRlZCB1c2UgYG1pbkxlbmd0aGAgKi9cbiAgICAgIG1pbmxlbmd0aD86IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uWydtZXNzYWdlJ107XG5cbiAgICAgIC8qKiBAZGVwcmVjYXRlZCB1c2UgYG1heExlbmd0aGAgKi9cbiAgICAgIG1heGxlbmd0aD86IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uWydtZXNzYWdlJ107XG4gICAgfTtcbiAgICBzaG93PzogYm9vbGVhbjtcbiAgICBbYWRkaXRpb25hbFByb3BlcnRpZXM6IHN0cmluZ106IGFueTtcbiAgfTtcblxuICAvKipcbiAgICogVXNlZCB0byBzZXQgdmFsaWRhdGlvbiBydWxlcyBmb3IgYSBwYXJ0aWN1bGFyIGZpZWxkLlxuICAgKiBTaG91bGQgYmUgYW4gb2JqZWN0IG9mIGtleSAtIHZhbHVlIHBhaXJzLiBUaGUgdmFsdWUgY2FuIGVpdGhlciBiZSBhbiBleHByZXNzaW9uIHRvIGV2YWx1YXRlIG9yIGEgZnVuY3Rpb24gdG8gcnVuLlxuICAgKiBFYWNoIHNob3VsZCByZXR1cm4gYSBib29sZWFuIHZhbHVlLCByZXR1cm5pbmcgdHJ1ZSB3aGVuIHRoZSBmaWVsZCBpcyB2YWxpZC4gU2VlIFZhbGlkYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqL1xuICB2YWxpZGF0b3JzPzogRm9ybWx5VmFsaWRhdGlvbjxWYWxpZGF0b3JGbiwgYm9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG9uZSBmb3IgYW55dGhpbmcgdGhhdCBuZWVkcyB0byB2YWxpZGF0ZSBhc3luY2hyb25vdXNseS5cbiAgICogUHJldHR5IG11Y2ggZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgdmFsaWRhdG9ycyBhcGksIGV4Y2VwdCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgcHJvbWlzZS5cbiAgICovXG4gIGFzeW5jVmFsaWRhdG9ycz86IEZvcm1seVZhbGlkYXRpb248QXN5bmNWYWxpZGF0b3JGbiwgUHJvbWlzZTxib29sZWFuPiB8IE9ic2VydmFibGU8Ym9vbGVhbj4+O1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgc2V0IGluc3RlYWQgb2YgYHR5cGVgIHRvIHJlbmRlciBjdXN0b20gaHRtbCBjb250ZW50LlxuICAgKi9cbiAgdGVtcGxhdGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqICBJdCBpcyBleHBlY3RlZCB0byBiZSB0aGUgbmFtZSBvZiB0aGUgd3JhcHBlcnMuXG4gICAqICBUaGUgZm9ybWx5IGZpZWxkIHRlbXBsYXRlIHdpbGwgYmUgd3JhcHBlZCBieSB0aGUgZmlyc3Qgd3JhcHBlciwgdGhlbiB0aGUgc2Vjb25kLCB0aGVuIHRoZSB0aGlyZCwgZXRjLlxuICAgKiAgWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlc2UgYXMgcGFydCBvZiBhIHR5cGUgKHdoaWNoIGlzIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaCkuXG4gICAqL1xuICB3cmFwcGVycz86IChzdHJpbmcgfCBUeXBlPEZpZWxkV3JhcHBlcj4pW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaGlkZSB0aGUgZmllbGQuIERlZmF1bHRzIHRvIGZhbHNlLiBJZiB5b3Ugd2lzaCB0aGlzIHRvIGJlIGNvbmRpdGlvbmFsIHVzZSBgZXhwcmVzc2lvbnM6IHsgaGlkZTogLi4uIH1gXG4gICAqL1xuICBoaWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXNldCB0aGUgdmFsdWUgb24gaGlkZSBvciBub3QuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlc2V0T25IaWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZGl0aW9uYWxseSBoaWRpbmcgRmllbGQgYmFzZWQgb24gdmFsdWVzIGZyb20gb3RoZXIgRmllbGRzXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgZXhwcmVzc2lvbnM6IHsgaGlkZTogLi4uIH1gXG4gICAqL1xuICBoaWRlRXhwcmVzc2lvbj86IGJvb2xlYW4gfCBzdHJpbmcgfCAoKG1vZGVsOiBhbnksIGZvcm1TdGF0ZTogYW55LCBmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKTtcblxuICAvKipcbiAgICogQW4gb2JqZWN0IHdoZXJlIHRoZSBrZXkgaXMgYSBwcm9wZXJ0eSB0byBiZSBzZXQgb24gdGhlIG1haW4gZmllbGQgY29uZmlnIGFuZCB0aGUgdmFsdWUgaXMgYW4gZXhwcmVzc2lvbiB1c2VkIHRvIGFzc2lnbiB0aGF0IHByb3BlcnR5LlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGV4cHJlc3Npb25zYFxuICAgKi9cbiAgZXhwcmVzc2lvblByb3BlcnRpZXM/OiB7XG4gICAgW3Byb3BlcnR5OiBzdHJpbmddOiBzdHJpbmcgfCAoKG1vZGVsOiBhbnksIGZvcm1TdGF0ZTogYW55LCBmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBhbnkpIHwgT2JzZXJ2YWJsZTxhbnk+O1xuICB9O1xuXG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgd2hlcmUgdGhlIGtleSBpcyBhIHByb3BlcnR5IHRvIGJlIHNldCBvbiB0aGUgbWFpbiBmaWVsZCBjb25maWcgYW5kIHRoZSB2YWx1ZSBpcyBhbiBleHByZXNzaW9uIHVzZWQgdG8gYXNzaWduIHRoYXQgcHJvcGVydHkuXG4gICAqL1xuICBleHByZXNzaW9ucz86IEZpZWxkRXhwcmVzc2lvbnM7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3BlY2lmeSB5b3VyIG93biBjbGFzcyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgYGZvcm1seS1maWVsZGAgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHlvdXIgb3duIGNsYXNzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBgZm9ybWx5LWdyb3VwYCBjb21wb25lbnQuXG4gICAqL1xuICBmaWVsZEdyb3VwQ2xhc3NOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGZpZWxkIGdyb3VwIGlzIGEgd2F5IHRvIGdyb3VwIGZpZWxkcyB0b2dldGhlciwgbWFraW5nIGFkdmFuY2VkIGxheW91dCB2ZXJ5IHNpbXBsZS5cbiAgICogSXQgY2FuIGFsc28gYmUgdXNlZCB0byBncm91cCBmaWVsZHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIG1vZGVsICh1c2VmdWwgaWYgaXQncyBkaWZmZXJlbnQgdGhhbiB0aGUgbW9kZWwgZm9yIHRoZSByZXN0IG9mIHRoZSBmaWVsZHMpLlxuICAgKi9cbiAgZmllbGRHcm91cD86IEZvcm1seUZpZWxkQ29uZmlnW107XG5cbiAgZmllbGRBcnJheT86IEZvcm1seUZpZWxkQ29uZmlnIHwgKChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IEZvcm1seUZpZWxkQ29uZmlnKTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmb2N1cyBvciBibHVyIHRoZSBlbGVtZW50IGZpZWxkLiBEZWZhdWx0cyB0byBmYWxzZS4gSWYgeW91IHdpc2ggdGhpcyB0byBiZSBjb25kaXRpb25hbCB1c2UgYGV4cHJlc3Npb25zYFxuICAgKi9cbiAgZm9jdXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgd2l0aCBhIGZldyB1c2VmdWwgcHJvcGVydGllcyB0byBjb250cm9sIHRoZSBtb2RlbCBjaGFuZ2VzXG4gICAqIC0gYGRlYm91bmNlYDogaW50ZWdlciB2YWx1ZSB3aGljaCBjb250YWlucyB0aGUgZGVib3VuY2UgbW9kZWwgdXBkYXRlIHZhbHVlIGluIG1pbGxpc2Vjb25kcy4gQSB2YWx1ZSBvZiAwIHRyaWdnZXJzIGFuIGltbWVkaWF0ZSB1cGRhdGUuXG4gICAqIC0gYHVwZGF0ZU9uYDogc3RyaW5nIGV2ZW50IHZhbHVlIHRoYXQgaW5zdHJ1Y3RzIHdoZW4gdGhlIGNvbnRyb2wgc2hvdWxkIGJlIHVwZGF0ZWRcbiAgICovXG4gIG1vZGVsT3B0aW9ucz86IHtcbiAgICBkZWJvdW5jZT86IHtcbiAgICAgIGRlZmF1bHQ6IG51bWJlcjtcbiAgICB9O1xuICAgIC8vIEBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9BYnN0cmFjdENvbnRyb2wjdXBkYXRlT25cbiAgICB1cGRhdGVPbj86ICdjaGFuZ2UnIHwgJ2JsdXInIHwgJ3N1Ym1pdCc7XG4gIH07XG5cbiAgaG9va3M/OiBGb3JtbHlIb29rQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBmdW5jdGlvbnMgdG8gZXhlY3V0ZSwgYXMgYSBwaXBlbGluZSwgd2hlbmV2ZXIgdGhlIG1vZGVsIHVwZGF0ZXMsIHVzdWFsbHkgdmlhIHVzZXIgaW5wdXQuXG4gICAqL1xuICBwYXJzZXJzPzogKCh2YWx1ZTogYW55KSA9PiBhbnkpW107XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY2hpbGQgZmllbGQgYnkga2V5IG5hbWVcbiAgICovXG4gIGdldD86IChrZXk6IEZvcm1seUZpZWxkQ29uZmlnWydrZXknXSkgPT4gRm9ybWx5RmllbGRDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RlbCB0aGF0IHN0b3JlcyBhbGwgdGhlIGRhdGEsIHdoZXJlIHRoZSBtb2RlbFtrZXldIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICovXG4gIHJlYWRvbmx5IG1vZGVsPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50PzogRm9ybWx5RmllbGRDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zPzogRm9ybWx5Rm9ybU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgZm9ybS5cbiAgICovXG4gIHJlYWRvbmx5IGZvcm0/OiBVbnR5cGVkRm9ybUdyb3VwIHwgVW50eXBlZEZvcm1BcnJheTtcblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgW0Zvcm1Db250cm9sXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0Zvcm1Db250cm9sKSBmb3IgdGhlIGZpZWxkLlxuICAgKiBJdCBwcm92aWRlcyB5b3UgbW9yZSBjb250cm9sIGxpa2UgcnVubmluZyB2YWxpZGF0b3JzLCBjYWxjdWxhdGluZyBzdGF0dXMsIGFuZCByZXNldHRpbmcgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSBmb3JtQ29udHJvbD86IEFic3RyYWN0Q29udHJvbDtcblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgb3B0aW9uc1R5cGVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCB0eXBlIEZvcm1seUF0dHJpYnV0ZUV2ZW50ID0gKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgZXZlbnQ/OiBhbnkpID0+IHZvaWQ7XG5cbi8qKiAgQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5VGVtcGxhdGVPcHRpb25zIGV4dGVuZHMgRm9ybWx5RmllbGRQcm9wcyB7XG4gIFthZGRpdGlvbmFsUHJvcGVydGllczogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1seUZpZWxkUHJvcHMge1xuICB0eXBlPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb3B0aW9ucz86IGFueVtdIHwgT2JzZXJ2YWJsZTxhbnlbXT47XG4gIHJvd3M/OiBudW1iZXI7XG4gIGNvbHM/OiBudW1iZXI7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBtYXg/OiBudW1iZXI7XG4gIG1pbj86IG51bWJlcjtcblxuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgYG1pbkxlbmd0aGAgKi9cbiAgbWlubGVuZ3RoPzogbnVtYmVyO1xuXG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBgbWF4TGVuZ3RoYCAqL1xuICBtYXhsZW5ndGg/OiBudW1iZXI7XG5cbiAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cDtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICB0YWJpbmRleD86IG51bWJlcjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICBhdHRyaWJ1dGVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfTtcbiAgc3RlcD86IG51bWJlcjtcbiAgZm9jdXM/OiBGb3JtbHlBdHRyaWJ1dGVFdmVudDtcbiAgYmx1cj86IEZvcm1seUF0dHJpYnV0ZUV2ZW50O1xuICBrZXl1cD86IEZvcm1seUF0dHJpYnV0ZUV2ZW50O1xuICBrZXlkb3duPzogRm9ybWx5QXR0cmlidXRlRXZlbnQ7XG4gIGNsaWNrPzogRm9ybWx5QXR0cmlidXRlRXZlbnQ7XG4gIGNoYW5nZT86IEZvcm1seUF0dHJpYnV0ZUV2ZW50O1xuICBrZXlwcmVzcz86IEZvcm1seUF0dHJpYnV0ZUV2ZW50O1xuICB3aGVlbD86IEZvcm1seUF0dHJpYnV0ZUV2ZW50O1xufVxuXG5leHBvcnQgdHlwZSBGb3JtbHlIb29rRm4gPSAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1seUhvb2tDb25maWcge1xuICBvbkluaXQ/OiBGb3JtbHlIb29rRm4gfCAoKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gT2JzZXJ2YWJsZTxhbnk+KTtcbiAgb25DaGFuZ2VzPzogRm9ybWx5SG9va0ZuO1xuICBhZnRlckNvbnRlbnRJbml0PzogRm9ybWx5SG9va0ZuO1xuICBhZnRlclZpZXdJbml0PzogRm9ybWx5SG9va0ZuO1xuICBvbkRlc3Ryb3k/OiBGb3JtbHlIb29rRm47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5Rm9ybU9wdGlvbnMge1xuICB1cGRhdGVJbml0aWFsVmFsdWU/OiAobW9kZWw/OiBhbnkpID0+IHZvaWQ7XG4gIHJlc2V0TW9kZWw/OiAobW9kZWw/OiBhbnkpID0+IHZvaWQ7XG4gIGZvcm1TdGF0ZT86IGFueTtcbiAgZmllbGRDaGFuZ2VzPzogU3ViamVjdDxGb3JtbHlWYWx1ZUNoYW5nZUV2ZW50PjtcbiAgc2hvd0Vycm9yPzogKGZpZWxkOiBGaWVsZFR5cGUpID0+IGJvb2xlYW47XG4gIGJ1aWxkPzogKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IEZvcm1seUZpZWxkQ29uZmlnO1xuICBjaGVja0V4cHJlc3Npb25zPzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gdm9pZDtcbiAgZGV0ZWN0Q2hhbmdlcz86IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHZvaWQ7XG4gIHBhcmVudEZvcm0/OiBGb3JtR3JvdXBEaXJlY3RpdmUgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1seVZhbHVlQ2hhbmdlRXZlbnQge1xuICBmaWVsZDogRm9ybWx5RmllbGRDb25maWc7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgW21ldGE6IHN0cmluZ106IGFueTtcbn1cblxuaW50ZXJmYWNlIEZvcm1seVZhbGlkYXRpb248VCwgUj4ge1xuICB2YWxpZGF0aW9uPzogKHN0cmluZyB8IFQpW10gfCBhbnk7XG4gIFtrZXk6IHN0cmluZ106IEZvcm1seVZhbGlkYXRvckZuPFI+IHwgRm9ybWx5VmFsaWRhdG9yRXhwcmVzc2lvbkZuPFI+IHwgYW55O1xufVxudHlwZSBGb3JtbHlWYWxpZGF0b3JGbjxUPiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gVDtcblxuaW50ZXJmYWNlIEZvcm1seVZhbGlkYXRvckV4cHJlc3Npb25GbjxUPiB7XG4gIGV4cHJlc3Npb246IEZvcm1seVZhbGlkYXRvckZuPFQ+O1xuICBtZXNzYWdlOiBzdHJpbmcgfCAoKGVycm9yOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KTtcbn1cbiJdfQ==
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export * from './config';
|
|
2
|
-
export * from './fieldconfig';
|
|
3
|
-
export * from './fieldconfig.cache';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi9maWVsZGNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2ZpZWxkY29uZmlnLmNhY2hlJztcbiJdfQ==
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { UntypedFormGroup } from '@angular/forms';
|
|
3
|
-
import { defineHiddenProp, observe, disableTreeValidityCall, isHiddenField, isSignalRequired } from '../utils';
|
|
4
|
-
import { FORMLY_CONFIG } from '../core.config';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "./formly.config";
|
|
7
|
-
import * as i2 from "@angular/forms";
|
|
8
|
-
export class FormlyFormBuilder {
|
|
9
|
-
constructor(config, injector, viewContainerRef, parentForm, configs = []) {
|
|
10
|
-
this.config = config;
|
|
11
|
-
this.injector = injector;
|
|
12
|
-
this.viewContainerRef = viewContainerRef;
|
|
13
|
-
this.parentForm = parentForm;
|
|
14
|
-
if (configs) {
|
|
15
|
-
configs.forEach((c) => config.addConfig(c));
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
buildForm(form, fieldGroup = [], model, options) {
|
|
19
|
-
this.build({ fieldGroup, model, form, options });
|
|
20
|
-
}
|
|
21
|
-
build(field) {
|
|
22
|
-
if (!this.config.extensions.core) {
|
|
23
|
-
throw new Error('NgxFormly: missing `forRoot()` call. use `forRoot()` when registering the `FormlyModule`.');
|
|
24
|
-
}
|
|
25
|
-
if (!field.parent) {
|
|
26
|
-
this._setOptions(field);
|
|
27
|
-
}
|
|
28
|
-
disableTreeValidityCall(field.form, () => {
|
|
29
|
-
this._build(field);
|
|
30
|
-
// TODO: add test for https://github.com/ngx-formly/ngx-formly/issues/3910
|
|
31
|
-
if (!field.parent || field.fieldArray) {
|
|
32
|
-
// detect changes early to avoid reset value by hidden fields
|
|
33
|
-
const options = field.options;
|
|
34
|
-
if (field.parent && isHiddenField(field)) {
|
|
35
|
-
// when hide is used in expression set defaul value will not be set until detect hide changes
|
|
36
|
-
// which causes default value not set on new item is added
|
|
37
|
-
options._hiddenFieldsForCheck?.push({ field, default: false });
|
|
38
|
-
}
|
|
39
|
-
options.checkExpressions?.(field, true);
|
|
40
|
-
options._detectChanges?.(field);
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
_build(field) {
|
|
45
|
-
if (!field) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const extensions = Object.values(this.config.extensions);
|
|
49
|
-
extensions.forEach((extension) => extension.prePopulate?.(field));
|
|
50
|
-
extensions.forEach((extension) => extension.onPopulate?.(field));
|
|
51
|
-
field.fieldGroup?.forEach((f) => this._build(f));
|
|
52
|
-
extensions.forEach((extension) => extension.postPopulate?.(field));
|
|
53
|
-
}
|
|
54
|
-
_setOptions(field) {
|
|
55
|
-
field.form = field.form || new UntypedFormGroup({});
|
|
56
|
-
field.model = field.model || {};
|
|
57
|
-
field.options = field.options || {};
|
|
58
|
-
const options = field.options;
|
|
59
|
-
if (!options._viewContainerRef) {
|
|
60
|
-
defineHiddenProp(options, '_viewContainerRef', this.viewContainerRef);
|
|
61
|
-
}
|
|
62
|
-
if (!options._injector) {
|
|
63
|
-
defineHiddenProp(options, '_injector', this.injector);
|
|
64
|
-
}
|
|
65
|
-
if (!options.build) {
|
|
66
|
-
options.build = (f = field) => {
|
|
67
|
-
this.build(f);
|
|
68
|
-
return f;
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
if (!options.parentForm && this.parentForm) {
|
|
72
|
-
defineHiddenProp(options, 'parentForm', this.parentForm);
|
|
73
|
-
if (!isSignalRequired()) {
|
|
74
|
-
observe(options, ['parentForm', 'submitted'], ({ firstChange }) => {
|
|
75
|
-
if (!firstChange) {
|
|
76
|
-
options.detectChanges(field);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyFormBuilder, deps: [{ token: i1.FormlyConfig }, { token: i0.Injector }, { token: i0.ViewContainerRef, optional: true }, { token: i2.FormGroupDirective, optional: true }, { token: FORMLY_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
83
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyFormBuilder, providedIn: 'root' }); }
|
|
84
|
-
}
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyFormBuilder, decorators: [{
|
|
86
|
-
type: Injectable,
|
|
87
|
-
args: [{ providedIn: 'root' }]
|
|
88
|
-
}], ctorParameters: () => [{ type: i1.FormlyConfig }, { type: i0.Injector }, { type: i0.ViewContainerRef, decorators: [{
|
|
89
|
-
type: Optional
|
|
90
|
-
}] }, { type: i2.FormGroupDirective, decorators: [{
|
|
91
|
-
type: Optional
|
|
92
|
-
}] }, { type: undefined, decorators: [{
|
|
93
|
-
type: Optional
|
|
94
|
-
}, {
|
|
95
|
-
type: Inject,
|
|
96
|
-
args: [FORMLY_CONFIG]
|
|
97
|
-
}] }] });
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL3NlcnZpY2VzL2Zvcm1seS5idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFZLFFBQVEsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGdCQUFnQixFQUF3QyxNQUFNLGdCQUFnQixDQUFDO0FBR3hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUcvQyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQ1UsTUFBb0IsRUFDcEIsUUFBa0IsRUFDTixnQkFBa0MsRUFDbEMsVUFBOEIsRUFDZixVQUEwQixFQUFFO1FBSnZELFdBQU0sR0FBTixNQUFNLENBQWM7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNOLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFHbEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FDUCxJQUF5QyxFQUN6QyxhQUFrQyxFQUFFLEVBQ3BDLEtBQVUsRUFDVixPQUEwQjtRQUUxQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsS0FBSyxDQUFD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UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUF1QixLQUFLLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFZCxPQUFPLENBQUMsQ0FBQztZQUNYLENBQUMsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0MsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFekQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtvQkFDaEUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNqQixPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMvQixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOytHQS9GVSxpQkFBaUIsd0tBTU4sYUFBYTttSEFOeEIsaUJBQWlCLGNBREosTUFBTTs7NEZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQUs3QixRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybWx5Q29uZmlnIH0gZnJvbSAnLi9mb3JtbHkuY29uZmlnJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlGb3JtT3B0aW9ucywgRm9ybWx5RmllbGRDb25maWdDYWNoZSwgQ29uZmlnT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IGRlZmluZUhpZGRlblByb3AsIG9ic2VydmUsIGRpc2FibGVUcmVlVmFsaWRpdHlDYWxsLCBpc0hpZGRlbkZpZWxkLCBpc1NpZ25hbFJlcXVpcmVkIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRk9STUxZX0NPTkZJRyB9IGZyb20gJy4uL2NvcmUuY29uZmlnJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlGb3JtQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlnOiBGb3JtbHlDb25maWcsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcGFyZW50Rm9ybTogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRk9STUxZX0NPTkZJRykgY29uZmlnczogQ29uZmlnT3B0aW9uW10gPSBbXSxcbiAgKSB7XG4gICAgaWYgKGNvbmZpZ3MpIHtcbiAgICAgIGNvbmZpZ3MuZm9yRWFjaCgoYykgPT4gY29uZmlnLmFkZENvbmZpZyhjKSk7XG4gICAgfVxuICB9XG5cbiAgYnVpbGRGb3JtKFxuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXAgfCBVbnR5cGVkRm9ybUFycmF5LFxuICAgIGZpZWxkR3JvdXA6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXSxcbiAgICBtb2RlbDogYW55LFxuICAgIG9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zLFxuICApIHtcbiAgICB0aGlzLmJ1aWxkKHsgZmllbGRHcm91cCwgbW9kZWwsIGZvcm0sIG9wdGlvbnMgfSk7XG4gIH1cblxuICBidWlsZChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmV4dGVuc2lvbnMuY29yZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZ3hGb3JtbHk6IG1pc3NpbmcgYGZvclJvb3QoKWAgY2FsbC4gdXNlIGBmb3JSb290KClgIHdoZW4gcmVnaXN0ZXJpbmcgdGhlIGBGb3JtbHlNb2R1bGVgLicpO1xuICAgIH1cblxuICAgIGlmICghZmllbGQucGFyZW50KSB7XG4gICAgICB0aGlzLl9zZXRPcHRpb25zKGZpZWxkKTtcbiAgICB9XG5cbiAgICBkaXNhYmxlVHJlZVZhbGlkaXR5Q2FsbChmaWVsZC5mb3JtLCAoKSA9PiB7XG4gICAgICB0aGlzLl9idWlsZChmaWVsZCk7XG4gICAgICAvLyBUT0RPOiBhZGQgdGVzdCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL25neC1mb3JtbHkvbmd4LWZvcm1seS9pc3N1ZXMvMzkxMFxuICAgICAgaWYgKCFmaWVsZC5wYXJlbnQgfHwgKGZpZWxkIGFzIEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpLmZpZWxkQXJyYXkpIHtcbiAgICAgICAgLy8gZGV0ZWN0IGNoYW5nZXMgZWFybHkgdG8gYXZvaWQgcmVzZXQgdmFsdWUgYnkgaGlkZGVuIGZpZWxkc1xuICAgICAgICBjb25zdCBvcHRpb25zID0gKGZpZWxkIGFzIEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpLm9wdGlvbnM7XG5cbiAgICAgICAgaWYgKGZpZWxkLnBhcmVudCAmJiBpc0hpZGRlbkZpZWxkKGZpZWxkKSkge1xuICAgICAgICAgIC8vIHdoZW4gaGlkZSBpcyB1c2VkIGluIGV4cHJlc3Npb24gc2V0IGRlZmF1bCB2YWx1ZSB3aWxsIG5vdCBiZSBzZXQgdW50aWwgZGV0ZWN0IGhpZGUgY2hhbmdlc1xuICAgICAgICAgIC8vIHdoaWNoIGNhdXNlcyBkZWZhdWx0IHZhbHVlIG5vdCBzZXQgb24gbmV3IGl0ZW0gaXMgYWRkZWRcbiAgICAgICAgICBvcHRpb25zLl9oaWRkZW5GaWVsZHNGb3JDaGVjaz8ucHVzaCh7IGZpZWxkLCBkZWZhdWx0OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMuY2hlY2tFeHByZXNzaW9ucz8uKGZpZWxkLCB0cnVlKTtcbiAgICAgICAgb3B0aW9ucy5fZGV0ZWN0Q2hhbmdlcz8uKGZpZWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgaWYgKCFmaWVsZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBPYmplY3QudmFsdWVzKHRoaXMuY29uZmlnLmV4dGVuc2lvbnMpO1xuICAgIGV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24ucHJlUG9wdWxhdGU/LihmaWVsZCkpO1xuICAgIGV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24ub25Qb3B1bGF0ZT8uKGZpZWxkKSk7XG4gICAgZmllbGQuZmllbGRHcm91cD8uZm9yRWFjaCgoZikgPT4gdGhpcy5fYnVpbGQoZikpO1xuICAgIGV4dGVuc2lvbnMuZm9yRWFjaCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24ucG9zdFBvcHVsYXRlPy4oZmllbGQpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE9wdGlvbnMoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICBmaWVsZC5mb3JtID0gZmllbGQuZm9ybSB8fCBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XG4gICAgZmllbGQubW9kZWwgPSBmaWVsZC5tb2RlbCB8fCB7fTtcbiAgICBmaWVsZC5vcHRpb25zID0gZmllbGQub3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBvcHRpb25zID0gZmllbGQub3B0aW9ucztcblxuICAgIGlmICghb3B0aW9ucy5fdmlld0NvbnRhaW5lclJlZikge1xuICAgICAgZGVmaW5lSGlkZGVuUHJvcChvcHRpb25zLCAnX3ZpZXdDb250YWluZXJSZWYnLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5faW5qZWN0b3IpIHtcbiAgICAgIGRlZmluZUhpZGRlblByb3Aob3B0aW9ucywgJ19pbmplY3RvcicsIHRoaXMuaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5idWlsZCkge1xuICAgICAgb3B0aW9ucy5idWlsZCA9IChmOiBGb3JtbHlGaWVsZENvbmZpZyA9IGZpZWxkKSA9PiB7XG4gICAgICAgIHRoaXMuYnVpbGQoZik7XG5cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5wYXJlbnRGb3JtICYmIHRoaXMucGFyZW50Rm9ybSkge1xuICAgICAgZGVmaW5lSGlkZGVuUHJvcChvcHRpb25zLCAncGFyZW50Rm9ybScsIHRoaXMucGFyZW50Rm9ybSk7XG5cbiAgICAgIGlmICghaXNTaWduYWxSZXF1aXJlZCgpKSB7XG4gICAgICAgIG9ic2VydmUob3B0aW9ucywgWydwYXJlbnRGb3JtJywgJ3N1Ym1pdHRlZCddLCAoeyBmaXJzdENoYW5nZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKCFmaXJzdENoYW5nZSkge1xuICAgICAgICAgICAgb3B0aW9ucy5kZXRlY3RDaGFuZ2VzKGZpZWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
import { Injectable, Type } from '@angular/core';
|
|
2
|
-
import { reverseDeepMerge } from './../utils';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* Maintains list of formly config options. This can be used to register new field type.
|
|
6
|
-
*/
|
|
7
|
-
export class FormlyConfig {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.types = {};
|
|
10
|
-
this.validators = {};
|
|
11
|
-
this.wrappers = {};
|
|
12
|
-
this.messages = {};
|
|
13
|
-
this.extras = {
|
|
14
|
-
checkExpressionOn: 'modelChange',
|
|
15
|
-
lazyRender: true,
|
|
16
|
-
resetFieldOnHide: true,
|
|
17
|
-
renderFormlyFieldElement: true,
|
|
18
|
-
showError(field) {
|
|
19
|
-
return (field.formControl?.invalid &&
|
|
20
|
-
(field.formControl?.touched || field.options.parentForm?.submitted || !!field.field.validation?.show));
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
this.extensions = {};
|
|
24
|
-
this.presets = {};
|
|
25
|
-
this.extensionsByPriority = {};
|
|
26
|
-
this.componentRefs = {};
|
|
27
|
-
}
|
|
28
|
-
addConfig(config) {
|
|
29
|
-
if (Array.isArray(config)) {
|
|
30
|
-
config.forEach((c) => this.addConfig(c));
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
if (config.types) {
|
|
34
|
-
config.types.forEach((type) => this.setType(type));
|
|
35
|
-
}
|
|
36
|
-
if (config.validators) {
|
|
37
|
-
config.validators.forEach((validator) => this.setValidator(validator));
|
|
38
|
-
}
|
|
39
|
-
if (config.wrappers) {
|
|
40
|
-
config.wrappers.forEach((wrapper) => this.setWrapper(wrapper));
|
|
41
|
-
}
|
|
42
|
-
if (config.validationMessages) {
|
|
43
|
-
config.validationMessages.forEach((validation) => this.addValidatorMessage(validation.name, validation.message));
|
|
44
|
-
}
|
|
45
|
-
if (config.extensions) {
|
|
46
|
-
this.setSortedExtensions(config.extensions);
|
|
47
|
-
}
|
|
48
|
-
if (config.extras) {
|
|
49
|
-
this.extras = { ...this.extras, ...config.extras };
|
|
50
|
-
}
|
|
51
|
-
if (config.presets) {
|
|
52
|
-
this.presets = {
|
|
53
|
-
...this.presets,
|
|
54
|
-
...config.presets.reduce((acc, curr) => ({ ...acc, [curr.name]: curr.config }), {}),
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Allows you to specify a custom type which you can use in your field configuration.
|
|
60
|
-
* You can pass an object of options, or an array of objects of options.
|
|
61
|
-
*/
|
|
62
|
-
setType(options) {
|
|
63
|
-
if (Array.isArray(options)) {
|
|
64
|
-
options.forEach((option) => this.setType(option));
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
if (!this.types[options.name]) {
|
|
68
|
-
this.types[options.name] = { name: options.name };
|
|
69
|
-
}
|
|
70
|
-
['component', 'extends', 'defaultOptions', 'wrappers'].forEach((prop) => {
|
|
71
|
-
if (options.hasOwnProperty(prop)) {
|
|
72
|
-
this.types[options.name][prop] = options[prop];
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
getType(name, throwIfNotFound = false) {
|
|
78
|
-
if (name instanceof Type) {
|
|
79
|
-
return { component: name, name: name.prototype.constructor.name };
|
|
80
|
-
}
|
|
81
|
-
if (!this.types[name]) {
|
|
82
|
-
if (throwIfNotFound) {
|
|
83
|
-
throw new Error(`[Formly Error] The type "${name}" could not be found. Please make sure that is registered through the FormlyModule declaration.`);
|
|
84
|
-
}
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
this.mergeExtendedType(name);
|
|
88
|
-
return this.types[name];
|
|
89
|
-
}
|
|
90
|
-
/** @ignore */
|
|
91
|
-
getMergedField(field = {}) {
|
|
92
|
-
const type = this.getType(field.type);
|
|
93
|
-
if (!type) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
if (type.defaultOptions) {
|
|
97
|
-
reverseDeepMerge(field, type.defaultOptions);
|
|
98
|
-
}
|
|
99
|
-
const extendDefaults = type.extends && this.getType(type.extends).defaultOptions;
|
|
100
|
-
if (extendDefaults) {
|
|
101
|
-
reverseDeepMerge(field, extendDefaults);
|
|
102
|
-
}
|
|
103
|
-
if (field?.optionsTypes) {
|
|
104
|
-
field.optionsTypes.forEach((option) => {
|
|
105
|
-
const defaultOptions = this.getType(option).defaultOptions;
|
|
106
|
-
if (defaultOptions) {
|
|
107
|
-
reverseDeepMerge(field, defaultOptions);
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
const componentRef = this.resolveFieldTypeRef(field);
|
|
112
|
-
if (componentRef?.instance?.defaultOptions) {
|
|
113
|
-
reverseDeepMerge(field, componentRef.instance.defaultOptions);
|
|
114
|
-
}
|
|
115
|
-
if (!field.wrappers && type.wrappers) {
|
|
116
|
-
field.wrappers = [...type.wrappers];
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/** @ignore @internal */
|
|
120
|
-
resolveFieldTypeRef(field = {}) {
|
|
121
|
-
const type = this.getType(field.type);
|
|
122
|
-
if (!type) {
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
if (!type.component) {
|
|
126
|
-
return null;
|
|
127
|
-
}
|
|
128
|
-
if (!this.componentRefs[type.name]) {
|
|
129
|
-
const { _viewContainerRef, _injector } = field.options;
|
|
130
|
-
if (!_viewContainerRef || !_injector) {
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
const componentRef = _viewContainerRef.createComponent(type.component, { injector: _injector });
|
|
134
|
-
this.componentRefs[type.name] = componentRef;
|
|
135
|
-
try {
|
|
136
|
-
componentRef.destroy();
|
|
137
|
-
}
|
|
138
|
-
catch (e) {
|
|
139
|
-
console.error(`An error occurred while destroying the Formly component type "${field.type}"`, e);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
return this.componentRefs[type.name];
|
|
143
|
-
}
|
|
144
|
-
/** @ignore @internal */
|
|
145
|
-
clearRefs() {
|
|
146
|
-
this.componentRefs = {};
|
|
147
|
-
}
|
|
148
|
-
setWrapper(options) {
|
|
149
|
-
this.wrappers[options.name] = options;
|
|
150
|
-
if (options.types) {
|
|
151
|
-
options.types.forEach((type) => {
|
|
152
|
-
this.setTypeWrapper(type, options.name);
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
getWrapper(name) {
|
|
157
|
-
if (name instanceof Type) {
|
|
158
|
-
return { component: name, name: name.prototype.constructor.name };
|
|
159
|
-
}
|
|
160
|
-
if (!this.wrappers[name]) {
|
|
161
|
-
throw new Error(`[Formly Error] The wrapper "${name}" could not be found. Please make sure that is registered through the FormlyModule declaration.`);
|
|
162
|
-
}
|
|
163
|
-
return this.wrappers[name];
|
|
164
|
-
}
|
|
165
|
-
/** @ignore */
|
|
166
|
-
setTypeWrapper(type, name) {
|
|
167
|
-
if (!this.types[type]) {
|
|
168
|
-
this.types[type] = {};
|
|
169
|
-
}
|
|
170
|
-
if (!this.types[type].wrappers) {
|
|
171
|
-
this.types[type].wrappers = [];
|
|
172
|
-
}
|
|
173
|
-
if (this.types[type].wrappers.indexOf(name) === -1) {
|
|
174
|
-
this.types[type].wrappers.push(name);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
setValidator(options) {
|
|
178
|
-
this.validators[options.name] = options;
|
|
179
|
-
}
|
|
180
|
-
getValidator(name) {
|
|
181
|
-
if (!this.validators[name]) {
|
|
182
|
-
throw new Error(`[Formly Error] The validator "${name}" could not be found. Please make sure that is registered through the FormlyModule declaration.`);
|
|
183
|
-
}
|
|
184
|
-
return this.validators[name];
|
|
185
|
-
}
|
|
186
|
-
addValidatorMessage(name, message) {
|
|
187
|
-
this.messages[name] = message;
|
|
188
|
-
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
189
|
-
const deprecated = { minlength: 'minLength', maxlength: 'maxLength' };
|
|
190
|
-
if (deprecated[name]) {
|
|
191
|
-
console.warn(`Formly deprecation: passing validation messages key '${name}' is deprecated since v6.0, use '${deprecated[name]}' instead.`);
|
|
192
|
-
this.messages[deprecated[name]] = message;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
getValidatorMessage(name) {
|
|
197
|
-
return this.messages[name];
|
|
198
|
-
}
|
|
199
|
-
setSortedExtensions(extensionOptions) {
|
|
200
|
-
// insert new extensions, grouped by priority
|
|
201
|
-
extensionOptions.forEach((extensionOption) => {
|
|
202
|
-
const priority = extensionOption.priority ?? 1;
|
|
203
|
-
this.extensionsByPriority[priority] = {
|
|
204
|
-
...this.extensionsByPriority[priority],
|
|
205
|
-
[extensionOption.name]: extensionOption.extension,
|
|
206
|
-
};
|
|
207
|
-
});
|
|
208
|
-
// flatten extensions object with sorted keys
|
|
209
|
-
this.extensions = Object.keys(this.extensionsByPriority)
|
|
210
|
-
.map(Number)
|
|
211
|
-
.sort((a, b) => a - b)
|
|
212
|
-
.reduce((acc, prio) => ({
|
|
213
|
-
...acc,
|
|
214
|
-
...this.extensionsByPriority[prio],
|
|
215
|
-
}), {});
|
|
216
|
-
}
|
|
217
|
-
mergeExtendedType(name) {
|
|
218
|
-
if (!this.types[name].extends) {
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
const extendedType = this.getType(this.types[name].extends);
|
|
222
|
-
if (!this.types[name].component) {
|
|
223
|
-
this.types[name].component = extendedType.component;
|
|
224
|
-
}
|
|
225
|
-
if (!this.types[name].wrappers) {
|
|
226
|
-
this.types[name].wrappers = extendedType.wrappers;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
230
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyConfig, providedIn: 'root' }); }
|
|
231
|
-
}
|
|
232
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyConfig, decorators: [{
|
|
233
|
-
type: Injectable,
|
|
234
|
-
args: [{ providedIn: 'root' }]
|
|
235
|
-
}] });
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9saWIvc2VydmljZXMvZm9ybWx5LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnQixJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDOztBQWlCOUM7O0dBRUc7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQUR6QjtRQUVFLFVBQUssR0FBbUMsRUFBRSxDQUFDO1FBQzNDLGVBQVUsR0FBd0MsRUFBRSxDQUFDO1FBQ3JELGFBQVEsR0FBc0MsRUFBRSxDQUFDO1FBQ2pELGFBQVEsR0FBMkQsRUFBRSxDQUFDO1FBRXRFLFdBQU0sR0FBd0M7WUFDNUMsaUJBQWlCLEVBQUUsYUFBYTtZQUNoQyxVQUFVLEVBQUUsSUFBSTtZQUNoQixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLHdCQUF3QixFQUFFLElBQUk7WUFDOUIsU0FBUyxDQUFDLEtBQWdCO2dCQUN4QixPQUFPLENBQ0wsS0FBSyxDQUFDLFdBQVcsRUFBRSxPQUFPO29CQUMxQixDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQ3RHLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQztRQUNGLGVBQVUsR0FBd0MsRUFBRSxDQUFDO1FBQ3JELFlBQU8sR0FBNEUsRUFBRSxDQUFDO1FBQzlFLHlCQUFvQixHQUF3RCxFQUFFLENBQUM7UUFDL0Usa0JBQWEsR0FBNEMsRUFBRSxDQUFDO0tBcVByRTtJQW5QQyxTQUFTLENBQUMsTUFBcUM7UUFDN0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1B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LElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7K0dBelFVLFlBQVk7bUhBQVosWUFBWSxjQURDLE1BQU07OzRGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIENvbXBvbmVudFJlZiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnLi8uLi90ZW1wbGF0ZXMvZmllbGQudHlwZSc7XG5pbXBvcnQgeyByZXZlcnNlRGVlcE1lcmdlIH0gZnJvbSAnLi8uLi91dGlscyc7XG5pbXBvcnQge1xuICBGb3JtbHlGaWVsZENvbmZpZyxcbiAgRm9ybWx5RmllbGRDb25maWdDYWNoZSxcbiAgQ29uZmlnT3B0aW9uLFxuICBUeXBlT3B0aW9uLFxuICBWYWxpZGF0b3JPcHRpb24sXG4gIFdyYXBwZXJPcHRpb24sXG4gIEZvcm1seUV4dGVuc2lvbixcbiAgVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb24sXG4gIEV4dGVuc2lvbk9wdGlvbixcbiAgRm9ybWx5RmllbGRDb25maWdQcmVzZXRQcm92aWRlcixcbn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEZpZWxkV3JhcHBlciB9IGZyb20gJy4uL3RlbXBsYXRlcy9maWVsZC53cmFwcGVyJztcblxuZGVjbGFyZSBjb25zdCBuZ0Rldk1vZGU6IGFueTtcblxuLyoqXG4gKiBNYWludGFpbnMgbGlzdCBvZiBmb3JtbHkgY29uZmlnIG9wdGlvbnMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgbmV3IGZpZWxkIHR5cGUuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRm9ybWx5Q29uZmlnIHtcbiAgdHlwZXM6IHsgW25hbWU6IHN0cmluZ106IFR5cGVPcHRpb24gfSA9IHt9O1xuICB2YWxpZGF0b3JzOiB7IFtuYW1lOiBzdHJpbmddOiBWYWxpZGF0b3JPcHRpb24gfSA9IHt9O1xuICB3cmFwcGVyczogeyBbbmFtZTogc3RyaW5nXTogV3JhcHBlck9wdGlvbiB9ID0ge307XG4gIG1lc3NhZ2VzOiB7IFtuYW1lOiBzdHJpbmddOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblsnbWVzc2FnZSddIH0gPSB7fTtcblxuICBleHRyYXM6IE5vbk51bGxhYmxlPENvbmZpZ09wdGlvblsnZXh0cmFzJ10+ID0ge1xuICAgIGNoZWNrRXhwcmVzc2lvbk9uOiAnbW9kZWxDaGFuZ2UnLFxuICAgIGxhenlSZW5kZXI6IHRydWUsXG4gICAgcmVzZXRGaWVsZE9uSGlkZTogdHJ1ZSxcbiAgICByZW5kZXJGb3JtbHlGaWVsZEVsZW1lbnQ6IHRydWUsXG4gICAgc2hvd0Vycm9yKGZpZWxkOiBGaWVsZFR5cGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGZpZWxkLmZvcm1Db250cm9sPy5pbnZhbGlkICYmXG4gICAgICAgIChmaWVsZC5mb3JtQ29udHJvbD8udG91Y2hlZCB8fCBmaWVsZC5vcHRpb25zLnBhcmVudEZvcm0/LnN1Ym1pdHRlZCB8fCAhIWZpZWxkLmZpZWxkLnZhbGlkYXRpb24/LnNob3cpXG4gICAgICApO1xuICAgIH0sXG4gIH07XG4gIGV4dGVuc2lvbnM6IHsgW25hbWU6IHN0cmluZ106IEZvcm1seUV4dGVuc2lvbiB9ID0ge307XG4gIHByZXNldHM6IHsgW25hbWU6IHN0cmluZ106IEZvcm1seUZpZWxkQ29uZmlnIHwgRm9ybWx5RmllbGRDb25maWdQcmVzZXRQcm92aWRlciB9ID0ge307XG4gIHByaXZhdGUgZXh0ZW5zaW9uc0J5UHJpb3JpdHk6IFJlY29yZDxudW1iZXIsIHsgW25hbWU6IHN0cmluZ106IEZvcm1seUV4dGVuc2lvbiB9PiA9IHt9O1xuICBwcml2YXRlIGNvbXBvbmVudFJlZnM6IFJlY29yZDxzdHJpbmcsIENvbXBvbmVudFJlZjxGaWVsZFR5cGU+PiA9IHt9O1xuXG4gIGFkZENvbmZpZyhjb25maWc6IENvbmZpZ09wdGlvbiB8IENvbmZpZ09wdGlvbltdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnKSkge1xuICAgICAgY29uZmlnLmZvckVhY2goKGMpID0+IHRoaXMuYWRkQ29uZmlnKGMpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnR5cGVzKSB7XG4gICAgICBjb25maWcudHlwZXMuZm9yRWFjaCgodHlwZSkgPT4gdGhpcy5zZXRUeXBlKHR5cGUpKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy52YWxpZGF0b3JzKSB7XG4gICAgICBjb25maWcudmFsaWRhdG9ycy5mb3JFYWNoKCh2YWxpZGF0b3IpID0+IHRoaXMuc2V0VmFsaWRhdG9yKHZhbGlkYXRvcikpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLndyYXBwZXJzKSB7XG4gICAgICBjb25maWcud3JhcHBlcnMuZm9yRWFjaCgod3JhcHBlcikgPT4gdGhpcy5zZXRXcmFwcGVyKHdyYXBwZXIpKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy52YWxpZGF0aW9uTWVzc2FnZXMpIHtcbiAgICAgIGNvbmZpZy52YWxpZGF0aW9uTWVzc2FnZXMuZm9yRWFjaCgodmFsaWRhdGlvbikgPT4gdGhpcy5hZGRWYWxpZGF0b3JNZXNzYWdlKHZhbGlkYXRpb24ubmFtZSwgdmFsaWRhdGlvbi5tZXNzYWdlKSk7XG4gICAgfVxuICAgIGlmIChjb25maWcuZXh0ZW5zaW9ucykge1xuICAgICAgdGhpcy5zZXRTb3J0ZWRFeHRlbnNpb25zKGNvbmZpZy5leHRlbnNpb25zKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5leHRyYXMpIHtcbiAgICAgIHRoaXMuZXh0cmFzID0geyAuLi50aGlzLmV4dHJhcywgLi4uY29uZmlnLmV4dHJhcyB9O1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnByZXNldHMpIHtcbiAgICAgIHRoaXMucHJlc2V0cyA9IHtcbiAgICAgICAgLi4udGhpcy5wcmVzZXRzLFxuICAgICAgICAuLi5jb25maWcucHJlc2V0cy5yZWR1Y2UoKGFjYywgY3VycikgPT4gKHsgLi4uYWNjLCBbY3Vyci5uYW1lXTogY3Vyci5jb25maWcgfSksIHt9KSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGN1c3RvbSB0eXBlIHdoaWNoIHlvdSBjYW4gdXNlIGluIHlvdXIgZmllbGQgY29uZmlndXJhdGlvbi5cbiAgICogWW91IGNhbiBwYXNzIGFuIG9iamVjdCBvZiBvcHRpb25zLCBvciBhbiBhcnJheSBvZiBvYmplY3RzIG9mIG9wdGlvbnMuXG4gICAqL1xuICBzZXRUeXBlKG9wdGlvbnM6IFR5cGVPcHRpb24gfCBUeXBlT3B0aW9uW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHRoaXMuc2V0VHlwZShvcHRpb24pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLnR5cGVzW29wdGlvbnMubmFtZV0pIHtcbiAgICAgICAgdGhpcy50eXBlc1tvcHRpb25zLm5hbWVdID0gPFR5cGVPcHRpb24+eyBuYW1lOiBvcHRpb25zLm5hbWUgfTtcbiAgICAgIH1cblxuICAgICAgKFsnY29tcG9uZW50JywgJ2V4dGVuZHMnLCAnZGVmYXVsdE9wdGlvbnMnLCAnd3JhcHBlcnMnXSBhcyAoa2V5b2YgVHlwZU9wdGlvbilbXSkuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgIHRoaXMudHlwZXNbb3B0aW9ucy5uYW1lXVtwcm9wXSA9IG9wdGlvbnNbcHJvcF0gYXMgYW55O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRUeXBlKG5hbWU6IEZvcm1seUZpZWxkQ29uZmlnWyd0eXBlJ10sIHRocm93SWZOb3RGb3VuZCA9IGZhbHNlKTogVHlwZU9wdGlvbiB7XG4gICAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgICByZXR1cm4geyBjb21wb25lbnQ6IG5hbWUsIG5hbWU6IG5hbWUucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudHlwZXNbbmFtZV0pIHtcbiAgICAgIGlmICh0aHJvd0lmTm90Rm91bmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbRm9ybWx5IEVycm9yXSBUaGUgdHlwZSBcIiR7bmFtZX1cIiBjb3VsZCBub3QgYmUgZm91bmQuIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCBpcyByZWdpc3RlcmVkIHRocm91Z2ggdGhlIEZvcm1seU1vZHVsZSBkZWNsYXJhdGlvbi5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLm1lcmdlRXh0ZW5kZWRUeXBlKG5hbWUpO1xuXG4gICAgcmV0dXJuIHRoaXMudHlwZXNbbmFtZV07XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBnZXRNZXJnZWRGaWVsZChmaWVsZDogRm9ybWx5RmllbGRDb25maWcgPSB7fSk6IGFueSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZ2V0VHlwZShmaWVsZC50eXBlKTtcbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZS5kZWZhdWx0T3B0aW9ucykge1xuICAgICAgcmV2ZXJzZURlZXBNZXJnZShmaWVsZCwgdHlwZS5kZWZhdWx0T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ZW5kRGVmYXVsdHMgPSB0eXBlLmV4dGVuZHMgJiYgdGhpcy5nZXRUeXBlKHR5cGUuZXh0ZW5kcykuZGVmYXVsdE9wdGlvbnM7XG4gICAgaWYgKGV4dGVuZERlZmF1bHRzKSB7XG4gICAgICByZXZlcnNlRGVlcE1lcmdlKGZpZWxkLCBleHRlbmREZWZhdWx0cyk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkPy5vcHRpb25zVHlwZXMpIHtcbiAgICAgIGZpZWxkLm9wdGlvbnNUeXBlcy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB0aGlzLmdldFR5cGUob3B0aW9uKS5kZWZhdWx0T3B0aW9ucztcbiAgICAgICAgaWYgKGRlZmF1bHRPcHRpb25zKSB7XG4gICAgICAgICAgcmV2ZXJzZURlZXBNZXJnZShmaWVsZCwgZGVmYXVsdE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLnJlc29sdmVGaWVsZFR5cGVSZWYoZmllbGQpO1xuICAgIGlmIChjb21wb25lbnRSZWY/Lmluc3RhbmNlPy5kZWZhdWx0T3B0aW9ucykge1xuICAgICAgcmV2ZXJzZURlZXBNZXJnZShmaWVsZCwgY29tcG9uZW50UmVmLmluc3RhbmNlLmRlZmF1bHRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpZWxkLndyYXBwZXJzICYmIHR5cGUud3JhcHBlcnMpIHtcbiAgICAgIGZpZWxkLndyYXBwZXJzID0gWy4uLnR5cGUud3JhcHBlcnNdO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlIEBpbnRlcm5hbCAqL1xuICByZXNvbHZlRmllbGRUeXBlUmVmKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlID0ge30pOiBDb21wb25lbnRSZWY8RmllbGRUeXBlPiB7XG4gICAgY29uc3QgdHlwZTogVHlwZU9wdGlvbiA9IHRoaXMuZ2V0VHlwZShmaWVsZC50eXBlKTtcbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghdHlwZS5jb21wb25lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWZzW3R5cGUubmFtZV0pIHtcbiAgICAgIGNvbnN0IHsgX3ZpZXdDb250YWluZXJSZWYsIF9pbmplY3RvciB9ID0gZmllbGQub3B0aW9ucztcbiAgICAgIGlmICghX3ZpZXdDb250YWluZXJSZWYgfHwgIV9pbmplY3Rvcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50PEZpZWxkVHlwZT4odHlwZS5jb21wb25lbnQsIHsgaW5qZWN0b3I6IF9pbmplY3RvciB9KTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmc1t0eXBlLm5hbWVdID0gY29tcG9uZW50UmVmO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVzdHJveWluZyB0aGUgRm9ybWx5IGNvbXBvbmVudCB0eXBlIFwiJHtmaWVsZC50eXBlfVwiYCwgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UmVmc1t0eXBlLm5hbWVdO1xuICB9XG4gIC8qKiBAaWdub3JlIEBpbnRlcm5hbCAqL1xuICBjbGVhclJlZnMoKSB7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzID0ge307XG4gIH1cblxuICBzZXRXcmFwcGVyKG9wdGlvbnM6IFdyYXBwZXJPcHRpb24pIHtcbiAgICB0aGlzLndyYXBwZXJzW29wdGlvbnMubmFtZV0gPSBvcHRpb25zO1xuICAgIGlmIChvcHRpb25zLnR5cGVzKSB7XG4gICAgICBvcHRpb25zLnR5cGVzLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgdGhpcy5zZXRUeXBlV3JhcHBlcih0eXBlLCBvcHRpb25zLm5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0V3JhcHBlcihuYW1lOiBzdHJpbmcgfCBUeXBlPEZpZWxkV3JhcHBlcj4pOiBXcmFwcGVyT3B0aW9uIHtcbiAgICBpZiAobmFtZSBpbnN0YW5jZW9mIFR5cGUpIHtcbiAgICAgIHJldHVybiB7IGNvbXBvbmVudDogbmFtZSwgbmFtZTogbmFtZS5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZSB9O1xuICAgIH1cblxuICAgIGlmICghdGhpcy53cmFwcGVyc1tuYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgW0Zvcm1seSBFcnJvcl0gVGhlIHdyYXBwZXIgXCIke25hbWV9XCIgY291bGQgbm90IGJlIGZvdW5kLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgaXMgcmVnaXN0ZXJlZCB0aHJvdWdoIHRoZSBGb3JtbHlNb2R1bGUgZGVjbGFyYXRpb24uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMud3JhcHBlcnNbbmFtZV07XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBzZXRUeXBlV3JhcHBlcih0eXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy50eXBlc1t0eXBlXSkge1xuICAgICAgdGhpcy50eXBlc1t0eXBlXSA9IDxUeXBlT3B0aW9uPnt9O1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHlwZXNbdHlwZV0ud3JhcHBlcnMpIHtcbiAgICAgIHRoaXMudHlwZXNbdHlwZV0ud3JhcHBlcnMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZXNbdHlwZV0ud3JhcHBlcnMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMudHlwZXNbdHlwZV0ud3JhcHBlcnMucHVzaChuYW1lKTtcbiAgICB9XG4gIH1cblxuICBzZXRWYWxpZGF0b3Iob3B0aW9uczogVmFsaWRhdG9yT3B0aW9uKSB7XG4gICAgdGhpcy52YWxpZGF0b3JzW29wdGlvbnMubmFtZV0gPSBvcHRpb25zO1xuICB9XG5cbiAgZ2V0VmFsaWRhdG9yKG5hbWU6IHN0cmluZyk6IFZhbGlkYXRvck9wdGlvbiB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRvcnNbbmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFtGb3JtbHkgRXJyb3JdIFRoZSB2YWxpZGF0b3IgXCIke25hbWV9XCIgY291bGQgbm90IGJlIGZvdW5kLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgaXMgcmVnaXN0ZXJlZCB0aHJvdWdoIHRoZSBGb3JtbHlNb2R1bGUgZGVjbGFyYXRpb24uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdG9yc1tuYW1lXTtcbiAgfVxuXG4gIGFkZFZhbGlkYXRvck1lc3NhZ2UobmFtZTogc3RyaW5nLCBtZXNzYWdlOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblsnbWVzc2FnZSddKSB7XG4gICAgdGhpcy5tZXNzYWdlc1tuYW1lXSA9IG1lc3NhZ2U7XG4gICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgY29uc3QgZGVwcmVjYXRlZCA9IHsgbWlubGVuZ3RoOiAnbWluTGVuZ3RoJywgbWF4bGVuZ3RoOiAnbWF4TGVuZ3RoJyB9IGFzIGFueTtcbiAgICAgIGlmIChkZXByZWNhdGVkW25hbWVdKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgRm9ybWx5IGRlcHJlY2F0aW9uOiBwYXNzaW5nIHZhbGlkYXRpb24gbWVzc2FnZXMga2V5ICcke25hbWV9JyBpcyBkZXByZWNhdGVkIHNpbmNlIHY2LjAsIHVzZSAnJHtkZXByZWNhdGVkW25hbWVdfScgaW5zdGVhZC5gLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1lc3NhZ2VzW2RlcHJlY2F0ZWRbbmFtZV1dID0gbWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRWYWxpZGF0b3JNZXNzYWdlKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzW25hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTb3J0ZWRFeHRlbnNpb25zKGV4dGVuc2lvbk9wdGlvbnM6IEV4dGVuc2lvbk9wdGlvbltdKSB7XG4gICAgLy8gaW5zZXJ0IG5ldyBleHRlbnNpb25zLCBncm91cGVkIGJ5IHByaW9yaXR5XG4gICAgZXh0ZW5zaW9uT3B0aW9ucy5mb3JFYWNoKChleHRlbnNpb25PcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IHByaW9yaXR5ID0gZXh0ZW5zaW9uT3B0aW9uLnByaW9yaXR5ID8/IDE7XG4gICAgICB0aGlzLmV4dGVuc2lvbnNCeVByaW9yaXR5W3ByaW9yaXR5XSA9IHtcbiAgICAgICAgLi4udGhpcy5leHRlbnNpb25zQnlQcmlvcml0eVtwcmlvcml0eV0sXG4gICAgICAgIFtleHRlbnNpb25PcHRpb24ubmFtZV06IGV4dGVuc2lvbk9wdGlvbi5leHRlbnNpb24sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIC8vIGZsYXR0ZW4gZXh0ZW5zaW9ucyBvYmplY3Qgd2l0aCBzb3J0ZWQga2V5c1xuICAgIHRoaXMuZXh0ZW5zaW9ucyA9IE9iamVjdC5rZXlzKHRoaXMuZXh0ZW5zaW9uc0J5UHJpb3JpdHkpXG4gICAgICAubWFwKE51bWJlcilcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhIC0gYilcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHByaW8pID0+ICh7XG4gICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgIC4uLnRoaXMuZXh0ZW5zaW9uc0J5UHJpb3JpdHlbcHJpb10sXG4gICAgICAgIH0pLFxuICAgICAgICB7fSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlRXh0ZW5kZWRUeXBlKG5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy50eXBlc1tuYW1lXS5leHRlbmRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ZW5kZWRUeXBlID0gdGhpcy5nZXRUeXBlKHRoaXMudHlwZXNbbmFtZV0uZXh0ZW5kcyk7XG4gICAgaWYgKCF0aGlzLnR5cGVzW25hbWVdLmNvbXBvbmVudCkge1xuICAgICAgdGhpcy50eXBlc1tuYW1lXS5jb21wb25lbnQgPSBleHRlbmRlZFR5cGUuY29tcG9uZW50O1xuICAgIH1cblxuICAgIGlmICghdGhpcy50eXBlc1tuYW1lXS53cmFwcGVycykge1xuICAgICAgdGhpcy50eXBlc1tuYW1lXS53cmFwcGVycyA9IGV4dGVuZGVkVHlwZS53cmFwcGVycztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|