tuain-ng-forms-lib 0.12.20 → 0.12.30
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/bundles/tuain-ng-forms-lib.umd.js +286 -111
- package/bundles/tuain-ng-forms-lib.umd.js.map +1 -1
- package/esm2015/lib/classes/forms/action.js +2 -2
- package/esm2015/lib/classes/forms/element.js +4 -4
- package/esm2015/lib/classes/forms/field.js +204 -100
- package/esm2015/lib/classes/forms/form.js +9 -1
- package/esm2015/lib/classes/forms/subsection.js +2 -2
- package/esm2015/lib/classes/forms/table/table.js +2 -2
- package/esm2015/lib/components/elements/field.component.js +30 -2
- package/esm2015/lib/components/forms/basic-form.js +16 -6
- package/fesm2015/tuain-ng-forms-lib.js +261 -111
- package/fesm2015/tuain-ng-forms-lib.js.map +1 -1
- package/lib/classes/forms/element.d.ts +1 -1
- package/lib/classes/forms/field.d.ts +44 -16
- package/lib/classes/forms/form.d.ts +2 -0
- package/lib/components/elements/field.component.d.ts +16 -0
- package/lib/components/forms/basic-form.d.ts +4 -2
- package/package.json +1 -1
- package/tuain-ng-forms-lib.metadata.json +1 -1
|
@@ -17,76 +17,206 @@ const FIELD_ERR_MSG = 'errorMessage';
|
|
|
17
17
|
const FIELD_TOOLTIP = 'tooltipText';
|
|
18
18
|
const FIELD_INFO = 'info';
|
|
19
19
|
const FIELD_EDITABLE = 'editable';
|
|
20
|
+
const FIELD_TYPES = {
|
|
21
|
+
boolean: 'BOOLEAN',
|
|
22
|
+
array: 'ARRAY',
|
|
23
|
+
check: 'CHECK',
|
|
24
|
+
date: 'DATE',
|
|
25
|
+
daterange: 'DATERANGE',
|
|
26
|
+
time: 'TIME',
|
|
27
|
+
timerange: 'TIMERANGE',
|
|
28
|
+
map: 'MAP',
|
|
29
|
+
number: 'NUMBER',
|
|
30
|
+
decimal: 'DECIMAL',
|
|
31
|
+
currency: 'CURRENCY',
|
|
32
|
+
select: 'SELECT',
|
|
33
|
+
typeahead: 'TYPEAHEAD',
|
|
34
|
+
text: 'TEXT',
|
|
35
|
+
password: 'PASSWORD',
|
|
36
|
+
label: 'LABEL',
|
|
37
|
+
html: 'HTML',
|
|
38
|
+
title: 'TITLE',
|
|
39
|
+
message: 'MESSAGE',
|
|
40
|
+
link: 'LINK',
|
|
41
|
+
warning: 'WARNING',
|
|
42
|
+
avatar: 'AVATAR',
|
|
43
|
+
email: 'EMAIL',
|
|
44
|
+
phone: 'PHONE',
|
|
45
|
+
};
|
|
46
|
+
const FIELD_TYPES_FORMATS = {
|
|
47
|
+
EMAIL: new RegExp('^\\w+([\\.-]?\\w+)@\\w+([\\.-]?\\w+)(\\.\\w{2,3})+$'),
|
|
48
|
+
};
|
|
49
|
+
const INTRINSIC_ERROR_MESSAGES = {
|
|
50
|
+
EMAIL: `El valor no corresponde a un correo válido`,
|
|
51
|
+
DEFAULT: `El valor no se ajusta al formato establecido`,
|
|
52
|
+
};
|
|
53
|
+
const DEFAULT_ERROR_TYPE = 'error';
|
|
54
|
+
const DEFAULT_CAPTURE_TYPE = 'INPUT';
|
|
55
|
+
const DEFAULT_ALIGNMENT = 'left';
|
|
56
|
+
const MONITORED_ATTRIBUTES = ['_maxLength', '_onValidation', 'captureType', 'fieldTitle', 'fieldType',
|
|
57
|
+
'errorMessage', 'errorType', 'errorCode', 'visibleLabel', 'fieldRequired', 'fieldOptions', '_fieldValue'];
|
|
20
58
|
const STD_MAX_LENGTH = 50;
|
|
21
59
|
const BIG_MAX_LENGTH = 500;
|
|
60
|
+
const fldAttr = {
|
|
61
|
+
validateOnServer: 'validateOnServer',
|
|
62
|
+
value: '_fieldValue',
|
|
63
|
+
minValue: '_minValue',
|
|
64
|
+
maxValue: '_maxValue',
|
|
65
|
+
maxLength: '_maxLength',
|
|
66
|
+
onValidation: '_onValidation',
|
|
67
|
+
intrinsicErrorMessage: '_intrinsicErrorMessage',
|
|
68
|
+
code: 'fieldCode',
|
|
69
|
+
info: 'fieldInfo',
|
|
70
|
+
defaultValue: 'defaultValue',
|
|
71
|
+
defaultEditable: 'defaultEditable',
|
|
72
|
+
customAttributes: 'customAttributes',
|
|
73
|
+
visibleLabel: 'visibleLabel',
|
|
74
|
+
required: 'fieldRequired',
|
|
75
|
+
hasChanged: 'hasChanged',
|
|
76
|
+
outputOnly: 'outputOnly',
|
|
77
|
+
captureType: 'captureType',
|
|
78
|
+
title: 'fieldTitle',
|
|
79
|
+
type: 'fieldType',
|
|
80
|
+
alignment: 'fieldAlignment',
|
|
81
|
+
format: 'fieldFormat',
|
|
82
|
+
externalValue: 'externalValue',
|
|
83
|
+
tooltipText: 'tooltipText',
|
|
84
|
+
errorType: 'errorType',
|
|
85
|
+
errorCode: 'errorCode',
|
|
86
|
+
errorMessage: 'errorMessage',
|
|
87
|
+
options: 'fieldOptions',
|
|
88
|
+
};
|
|
22
89
|
export class FieldDescriptor extends FormElement {
|
|
23
90
|
constructor(inputFieldReceived) {
|
|
24
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
91
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
25
92
|
super(inputFieldReceived);
|
|
26
93
|
this._editionFinish = new Subject();
|
|
27
94
|
this._editionPartial = new Subject();
|
|
28
95
|
this._detailRequest = new Subject();
|
|
29
|
-
this.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
this.
|
|
33
|
-
this.
|
|
34
|
-
this.captureType =
|
|
35
|
-
this.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
this.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.
|
|
49
|
-
this.
|
|
50
|
-
this.
|
|
51
|
-
this.
|
|
52
|
-
this.
|
|
53
|
-
this.
|
|
96
|
+
this._attributeChange = new Subject();
|
|
97
|
+
this.elementType = componentConstants.ELEMENTTYPE_FIELD;
|
|
98
|
+
const fld = (inputFieldReceived) ? inputFieldReceived : {};
|
|
99
|
+
this.setAttr(fldAttr.code, fld.fieldCode);
|
|
100
|
+
this.setAttr(fldAttr.title, (_a = fld.fieldTitle) !== null && _a !== void 0 ? _a : this.fieldCode);
|
|
101
|
+
this.setAttr(fldAttr.captureType, (_b = fld.captureType) !== null && _b !== void 0 ? _b : DEFAULT_CAPTURE_TYPE);
|
|
102
|
+
this.setAttr(fldAttr.defaultValue, (_c = fld.defaultValue) !== null && _c !== void 0 ? _c : null);
|
|
103
|
+
const defaultTypeAlignment = (tableFieldStyles[this.fieldType] != null)
|
|
104
|
+
? tableFieldStyles[this.fieldType]['text-align'] : DEFAULT_ALIGNMENT;
|
|
105
|
+
const fieldAlignment = (fld.alignment != null) ? fld.alignment.toLowerCase() : defaultTypeAlignment;
|
|
106
|
+
this.setAttr(fldAttr.alignment, fieldAlignment);
|
|
107
|
+
this.setAttr(fldAttr.info, fld.info || '');
|
|
108
|
+
let fieldFormat;
|
|
109
|
+
try {
|
|
110
|
+
fieldFormat = (fld.format) ? new RegExp(fld.format) : null;
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
fieldFormat = null;
|
|
114
|
+
}
|
|
115
|
+
this.setAttr(fldAttr.format, fieldFormat);
|
|
116
|
+
this.setAttr(fldAttr.validateOnServer, (_d = fld.serverAction) !== null && _d !== void 0 ? _d : false);
|
|
117
|
+
this.setAttr(fldAttr.customAttributes, (_e = fld.customAttributes) !== null && _e !== void 0 ? _e : {});
|
|
118
|
+
this.setAttr(fldAttr.tooltipText, fld.tooltip || '');
|
|
119
|
+
this.setAttr(fldAttr.defaultEditable, this.enabled);
|
|
120
|
+
this.setAttr(fldAttr.required, (_f = fld.required) !== null && _f !== void 0 ? _f : false);
|
|
121
|
+
this.setError(fld.errorCode, fld.errorMessage, (_g = fld.errorType) !== null && _g !== void 0 ? _g : DEFAULT_ERROR_TYPE);
|
|
122
|
+
this.setAttr(fldAttr.outputOnly, (_h = fld.outputOnly) !== null && _h !== void 0 ? _h : false);
|
|
123
|
+
const maxLength = (_j = fld.maxLength) !== null && _j !== void 0 ? _j : (this.captureType === 'TEXTAREA' ? BIG_MAX_LENGTH : STD_MAX_LENGTH);
|
|
124
|
+
this.setAttr(fldAttr.maxLength, maxLength);
|
|
125
|
+
this.setAttr(fldAttr.intrinsicErrorMessage, (_k = INTRINSIC_ERROR_MESSAGES[this.fieldType]) !== null && _k !== void 0 ? _k : INTRINSIC_ERROR_MESSAGES.DEFAULT);
|
|
126
|
+
this.setFieldType(fld.fieldTypeCode);
|
|
127
|
+
this.setEditable((_l = fld.editable) !== null && _l !== void 0 ? _l : true);
|
|
128
|
+
this.setVisibleLabel((_m = fld.visibleLabel) !== null && _m !== void 0 ? _m : true);
|
|
129
|
+
this.setVisibility(fld.visible);
|
|
130
|
+
this.setFieldOptions(fld.fieldOptions);
|
|
131
|
+
this.setValue(fld.fieldValue || this.defaultValue || '');
|
|
54
132
|
}
|
|
55
133
|
get name() { return this.fieldCode; }
|
|
56
134
|
get editionFinish() { return this._editionFinish; }
|
|
135
|
+
get attributeChange() { return this._attributeChange; }
|
|
57
136
|
get editionPartial() { return this._editionPartial; }
|
|
58
137
|
get detailRequest() { return this._detailRequest; }
|
|
138
|
+
get validating() { return this._onValidation; }
|
|
139
|
+
set validating(isValidating) { this.setAttr(fldAttr.onValidation, isValidating); }
|
|
140
|
+
setIntrinsicErrorMessage(message) { this.setAttr(fldAttr.intrinsicErrorMessage, message); }
|
|
141
|
+
set intrinsicErrorMessage(message) { this.setIntrinsicErrorMessage(message); }
|
|
59
142
|
get fieldValue() { return this.getValue(); }
|
|
60
143
|
get required() { return this.fieldRequired; }
|
|
61
|
-
set required(required) { this.
|
|
144
|
+
set required(required) { this.setAttr(fldAttr.required, required !== null && required !== void 0 ? required : false); }
|
|
62
145
|
get maxLength() { return (this._maxLength > 0) ? this._maxLength.toString() : ''; }
|
|
63
146
|
set maxLength(requiredMaxLength) {
|
|
64
147
|
if (typeof requiredMaxLength === 'string') {
|
|
65
|
-
this.
|
|
148
|
+
this.setAttr(fldAttr.maxLength, parseInt(requiredMaxLength, 10));
|
|
66
149
|
}
|
|
67
150
|
else if (typeof requiredMaxLength === 'number') {
|
|
68
|
-
this.
|
|
151
|
+
this.setAttr(fldAttr.maxLength, requiredMaxLength);
|
|
69
152
|
}
|
|
70
153
|
}
|
|
71
154
|
get value() { return this.getValue(); }
|
|
72
155
|
set value(newValue) { this.setValue(newValue); }
|
|
73
|
-
notifyEditionPartial() {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
156
|
+
notifyEditionPartial() {
|
|
157
|
+
const intrinsicValidation = true;
|
|
158
|
+
this._editionPartial.next({ code: this.fieldCode, intrinsicValidation });
|
|
159
|
+
}
|
|
160
|
+
notifyEditionFinish() {
|
|
161
|
+
var _a, _b, _c, _d;
|
|
162
|
+
let intrinsicValidation = true;
|
|
163
|
+
const fieldDefaultFormat = (_a = FIELD_TYPES_FORMATS === null || FIELD_TYPES_FORMATS === void 0 ? void 0 : FIELD_TYPES_FORMATS[this.fieldType]) !== null && _a !== void 0 ? _a : null;
|
|
164
|
+
const fieldValue = this.getValue();
|
|
165
|
+
if (fieldValue && (fieldDefaultFormat || this.fieldFormat)) {
|
|
166
|
+
intrinsicValidation = ((_b = fieldDefaultFormat === null || fieldDefaultFormat === void 0 ? void 0 : fieldDefaultFormat.test(fieldValue)) !== null && _b !== void 0 ? _b : true)
|
|
167
|
+
&& ((_d = (_c = this.fieldFormat) === null || _c === void 0 ? void 0 : _c.test(fieldValue)) !== null && _d !== void 0 ? _d : true);
|
|
168
|
+
if (!intrinsicValidation) {
|
|
169
|
+
this.setError('99', this._intrinsicErrorMessage);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
this._editionFinish.next({ code: this.fieldCode, intrinsicValidation });
|
|
173
|
+
}
|
|
174
|
+
setAttr(name, value) {
|
|
175
|
+
if (this[name]) {
|
|
176
|
+
this[name] = value;
|
|
177
|
+
}
|
|
178
|
+
if (MONITORED_ATTRIBUTES.includes(name)) {
|
|
179
|
+
this._attributeChange.next({ name, value });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
notifyEditionDetailRequest() {
|
|
183
|
+
this._detailRequest.next(this.fieldCode);
|
|
184
|
+
}
|
|
185
|
+
setVisibleLabel(visibleLabel) { this.setAttr(fldAttr.visibleLabel, visibleLabel); }
|
|
186
|
+
showLabel() { this.setVisibleLabel(true); }
|
|
187
|
+
hideLabel() { this.setVisibleLabel(false); }
|
|
188
|
+
setChanged(hasChanged) { this.setAttr(fldAttr.hasChanged, hasChanged); }
|
|
189
|
+
changed() { this.setChanged(true); }
|
|
79
190
|
getRawValue() { return this._fieldValue; }
|
|
80
|
-
setLabel(label) { this.
|
|
191
|
+
setLabel(label) { this.setAttr(fldAttr.title, label); }
|
|
81
192
|
clean() { this.setValue(this.defaultValue || ''); }
|
|
82
193
|
get backend() { return this.validateOnServer; }
|
|
83
|
-
setVisibleLabel(visibleLabel) { this.visibleLabel = visibleLabel; }
|
|
84
194
|
setEditable(editable = true) { (editable) ? this.enable() : this.disable(); }
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
195
|
+
hasError() { return this.errorCode !== '00'; }
|
|
196
|
+
setError(code, message, type = DEFAULT_ERROR_TYPE) {
|
|
197
|
+
this.setAttr(fldAttr.errorCode, code !== null && code !== void 0 ? code : '00');
|
|
198
|
+
this.setAttr(fldAttr.errorType, (this.errorCode === '00') ? '' : type);
|
|
199
|
+
this.setAttr(fldAttr.errorMessage, message !== null && message !== void 0 ? message : '');
|
|
200
|
+
}
|
|
201
|
+
getError() { return { type: this.errorType, code: this.errorCode, message: this.errorMessage }; }
|
|
202
|
+
get error() { return this.getError(); }
|
|
203
|
+
set error(errorObj) { var _a; this.setError(errorObj.code, errorObj.message, (_a = errorObj.type) !== null && _a !== void 0 ? _a : DEFAULT_ERROR_TYPE); }
|
|
204
|
+
getErrorCode() { return this.getError().code; }
|
|
205
|
+
setErrorCode(code) { this.setError(code, this.errorMessage); }
|
|
206
|
+
getErrorMessage() { return this.getError().message; }
|
|
207
|
+
setErrorMessage(msg) { this.setError(this.errorCode, msg); }
|
|
208
|
+
isEmpty() {
|
|
209
|
+
const fieldCurrentValue = this.getValue();
|
|
210
|
+
if (fieldCurrentValue === undefined || fieldCurrentValue === null) {
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
if ((this.fieldType === FIELD_TYPES.array || this.fieldType === FIELD_TYPES.phone)
|
|
214
|
+
&& Array.isArray(fieldCurrentValue) && fieldCurrentValue.length === 0) {
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
;
|
|
218
|
+
return fieldCurrentValue === '';
|
|
219
|
+
}
|
|
90
220
|
getValue() {
|
|
91
221
|
var _a;
|
|
92
222
|
switch (this.fieldType) {
|
|
@@ -103,68 +233,39 @@ export class FieldDescriptor extends FormElement {
|
|
|
103
233
|
}
|
|
104
234
|
updateFromServer(fld) {
|
|
105
235
|
var _a;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
this.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
(this.
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
(this.
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
(this.
|
|
123
|
-
|
|
124
|
-
if (FIELD_INFO in fld) {
|
|
125
|
-
(this.fieldInfo = fld.info);
|
|
126
|
-
}
|
|
127
|
-
if (FIELD_EDITABLE in fld) {
|
|
128
|
-
this.setEditable(fld.editable);
|
|
129
|
-
}
|
|
130
|
-
if (FIELD_TITLE in fld) {
|
|
131
|
-
this.setLabel(fld.fieldTitle.toString());
|
|
132
|
-
}
|
|
133
|
-
if (FIELD_VALUE in fld) {
|
|
134
|
-
this.hasChanged = false;
|
|
135
|
-
this.setValue(fld.fieldValue);
|
|
136
|
-
}
|
|
137
|
-
if (FIELD_OPTIONS in fld) {
|
|
138
|
-
this.setFieldOptions(fld.fieldOptions);
|
|
139
|
-
}
|
|
140
|
-
if (FIELD_CAPTURE_TYPE in fld) {
|
|
141
|
-
this.captureType = fld.captureType || 'INPUT';
|
|
142
|
-
}
|
|
143
|
-
if (FIELD_TYPE in fld) {
|
|
144
|
-
this.setFieldType(fld.fieldTypeCode);
|
|
145
|
-
}
|
|
146
|
-
if (FIELD_MAX_LENGTH in fld) {
|
|
147
|
-
this.maxLength = fld.maxLength;
|
|
236
|
+
const fieldKeys = Object.keys(fld);
|
|
237
|
+
for (let index = 0; index < fieldKeys.length; index++) {
|
|
238
|
+
const attrName = fieldKeys[index];
|
|
239
|
+
const attrValue = fld[attrName];
|
|
240
|
+
(attrName === FIELD_VISIBLE) && this.setVisibility(attrValue);
|
|
241
|
+
(attrName === FIELD_LABEL_VISIBLE) && this.setVisibleLabel(fld.visibleLabel);
|
|
242
|
+
(attrName === FIELD_REQUIRED) && this.setAttr(fldAttr.required, (_a = fld.required) !== null && _a !== void 0 ? _a : false);
|
|
243
|
+
(attrName === FIELD_ERR_CODE) && this.setAttr(fldAttr.errorCode, fld.errorCode);
|
|
244
|
+
(attrName === FIELD_ERR_MSG) && this.setAttr(fldAttr.errorMessage, fld.errorMessage);
|
|
245
|
+
(attrName === FIELD_TOOLTIP) && this.setAttr(fldAttr.tooltipText, fld.tooltip);
|
|
246
|
+
(attrName === FIELD_INFO) && this.setAttr(fldAttr.info, fld.info);
|
|
247
|
+
(attrName === FIELD_EDITABLE) && this.setEditable(fld.editable);
|
|
248
|
+
(attrName === FIELD_TITLE) && this.setLabel(fld.fieldTitle.toString());
|
|
249
|
+
(attrName === FIELD_VALUE) && (this.setValue(fld._fieldValue) && this.setChanged(false));
|
|
250
|
+
(attrName === FIELD_OPTIONS) && this.setFieldOptions(fld.fieldOptions);
|
|
251
|
+
(attrName === FIELD_CAPTURE_TYPE) && this.setAttr(fldAttr.captureType, fld.captureType || 'INPUT');
|
|
252
|
+
(attrName === FIELD_TYPE) && this.setFieldType(fld.fieldTypeCode);
|
|
253
|
+
(attrName === FIELD_MAX_LENGTH) && this.setAttr(fldAttr.maxLength, fld.maxLength);
|
|
148
254
|
}
|
|
149
255
|
}
|
|
150
256
|
setFieldType(inputFieldType) {
|
|
151
|
-
this.
|
|
152
|
-
/**
|
|
153
|
-
* Se elimina la validación de que sea un tipo conocido
|
|
154
|
-
* this.fieldType = (inputFieldType && FIELDTYPES.includes(inputFieldType))
|
|
155
|
-
* ? inputFieldType : componentConstants.FIELDTYPE_TEXT;
|
|
156
|
-
*/
|
|
257
|
+
this.setAttr(fldAttr.type, inputFieldType);
|
|
157
258
|
}
|
|
158
259
|
format() {
|
|
159
260
|
if (this.fieldType === componentConstants.FIELDTYPE_CURRENCY) {
|
|
160
|
-
this.
|
|
261
|
+
this.setAttr(fldAttr.value, formatCurrency(this._fieldValue));
|
|
161
262
|
}
|
|
162
263
|
}
|
|
163
264
|
setMinValue(minValue) {
|
|
164
265
|
var _a, _b, _c;
|
|
165
266
|
if (this.fieldType === componentConstants.FIELDTYPE_DATE
|
|
166
267
|
&& ((_a = this.widget) === null || _a === void 0 ? void 0 : _a.setMinValue)) {
|
|
167
|
-
this.
|
|
268
|
+
this.setAttr(fldAttr.minValue, minValue);
|
|
168
269
|
if (!minValue) {
|
|
169
270
|
(_b = this.widget) === null || _b === void 0 ? void 0 : _b.setMinValue(false);
|
|
170
271
|
}
|
|
@@ -178,7 +279,7 @@ export class FieldDescriptor extends FormElement {
|
|
|
178
279
|
var _a, _b, _c;
|
|
179
280
|
if (this.fieldType === componentConstants.FIELDTYPE_DATE
|
|
180
281
|
&& ((_a = this.widget) === null || _a === void 0 ? void 0 : _a.setMaxValue)) {
|
|
181
|
-
this.
|
|
282
|
+
this.setAttr(fldAttr.maxValue, maxValue);
|
|
182
283
|
if (!maxValue) {
|
|
183
284
|
(_b = this.widget) === null || _b === void 0 ? void 0 : _b.setMaxValue(false);
|
|
184
285
|
}
|
|
@@ -198,21 +299,23 @@ export class FieldDescriptor extends FormElement {
|
|
|
198
299
|
|| !Array.isArray(newOptions)) {
|
|
199
300
|
return;
|
|
200
301
|
}
|
|
201
|
-
|
|
302
|
+
let fieldOptions = newOptions.map(option => {
|
|
202
303
|
if (option.text !== undefined && option.text !== null
|
|
203
304
|
&& option.value !== undefined && option.value !== null) {
|
|
204
305
|
return { fieldOptionValue: option.text, fieldOptionId: option.value };
|
|
205
306
|
}
|
|
206
307
|
return Object.assign({}, option);
|
|
207
308
|
});
|
|
208
|
-
|
|
309
|
+
fieldOptions = (fieldOptions && Array.isArray(fieldOptions)
|
|
209
310
|
&& fieldOptions.length > 0) ? fieldOptions : [];
|
|
311
|
+
this.setAttr(fldAttr.options, fieldOptions);
|
|
210
312
|
if (this.fieldType === componentConstants.FIELDTYPE_ARRAY && this.widget) {
|
|
211
313
|
return (_a = this.widget) === null || _a === void 0 ? void 0 : _a.refereshContent();
|
|
212
314
|
}
|
|
213
315
|
if (this._fieldValue) {
|
|
214
316
|
if (this.fieldType === componentConstants.FIELDTYPE_ARRAY && Array.isArray(this._fieldValue)) {
|
|
215
|
-
|
|
317
|
+
const fieldValue = (_b = this._fieldValue) === null || _b === void 0 ? void 0 : _b.filter(item => this.fieldOptions.find(opt => opt.fieldOptionId === item));
|
|
318
|
+
this.setAttr(fldAttr.value, fieldValue);
|
|
216
319
|
}
|
|
217
320
|
else {
|
|
218
321
|
const valInOptions = this.fieldOptions
|
|
@@ -232,7 +335,7 @@ export class FieldDescriptor extends FormElement {
|
|
|
232
335
|
setValue(newValue, widgetUpdate = true) {
|
|
233
336
|
var _a;
|
|
234
337
|
if (typeof newValue === UNDEFINED || newValue === null) {
|
|
235
|
-
return;
|
|
338
|
+
return true;
|
|
236
339
|
}
|
|
237
340
|
let newFinalValue;
|
|
238
341
|
switch (this.fieldType) {
|
|
@@ -272,9 +375,10 @@ export class FieldDescriptor extends FormElement {
|
|
|
272
375
|
break;
|
|
273
376
|
}
|
|
274
377
|
if (this._fieldValue !== newFinalValue) {
|
|
275
|
-
this.
|
|
276
|
-
this.
|
|
378
|
+
this.setChanged(true);
|
|
379
|
+
this.setAttr(fldAttr.value, newFinalValue);
|
|
277
380
|
}
|
|
381
|
+
return true;
|
|
278
382
|
}
|
|
279
383
|
}
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9jbGFzc2VzL2Zvcm1zL2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUU5QixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUM7QUFDakMsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDO0FBQ3JDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztBQUN6QyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUM7QUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDO0FBQzNDLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUNsQyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUM7QUFDbkMsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDO0FBQ3JDLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUNwQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDMUIsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDO0FBRWxDLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFFM0IsTUFBTSxPQUFPLGVBQWdCLFNBQVEs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QUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLEVBQUU7d0JBQ2xDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7cUJBQ2hDO29CQUNELGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNyQztxQkFBTTtvQkFDTCxhQUFhLEdBQUcsUUFBUSxDQUFDO2lCQUMxQjtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxrQkFBa0IsQ0FBQyxhQUFhO2dCQUNuQyxhQUFhLEdBQUcsUUFBUSxDQUFDO2dCQUN6QixJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLFlBQVksRUFBRTtvQkFDaEQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9DLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztpQkFDL0M7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssa0JBQWtCLENBQUMsa0JBQWtCO2dCQUN4QyxhQUFhLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDakQsTUFBTTtZQUNSO2dCQUNFLGFBQWEsR0FBRyxRQUFRLENBQUM7Z0JBQ3pCLE1BQU07U0FDVDtRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxhQUFhLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUM7U0FDbEM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb21wb25lbnRDb25zdGFudHMsIHRhYmxlRmllbGRTdHlsZXMgfSBmcm9tICcuL2Zvcm0uY29uc3RhbnRzJztcbmltcG9ydCB7IEZvcm1FbGVtZW50IH0gZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5IH0gZnJvbSAnLi4vdXRpbGl0aWVzJztcblxuY29uc3QgVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IEZJRUxEX1ZBTFVFID0gJ2ZpZWxkVmFsdWUnO1xuY29uc3QgRklFTERfT1BUSU9OUyA9ICdmaWVsZE9wdGlvbnMnO1xuY29uc3QgRklFTERfVElUTEUgPSAnZmllbGRUaXRsZSc7XG5jb25zdCBGSUVMRF9DQVBUVVJFX1RZUEUgPSAnY2FwdHVyZVR5cGUnO1xuY29uc3QgRklFTERfVFlQRSA9ICdmaWVsZFR5cGVDb2RlJztcbmNvbnN0IEZJRUxEX01BWF9MRU5HVEggPSAnbWF4TGVuZ3RoJztcbmNvbnN0IEZJRUxEX1ZJU0lCTEUgPSAndmlzaWJsZSc7XG5jb25zdCBGSUVMRF9MQUJFTF9WSVNJQkxFID0gJ3Zpc2libGVMYWJlbCc7XG5jb25zdCBGSUVMRF9SRVFVSVJFRCA9ICdyZXF1aXJlZCc7XG5jb25zdCBGSUVMRF9FUlJfQ09ERSA9ICdlcnJvckNvZGUnO1xuY29uc3QgRklFTERfRVJSX01TRyA9ICdlcnJvck1lc3NhZ2UnO1xuY29uc3QgRklFTERfVE9PTFRJUCA9ICd0b29sdGlwVGV4dCc7XG5jb25zdCBGSUVMRF9JTkZPID0gJ2luZm8nO1xuY29uc3QgRklFTERfRURJVEFCTEUgPSAnZWRpdGFibGUnO1xuXG5jb25zdCBTVERfTUFYX0xFTkdUSCA9IDUwO1xuY29uc3QgQklHX01BWF9MRU5HVEggPSA1MDA7XG5cbmV4cG9ydCBjbGFzcyBGaWVsZERlc2NyaXB0b3IgZXh0ZW5kcyBGb3JtRWxlbWVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRpb25GaW5pc2ggPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VkaXRpb25QYXJ0aWFsID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXRhaWxSZXF1ZXN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIF9maWVsZFZhbHVlOiBhbnk7XG4gIGhhc0NoYW5nZWQ6IGJvb2xlYW47XG4gIG91dHB1dE9ubHk6IGJvb2xlYW47XG4gIF9taW5WYWx1ZTogYW55O1xuICBfbWF4VmFsdWU6IGFueTtcbiAgX21heExlbmd0aDogbnVtYmVyO1xuXG4gIGZpZWxkQ29kZTogc3RyaW5nO1xuICBjYXB0dXJlVHlwZTogc3RyaW5nO1xuICBmaWVsZFRpdGxlOiBzdHJpbmc7XG4gIGZpZWxkVHlwZTogc3RyaW5nO1xuICBmaWVsZEFsaWdubWVudDogc3RyaW5nO1xuICBmaWVsZEZvcm1hdDogc3RyaW5nO1xuICBleHRlcm5hbFZhbHVlOiBhbnk7XG4gIGZpZWxkSW5mbzogc3RyaW5nO1xuICB0b29sdGlwVGV4dDogc3RyaW5nO1xuICBkZWZhdWx0VmFsdWU6IHN0cmluZztcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIGVycm9yQ29kZTogc3RyaW5nO1xuICBjdXN0b21BdHRyaWJ1dGVzOiBhbnk7XG5cbiAgdmFsaWRhdGVPblNlcnZlcjogYm9vbGVhbjtcbiAgdmlzaWJsZUxhYmVsOiBib29sZWFuO1xuICBkZWZhdWx0RWRpdGFibGU6IGJvb2xlYW47XG4gIGZpZWxkUmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgZmllbGRPcHRpb25zOiB7XG4gICAgZmllbGRPcHRpb25WYWx1ZTogc3RyaW5nO1xuICAgIGZpZWxkT3B0aW9uSWQ6IHN0cmluZztcbiAgfVtdO1xuXG4gIGNvbnN0cnVjdG9yKGlucHV0RmllbGRSZWNlaXZlZCkge1xuICAgIHN1cGVyKGlucHV0RmllbGRSZWNlaXZlZCk7XG4gICAgdGhpcy50eXBlID0gY29tcG9uZW50Q29uc3RhbnRzLkVMRU1FTlRUWVBFX0ZJRUxEO1xuXG4gICAgY29uc3QgZmllbGRSZWNlaXZlZCA9IChpbnB1dEZpZWxkUmVjZWl2ZWQpID8gaW5wdXRGaWVsZFJlY2VpdmVkIDoge307XG4gICAgdGhpcy5zZXRFZGl0YWJsZShmaWVsZFJlY2VpdmVkPy5lZGl0YWJsZSA/PyB0cnVlKTtcbiAgICB0aGlzLmZpZWxkQ29kZSA9IGZpZWxkUmVjZWl2ZWQuZmllbGRDb2RlO1xuICAgIHRoaXMuZmllbGRUaXRsZSA9IGZpZWxkUmVjZWl2ZWQuZmllbGRUaXRsZSB8fCB0aGlzLmZpZWxkQ29kZTtcbiAgICB0aGlzLmNhcHR1cmVUeXBlID0gZmllbGRSZWNlaXZlZC5jYXB0dXJlVHlwZSB8fCAnSU5QVVQnO1xuICAgIHRoaXMuc2V0RmllbGRUeXBlKGZpZWxkUmVjZWl2ZWQuZmllbGRUeXBlQ29kZSk7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBmaWVsZFJlY2VpdmVkLmRlZmF1bHRWYWx1ZSB8fCBudWxsO1xuICAgIHRoaXMuX21heExlbmd0aCA9IGZpZWxkUmVjZWl2ZWQubWF4TGVuZ3RoID8/ICggdGhpcy5jYXB0dXJlVHlwZSA9PT0gJ1RFWFRBUkVBJyA/IEJJR19NQVhfTEVOR1RIIDogU1REX01BWF9MRU5HVEgpO1xuXG4gICAgdGhpcy5zZXRWYWx1ZShmaWVsZFJlY2VpdmVkLmZpZWxkVmFsdWUgfHwgdGhpcy5kZWZhdWx0VmFsdWUgfHwgJycpO1xuICAgIGNvbnN0IGRlZmF1bHRUeXBlQWxpZ25tZW50ID0gKHRhYmxlRmllbGRTdHlsZXNbdGhpcy5maWVsZFR5cGVdICE9IG51bGwpID8gdGFibGVGaWVsZFN0eWxlc1t0aGlzLmZpZWxkVHlwZV1bJ3RleHQtYWxpZ24nXSA6ICdsZWZ0JztcbiAgICB0aGlzLmZpZWxkQWxpZ25tZW50ID0gKGZpZWxkUmVjZWl2ZWQuYWxpZ25tZW50ICE9IG51bGwpID8gZmllbGRSZWNlaXZlZC5hbGlnbm1lbnQudG9Mb3dlckNhc2UoKSA6IGRlZmF1bHRUeXBlQWxpZ25tZW50O1xuICAgIHRoaXMuZmllbGRJbmZvID0gZmllbGRSZWNlaXZlZC5pbmZvIHx8ICcnO1xuICAgIHRoaXMuZmllbGRGb3JtYXQgPSBmaWVsZFJlY2VpdmVkLmZvcm1hdCB8fCAnJztcbiAgICB0aGlzLnZhbGlkYXRlT25TZXJ2ZXIgPSBmaWVsZFJlY2VpdmVkPy5zZXJ2ZXJBY3Rpb24gPz8gZmFsc2U7XG4gICAgdGhpcy5jdXN0b21BdHRyaWJ1dGVzID0gZmllbGRSZWNlaXZlZD8uY3VzdG9tQXR0cmlidXRlcyA/PyBudWxsO1xuXG4gICAgdGhpcy5zZXRWaXNpYmlsaXR5KGZpZWxkUmVjZWl2ZWQudmlzaWJsZSk7XG4gICAgdGhpcy52aXNpYmxlTGFiZWwgPSBmaWVsZFJlY2VpdmVkPy52aXNpYmxlTGFiZWwgPz8gdHJ1ZTtcbiAgICB0aGlzLnRvb2x0aXBUZXh0ID0gZmllbGRSZWNlaXZlZC50b29sdGlwIHx8ICcnO1xuICAgIHRoaXMuZGVmYXVsdEVkaXRhYmxlID0gdGhpcy5lbmFibGVkO1xuICAgIHRoaXMuZmllbGRSZXF1aXJlZCA9IGZpZWxkUmVjZWl2ZWQ/LnJlcXVpcmVkID8/IGZhbHNlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmllbGRSZWNlaXZlZC5lcnJvck1lc3NhZ2UgfHwgJyc7XG4gICAgdGhpcy5lcnJvckNvZGUgPSBmaWVsZFJlY2VpdmVkLmVycm9yQ29kZSB8fCAnMDAnO1xuICAgIHRoaXMub3V0cHV0T25seSA9IGZpZWxkUmVjZWl2ZWQ/Lm91dHB1dE9ubHkgPz8gZmFsc2U7XG4gICAgdGhpcy5zZXRGaWVsZE9wdGlvbnMoZmllbGRSZWNlaXZlZC5maWVsZE9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLmZpZWxkQ29kZTsgfVxuICBnZXQgZWRpdGlvbkZpbmlzaCgpIHsgcmV0dXJuIHRoaXMuX2VkaXRpb25GaW5pc2g7IH1cbiAgZ2V0IGVkaXRpb25QYXJ0aWFsKCkgeyByZXR1cm4gdGhpcy5fZWRpdGlvblBhcnRpYWw7IH1cbiAgZ2V0IGRldGFpbFJlcXVlc3QoKSB7IHJldHVybiB0aGlzLl9kZXRhaWxSZXF1ZXN0OyB9XG5cbiAgZ2V0IGZpZWxkVmFsdWUoKSB7IHJldHVybiB0aGlzLmdldFZhbHVlKCk7IH1cbiAgZ2V0IHJlcXVpcmVkKCkgeyByZXR1cm4gdGhpcy5maWVsZFJlcXVpcmVkOyB9XG4gIHNldCByZXF1aXJlZChyZXF1aXJlZDogYm9vbGVhbikgeyB0aGlzLmZpZWxkUmVxdWlyZWQgPSByZXF1aXJlZCA/PyBmYWxzZTsgfVxuICBnZXQgbWF4TGVuZ3RoKCkgeyByZXR1cm4gKHRoaXMuX21heExlbmd0aCA+IDApID8gdGhpcy5fbWF4TGVuZ3RoLnRvU3RyaW5nKCkgOiAnJzsgfVxuICBzZXQgbWF4TGVuZ3RoKHJlcXVpcmVkTWF4TGVuZ3RoOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHJlcXVpcmVkTWF4TGVuZ3RoID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fbWF4TGVuZ3RoID0gcGFyc2VJbnQocmVxdWlyZWRNYXhMZW5ndGgsIDEwKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1aXJlZE1heExlbmd0aCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuX21heExlbmd0aCA9IHJlcXVpcmVkTWF4TGVuZ3RoO1xuICAgIH1cbiAgfVxuICBnZXQgdmFsdWUoKSB7IHJldHVybiB0aGlzLmdldFZhbHVlKCk7IH1cbiAgc2V0IHZhbHVlKG5ld1ZhbHVlKSB7IHRoaXMuc2V0VmFsdWUobmV3VmFsdWUpOyB9XG5cbiAgbm90aWZ5RWRpdGlvblBhcnRpYWwoKSB7IHRoaXMuX2VkaXRpb25QYXJ0aWFsLm5leHQodGhpcy5maWVsZENvZGUpOyB9XG4gIG5vdGlmeUVkaXRpb25GaW5pc2goKSB7IHRoaXMuX2VkaXRpb25GaW5pc2gubmV4dCh0aGlzLmZpZWxkQ29kZSk7IH1cbiAgbm90aWZ5RWRpdGlvbkRldGFpbFJlcXVlc3QoKSB7IHRoaXMuX2RldGFpbFJlcXVlc3QubmV4dCh0aGlzLmZpZWxkQ29kZSk7IH1cblxuICBzaG93TGFiZWwoKSB7IHRoaXMudmlzaWJsZUxhYmVsID0gdHJ1ZTsgfVxuICBoaWRlTGFiZWwoKSB7IHRoaXMudmlzaWJsZUxhYmVsID0gZmFsc2U7IH1cbiAgY2hhbmdlZCgpIHsgdGhpcy5oYXNDaGFuZ2VkID0gdHJ1ZTsgfVxuICBnZXRSYXdWYWx1ZSgpIHsgcmV0dXJuIHRoaXMuX2ZpZWxkVmFsdWU7IH1cbiAgc2V0TGFiZWwobGFiZWwpIHsgdGhpcy5maWVsZFRpdGxlID0gbGFiZWw7IH1cbiAgY2xlYW4oKSB7IHRoaXMuc2V0VmFsdWUodGhpcy5kZWZhdWx0VmFsdWUgfHwgJycpOyB9XG4gIGdldCBiYWNrZW5kKCkgeyByZXR1cm4gdGhpcy52YWxpZGF0ZU9uU2VydmVyOyB9XG5cbiAgc2V0VmlzaWJsZUxhYmVsKHZpc2libGVMYWJlbDogYm9vbGVhbikgeyB0aGlzLnZpc2libGVMYWJlbCA9IHZpc2libGVMYWJlbDsgfVxuICBzZXRFZGl0YWJsZShlZGl0YWJsZTogYm9vbGVhbiA9IHRydWUpIHsgKGVkaXRhYmxlKSA/IHRoaXMuZW5hYmxlKCkgOiB0aGlzLmRpc2FibGUoKTsgfVxuICBpc0VtcHR5KCkgeyByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpID09PSAnJyB8fCB0aGlzLmdldFZhbHVlKCkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmdldFZhbHVlKCkgPT09IG51bGw7IH1cblxuICBnZXRFcnJvckNvZGUoKSB7IHJldHVybiB0aGlzLmVycm9yQ29kZTsgfVxuICBzZXRFcnJvckNvZGUoY29kZSkgeyB0aGlzLmVycm9yQ29kZSA9IGNvZGU7IH1cbiAgZ2V0RXJyb3JNZXNzYWdlKCkgeyByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2U7IH1cbiAgc2V0RXJyb3JNZXNzYWdlKG1zZykgeyB0aGlzLmVycm9yTWVzc2FnZSA9IG1zZzsgfVxuXG4gIGdldFZhbHVlKCkge1xuICAgIHN3aXRjaCAodGhpcy5maWVsZFR5cGUpIHtcbiAgICAgIGNhc2UgY29tcG9uZW50Q29uc3RhbnRzLkZJRUxEVFlQRV9DSEVDSzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkVmFsdWUgPz8gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjb21wb25lbnRDb25zdGFudHMuRklFTERUWVBFX0NVUlJFTkNZOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRWYWx1ZS5yZXBsYWNlKCcsJywgJycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZFZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB1cGRhdGVGcm9tU2VydmVyKGZsZCkge1xuICAgIGlmIChGSUVMRF9WSVNJQkxFIGluIGZsZCkge1xuICAgICAgdGhpcy5zZXRWaXNpYmlsaXR5KGZsZC52aXNpYmxlKTtcbiAgICB9XG4gICAgaWYgKEZJRUxEX0xBQkVMX1ZJU0lCTEUgaW4gZmxkKSB7XG4gICAgICB0aGlzLnNldFZpc2libGVMYWJlbChmbGQudmlzaWJsZUxhYmVsKTtcbiAgICB9XG4gICAgaWYgKEZJRUxEX1JFUVVJUkVEIGluIGZsZCkge1xuICAgICAgdGhpcy5maWVsZFJlcXVpcmVkID0gZmxkLnJlcXVpcmVkID8/IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoRklFTERfRVJSX0NPREUgaW4gZmxkKSB7XG4gICAgICAodGhpcy5lcnJvckNvZGUgPSBmbGQuZXJyb3JDb2RlKTtcbiAgICB9XG4gICAgaWYgKEZJRUxEX0VSUl9NU0cgaW4gZmxkKSB7XG4gICAgICAodGhpcy5lcnJvck1lc3NhZ2UgPSBmbGQuZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKEZJRUxEX1RPT0xUSVAgaW4gZmxkKSB7XG4gICAgICAodGhpcy50b29sdGlwVGV4dCA9IGZsZC50b29sdGlwKTtcbiAgICB9XG4gICAgaWYgKEZJRUxEX0lORk8gaW4gZmxkKSB7XG4gICAgICAodGhpcy5maWVsZEluZm8gPSBmbGQuaW5mbyk7XG4gICAgfVxuICAgIGlmIChGSUVMRF9FRElUQUJMRSBpbiBmbGQpIHtcbiAgICAgIHRoaXMuc2V0RWRpdGFibGUoZmxkLmVkaXRhYmxlKTtcbiAgICB9XG4gICAgaWYgKEZJRUxEX1RJVExFIGluIGZsZCkge1xuICAgICAgdGhpcy5zZXRMYWJlbChmbGQuZmllbGRUaXRsZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKEZJRUxEX1ZBTFVFIGluIGZsZCkge1xuICAgICAgdGhpcy5oYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFZhbHVlKGZsZC5maWVsZFZhbHVlKTtcbiAgICB9XG4gICAgaWYgKEZJRUxEX09QVElPTlMgaW4gZmxkKSB7XG4gICAgICB0aGlzLnNldEZpZWxkT3B0aW9ucyhmbGQuZmllbGRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKEZJRUxEX0NBUFRVUkVfVFlQRSBpbiBmbGQpIHtcbiAgICAgIHRoaXMuY2FwdHVyZVR5cGUgPSBmbGQuY2FwdHVyZVR5cGUgfHwgJ0lOUFVUJztcbiAgICB9XG4gICAgaWYgKEZJRUxEX1RZUEUgaW4gZmxkKSB7XG4gICAgICB0aGlzLnNldEZpZWxkVHlwZShmbGQuZmllbGRUeXBlQ29kZSk7XG4gICAgfVxuICAgIGlmIChGSUVMRF9NQVhfTEVOR1RIIGluIGZsZCkge1xuICAgICAgdGhpcy5tYXhMZW5ndGggPSBmbGQubWF4TGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHNldEZpZWxkVHlwZShpbnB1dEZpZWxkVHlwZSkge1xuICAgIHRoaXMuZmllbGRUeXBlID0gaW5wdXRGaWVsZFR5cGU7XG4gICAgLyoqXG4gICAgICogIFNlIGVsaW1pbmEgbGEgdmFsaWRhY2nDs24gZGUgcXVlIHNlYSB1biB0aXBvIGNvbm9jaWRvXG4gICAgICogIHRoaXMuZmllbGRUeXBlID0gKGlucHV0RmllbGRUeXBlICYmIEZJRUxEVFlQRVMuaW5jbHVkZXMoaW5wdXRGaWVsZFR5cGUpKVxuICAgICAqICAgPyBpbnB1dEZpZWxkVHlwZSA6IGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfVEVYVDtcbiAgICAgKi9cbiAgfVxuXG4gIGZvcm1hdCgpIHtcbiAgICBpZiAodGhpcy5maWVsZFR5cGUgPT09IGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfQ1VSUkVOQ1kpIHtcbiAgICAgIHRoaXMuX2ZpZWxkVmFsdWUgPSBmb3JtYXRDdXJyZW5jeSh0aGlzLl9maWVsZFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBzZXRNaW5WYWx1ZShtaW5WYWx1ZSkge1xuICAgIGlmICh0aGlzLmZpZWxkVHlwZSA9PT0gY29tcG9uZW50Q29uc3RhbnRzLkZJRUxEVFlQRV9EQVRFXG4gICAgICAmJiB0aGlzLndpZGdldD8uc2V0TWluVmFsdWUpIHtcbiAgICAgIHRoaXMuX21pblZhbHVlID0gbWluVmFsdWU7XG4gICAgICBpZiAoIW1pblZhbHVlKSB7XG4gICAgICAgIHRoaXMud2lkZ2V0Py5zZXRNaW5WYWx1ZShmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtaW5EYXRlID0gbmV3IERhdGUobWluVmFsdWUpO1xuICAgICAgICB0aGlzLndpZGdldD8uc2V0TWluVmFsdWUobWluRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0TWF4VmFsdWUobWF4VmFsdWUpIHtcbiAgICBpZiAodGhpcy5maWVsZFR5cGUgPT09IGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfREFURVxuICAgICAgJiYgdGhpcy53aWRnZXQ/LnNldE1heFZhbHVlKSB7XG4gICAgICB0aGlzLl9tYXhWYWx1ZSA9IG1heFZhbHVlO1xuICAgICAgaWYgKCFtYXhWYWx1ZSkge1xuICAgICAgICB0aGlzLndpZGdldD8uc2V0TWF4VmFsdWUoZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbWF4RGF0ZSA9IG5ldyBEYXRlKG1heFZhbHVlKTtcbiAgICAgICAgdGhpcy53aWRnZXQ/LnNldE1heFZhbHVlKG1heERhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkT3B0aW9ucygpIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpZWxkT3B0aW9ucykpO1xuICB9XG5cbiAgc2V0RmllbGRPcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgICBpZiAoKHRoaXMuY2FwdHVyZVR5cGUgIT09ICdMSVNUJyAmJiB0aGlzLmNhcHR1cmVUeXBlICE9PSAnUkFESU8nKVxuICAgICAgfHwgdHlwZW9mIG5ld09wdGlvbnMgPT09IFVOREVGSU5FRCB8fCAhbmV3T3B0aW9uc1xuICAgICAgfHwgIUFycmF5LmlzQXJyYXkobmV3T3B0aW9ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmllbGRPcHRpb25zID0gbmV3T3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgIGlmIChvcHRpb24udGV4dCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbi50ZXh0ICE9PSBudWxsXG4gICAgICAgICYmIG9wdGlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbi52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geyBmaWVsZE9wdGlvblZhbHVlOiBvcHRpb24udGV4dCwgZmllbGRPcHRpb25JZDogb3B0aW9uLnZhbHVlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyAuLi5vcHRpb24gfTtcbiAgICB9KTtcbiAgICB0aGlzLmZpZWxkT3B0aW9ucyA9IChmaWVsZE9wdGlvbnMgJiYgQXJyYXkuaXNBcnJheShmaWVsZE9wdGlvbnMpXG4gICAgICAmJiBmaWVsZE9wdGlvbnMubGVuZ3RoID4gMCkgPyBmaWVsZE9wdGlvbnMgOiBbXTtcbiAgICBpZiAodGhpcy5maWVsZFR5cGUgPT09IGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfQVJSQVkgJiYgdGhpcy53aWRnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLndpZGdldD8ucmVmZXJlc2hDb250ZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9maWVsZFZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5maWVsZFR5cGUgPT09IGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfQVJSQVkgJiYgQXJyYXkuaXNBcnJheSh0aGlzLl9maWVsZFZhbHVlKSkge1xuICAgICAgICB0aGlzLl9maWVsZFZhbHVlID0gdGhpcy5fZmllbGRWYWx1ZT8uZmlsdGVyKGl0ZW0gPT5cbiAgICAgICAgICB0aGlzLmZpZWxkT3B0aW9ucy5maW5kKG9wdCA9PiBvcHQuZmllbGRPcHRpb25JZCA9PT0gaXRlbSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZhbEluT3B0aW9ucyA9IHRoaXMuZmllbGRPcHRpb25zXG4gICAgICAgICAgLmZpbmQoaXRlbSA9PiBpdGVtLmZpZWxkT3B0aW9uSWQgPT09IHRoaXMuX2ZpZWxkVmFsdWUpO1xuICAgICAgICBpZiAoIXZhbEluT3B0aW9ucykge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmZpZWxkUmVxdWlyZWQgJiYgdGhpcy5maWVsZE9wdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLnNldFZhbHVlKHRoaXMuZmllbGRPcHRpb25zWzBdLmZpZWxkT3B0aW9uSWQpO1xuICAgICAgaWYgKHRoaXMud2lkZ2V0Py5vbkNoYW5nZUNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy53aWRnZXQ/Lm9uQ2hhbmdlQ29udGVudCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldFZhbHVlKG5ld1ZhbHVlLCB3aWRnZXRVcGRhdGUgPSB0cnVlKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gVU5ERUZJTkVEIHx8IG5ld1ZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBuZXdGaW5hbFZhbHVlO1xuICAgIHN3aXRjaCAodGhpcy5maWVsZFR5cGUpIHtcbiAgICAgIGNhc2UgJ0JPT0xFQU4nOlxuICAgICAgICBuZXdGaW5hbFZhbHVlID0gISFuZXdWYWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfQ0hFQ0s6XG4gICAgICAgIG5ld0ZpbmFsVmFsdWUgPSAhIW5ld1ZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY29tcG9uZW50Q29uc3RhbnRzLkZJRUxEVFlQRV9BUlJBWTpcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBudWxsIHx8IG5ld1ZhbHVlID09PSAnJykge1xuICAgICAgICAgIG5ld0ZpbmFsVmFsdWUgPSBbXTtcbiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIChuZXdWYWx1ZSkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IG5ld1ZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld0ZpbmFsVmFsdWUgPSBuZXdWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0ZpbmFsVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY29tcG9uZW50Q29uc3RhbnRzLkZJRUxEVFlQRV9NQVA6XG4gICAgICAgIG5ld0ZpbmFsVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgaWYgKG5ld0ZpbmFsVmFsdWUgJiYgdGhpcy53aWRnZXQgJiYgd2lkZ2V0VXBkYXRlKSB7XG4gICAgICAgICAgY29uc3QgbGF0aXR1ZGUgPSBwYXJzZUZsb2F0KG5ld0ZpbmFsVmFsdWVbMF0pO1xuICAgICAgICAgIGNvbnN0IGxvbmdpdHVkZSA9IHBhcnNlRmxvYXQobmV3RmluYWxWYWx1ZVsxXSk7XG4gICAgICAgICAgdGhpcy53aWRnZXQ/LnNldExvY2F0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjb21wb25lbnRDb25zdGFudHMuRklFTERUWVBFX0NVUlJFTkNZOlxuICAgICAgICBuZXdGaW5hbFZhbHVlID0gZm9ybWF0Q3VycmVuY3kodGhpcy5fZmllbGRWYWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbmV3RmluYWxWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZpZWxkVmFsdWUgIT09IG5ld0ZpbmFsVmFsdWUpIHtcbiAgICAgIHRoaXMuaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgICB0aGlzLl9maWVsZFZhbHVlID0gbmV3RmluYWxWYWx1ZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
384
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9jbGFzc2VzL2Zvcm1zL2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTlDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUU5QixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUM7QUFDakMsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDO0FBQ3JDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztBQUN6QyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUM7QUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7QUFDckMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDO0FBQzNDLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUNsQyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUM7QUFDbkMsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDO0FBQ3JDLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUNwQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUM7QUFDMUIsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDO0FBRWxDLE1BQU0sV0FBVyxHQUFHO0lBQ2xCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLE9BQU87SUFDZCxJ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QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNMLGFBQWEsR0FBRyxRQUFRLENBQUM7aUJBQzFCO2dCQUNELE1BQU07WUFDUixLQUFLLGtCQUFrQixDQUFDLGFBQWE7Z0JBQ25DLGFBQWEsR0FBRyxRQUFRLENBQUM7Z0JBQ3pCLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksWUFBWSxFQUFFO29CQUNoRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0MsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2lCQUMvQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxrQkFBa0IsQ0FBQyxrQkFBa0I7Z0JBQ3hDLGFBQWEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNO1lBQ1I7Z0JBQ0UsYUFBYSxHQUFHLFFBQVEsQ0FBQztnQkFDekIsTUFBTTtTQUNUO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLGFBQWEsRUFBRTtZQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29tcG9uZW50Q29uc3RhbnRzLCB0YWJsZUZpZWxkU3R5bGVzIH0gZnJvbSAnLi9mb3JtLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBGb3JtRWxlbWVudCB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyBmb3JtYXRDdXJyZW5jeSB9IGZyb20gJy4uL3V0aWxpdGllcyc7XG5cbmNvbnN0IFVOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuXG5jb25zdCBGSUVMRF9WQUxVRSA9ICdmaWVsZFZhbHVlJztcbmNvbnN0IEZJRUxEX09QVElPTlMgPSAnZmllbGRPcHRpb25zJztcbmNvbnN0IEZJRUxEX1RJVExFID0gJ2ZpZWxkVGl0bGUnO1xuY29uc3QgRklFTERfQ0FQVFVSRV9UWVBFID0gJ2NhcHR1cmVUeXBlJztcbmNvbnN0IEZJRUxEX1RZUEUgPSAnZmllbGRUeXBlQ29kZSc7XG5jb25zdCBGSUVMRF9NQVhfTEVOR1RIID0gJ21heExlbmd0aCc7XG5jb25zdCBGSUVMRF9WSVNJQkxFID0gJ3Zpc2libGUnO1xuY29uc3QgRklFTERfTEFCRUxfVklTSUJMRSA9ICd2aXNpYmxlTGFiZWwnO1xuY29uc3QgRklFTERfUkVRVUlSRUQgPSAncmVxdWlyZWQnO1xuY29uc3QgRklFTERfRVJSX0NPREUgPSAnZXJyb3JDb2RlJztcbmNvbnN0IEZJRUxEX0VSUl9NU0cgPSAnZXJyb3JNZXNzYWdlJztcbmNvbnN0IEZJRUxEX1RPT0xUSVAgPSAndG9vbHRpcFRleHQnO1xuY29uc3QgRklFTERfSU5GTyA9ICdpbmZvJztcbmNvbnN0IEZJRUxEX0VESVRBQkxFID0gJ2VkaXRhYmxlJztcblxuY29uc3QgRklFTERfVFlQRVMgPSB7XG4gIGJvb2xlYW46ICdCT09MRUFOJyxcbiAgYXJyYXk6ICdBUlJBWScsXG4gIGNoZWNrOiAnQ0hFQ0snLFxuICBkYXRlOiAnREFURScsXG4gIGRhdGVyYW5nZTogJ0RBVEVSQU5HRScsXG4gIHRpbWU6ICdUSU1FJyxcbiAgdGltZXJhbmdlOiAnVElNRVJBTkdFJyxcbiAgbWFwOiAnTUFQJyxcbiAgbnVtYmVyOiAnTlVNQkVSJyxcbiAgZGVjaW1hbDogJ0RFQ0lNQUwnLFxuICBjdXJyZW5jeTogJ0NVUlJFTkNZJyxcbiAgc2VsZWN0OiAnU0VMRUNUJyxcbiAgdHlwZWFoZWFkOiAnVFlQRUFIRUFEJyxcbiAgdGV4dDogJ1RFWFQnLFxuICBwYXNzd29yZDogJ1BBU1NXT1JEJyxcbiAgbGFiZWw6ICdMQUJFTCcsXG4gIGh0bWw6ICdIVE1MJyxcbiAgdGl0bGU6ICdUSVRMRScsXG4gIG1lc3NhZ2U6ICdNRVNTQUdFJyxcbiAgbGluazogJ0xJTksnLFxuICB3YXJuaW5nOiAnV0FSTklORycsXG4gIGF2YXRhcjogJ0FWQVRBUicsXG4gIGVtYWlsOiAnRU1BSUwnLFxuICBwaG9uZTogJ1BIT05FJyxcbn07XG5cbmNvbnN0IEZJRUxEX1RZUEVTX0ZPUk1BVFMgPSB7XG4gIEVNQUlMOiBuZXcgUmVnRXhwKCdeXFxcXHcrKFtcXFxcLi1dP1xcXFx3KylAXFxcXHcrKFtcXFxcLi1dP1xcXFx3KykoXFxcXC5cXFxcd3syLDN9KSskJyksXG59O1xuXG5jb25zdCBJTlRSSU5TSUNfRVJST1JfTUVTU0FHRVMgPSB7XG4gIEVNQUlMOiBgRWwgdmFsb3Igbm8gY29ycmVzcG9uZGUgYSB1biBjb3JyZW8gdsOhbGlkb2AsXG4gIERFRkFVTFQ6IGBFbCB2YWxvciBubyBzZSBhanVzdGEgYWwgZm9ybWF0byBlc3RhYmxlY2lkb2AsXG59XG5cbmNvbnN0IERFRkFVTFRfRVJST1JfVFlQRSA9ICdlcnJvcic7XG5jb25zdCBERUZBVUxUX0NBUFRVUkVfVFlQRSA9ICdJTlBVVCc7XG5jb25zdCBERUZBVUxUX0FMSUdOTUVOVCA9ICdsZWZ0JztcblxuY29uc3QgTU9OSVRPUkVEX0FUVFJJQlVURVMgPSBbJ19tYXhMZW5ndGgnLCAnX29uVmFsaWRhdGlvbicsICdjYXB0dXJlVHlwZScsICdmaWVsZFRpdGxlJywgJ2ZpZWxkVHlwZScsXG4gICdlcnJvck1lc3NhZ2UnLCAnZXJyb3JUeXBlJywgJ2Vycm9yQ29kZScsICd2aXNpYmxlTGFiZWwnLCAnZmllbGRSZXF1aXJlZCcsICdmaWVsZE9wdGlvbnMnLCAnX2ZpZWxkVmFsdWUnXTsgXG5cbmNvbnN0IFNURF9NQVhfTEVOR1RIID0gNTA7XG5jb25zdCBCSUdfTUFYX0xFTkdUSCA9IDUwMDtcblxuY29uc3QgZmxkQXR0ciA9IHtcbiAgdmFsaWRhdGVPblNlcnZlcjogJ3ZhbGlkYXRlT25TZXJ2ZXInLFxuICB2YWx1ZTogJ19maWVsZFZhbHVlJyxcbiAgbWluVmFsdWU6ICdfbWluVmFsdWUnLFxuICBtYXhWYWx1ZTogJ19tYXhWYWx1ZScsXG4gIG1heExlbmd0aDogJ19tYXhMZW5ndGgnLFxuICBvblZhbGlkYXRpb246ICdfb25WYWxpZGF0aW9uJyxcbiAgaW50cmluc2ljRXJyb3JNZXNzYWdlOiAnX2ludHJpbnNpY0Vycm9yTWVzc2FnZScsXG4gIGNvZGU6ICdmaWVsZENvZGUnLFxuICBpbmZvOiAnZmllbGRJbmZvJyxcbiAgZGVmYXVsdFZhbHVlOiAnZGVmYXVsdFZhbHVlJyxcbiAgZGVmYXVsdEVkaXRhYmxlOiAnZGVmYXVsdEVkaXRhYmxlJyxcbiAgY3VzdG9tQXR0cmlidXRlczogJ2N1c3RvbUF0dHJpYnV0ZXMnLFxuICB2aXNpYmxlTGFiZWw6ICd2aXNpYmxlTGFiZWwnLFxuICByZXF1aXJlZDogJ2ZpZWxkUmVxdWlyZWQnLFxuICBoYXNDaGFuZ2VkOiAnaGFzQ2hhbmdlZCcsXG4gIG91dHB1dE9ubHk6ICdvdXRwdXRPbmx5JyxcbiAgY2FwdHVyZVR5cGU6ICdjYXB0dXJlVHlwZScsXG4gIHRpdGxlOiAnZmllbGRUaXRsZScsXG4gIHR5cGU6ICdmaWVsZFR5cGUnLFxuICBhbGlnbm1lbnQ6ICdmaWVsZEFsaWdubWVudCcsXG4gIGZvcm1hdDogJ2ZpZWxkRm9ybWF0JyxcbiAgZXh0ZXJuYWxWYWx1ZTogJ2V4dGVybmFsVmFsdWUnLFxuICB0b29sdGlwVGV4dDogJ3Rvb2x0aXBUZXh0JyxcbiAgZXJyb3JUeXBlOiAnZXJyb3JUeXBlJyxcbiAgZXJyb3JDb2RlOiAnZXJyb3JDb2RlJyxcbiAgZXJyb3JNZXNzYWdlOiAnZXJyb3JNZXNzYWdlJyxcbiAgb3B0aW9uczogJ2ZpZWxkT3B0aW9ucycsXG59O1xuXG5leHBvcnQgY2xhc3MgRmllbGREZXNjcmlwdG9yIGV4dGVuZHMgRm9ybUVsZW1lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0aW9uRmluaXNoID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0aW9uUGFydGlhbCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGV0YWlsUmVxdWVzdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXR0cmlidXRlQ2hhbmdlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIHByaXZhdGUgdmFsaWRhdGVPblNlcnZlcjogYm9vbGVhbjtcblxuICBfZmllbGRWYWx1ZTogYW55O1xuICBfbWluVmFsdWU6IGFueTtcbiAgX21heFZhbHVlOiBhbnk7XG4gIF9tYXhMZW5ndGg6IG51bWJlcjtcbiAgX29uVmFsaWRhdGlvbjogYm9vbGVhbjtcbiAgX2ludHJpbnNpY0Vycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gIGZpZWxkQ29kZTogc3RyaW5nO1xuICBmaWVsZEluZm86IHN0cmluZztcbiAgZGVmYXVsdFZhbHVlOiBzdHJpbmc7XG4gIGRlZmF1bHRFZGl0YWJsZTogYm9vbGVhbjtcbiAgY3VzdG9tQXR0cmlidXRlczogYW55O1xuICBcbiAgdmlzaWJsZUxhYmVsOiBib29sZWFuO1xuICBmaWVsZFJlcXVpcmVkOiBib29sZWFuO1xuICBoYXNDaGFuZ2VkOiBib29sZWFuO1xuICBvdXRwdXRPbmx5OiBib29sZWFuO1xuICBjYXB0dXJlVHlwZTogc3RyaW5nO1xuICBmaWVsZFRpdGxlOiBzdHJpbmc7XG4gIGZpZWxkVHlwZTogc3RyaW5nO1xuICBmaWVsZEFsaWdubWVudDogc3RyaW5nO1xuICBmaWVsZEZvcm1hdDogUmVnRXhwO1xuICBleHRlcm5hbFZhbHVlOiBhbnk7XG4gIHRvb2x0aXBUZXh0OiBzdHJpbmc7XG5cbiAgZXJyb3JUeXBlOiBzdHJpbmc7XG4gIGVycm9yQ29kZTogc3RyaW5nO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICBmaWVsZE9wdGlvbnM6IHtcbiAgICBmaWVsZE9wdGlvblZhbHVlOiBzdHJpbmc7XG4gICAgZmllbGRPcHRpb25JZDogc3RyaW5nO1xuICB9W107XG5cbiAgY29uc3RydWN0b3IoaW5wdXRGaWVsZFJlY2VpdmVkKSB7XG4gICAgc3VwZXIoaW5wdXRGaWVsZFJlY2VpdmVkKTtcbiAgICB0aGlzLmVsZW1lbnRUeXBlID0gY29tcG9uZW50Q29uc3RhbnRzLkVMRU1FTlRUWVBFX0ZJRUxEO1xuICAgIGNvbnN0IGZsZCA9IChpbnB1dEZpZWxkUmVjZWl2ZWQpID8gaW5wdXRGaWVsZFJlY2VpdmVkIDoge307XG5cbiAgICB0aGlzLnNldEF0dHIoZmxkQXR0ci5jb2RlLCBmbGQuZmllbGRDb2RlKTtcbiAgICB0aGlzLnNldEF0dHIoZmxkQXR0ci50aXRsZSwgZmxkLmZpZWxkVGl0bGUgPz8gdGhpcy5maWVsZENvZGUpO1xuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLmNhcHR1cmVUeXBlLCBmbGQuY2FwdHVyZVR5cGUgPz8gREVGQVVMVF9DQVBUVVJFX1RZUEUpO1xuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLmRlZmF1bHRWYWx1ZSwgZmxkLmRlZmF1bHRWYWx1ZSA/PyBudWxsKTtcbiAgICBjb25zdCBkZWZhdWx0VHlwZUFsaWdubWVudCA9ICh0YWJsZUZpZWxkU3R5bGVzW3RoaXMuZmllbGRUeXBlXSAhPSBudWxsKVxuICAgICAgPyB0YWJsZUZpZWxkU3R5bGVzW3RoaXMuZmllbGRUeXBlXVsndGV4dC1hbGlnbiddIDogREVGQVVMVF9BTElHTk1FTlQ7XG4gICAgY29uc3QgZmllbGRBbGlnbm1lbnQgPSAoZmxkLmFsaWdubWVudCAhPSBudWxsKSA/IGZsZC5hbGlnbm1lbnQudG9Mb3dlckNhc2UoKSA6IGRlZmF1bHRUeXBlQWxpZ25tZW50O1xuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLmFsaWdubWVudCwgZmllbGRBbGlnbm1lbnQpO1xuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLmluZm8sIGZsZC5pbmZvIHx8ICcnKTtcbiAgICBsZXQgZmllbGRGb3JtYXQ7XG4gICAgdHJ5IHtcbiAgICAgIGZpZWxkRm9ybWF0ID0gKGZsZC5mb3JtYXQpID8gbmV3IFJlZ0V4cChmbGQuZm9ybWF0KSA6IG51bGw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZmllbGRGb3JtYXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnNldEF0dHIoZmxkQXR0ci5mb3JtYXQsIGZpZWxkRm9ybWF0KTtcblxuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLnZhbGlkYXRlT25TZXJ2ZXIsIGZsZC5zZXJ2ZXJBY3Rpb24gPz8gZmFsc2UpO1xuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLmN1c3RvbUF0dHJpYnV0ZXMsIGZsZC5jdXN0b21BdHRyaWJ1dGVzID8/IHt9KTtcblxuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLnRvb2x0aXBUZXh0LCBmbGQudG9vbHRpcCB8fCAnJyk7XG4gICAgdGhpcy5zZXRBdHRyKGZsZEF0dHIuZGVmYXVsdEVkaXRhYmxlLCB0aGlzLmVuYWJsZWQpO1xuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLnJlcXVpcmVkLCBmbGQucmVxdWlyZWQgPz8gZmFsc2UpO1xuICAgIHRoaXMuc2V0RXJyb3IoZmxkLmVycm9yQ29kZSwgZmxkLmVycm9yTWVzc2FnZSwgZmxkLmVycm9yVHlwZSA/PyBERUZBVUxUX0VSUk9SX1RZUEUpO1xuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLm91dHB1dE9ubHksIGZsZC5vdXRwdXRPbmx5ID8/IGZhbHNlKTtcbiAgICBjb25zdCBtYXhMZW5ndGggPSBmbGQubWF4TGVuZ3RoID8/ICggdGhpcy5jYXB0dXJlVHlwZSA9PT0gJ1RFWFRBUkVBJyA/IEJJR19NQVhfTEVOR1RIIDogU1REX01BWF9MRU5HVEgpO1xuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLm1heExlbmd0aCwgbWF4TGVuZ3RoKTtcbiAgICB0aGlzLnNldEF0dHIoZmxkQXR0ci5pbnRyaW5zaWNFcnJvck1lc3NhZ2UsIElOVFJJTlNJQ19FUlJPUl9NRVNTQUdFU1t0aGlzLmZpZWxkVHlwZV0gPz8gSU5UUklOU0lDX0VSUk9SX01FU1NBR0VTLkRFRkFVTFQpO1xuXG4gICAgdGhpcy5zZXRGaWVsZFR5cGUoZmxkLmZpZWxkVHlwZUNvZGUpO1xuICAgIHRoaXMuc2V0RWRpdGFibGUoZmxkLmVkaXRhYmxlID8/IHRydWUpO1xuICAgIHRoaXMuc2V0VmlzaWJsZUxhYmVsKGZsZC52aXNpYmxlTGFiZWwgPz8gdHJ1ZSk7XG4gICAgdGhpcy5zZXRWaXNpYmlsaXR5KGZsZC52aXNpYmxlKTtcbiAgICB0aGlzLnNldEZpZWxkT3B0aW9ucyhmbGQuZmllbGRPcHRpb25zKTtcbiAgICB0aGlzLnNldFZhbHVlKGZsZC5maWVsZFZhbHVlIHx8IHRoaXMuZGVmYXVsdFZhbHVlIHx8ICcnKTtcbiAgfVxuXG4gIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5maWVsZENvZGU7IH1cbiAgZ2V0IGVkaXRpb25GaW5pc2goKSB7IHJldHVybiB0aGlzLl9lZGl0aW9uRmluaXNoOyB9XG4gIGdldCBhdHRyaWJ1dGVDaGFuZ2UoKSB7IHJldHVybiB0aGlzLl9hdHRyaWJ1dGVDaGFuZ2U7IH1cbiAgXG4gIGdldCBlZGl0aW9uUGFydGlhbCgpIHsgcmV0dXJuIHRoaXMuX2VkaXRpb25QYXJ0aWFsOyB9XG4gIGdldCBkZXRhaWxSZXF1ZXN0KCkgeyByZXR1cm4gdGhpcy5fZGV0YWlsUmVxdWVzdDsgfVxuXG4gIGdldCB2YWxpZGF0aW5nKCkgeyByZXR1cm4gdGhpcy5fb25WYWxpZGF0aW9uOyB9XG4gIHNldCB2YWxpZGF0aW5nKGlzVmFsaWRhdGluZzogYm9vbGVhbikgeyB0aGlzLnNldEF0dHIoZmxkQXR0ci5vblZhbGlkYXRpb24sIGlzVmFsaWRhdGluZyk7IH1cblxuICBzZXRJbnRyaW5zaWNFcnJvck1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKSB7IHRoaXMuc2V0QXR0cihmbGRBdHRyLmludHJpbnNpY0Vycm9yTWVzc2FnZSwgbWVzc2FnZSk7IH1cbiAgc2V0IGludHJpbnNpY0Vycm9yTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpIHsgdGhpcy5zZXRJbnRyaW5zaWNFcnJvck1lc3NhZ2UobWVzc2FnZSk7IH1cblxuICBnZXQgZmllbGRWYWx1ZSgpIHsgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKTsgfVxuICBnZXQgcmVxdWlyZWQoKSB7IHJldHVybiB0aGlzLmZpZWxkUmVxdWlyZWQ7IH1cbiAgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7IHRoaXMuc2V0QXR0cihmbGRBdHRyLnJlcXVpcmVkLCByZXF1aXJlZCA/PyBmYWxzZSk7IH1cbiAgZ2V0IG1heExlbmd0aCgpIHsgcmV0dXJuICh0aGlzLl9tYXhMZW5ndGggPiAwKSA/IHRoaXMuX21heExlbmd0aC50b1N0cmluZygpIDogJyc7IH1cbiAgc2V0IG1heExlbmd0aChyZXF1aXJlZE1heExlbmd0aDogYW55KSB7XG4gICAgaWYgKHR5cGVvZiByZXF1aXJlZE1heExlbmd0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLm1heExlbmd0aCwgcGFyc2VJbnQocmVxdWlyZWRNYXhMZW5ndGgsIDEwKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWlyZWRNYXhMZW5ndGggPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLnNldEF0dHIoZmxkQXR0ci5tYXhMZW5ndGgsIHJlcXVpcmVkTWF4TGVuZ3RoKTtcbiAgICB9XG4gIH1cbiAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpOyB9XG4gIHNldCB2YWx1ZShuZXdWYWx1ZSkgeyB0aGlzLnNldFZhbHVlKG5ld1ZhbHVlKTsgfVxuXG4gIG5vdGlmeUVkaXRpb25QYXJ0aWFsKCkge1xuICAgIGNvbnN0IGludHJpbnNpY1ZhbGlkYXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2VkaXRpb25QYXJ0aWFsLm5leHQoeyBjb2RlOiB0aGlzLmZpZWxkQ29kZSwgaW50cmluc2ljVmFsaWRhdGlvbiB9KTtcbiAgfVxuXG4gIG5vdGlmeUVkaXRpb25GaW5pc2goKSB7XG4gICAgbGV0IGludHJpbnNpY1ZhbGlkYXRpb24gPSB0cnVlO1xuICAgIGNvbnN0IGZpZWxkRGVmYXVsdEZvcm1hdCA9IEZJRUxEX1RZUEVTX0ZPUk1BVFM/Llt0aGlzLmZpZWxkVHlwZV0gPz8gbnVsbDtcbiAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgIGlmIChmaWVsZFZhbHVlICYmIChmaWVsZERlZmF1bHRGb3JtYXQgfHwgdGhpcy5maWVsZEZvcm1hdCkpIHtcbiAgICAgIGludHJpbnNpY1ZhbGlkYXRpb24gPSAoZmllbGREZWZhdWx0Rm9ybWF0Py50ZXN0KGZpZWxkVmFsdWUpID8/IHRydWUpIFxuICAgICAgICAmJiAodGhpcy5maWVsZEZvcm1hdD8udGVzdChmaWVsZFZhbHVlKSA/PyB0cnVlKTtcbiAgICAgIGlmICghaW50cmluc2ljVmFsaWRhdGlvbikge1xuICAgICAgICB0aGlzLnNldEVycm9yKCc5OScsIHRoaXMuX2ludHJpbnNpY0Vycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2VkaXRpb25GaW5pc2gubmV4dCh7IGNvZGU6IHRoaXMuZmllbGRDb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uIH0pO1xuICB9XG5cbiAgc2V0QXR0cihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpc1tuYW1lXSkge1xuICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgICBpZiAoTU9OSVRPUkVEX0FUVFJJQlVURVMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIHRoaXMuX2F0dHJpYnV0ZUNoYW5nZS5uZXh0KHsgbmFtZSwgdmFsdWUgfSk7XG4gICAgfVxuICB9XG5cbiAgbm90aWZ5RWRpdGlvbkRldGFpbFJlcXVlc3QoKSB7XG4gICAgdGhpcy5fZGV0YWlsUmVxdWVzdC5uZXh0KHRoaXMuZmllbGRDb2RlKTtcbiAgfVxuXG4gIHNldFZpc2libGVMYWJlbCh2aXNpYmxlTGFiZWw6IGJvb2xlYW4pIHsgdGhpcy5zZXRBdHRyKGZsZEF0dHIudmlzaWJsZUxhYmVsLCB2aXNpYmxlTGFiZWwpOyB9XG4gIHNob3dMYWJlbCgpIHsgdGhpcy5zZXRWaXNpYmxlTGFiZWwodHJ1ZSk7IH1cbiAgaGlkZUxhYmVsKCkgeyB0aGlzLnNldFZpc2libGVMYWJlbChmYWxzZSk7IH1cblxuICBzZXRDaGFuZ2VkKGhhc0NoYW5nZWQ6IGJvb2xlYW4pIHsgdGhpcy5zZXRBdHRyKGZsZEF0dHIuaGFzQ2hhbmdlZCwgaGFzQ2hhbmdlZCk7IH1cbiAgY2hhbmdlZCgpIHsgdGhpcy5zZXRDaGFuZ2VkKHRydWUpOyB9XG5cbiAgZ2V0UmF3VmFsdWUoKSB7IHJldHVybiB0aGlzLl9maWVsZFZhbHVlOyB9XG4gIHNldExhYmVsKGxhYmVsKSB7IHRoaXMuc2V0QXR0cihmbGRBdHRyLnRpdGxlLCBsYWJlbCk7IH1cbiAgY2xlYW4oKSB7IHRoaXMuc2V0VmFsdWUodGhpcy5kZWZhdWx0VmFsdWUgfHwgJycpOyB9XG4gIGdldCBiYWNrZW5kKCkgeyByZXR1cm4gdGhpcy52YWxpZGF0ZU9uU2VydmVyOyB9XG5cbiAgc2V0RWRpdGFibGUoZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlKSB7IChlZGl0YWJsZSkgPyB0aGlzLmVuYWJsZSgpIDogdGhpcy5kaXNhYmxlKCk7IH1cblxuICBoYXNFcnJvcigpIHsgcmV0dXJuIHRoaXMuZXJyb3JDb2RlICE9PSAnMDAnOyB9XG5cbiAgc2V0RXJyb3IoY29kZSwgbWVzc2FnZSwgdHlwZSA9IERFRkFVTFRfRVJST1JfVFlQRSkge1xuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLmVycm9yQ29kZSwgY29kZSA/PyAnMDAnKTtcbiAgICB0aGlzLnNldEF0dHIoZmxkQXR0ci5lcnJvclR5cGUsICh0aGlzLmVycm9yQ29kZSA9PT0gJzAwJykgPyAnJyA6IHR5cGUpO1xuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLmVycm9yTWVzc2FnZSwgbWVzc2FnZSA/PyAnJyk7XG4gIH1cblxuICBnZXRFcnJvcigpIHsgcmV0dXJuIHsgdHlwZTogdGhpcy5lcnJvclR5cGUsIGNvZGU6IHRoaXMuZXJyb3JDb2RlLCBtZXNzYWdlOiB0aGlzLmVycm9yTWVzc2FnZSB9OyB9XG4gIGdldCBlcnJvcigpIHsgcmV0dXJuIHRoaXMuZ2V0RXJyb3IoKTsgfVxuICBzZXQgZXJyb3IoZXJyb3JPYmopIHsgdGhpcy5zZXRFcnJvcihlcnJvck9iai5jb2RlLCBlcnJvck9iai5tZXNzYWdlLCBlcnJvck9iai50eXBlID8/IERFRkFVTFRfRVJST1JfVFlQRSkgfVxuXG4gIGdldEVycm9yQ29kZSgpIHsgcmV0dXJuIHRoaXMuZ2V0RXJyb3IoKS5jb2RlOyB9XG4gIHNldEVycm9yQ29kZShjb2RlKSB7IHRoaXMuc2V0RXJyb3IoY29kZSwgdGhpcy5lcnJvck1lc3NhZ2UpOyB9XG4gIGdldEVycm9yTWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuZ2V0RXJyb3IoKS5tZXNzYWdlOyB9XG4gIHNldEVycm9yTWVzc2FnZShtc2cpIHsgdGhpcy5zZXRFcnJvcih0aGlzLmVycm9yQ29kZSwgbXNnKTsgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgZmllbGRDdXJyZW50VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgaWYgKGZpZWxkQ3VycmVudFZhbHVlID09PSB1bmRlZmluZWQgfHwgZmllbGRDdXJyZW50VmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuZmllbGRUeXBlID09PSBGSUVMRF9UWVBFUy5hcnJheSB8fCB0aGlzLmZpZWxkVHlwZSA9PT0gRklFTERfVFlQRVMucGhvbmUpXG4gICAgICAmJiBBcnJheS5pc0FycmF5KGZpZWxkQ3VycmVudFZhbHVlKSAmJiBmaWVsZEN1cnJlbnRWYWx1ZS5sZW5ndGggPT09IDAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIHJldHVybiBmaWVsZEN1cnJlbnRWYWx1ZSA9PT0gJyc7IFxuICB9XG5cbiAgZ2V0VmFsdWUoKSB7XG4gICAgc3dpdGNoICh0aGlzLmZpZWxkVHlwZSkge1xuICAgICAgY2FzZSBjb21wb25lbnRDb25zdGFudHMuRklFTERUWVBFX0NIRUNLOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRWYWx1ZSA/PyBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfQ1VSUkVOQ1k6XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZFZhbHVlLnJlcGxhY2UoJywnLCAnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkVmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gICAgdXBkYXRlRnJvbVNlcnZlcihmbGQpIHtcbiAgICBjb25zdCBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhmbGQpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZEtleXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBhdHRyTmFtZSA9IGZpZWxkS2V5c1tpbmRleF07XG4gICAgICBjb25zdCBhdHRyVmFsdWUgPSBmbGRbYXR0ck5hbWVdO1xuICAgICAgKGF0dHJOYW1lID09PSBGSUVMRF9WSVNJQkxFKSAmJiB0aGlzLnNldFZpc2liaWxpdHkoYXR0clZhbHVlKTtcbiAgICAgIChhdHRyTmFtZSA9PT0gRklFTERfTEFCRUxfVklTSUJMRSkgJiYgdGhpcy5zZXRWaXNpYmxlTGFiZWwoZmxkLnZpc2libGVMYWJlbCk7XG4gICAgICAoYXR0ck5hbWUgPT09IEZJRUxEX1JFUVVJUkVEKSAmJiB0aGlzLnNldEF0dHIoZmxkQXR0ci5yZXF1aXJlZCwgZmxkLnJlcXVpcmVkID8/IGZhbHNlKTtcbiAgICAgIChhdHRyTmFtZSA9PT0gRklFTERfRVJSX0NPREUpICYmIHRoaXMuc2V0QXR0cihmbGRBdHRyLmVycm9yQ29kZSwgZmxkLmVycm9yQ29kZSk7XG4gICAgICAoYXR0ck5hbWUgPT09IEZJRUxEX0VSUl9NU0cpICYmIHRoaXMuc2V0QXR0cihmbGRBdHRyLmVycm9yTWVzc2FnZSwgZmxkLmVycm9yTWVzc2FnZSk7XG4gICAgICAoYXR0ck5hbWUgPT09IEZJRUxEX1RPT0xUSVApICYmIHRoaXMuc2V0QXR0cihmbGRBdHRyLnRvb2x0aXBUZXh0LCBmbGQudG9vbHRpcCk7XG4gICAgICAoYXR0ck5hbWUgPT09IEZJRUxEX0lORk8pICYmIHRoaXMuc2V0QXR0cihmbGRBdHRyLmluZm8sIGZsZC5pbmZvKTtcbiAgICAgIChhdHRyTmFtZSA9PT0gRklFTERfRURJVEFCTEUpICYmIHRoaXMuc2V0RWRpdGFibGUoZmxkLmVkaXRhYmxlKTtcbiAgICAgIChhdHRyTmFtZSA9PT0gRklFTERfVElUTEUpICYmIHRoaXMuc2V0TGFiZWwoZmxkLmZpZWxkVGl0bGUudG9TdHJpbmcoKSk7XG4gICAgICAoYXR0ck5hbWUgPT09IEZJRUxEX1ZBTFVFKSAmJiAodGhpcy5zZXRWYWx1ZShmbGQuX2ZpZWxkVmFsdWUpICYmIHRoaXMuc2V0Q2hhbmdlZChmYWxzZSkpO1xuICAgICAgKGF0dHJOYW1lID09PSBGSUVMRF9PUFRJT05TKSAmJiB0aGlzLnNldEZpZWxkT3B0aW9ucyhmbGQuZmllbGRPcHRpb25zKTtcbiAgICAgIChhdHRyTmFtZSA9PT0gRklFTERfQ0FQVFVSRV9UWVBFKSAmJiB0aGlzLnNldEF0dHIoZmxkQXR0ci5jYXB0dXJlVHlwZSwgZmxkLmNhcHR1cmVUeXBlIHx8ICdJTlBVVCcpOyBcbiAgICAgIChhdHRyTmFtZSA9PT0gRklFTERfVFlQRSkgJiYgdGhpcy5zZXRGaWVsZFR5cGUoZmxkLmZpZWxkVHlwZUNvZGUpO1xuICAgICAgKGF0dHJOYW1lID09PSBGSUVMRF9NQVhfTEVOR1RIKSAmJiB0aGlzLnNldEF0dHIoZmxkQXR0ci5tYXhMZW5ndGgsIGZsZC5tYXhMZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIHNldEZpZWxkVHlwZShpbnB1dEZpZWxkVHlwZSkge1xuICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLnR5cGUsIGlucHV0RmllbGRUeXBlKTtcbiAgfVxuXG4gIGZvcm1hdCgpIHtcbiAgICBpZiAodGhpcy5maWVsZFR5cGUgPT09IGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfQ1VSUkVOQ1kpIHtcbiAgICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLnZhbHVlLCBmb3JtYXRDdXJyZW5jeSh0aGlzLl9maWVsZFZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0TWluVmFsdWUobWluVmFsdWUpIHtcbiAgICBpZiAodGhpcy5maWVsZFR5cGUgPT09IGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfREFURVxuICAgICAgJiYgdGhpcy53aWRnZXQ/LnNldE1pblZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLm1pblZhbHVlLCBtaW5WYWx1ZSk7XG4gICAgICBpZiAoIW1pblZhbHVlKSB7XG4gICAgICAgIHRoaXMud2lkZ2V0Py5zZXRNaW5WYWx1ZShmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtaW5EYXRlID0gbmV3IERhdGUobWluVmFsdWUpO1xuICAgICAgICB0aGlzLndpZGdldD8uc2V0TWluVmFsdWUobWluRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0TWF4VmFsdWUobWF4VmFsdWUpIHtcbiAgICBpZiAodGhpcy5maWVsZFR5cGUgPT09IGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfREFURVxuICAgICAgJiYgdGhpcy53aWRnZXQ/LnNldE1heFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cihmbGRBdHRyLm1heFZhbHVlLCBtYXhWYWx1ZSk7XG4gICAgICBpZiAoIW1heFZhbHVlKSB7XG4gICAgICAgIHRoaXMud2lkZ2V0Py5zZXRNYXhWYWx1ZShmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtYXhEYXRlID0gbmV3IERhdGUobWF4VmFsdWUpO1xuICAgICAgICB0aGlzLndpZGdldD8uc2V0TWF4VmFsdWUobWF4RGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0RmllbGRPcHRpb25zKCkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmllbGRPcHRpb25zKSk7XG4gIH1cblxuICBzZXRGaWVsZE9wdGlvbnMobmV3T3B0aW9ucykge1xuICAgIGlmICgodGhpcy5jYXB0dXJlVHlwZSAhPT0gJ0xJU1QnICYmIHRoaXMuY2FwdHVyZVR5cGUgIT09ICdSQURJTycpXG4gICAgICB8fCB0eXBlb2YgbmV3T3B0aW9ucyA9PT0gVU5ERUZJTkVEIHx8ICFuZXdPcHRpb25zXG4gICAgICB8fCAhQXJyYXkuaXNBcnJheShuZXdPcHRpb25zKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZmllbGRPcHRpb25zID0gbmV3T3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgIGlmIChvcHRpb24udGV4dCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbi50ZXh0ICE9PSBudWxsXG4gICAgICAgICYmIG9wdGlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbi52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geyBmaWVsZE9wdGlvblZhbHVlOiBvcHRpb24udGV4dCwgZmllbGRPcHRpb25JZDogb3B0aW9uLnZhbHVlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyAuLi5vcHRpb24gfTtcbiAgICB9KTtcbiAgICBmaWVsZE9wdGlvbnMgPSAoZmllbGRPcHRpb25zICYmIEFycmF5LmlzQXJyYXkoZmllbGRPcHRpb25zKVxuICAgICAgJiYgZmllbGRPcHRpb25zLmxlbmd0aCA+IDApID8gZmllbGRPcHRpb25zIDogW107XG4gICAgdGhpcy5zZXRBdHRyKGZsZEF0dHIub3B0aW9ucywgZmllbGRPcHRpb25zKTtcbiAgICBpZiAodGhpcy5maWVsZFR5cGUgPT09IGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfQVJSQVkgJiYgdGhpcy53aWRnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLndpZGdldD8ucmVmZXJlc2hDb250ZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9maWVsZFZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5maWVsZFR5cGUgPT09IGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfQVJSQVkgJiYgQXJyYXkuaXNBcnJheSh0aGlzLl9maWVsZFZhbHVlKSkge1xuICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5fZmllbGRWYWx1ZT8uZmlsdGVyKGl0ZW0gPT5cbiAgICAgICAgICB0aGlzLmZpZWxkT3B0aW9ucy5maW5kKG9wdCA9PiBvcHQuZmllbGRPcHRpb25JZCA9PT0gaXRlbSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRBdHRyKGZsZEF0dHIudmFsdWUsIGZpZWxkVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsSW5PcHRpb25zID0gdGhpcy5maWVsZE9wdGlvbnNcbiAgICAgICAgICAuZmluZChpdGVtID0+IGl0ZW0uZmllbGRPcHRpb25JZCA9PT0gdGhpcy5fZmllbGRWYWx1ZSk7XG4gICAgICAgIGlmICghdmFsSW5PcHRpb25zKSB7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuZmllbGRSZXF1aXJlZCAmJiB0aGlzLmZpZWxkT3B0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5maWVsZE9wdGlvbnNbMF0uZmllbGRPcHRpb25JZCk7XG4gICAgICBpZiAodGhpcy53aWRnZXQ/Lm9uQ2hhbmdlQ29udGVudCkge1xuICAgICAgICB0aGlzLndpZGdldD8ub25DaGFuZ2VDb250ZW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0VmFsdWUobmV3VmFsdWUsIHdpZGdldFVwZGF0ZSA9IHRydWUpIHtcbiAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSBVTkRFRklORUQgfHwgbmV3VmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgbmV3RmluYWxWYWx1ZTtcbiAgICBzd2l0Y2ggKHRoaXMuZmllbGRUeXBlKSB7XG4gICAgICBjYXNlICdCT09MRUFOJzpcbiAgICAgICAgbmV3RmluYWxWYWx1ZSA9ICEhbmV3VmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjb21wb25lbnRDb25zdGFudHMuRklFTERUWVBFX0NIRUNLOlxuICAgICAgICBuZXdGaW5hbFZhbHVlID0gISFuZXdWYWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfQVJSQVk6XG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gbnVsbCB8fCBuZXdWYWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICBuZXdGaW5hbFZhbHVlID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiAobmV3VmFsdWUpICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdGaW5hbFZhbHVlID0gbmV3VmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdGaW5hbFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNvbXBvbmVudENvbnN0YW50cy5GSUVMRFRZUEVfTUFQOlxuICAgICAgICBuZXdGaW5hbFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIGlmIChuZXdGaW5hbFZhbHVlICYmIHRoaXMud2lkZ2V0ICYmIHdpZGdldFVwZGF0ZSkge1xuICAgICAgICAgIGNvbnN0IGxhdGl0dWRlID0gcGFyc2VGbG9hdChuZXdGaW5hbFZhbHVlWzBdKTtcbiAgICAgICAgICBjb25zdCBsb25naXR1ZGUgPSBwYXJzZUZsb2F0KG5ld0ZpbmFsVmFsdWVbMV0pO1xuICAgICAgICAgIHRoaXMud2lkZ2V0Py5zZXRMb2NhdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY29tcG9uZW50Q29uc3RhbnRzLkZJRUxEVFlQRV9DVVJSRU5DWTpcbiAgICAgICAgbmV3RmluYWxWYWx1ZSA9IGZvcm1hdEN1cnJlbmN5KHRoaXMuX2ZpZWxkVmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG5ld0ZpbmFsVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9maWVsZFZhbHVlICE9PSBuZXdGaW5hbFZhbHVlKSB7XG4gICAgICB0aGlzLnNldENoYW5nZWQodHJ1ZSk7XG4gICAgICB0aGlzLnNldEF0dHIoZmxkQXR0ci52YWx1ZSwgbmV3RmluYWxWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
|