@1money/component-ui 0.0.71 → 0.0.73
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/es/components/ProForm/ProForm.d.ts +10 -2
- package/es/components/ProForm/ProForm.js +55 -22
- package/es/components/ProForm/ProFormDependency.js +4 -1
- package/es/components/ProForm/ProFormItem.js +73 -36
- package/es/components/ProForm/SchemaForm.d.ts +7 -0
- package/es/components/ProForm/SchemaForm.js +103 -0
- package/es/components/ProForm/Submitter.js +12 -2
- package/es/components/ProForm/context.d.ts +22 -3
- package/es/components/ProForm/context.js +49 -10
- package/es/components/ProForm/core/constants.d.ts +2 -1
- package/es/components/ProForm/core/constants.js +3 -6
- package/es/components/ProForm/core/hooks/useForm.js +155 -131
- package/es/components/ProForm/core/hooks/useFormCore.js +73 -39
- package/es/components/ProForm/core/interface.d.ts +33 -12
- package/es/components/ProForm/core/runRules.d.ts +16 -6
- package/es/components/ProForm/core/runRules.js +94 -47
- package/es/components/ProForm/core/useFormItem.d.ts +10 -1
- package/es/components/ProForm/core/useFormItem.js +101 -39
- package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
- package/es/components/ProForm/fields/createProFormField.js +50 -31
- package/es/components/ProForm/index.d.ts +11 -4
- package/es/components/ProForm/index.js +7 -2
- package/es/components/ProForm/interface.d.ts +89 -14
- package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
- package/es/components/ProForm/layouts/DialogForm.js +2 -1
- package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
- package/es/components/ProForm/layouts/DrawerForm.js +2 -1
- package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
- package/es/components/ProForm/layouts/QueryFilter.js +77 -12
- package/es/components/ProForm/style/ProForm.css +6 -0
- package/es/components/ProForm/utils.d.ts +12 -1
- package/es/components/ProForm/utils.js +70 -21
- package/es/components/Tooltip/style/Tooltip.css +1 -0
- package/es/index.css +1 -1
- package/es/index.d.ts +2 -2
- package/es/index.js +2 -2
- package/lib/components/ProForm/ProForm.d.ts +10 -2
- package/lib/components/ProForm/ProForm.js +53 -20
- package/lib/components/ProForm/ProFormDependency.js +4 -1
- package/lib/components/ProForm/ProFormItem.js +72 -34
- package/lib/components/ProForm/SchemaForm.d.ts +7 -0
- package/lib/components/ProForm/SchemaForm.js +110 -0
- package/lib/components/ProForm/Submitter.js +12 -2
- package/lib/components/ProForm/context.d.ts +22 -3
- package/lib/components/ProForm/context.js +49 -10
- package/lib/components/ProForm/core/constants.d.ts +2 -1
- package/lib/components/ProForm/core/constants.js +4 -7
- package/lib/components/ProForm/core/hooks/useForm.js +154 -130
- package/lib/components/ProForm/core/hooks/useFormCore.js +72 -38
- package/lib/components/ProForm/core/interface.d.ts +33 -12
- package/lib/components/ProForm/core/runRules.d.ts +16 -6
- package/lib/components/ProForm/core/runRules.js +95 -47
- package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
- package/lib/components/ProForm/core/useFormItem.js +100 -38
- package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
- package/lib/components/ProForm/fields/createProFormField.js +50 -31
- package/lib/components/ProForm/index.d.ts +11 -4
- package/lib/components/ProForm/index.js +16 -1
- package/lib/components/ProForm/interface.d.ts +89 -14
- package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
- package/lib/components/ProForm/layouts/DialogForm.js +2 -1
- package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
- package/lib/components/ProForm/layouts/DrawerForm.js +2 -1
- package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
- package/lib/components/ProForm/layouts/QueryFilter.js +77 -12
- package/lib/components/ProForm/style/ProForm.css +6 -0
- package/lib/components/ProForm/utils.d.ts +12 -1
- package/lib/components/ProForm/utils.js +73 -21
- package/lib/components/Tooltip/style/Tooltip.css +1 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +13 -1
- package/package.json +1 -1
- package/scripts/mcp-server/examples.generated.json +54 -0
- package/scripts/mcp-server/index.generated.json +1212 -80
|
@@ -82,7 +82,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
82
82
|
// ---------------------------------------------------------------------------
|
|
83
83
|
var validateFieldAsync = (0, _useMemoizedFn["default"])(function (name, value, rules) {
|
|
84
84
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
85
|
-
var error;
|
|
85
|
+
var _yield$runRulesAsync, error, warning;
|
|
86
86
|
return _regenerator["default"].wrap(function (_context) {
|
|
87
87
|
while (1) switch (_context.prev = _context.next) {
|
|
88
88
|
case 0:
|
|
@@ -100,9 +100,12 @@ var useForm = exports.useForm = function useForm() {
|
|
|
100
100
|
});
|
|
101
101
|
_context.prev = 2;
|
|
102
102
|
_context.next = 3;
|
|
103
|
-
return (0, _runRules.runRulesAsync)(name, value, formCore.
|
|
103
|
+
return (0, _runRules.runRulesAsync)(name, value, formCore.getFieldsValue(), rules);
|
|
104
104
|
case 3:
|
|
105
|
-
|
|
105
|
+
_yield$runRulesAsync = _context.sent;
|
|
106
|
+
error = _yield$runRulesAsync.error;
|
|
107
|
+
warning = _yield$runRulesAsync.warning;
|
|
108
|
+
formCore.setFieldWarning(name, warning);
|
|
106
109
|
if (!(error !== null)) {
|
|
107
110
|
_context.next = 4;
|
|
108
111
|
break;
|
|
@@ -147,13 +150,13 @@ var useForm = exports.useForm = function useForm() {
|
|
|
147
150
|
setExtraTouched(function (prev) {
|
|
148
151
|
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, true));
|
|
149
152
|
});
|
|
150
|
-
rules = formCore.
|
|
153
|
+
rules = formCore.getFieldRules(name);
|
|
151
154
|
if (!(rules && validateTrigger === 'onBlur')) {
|
|
152
155
|
_context2.next = 1;
|
|
153
156
|
break;
|
|
154
157
|
}
|
|
155
158
|
_context2.next = 1;
|
|
156
|
-
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(formCore.
|
|
159
|
+
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name), rules);
|
|
157
160
|
case 1:
|
|
158
161
|
case "end":
|
|
159
162
|
return _context2.stop();
|
|
@@ -185,7 +188,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
185
188
|
break;
|
|
186
189
|
}
|
|
187
190
|
_context3.next = 1;
|
|
188
|
-
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(formCore.
|
|
191
|
+
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name), rules);
|
|
189
192
|
case 1:
|
|
190
193
|
_yield$validateFieldA = _context3.sent;
|
|
191
194
|
isValid = _yield$validateFieldA.isValid;
|
|
@@ -209,7 +212,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
209
212
|
break;
|
|
210
213
|
}
|
|
211
214
|
error = new Error('Validation failed');
|
|
212
|
-
error.values = formCore.
|
|
215
|
+
error.values = formCore.getFieldsValue();
|
|
213
216
|
error.errors = fieldErrors;
|
|
214
217
|
throw error;
|
|
215
218
|
case 2:
|
|
@@ -218,11 +221,11 @@ var useForm = exports.useForm = function useForm() {
|
|
|
218
221
|
break;
|
|
219
222
|
}
|
|
220
223
|
return _context4.abrupt("return", nameList.reduce(function (acc, name) {
|
|
221
|
-
acc[name] = (0, _pathUtils.resolveValue)(formCore.
|
|
224
|
+
acc[name] = (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name);
|
|
222
225
|
return acc;
|
|
223
226
|
}, {}));
|
|
224
227
|
case 3:
|
|
225
|
-
return _context4.abrupt("return", formCore.
|
|
228
|
+
return _context4.abrupt("return", formCore.getFieldsValue());
|
|
226
229
|
case 4:
|
|
227
230
|
case "end":
|
|
228
231
|
return _context4.stop();
|
|
@@ -233,7 +236,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
233
236
|
// ---------------------------------------------------------------------------
|
|
234
237
|
// defineField – used by standalone (non-ProForm) consumers
|
|
235
238
|
// ---------------------------------------------------------------------------
|
|
236
|
-
var defineField = (0,
|
|
239
|
+
var defineField = (0, _useMemoizedFn["default"])(function (name) {
|
|
237
240
|
var fieldOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
238
241
|
var _fieldOptions$rules = fieldOptions.rules,
|
|
239
242
|
rules = _fieldOptions$rules === void 0 ? [] : _fieldOptions$rules;
|
|
@@ -318,7 +321,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
318
321
|
});
|
|
319
322
|
FieldComponent.displayName = "Field(".concat(name, ")");
|
|
320
323
|
return FieldComponent;
|
|
321
|
-
}
|
|
324
|
+
});
|
|
322
325
|
// ---------------------------------------------------------------------------
|
|
323
326
|
// handleSubmit / handleReset – for <form> event handlers
|
|
324
327
|
// ---------------------------------------------------------------------------
|
|
@@ -360,133 +363,152 @@ var useForm = exports.useForm = function useForm() {
|
|
|
360
363
|
onReset === null || onReset === void 0 ? void 0 : onReset();
|
|
361
364
|
});
|
|
362
365
|
// ---------------------------------------------------------------------------
|
|
363
|
-
// FormInstance – enhanced API for consumers
|
|
366
|
+
// FormInstance – enhanced API for consumers.
|
|
367
|
+
//
|
|
368
|
+
// Every method is wrapped in useMemoizedFn (stable identity, always reads the
|
|
369
|
+
// latest render's state) so the instance object itself is IDENTITY-STABLE for
|
|
370
|
+
// the lifetime of the form — this is what lets ProForm publish it through the
|
|
371
|
+
// stable context without re-rendering subscribers on each keystroke.
|
|
364
372
|
// ---------------------------------------------------------------------------
|
|
373
|
+
var getFieldError = (0, _useMemoizedFn["default"])(function (name) {
|
|
374
|
+
return formCore.errors[name];
|
|
375
|
+
});
|
|
376
|
+
var getFieldWarning = (0, _useMemoizedFn["default"])(function (name) {
|
|
377
|
+
return formCore.warnings[name];
|
|
378
|
+
});
|
|
379
|
+
var getFieldsError = (0, _useMemoizedFn["default"])(function (nameList) {
|
|
380
|
+
if (!nameList) return formCore.errors;
|
|
381
|
+
var result = {};
|
|
382
|
+
nameList.forEach(function (name) {
|
|
383
|
+
if (formCore.errors[name]) {
|
|
384
|
+
result[name] = formCore.errors[name];
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
return result;
|
|
388
|
+
});
|
|
389
|
+
var isFieldTouched = (0, _useMemoizedFn["default"])(function (name) {
|
|
390
|
+
return allTouched[name] || false;
|
|
391
|
+
});
|
|
392
|
+
var isFieldsTouched = (0, _useMemoizedFn["default"])(function (nameList) {
|
|
393
|
+
var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
394
|
+
if (!nameList) {
|
|
395
|
+
return Object.keys(allTouched).some(function (key) {
|
|
396
|
+
return allTouched[key];
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
if (allFieldsTouched) {
|
|
400
|
+
return nameList.every(function (name) {
|
|
401
|
+
return allTouched[name];
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
return nameList.some(function (name) {
|
|
405
|
+
return allTouched[name];
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
var isFieldValidating = (0, _useMemoizedFn["default"])(function (name) {
|
|
409
|
+
return validating[name] || false;
|
|
410
|
+
});
|
|
411
|
+
var setFieldsError = (0, _useMemoizedFn["default"])(function (fieldsError) {
|
|
412
|
+
Object.entries(fieldsError).forEach(function (_ref) {
|
|
413
|
+
var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
414
|
+
name = _ref2[0],
|
|
415
|
+
error = _ref2[1];
|
|
416
|
+
formCore.setFieldError(name, error);
|
|
417
|
+
});
|
|
418
|
+
});
|
|
419
|
+
var setFieldTouched = (0, _useMemoizedFn["default"])(function (name) {
|
|
420
|
+
var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
421
|
+
setExtraTouched(function (prev) {
|
|
422
|
+
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, isTouched));
|
|
423
|
+
});
|
|
424
|
+
});
|
|
425
|
+
var setFieldsTouched = (0, _useMemoizedFn["default"])(function (fieldsTouch) {
|
|
426
|
+
setExtraTouched(function (prev) {
|
|
427
|
+
return Object.assign(Object.assign({}, prev), fieldsTouch);
|
|
428
|
+
});
|
|
429
|
+
});
|
|
430
|
+
var resetFormFields = (0, _useMemoizedFn["default"])(function (fields) {
|
|
431
|
+
if (!fields) {
|
|
432
|
+
formCore.resetFields();
|
|
433
|
+
setExtraTouched({});
|
|
434
|
+
setValidating({});
|
|
435
|
+
} else {
|
|
436
|
+
var resetValues = {};
|
|
437
|
+
fields.forEach(function (field) {
|
|
438
|
+
var _a;
|
|
439
|
+
resetValues[field] = ((_a = config.initialValues) !== null && _a !== void 0 ? _a : {})[field];
|
|
440
|
+
});
|
|
441
|
+
formCore.setFieldsValue(resetValues);
|
|
442
|
+
setExtraTouched(function (prev) {
|
|
443
|
+
var newTouched = Object.assign({}, prev);
|
|
444
|
+
fields.forEach(function (field) {
|
|
445
|
+
delete newTouched[field];
|
|
446
|
+
});
|
|
447
|
+
return newTouched;
|
|
448
|
+
});
|
|
449
|
+
setValidating(function (prev) {
|
|
450
|
+
var newValidating = Object.assign({}, prev);
|
|
451
|
+
fields.forEach(function (field) {
|
|
452
|
+
delete newValidating[field];
|
|
453
|
+
});
|
|
454
|
+
return newValidating;
|
|
455
|
+
});
|
|
456
|
+
fields.forEach(function (field) {
|
|
457
|
+
formCore.setFieldError(field, null);
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
var submitWithValidation = (0, _useMemoizedFn["default"])(function (callback) {
|
|
462
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
463
|
+
var validatedValues, _t2;
|
|
464
|
+
return _regenerator["default"].wrap(function (_context6) {
|
|
465
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
466
|
+
case 0:
|
|
467
|
+
_context6.prev = 0;
|
|
468
|
+
_context6.next = 1;
|
|
469
|
+
return validateFieldsAsync();
|
|
470
|
+
case 1:
|
|
471
|
+
validatedValues = _context6.sent;
|
|
472
|
+
if (!callback) {
|
|
473
|
+
_context6.next = 2;
|
|
474
|
+
break;
|
|
475
|
+
}
|
|
476
|
+
_context6.next = 2;
|
|
477
|
+
return callback(validatedValues);
|
|
478
|
+
case 2:
|
|
479
|
+
return _context6.abrupt("return", validatedValues);
|
|
480
|
+
case 3:
|
|
481
|
+
_context6.prev = 3;
|
|
482
|
+
_t2 = _context6["catch"](0);
|
|
483
|
+
return _context6.abrupt("return", undefined);
|
|
484
|
+
case 4:
|
|
485
|
+
case "end":
|
|
486
|
+
return _context6.stop();
|
|
487
|
+
}
|
|
488
|
+
}, _callee6, null, [[0, 3]]);
|
|
489
|
+
}));
|
|
490
|
+
});
|
|
365
491
|
var formInstance = (0, _react.useMemo)(function () {
|
|
366
492
|
return Object.assign(Object.assign({}, formCore.formInstance), {
|
|
367
493
|
validateFields: validateFieldsAsync,
|
|
368
494
|
setFieldValue: formCore.setFieldValue,
|
|
369
|
-
getFieldError:
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
nameList.forEach(function (name) {
|
|
376
|
-
if (formCore.errors[name]) {
|
|
377
|
-
result[name] = formCore.errors[name];
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
return result;
|
|
381
|
-
},
|
|
382
|
-
isFieldTouched: function isFieldTouched(name) {
|
|
383
|
-
return allTouched[name] || false;
|
|
384
|
-
},
|
|
385
|
-
isFieldsTouched: function isFieldsTouched(nameList) {
|
|
386
|
-
var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
387
|
-
if (!nameList) {
|
|
388
|
-
return Object.keys(allTouched).some(function (key) {
|
|
389
|
-
return allTouched[key];
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
if (allFieldsTouched) {
|
|
393
|
-
return nameList.every(function (name) {
|
|
394
|
-
return allTouched[name];
|
|
395
|
-
});
|
|
396
|
-
}
|
|
397
|
-
return nameList.some(function (name) {
|
|
398
|
-
return allTouched[name];
|
|
399
|
-
});
|
|
400
|
-
},
|
|
401
|
-
isFieldValidating: function isFieldValidating(name) {
|
|
402
|
-
return validating[name] || false;
|
|
403
|
-
},
|
|
495
|
+
getFieldError: getFieldError,
|
|
496
|
+
getFieldWarning: getFieldWarning,
|
|
497
|
+
getFieldsError: getFieldsError,
|
|
498
|
+
isFieldTouched: isFieldTouched,
|
|
499
|
+
isFieldsTouched: isFieldsTouched,
|
|
500
|
+
isFieldValidating: isFieldValidating,
|
|
404
501
|
setFieldError: formCore.setFieldError,
|
|
405
|
-
setFieldsError:
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
formCore.setFieldError(name, error);
|
|
411
|
-
});
|
|
412
|
-
},
|
|
413
|
-
setFieldTouched: function setFieldTouched(name) {
|
|
414
|
-
var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
415
|
-
setExtraTouched(function (prev) {
|
|
416
|
-
return Object.assign(Object.assign({}, prev), (0, _defineProperty2["default"])({}, name, isTouched));
|
|
417
|
-
});
|
|
418
|
-
},
|
|
419
|
-
setFieldsTouched: function setFieldsTouched(fieldsTouch) {
|
|
420
|
-
setExtraTouched(function (prev) {
|
|
421
|
-
return Object.assign(Object.assign({}, prev), fieldsTouch);
|
|
422
|
-
});
|
|
423
|
-
},
|
|
424
|
-
resetFields: function resetFields(fields) {
|
|
425
|
-
if (!fields) {
|
|
426
|
-
formCore.resetFields();
|
|
427
|
-
setExtraTouched({});
|
|
428
|
-
setValidating({});
|
|
429
|
-
} else {
|
|
430
|
-
var resetValues = {};
|
|
431
|
-
fields.forEach(function (field) {
|
|
432
|
-
var _a;
|
|
433
|
-
resetValues[field] = ((_a = config.initialValues) !== null && _a !== void 0 ? _a : {})[field];
|
|
434
|
-
});
|
|
435
|
-
formCore.setFieldsValue(resetValues);
|
|
436
|
-
setExtraTouched(function (prev) {
|
|
437
|
-
var newTouched = Object.assign({}, prev);
|
|
438
|
-
fields.forEach(function (field) {
|
|
439
|
-
delete newTouched[field];
|
|
440
|
-
});
|
|
441
|
-
return newTouched;
|
|
442
|
-
});
|
|
443
|
-
setValidating(function (prev) {
|
|
444
|
-
var newValidating = Object.assign({}, prev);
|
|
445
|
-
fields.forEach(function (field) {
|
|
446
|
-
delete newValidating[field];
|
|
447
|
-
});
|
|
448
|
-
return newValidating;
|
|
449
|
-
});
|
|
450
|
-
fields.forEach(function (field) {
|
|
451
|
-
formCore.setFieldError(field, null);
|
|
452
|
-
});
|
|
453
|
-
}
|
|
454
|
-
},
|
|
455
|
-
submit: function submit(callback) {
|
|
456
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
457
|
-
var validatedValues, _t2;
|
|
458
|
-
return _regenerator["default"].wrap(function (_context6) {
|
|
459
|
-
while (1) switch (_context6.prev = _context6.next) {
|
|
460
|
-
case 0:
|
|
461
|
-
_context6.prev = 0;
|
|
462
|
-
_context6.next = 1;
|
|
463
|
-
return validateFieldsAsync();
|
|
464
|
-
case 1:
|
|
465
|
-
validatedValues = _context6.sent;
|
|
466
|
-
if (!callback) {
|
|
467
|
-
_context6.next = 2;
|
|
468
|
-
break;
|
|
469
|
-
}
|
|
470
|
-
_context6.next = 2;
|
|
471
|
-
return callback(validatedValues);
|
|
472
|
-
case 2:
|
|
473
|
-
return _context6.abrupt("return", validatedValues);
|
|
474
|
-
case 3:
|
|
475
|
-
_context6.prev = 3;
|
|
476
|
-
_t2 = _context6["catch"](0);
|
|
477
|
-
return _context6.abrupt("return", undefined);
|
|
478
|
-
case 4:
|
|
479
|
-
case "end":
|
|
480
|
-
return _context6.stop();
|
|
481
|
-
}
|
|
482
|
-
}, _callee6, null, [[0, 3]]);
|
|
483
|
-
}));
|
|
484
|
-
},
|
|
502
|
+
setFieldsError: setFieldsError,
|
|
503
|
+
setFieldTouched: setFieldTouched,
|
|
504
|
+
setFieldsTouched: setFieldsTouched,
|
|
505
|
+
resetFields: resetFormFields,
|
|
506
|
+
submit: submitWithValidation,
|
|
485
507
|
defineField: defineField,
|
|
486
508
|
registerField: formCore.registerField,
|
|
487
509
|
unregisterField: formCore.unregisterField
|
|
488
510
|
});
|
|
489
|
-
}, [formCore,
|
|
511
|
+
}, [formCore.formInstance, formCore.setFieldValue, formCore.setFieldError, formCore.registerField, formCore.unregisterField, validateFieldsAsync, getFieldError, getFieldWarning, getFieldsError, isFieldTouched, isFieldsTouched, isFieldValidating, setFieldsError, setFieldTouched, setFieldsTouched, resetFormFields, submitWithValidation, defineField]);
|
|
490
512
|
// ---------------------------------------------------------------------------
|
|
491
513
|
// Internals – exposed for ProForm integration
|
|
492
514
|
// ---------------------------------------------------------------------------
|
|
@@ -494,11 +516,13 @@ var useForm = exports.useForm = function useForm() {
|
|
|
494
516
|
return {
|
|
495
517
|
values: formCore.values,
|
|
496
518
|
errors: formCore.errors,
|
|
519
|
+
warnings: formCore.warnings,
|
|
497
520
|
touched: allTouched,
|
|
498
521
|
validating: validating,
|
|
499
522
|
fieldRules: formCore.fieldRules,
|
|
500
523
|
setFieldValue: formCore.setFieldValue,
|
|
501
524
|
setFieldError: formCore.setFieldError,
|
|
525
|
+
setFieldWarning: formCore.setFieldWarning,
|
|
502
526
|
validateField: formCore.validateField,
|
|
503
527
|
validateFieldAsync: validateFieldAsync,
|
|
504
528
|
registerField: formCore.registerField,
|
|
@@ -506,11 +530,11 @@ var useForm = exports.useForm = function useForm() {
|
|
|
506
530
|
handleSubmit: handleSubmit,
|
|
507
531
|
handleReset: handleReset
|
|
508
532
|
};
|
|
509
|
-
}, [formCore.values, formCore.errors, allTouched, validating, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
|
|
533
|
+
}, [formCore.values, formCore.errors, formCore.warnings, allTouched, validating, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.setFieldWarning, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
|
|
510
534
|
return {
|
|
511
535
|
formInstance: formInstance,
|
|
512
536
|
internals: internals
|
|
513
537
|
};
|
|
514
538
|
};
|
|
515
539
|
var _default = exports["default"] = useForm;
|
|
516
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl91c2VTYWZlU3RhdGUzIiwiX3VzZUZvcm1Db3JlIiwiX3BhdGhVdGlscyIsIl9ydW5SdWxlcyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fcmVzdCIsInMiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlRm9ybSIsImV4cG9ydHMiLCJjb25maWciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25SZXNldCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwidXNlRm9ybUNvcmUiLCJfdXNlU2FmZVN0YXRlIiwidXNlU2FmZVN0YXRlIiwiX3VzZVNhZmVTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJ2YWxpZGF0aW5nIiwic2V0VmFsaWRhdGluZyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImV4dHJhVG91Y2hlZCIsInNldEV4dHJhVG91Y2hlZCIsImFsbFRvdWNoZWQiLCJ1c2VNZW1vIiwiYXNzaWduIiwidG91Y2hlZCIsInZhbGlkYXRlRmllbGRBc3luYyIsInVzZU1lbW9pemVkRm4iLCJuYW1lIiwicnVsZXMiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImVycm9yIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsImFicnVwdCIsImlzVmFsaWQiLCJfZGVmaW5lUHJvcGVydHkyIiwicnVuUnVsZXNBc3luYyIsInZhbHVlcyIsInNlbnQiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3JzIiwibmV3VmFsaWRhdGluZyIsImZpbmlzaCIsInN0b3AiLCJoYW5kbGVGaWVsZEJsdXIiLCJ1c2VFdmVudENhbGxiYWNrIiwiX2NhbGxlZTIiLCJfY29udGV4dDIiLCJmaWVsZFJ1bGVzIiwicmVzb2x2ZVZhbHVlIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiaGFzRXJyb3IiLCJmaWVsZEVycm9ycyIsInZhbGlkYXRpb25Qcm9taXNlcyIsIl9jb250ZXh0NCIsImtleXMiLCJtYXAiLCJfY2FsbGVlMyIsIl95aWVsZCR2YWxpZGF0ZUZpZWxkQSIsIl9jb250ZXh0MyIsImFsbCIsIkVycm9yIiwicmVkdWNlIiwiYWNjIiwiZGVmaW5lRmllbGQiLCJ1c2VDYWxsYmFjayIsImZpZWxkT3B0aW9ucyIsIl9maWVsZE9wdGlvbnMkcnVsZXMiLCJGaWVsZENvbXBvbmVudCIsIm1lbW8iLCJfYSIsIl9iIiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsImZpZWxkVmFsdWUiLCJmaWVsZEVycm9yIiwiZmllbGRUb3VjaGVkIiwiZmllbGRWYWxpZGF0aW5nIiwidXNlRWZmZWN0IiwiZXhpc3RpbmdSdWxlcyIsImdldEZpZWxkUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwidW5yZWdpc3RlckZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwidmFsaWRhdGVGaWVsZCIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsIl90eXBlb2YyIiwidGFyZ2V0IiwiUmVhY3QiLCJpc1ZhbGlkRWxlbWVudCIsImhhbmRsZU1lcmdlQmx1ciIsIm1lcmdlZFByb3BzIiwiY2xvbmVFbGVtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImNoaWxkIiwiaW5kZXgiLCJrZXkiLCJkaXNwbGF5TmFtZSIsImhhbmRsZVN1Ym1pdCIsIl9jYWxsZWU1IiwidmFsaWRhdGVkVmFsdWVzIiwidHlwZWQiLCJfdCIsIl9jb250ZXh0NSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUmVzZXQiLCJyZXNldEZpZWxkcyIsImZvcm1JbnN0YW5jZSIsInZhbGlkYXRlRmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkc0Vycm9yIiwiZm9yRWFjaCIsImlzRmllbGRUb3VjaGVkIiwiaXNGaWVsZHNUb3VjaGVkIiwiYWxsRmllbGRzVG91Y2hlZCIsInNvbWUiLCJldmVyeSIsImlzRmllbGRWYWxpZGF0aW5nIiwic2V0RmllbGRzRXJyb3IiLCJmaWVsZHNFcnJvciIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJzZXRGaWVsZFRvdWNoZWQiLCJpc1RvdWNoZWQiLCJzZXRGaWVsZHNUb3VjaGVkIiwiZmllbGRzVG91Y2giLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwiaW5pdGlhbFZhbHVlcyIsInNldEZpZWxkc1ZhbHVlIiwibmV3VG91Y2hlZCIsInN1Ym1pdCIsImNhbGxiYWNrIiwiX2NhbGxlZTYiLCJfdDIiLCJfY29udGV4dDYiLCJpbnRlcm5hbHMiLCJfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxjQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxTQUFBLEdBQUFQLE9BQUE7QUFBNEMsU0FBQVEseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFWLHdCQUFBVSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLFFBQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMs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QVEsQ0FBQ2dDLE1BQU0sRUFDZmhDLFFBQVEsQ0FBQ21DLE1BQU0sRUFDZnRCLFVBQVUsRUFDVlAsVUFBVSxFQUNWTixRQUFRLENBQUMyQyxVQUFVLEVBQ25CM0MsUUFBUSxDQUFDbUYsYUFBYSxFQUN0Qm5GLFFBQVEsQ0FBQ2tDLGFBQWEsRUFDdEJsQyxRQUFRLENBQUNvRixhQUFhLEVBQ3RCbkUsa0JBQWtCLEVBQ2xCakIsUUFBUSxDQUFDZ0YsYUFBYSxFQUN0QmhGLFFBQVEsQ0FBQ2lGLGVBQWUsRUFDeEIwQixZQUFZLEVBQ1pPLFdBQVcsQ0FDWixDQUNGO0VBRUQsT0FBTztJQUFFRSxZQUFZLEVBQVpBLFlBQVk7SUFBRStCLFNBQVMsRUFBVEE7RUFBUyxDQUFFO0FBQ3BDLENBQUM7QUFBQyxJQUFBQyxRQUFBLEdBQUE3SixPQUFBLGNBRWFELE9BQU8iLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgbWVtbywgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgdXNlU2FmZVN0YXRlIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlU2FmZVN0YXRlJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNBc3luYyB9IGZyb20gJy4uL3J1blJ1bGVzJztcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdXNlRm9ybVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY29uc3QgdXNlRm9ybSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblJlc2V0LCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGZvcm1Db3JlID0gdXNlRm9ybUNvcmUoY29uZmlnKTtcbiAgICBjb25zdCBbdmFsaWRhdGluZywgc2V0VmFsaWRhdGluZ10gPSB1c2VTYWZlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtleHRyYVRvdWNoZWQsIHNldEV4dHJhVG91Y2hlZF0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgYWxsVG91Y2hlZCA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUudG91Y2hlZCksIGV4dHJhVG91Y2hlZCkpLCBbZm9ybUNvcmUudG91Y2hlZCwgZXh0cmFUb3VjaGVkXSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgdmFsaWRhdGlvbiDigJMgZWFjaCBydWxlIGlzIHByb2Nlc3NlZCBleGFjdGx5IG9uY2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSwgcnVsZXMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdHJ1ZSB9KSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB5aWVsZCBydW5SdWxlc0FzeW5jKG5hbWUsIHZhbHVlLCBmb3JtQ29yZS52YWx1ZXMsIHJ1bGVzKTtcbiAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEFzeW5jIGZpZWxkIGJsdXIgaGFuZGxlclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZUZpZWxkQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdHJ1ZSB9KSkpO1xuICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgIGlmIChydWxlcyAmJiB2YWxpZGF0ZVRyaWdnZXIgPT09ICdvbkJsdXInKSB7XG4gICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLnZhbHVlcywgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWYWxpZGF0ZSBhbGwgZmllbGRzIGFzeW5jXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb21pc2VzID0gZmllbGRzVG9WYWxpZGF0ZS5tYXAoKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCBlcnJvciB9ID0geWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZShmb3JtQ29yZS52YWx1ZXMsIG5hbWUpLCBydWxlcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgeWllbGQgUHJvbWlzZS5hbGwodmFsaWRhdGlvblByb21pc2VzKTtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignVmFsaWRhdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgICAgIGVycm9yLnZhbHVlcyA9IGZvcm1Db3JlLnZhbHVlcztcbiAgICAgICAgICAgIGVycm9yLmVycm9ycyA9IGZpZWxkRXJyb3JzO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWVMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QucmVkdWNlKChhY2MsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBhY2NbbmFtZV0gPSByZXNvbHZlVmFsdWUoZm9ybUNvcmUudmFsdWVzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtQ29yZS52YWx1ZXM7XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGRlZmluZUZpZWxkIOKAkyB1c2VkIGJ5IHN0YW5kYWxvbmUgKG5vbi1Qcm9Gb3JtKSBjb25zdW1lcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBkZWZpbmVGaWVsZCA9IHVzZUNhbGxiYWNrKChuYW1lLCBmaWVsZE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7IHJ1bGVzID0gW10gfSA9IGZpZWxkT3B0aW9ucztcbiAgICAgICAgY29uc3QgRmllbGRDb21wb25lbnQgPSBtZW1vKChfYSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9iO1xuICAgICAgICAgICAgdmFyIHsgY2hpbGRyZW4sIHJlbmRlciB9ID0gX2EsIHByb3BzID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcInJlbmRlclwiXSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gKF9iID0gZm9ybUNvcmUudmFsdWVzW25hbWVdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3IgPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFRvdWNoZWQgPSBhbGxUb3VjaGVkW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWxpZGF0aW5nID0gdmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSdWxlcyA9IGZvcm1Db3JlLmdldEZpZWxkUnVsZXMobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ1J1bGVzICYmIHJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZChuYW1lLCBydWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSwgW10pOyAvLyBPbmx5IHJlZ2lzdGVyIG9uIG1vdW50XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVGaWVsZENoYW5nZSA9IHVzZUV2ZW50Q2FsbGJhY2soKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQ2hhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRCbHVyKG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFByb3BzID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHZhbHVlOiBmaWVsZFZhbHVlLCBlcnJvcjogZmllbGRFcnJvciwgdG91Y2hlZDogZmllbGRUb3VjaGVkLCB2YWxpZGF0aW5nOiBmaWVsZFZhbGlkYXRpbmcsIG9uQ2hhbmdlOiBoYW5kbGVGaWVsZENoYW5nZSwgb25CbHVyOiBoYW5kbGVCbHVyIH0sIHByb3BzKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQ2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAndGFyZ2V0JyBpbiBlXG4gICAgICAgICAgICAgICAgICAgID8gZS50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQ2hhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQmx1ciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25CbHVyKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlbmRlciAmJiB0eXBlb2YgcmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC4uLmNoaWxkcmVuLm1hcCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmaWVsZFByb3BzKSwgeyBrZXk6IGNoaWxkLmtleSB8fCBpbmRleCwgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIG1lcmdlZFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICBGaWVsZENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGBGaWVsZCgke25hbWV9KWA7XG4gICAgICAgIHJldHVybiBGaWVsZENvbXBvbmVudDtcbiAgICB9LCBbXG4gICAgICAgIGZvcm1Db3JlLFxuICAgICAgICBhbGxUb3VjaGVkLFxuICAgICAgICB2YWxpZGF0aW5nLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgICAgIGhhbmRsZUZpZWxkQmx1cixcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBoYW5kbGVTdWJtaXQgLyBoYW5kbGVSZXNldCDigJMgZm9yIDxmb3JtPiBldmVudCBoYW5kbGVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaCh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVkID0gZXJyO1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiB0eXBlZC52YWx1ZXMsIGVycm9yczogdHlwZWQuZXJyb3JzIH0pO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKHt9KTtcbiAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZvcm1JbnN0YW5jZSDigJMgZW5oYW5jZWQgQVBJIGZvciBjb25zdW1lcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZvcm1Db3JlLmZvcm1JbnN0YW5jZSksIHsgdmFsaWRhdGVGaWVsZHM6IHZhbGlkYXRlRmllbGRzQXN5bmMsIHNldEZpZWxkVmFsdWU6IGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsIGdldEZpZWxkRXJyb3I6IChuYW1lKSA9PiBmb3JtQ29yZS5lcnJvcnNbbmFtZV0sIGdldEZpZWxkc0Vycm9yOiAobmFtZUxpc3QpID0+IHtcbiAgICAgICAgICAgIGlmICghbmFtZUxpc3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1Db3JlLmVycm9ycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgbmFtZUxpc3QuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmb3JtQ29yZS5lcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gZm9ybUNvcmUuZXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSwgaXNGaWVsZFRvdWNoZWQ6IChuYW1lKSA9PiBhbGxUb3VjaGVkW25hbWVdIHx8IGZhbHNlLCBpc0ZpZWxkc1RvdWNoZWQ6IChuYW1lTGlzdCwgYWxsRmllbGRzVG91Y2hlZCA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5hbWVMaXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFsbFRvdWNoZWQpLnNvbWUoKGtleSkgPT4gYWxsVG91Y2hlZFtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGxGaWVsZHNUb3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LmV2ZXJ5KChuYW1lKSA9PiBhbGxUb3VjaGVkW25hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5zb21lKChuYW1lKSA9PiBhbGxUb3VjaGVkW25hbWVdKTtcbiAgICAgICAgfSwgaXNGaWVsZFZhbGlkYXRpbmc6IChuYW1lKSA9PiB2YWxpZGF0aW5nW25hbWVdIHx8IGZhbHNlLCBzZXRGaWVsZEVycm9yOiBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLCBzZXRGaWVsZHNFcnJvcjogKGZpZWxkc0Vycm9yKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHNFcnJvcikuZm9yRWFjaCgoW25hbWUsIGVycm9yXSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHNldEZpZWxkVG91Y2hlZDogKG5hbWUsIGlzVG91Y2hlZCA9IHRydWUpID0+IHtcbiAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiBpc1RvdWNoZWQgfSkpKTtcbiAgICAgICAgfSwgc2V0RmllbGRzVG91Y2hlZDogKGZpZWxkc1RvdWNoKSA9PiB7XG4gICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCBmaWVsZHNUb3VjaCkpKTtcbiAgICAgICAgfSwgcmVzZXRGaWVsZHM6IChmaWVsZHMpID0+IHtcbiAgICAgICAgICAgIGlmICghZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoe30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzZXRWYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICByZXNldFZhbHVlc1tmaWVsZF0gPSAoKF9hID0gY29uZmlnLmluaXRpYWxWYWx1ZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9KVtmaWVsZF07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRzVmFsdWUocmVzZXRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdUb3VjaGVkID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RvdWNoZWRbZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1RvdWNoZWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1ZhbGlkYXRpbmdbZmllbGRdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbGlkYXRpbmc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IoZmllbGQsIG51bGwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBzdWJtaXQ6IChjYWxsYmFjaykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgY2FsbGJhY2sodmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlZFZhbHVlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLCBkZWZpbmVGaWVsZCwgcmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCwgdW5yZWdpc3RlckZpZWxkOiBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQgfSkpLCBbXG4gICAgICAgIGZvcm1Db3JlLFxuICAgICAgICBhbGxUb3VjaGVkLFxuICAgICAgICB2YWxpZGF0aW5nLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkc0FzeW5jLFxuICAgICAgICBkZWZpbmVGaWVsZCxcbiAgICAgICAgY29uZmlnLmluaXRpYWxWYWx1ZXMsXG4gICAgICAgIHNldFZhbGlkYXRpbmcsXG4gICAgXSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gSW50ZXJuYWxzIOKAkyBleHBvc2VkIGZvciBQcm9Gb3JtIGludGVncmF0aW9uXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaW50ZXJuYWxzID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICB2YWx1ZXM6IGZvcm1Db3JlLnZhbHVlcyxcbiAgICAgICAgZXJyb3JzOiBmb3JtQ29yZS5lcnJvcnMsXG4gICAgICAgIHRvdWNoZWQ6IGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIGZpZWxkUnVsZXM6IGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIHNldEZpZWxkVmFsdWU6IGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIHZhbGlkYXRlRmllbGQ6IGZvcm1Db3JlLnZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkOiBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgfSksIFtcbiAgICAgICAgZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBmb3JtQ29yZS5lcnJvcnMsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgIF0pO1xuICAgIHJldHVybiB7IGZvcm1JbnN0YW5jZSwgaW50ZXJuYWxzIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|
|
540
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl91c2VTYWZlU3RhdGUzIiwiX3VzZUZvcm1Db3JlIiwiX3BhdGhVdGlscyIsIl9ydW5SdWxlcyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fcmVzdCIsInMiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlRm9ybSIsImV4cG9ydHMiLCJjb25maWciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25SZXNldCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwidXNlRm9ybUNvcmUiLCJfdXNlU2FmZVN0YXRlIiwidXNlU2FmZVN0YXRlIiwiX3VzZVNhZmVTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJ2YWxpZGF0aW5nIiwic2V0VmFsaWRhdGluZyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImV4dHJhVG91Y2hlZCIsInNldEV4dHJhVG91Y2hlZCIsImFsbFRvdWNoZWQiLCJ1c2VNZW1vIiwiYXNzaWduIiwidG91Y2hlZCIsInZhbGlkYXRlRmllbGRBc3luYyIsInVzZU1lbW9pemVkRm4iLCJuYW1lIiwicnVsZXMiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl95aWVsZCRydW5SdWxlc0FzeW5jIiwiZXJyb3IiLCJ3YXJuaW5nIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsImFicnVwdCIsImlzVmFsaWQiLCJfZGVmaW5lUHJvcGVydHkyIiwicnVuUnVsZXNBc3luYyIsImdldEZpZWxkc1ZhbHVlIiwic2VudCIsInNldEZpZWxkV2FybmluZyIsInNldEZpZWxkRXJyb3IiLCJlcnJvcnMiLCJuZXdWYWxpZGF0aW5nIiwiZmluaXNoIiwic3RvcCIsImhhbmRsZUZpZWxkQmx1ciIsInVzZUV2ZW50Q2FsbGJhY2siLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsImdldEZpZWxkUnVsZXMiLCJyZXNvbHZlVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJoYXNFcnJvciIsImZpZWxkRXJyb3JzIiwidmFsaWRhdGlvblByb21pc2VzIiwiX2NvbnRleHQ0Iiwia2V5cyIsImZpZWxkUnVsZXMiLCJtYXAiLCJfY2FsbGVlMyIsIl95aWVsZCR2YWxpZGF0ZUZpZWxkQSIsIl9jb250ZXh0MyIsImFsbCIsIkVycm9yIiwidmFsdWVzIiwicmVkdWNlIiwiYWNjIiwiZGVmaW5lRmllbGQiLCJmaWVsZE9wdGlvbnMiLCJfZmllbGRPcHRpb25zJHJ1bGVzIiwiRmllbGRDb21wb25lbnQiLCJtZW1vIiwiX2EiLCJfYiIsImNoaWxkcmVuIiwicmVuZGVyIiwicHJvcHMiLCJmaWVsZFZhbHVlIiwiZmllbGRFcnJvciIsImZpZWxkVG91Y2hlZCIsImZpZWxkVmFsaWRhdGluZyIsInVzZUVmZmVjdCIsImV4aXN0aW5nUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwidW5yZWdpc3RlckZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwidmFsaWRhdGVGaWVsZCIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsIl90eXBlb2YyIiwidGFyZ2V0IiwiUmVhY3QiLCJpc1ZhbGlkRWxlbWVudCIsImhhbmRsZU1lcmdlQmx1ciIsIm1lcmdlZFByb3BzIiwiY2xvbmVFbGVtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiY3JlYXRlRWxlbWVudCIsIkZyYWdtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImNoaWxkIiwiaW5kZXgiLCJrZXkiLCJkaXNwbGF5TmFtZSIsImhhbmRsZVN1Ym1pdCIsIl9jYWxsZWU1IiwidmFsaWRhdGVkVmFsdWVzIiwidHlwZWQiLCJfdCIsIl9jb250ZXh0NSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUmVzZXQiLCJyZXNldEZpZWxkcyIsImdldEZpZWxkRXJyb3IiLCJnZXRGaWVsZFdhcm5pbmciLCJ3YXJuaW5ncyIsImdldEZpZWxkc0Vycm9yIiwiZm9yRWFjaCIsImlzRmllbGRUb3VjaGVkIiwiaXNGaWVsZHNUb3VjaGVkIiwiYWxsRmllbGRzVG91Y2hlZCIsInNvbWUiLCJldmVyeSIsImlzRmllbGRWYWxpZGF0aW5nIiwic2V0RmllbGRzRXJyb3IiLCJmaWVsZHNFcnJvciIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJzZXRGaWVsZFRvdWNoZWQiLCJpc1RvdWNoZWQiLCJzZXRGaWVsZHNUb3VjaGVkIiwiZmllbGRzVG91Y2giLCJyZXNldEZvcm1GaWVsZHMiLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwiaW5pdGlhbFZhbHVlcyIsInNldEZpZWxkc1ZhbHVlIiwibmV3VG91Y2hlZCIsInN1Ym1pdFdpdGhWYWxpZGF0aW9uIiwiY2FsbGJhY2siLCJfY2FsbGVlNiIsIl90MiIsIl9jb250ZXh0NiIsImZvcm1JbnN0YW5jZSIsInZhbGlkYXRlRmllbGRzIiwic3VibWl0IiwiaW50ZXJuYWxzIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsY0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksY0FBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sU0FBQSxHQUFBUCxPQUFBO0FBQTRDLFNBQUFRLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBVix3QkFBQVUsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxRQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQ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RUFBbEJBLGtCQUFrQjtNQUNsQmtFLGFBQWEsRUFBRW5GLFFBQVEsQ0FBQ21GLGFBQWE7TUFDckNDLGVBQWUsRUFBRXBGLFFBQVEsQ0FBQ29GLGVBQWU7TUFDekMwQixZQUFZLEVBQVpBLFlBQVk7TUFDWk8sV0FBVyxFQUFYQTtJQ2pHRixDRGtHQztFQUFBLENBQUMsRUFDRixDQUNFckgsUUFBUSxDQUFDZ0UsTUFBTSxFQUNmaEUsUUFBUSxDQUFDc0MsTUFBTSxFQUNmdEMsUUFBUSxDQUFDeUgsUUFBUSxFQUNqQjVHLFVBQVUsRUFDVlAsVUFBVSxFQUNWTixRQUFRLENBQUN5RCxVQUFVLEVBQ25CekQsUUFBUSxDQUFDc0YsYUFBYSxFQUN0QnRGLFFBQVEsQ0FBQ3FDLGFBQWEsRUFDdEJyQyxRQUFRLENBQUNvQyxlQUFlLEVBQ3hCcEMsUUFBUSxDQUFDdUYsYUFBYSxFQUN0QnRFLGtCQUFrQixFQUNsQmpCLFFBQVEsQ0FBQ21GLGFBQWEsRUFDdEJuRixRQUFRLENBQUNvRixlQUFlLEVBQ3hCMEIsWUFBWSxFQUNaTyxXQUFXLENBQ1osQ0FDRjtFQUVELE9BQU87SUFBRWtDLFlBQVksRUFBWkEsWUFBWTtJQUFFRyxTQUFTLEVBQVRBO0VBQVMsQ0FBRTtBQUNwQyxDQUFDO0FBQUMsSUFBQUMsUUFBQSxHQUFBcEssT0FBQSxjQUVhRCxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZUVmZmVjdCwgbWVtbywgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgdXNlU2FmZVN0YXRlIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlU2FmZVN0YXRlJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNBc3luYyB9IGZyb20gJy4uL3J1blJ1bGVzJztcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdXNlRm9ybVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY29uc3QgdXNlRm9ybSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblJlc2V0LCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGZvcm1Db3JlID0gdXNlRm9ybUNvcmUoY29uZmlnKTtcbiAgICBjb25zdCBbdmFsaWRhdGluZywgc2V0VmFsaWRhdGluZ10gPSB1c2VTYWZlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtleHRyYVRvdWNoZWQsIHNldEV4dHJhVG91Y2hlZF0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgYWxsVG91Y2hlZCA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUudG91Y2hlZCksIGV4dHJhVG91Y2hlZCkpLCBbZm9ybUNvcmUudG91Y2hlZCwgZXh0cmFUb3VjaGVkXSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgdmFsaWRhdGlvbiDigJMgZWFjaCBydWxlIGlzIHByb2Nlc3NlZCBleGFjdGx5IG9uY2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSwgcnVsZXMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdHJ1ZSB9KSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0geWllbGQgcnVuUnVsZXNBc3luYyhuYW1lLCB2YWx1ZSwgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgcnVsZXMpO1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRXYXJuaW5nKG5hbWUsIHdhcm5pbmcpO1xuICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWYWxpZGF0ZSBhbGwgZmllbGRzIGFzeW5jXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb21pc2VzID0gZmllbGRzVG9WYWxpZGF0ZS5tYXAoKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCBlcnJvciB9ID0geWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHlpZWxkIFByb21pc2UuYWxsKHZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBlcnJvci52YWx1ZXMgPSBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBkZWZpbmVGaWVsZCDigJMgdXNlZCBieSBzdGFuZGFsb25lIChub24tUHJvRm9ybSkgY29uc3VtZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZGVmaW5lRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBmaWVsZE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7IHJ1bGVzID0gW10gfSA9IGZpZWxkT3B0aW9ucztcbiAgICAgICAgY29uc3QgRmllbGRDb21wb25lbnQgPSBtZW1vKChfYSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9iO1xuICAgICAgICAgICAgdmFyIHsgY2hpbGRyZW4sIHJlbmRlciB9ID0gX2EsIHByb3BzID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcInJlbmRlclwiXSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gKF9iID0gZm9ybUNvcmUudmFsdWVzW25hbWVdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3IgPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFRvdWNoZWQgPSBhbGxUb3VjaGVkW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWxpZGF0aW5nID0gdmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSdWxlcyA9IGZvcm1Db3JlLmdldEZpZWxkUnVsZXMobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ1J1bGVzICYmIHJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZChuYW1lLCBydWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSwgW10pOyAvLyBPbmx5IHJlZ2lzdGVyIG9uIG1vdW50XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVGaWVsZENoYW5nZSA9IHVzZUV2ZW50Q2FsbGJhY2soKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQ2hhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRCbHVyKG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFByb3BzID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHZhbHVlOiBmaWVsZFZhbHVlLCBlcnJvcjogZmllbGRFcnJvciwgdG91Y2hlZDogZmllbGRUb3VjaGVkLCB2YWxpZGF0aW5nOiBmaWVsZFZhbGlkYXRpbmcsIG9uQ2hhbmdlOiBoYW5kbGVGaWVsZENoYW5nZSwgb25CbHVyOiBoYW5kbGVCbHVyIH0sIHByb3BzKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQ2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAndGFyZ2V0JyBpbiBlXG4gICAgICAgICAgICAgICAgICAgID8gZS50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQ2hhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQmx1ciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25CbHVyKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlbmRlciAmJiB0eXBlb2YgcmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC4uLmNoaWxkcmVuLm1hcCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmaWVsZFByb3BzKSwgeyBrZXk6IGNoaWxkLmtleSB8fCBpbmRleCwgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIG1lcmdlZFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICBGaWVsZENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGBGaWVsZCgke25hbWV9KWA7XG4gICAgICAgIHJldHVybiBGaWVsZENvbXBvbmVudDtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBoYW5kbGVTdWJtaXQgLyBoYW5kbGVSZXNldCDigJMgZm9yIDxmb3JtPiBldmVudCBoYW5kbGVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaCh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVkID0gZXJyO1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiB0eXBlZC52YWx1ZXMsIGVycm9yczogdHlwZWQuZXJyb3JzIH0pO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKHt9KTtcbiAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZvcm1JbnN0YW5jZSDigJMgZW5oYW5jZWQgQVBJIGZvciBjb25zdW1lcnMuXG4gICAgLy9cbiAgICAvLyBFdmVyeSBtZXRob2QgaXMgd3JhcHBlZCBpbiB1c2VNZW1vaXplZEZuIChzdGFibGUgaWRlbnRpdHksIGFsd2F5cyByZWFkcyB0aGVcbiAgICAvLyBsYXRlc3QgcmVuZGVyJ3Mgc3RhdGUpIHNvIHRoZSBpbnN0YW5jZSBvYmplY3QgaXRzZWxmIGlzIElERU5USVRZLVNUQUJMRSBmb3JcbiAgICAvLyB0aGUgbGlmZXRpbWUgb2YgdGhlIGZvcm0g4oCUIHRoaXMgaXMgd2hhdCBsZXRzIFByb0Zvcm0gcHVibGlzaCBpdCB0aHJvdWdoIHRoZVxuICAgIC8vIHN0YWJsZSBjb250ZXh0IHdpdGhvdXQgcmUtcmVuZGVyaW5nIHN1YnNjcmliZXJzIG9uIGVhY2gga2V5c3Ryb2tlLlxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGdldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBmb3JtQ29yZS5lcnJvcnNbbmFtZV0pO1xuICAgIGNvbnN0IGdldEZpZWxkV2FybmluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IGZvcm1Db3JlLndhcm5pbmdzW25hbWVdKTtcbiAgICBjb25zdCBnZXRGaWVsZHNFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgIGlmICghbmFtZUxpc3QpXG4gICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgbmFtZUxpc3QuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgY29uc3QgaXNGaWVsZFRvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBhbGxUb3VjaGVkW25hbWVdIHx8IGZhbHNlKTtcbiAgICBjb25zdCBpc0ZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCwgYWxsRmllbGRzVG91Y2hlZCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbGxUb3VjaGVkKS5zb21lKChrZXkpID0+IGFsbFRvdWNoZWRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5ldmVyeSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGlzRmllbGRWYWxpZGF0aW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gdmFsaWRhdGluZ1tuYW1lXSB8fCBmYWxzZSk7XG4gICAgY29uc3Qgc2V0RmllbGRzRXJyb3IgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNFcnJvcikgPT4ge1xuICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHNFcnJvcikuZm9yRWFjaCgoW25hbWUsIGVycm9yXSkgPT4ge1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGlzVG91Y2hlZCA9IHRydWUpID0+IHtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNUb3VjaCkgPT4ge1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCBmaWVsZHNUb3VjaCkpKTtcbiAgICB9KTtcbiAgICBjb25zdCByZXNldEZvcm1GaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHMpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRzVmFsdWUocmVzZXRWYWx1ZXMpO1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VG91Y2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1RvdWNoZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHN1Ym1pdFdpdGhWYWxpZGF0aW9uID0gdXNlTWVtb2l6ZWRGbigoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgY2FsbGJhY2sodmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcixcbiAgICAgICAgZ2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBnZXRGaWVsZHNFcnJvcixcbiAgICAgICAgaXNGaWVsZFRvdWNoZWQsXG4gICAgICAgIGlzRmllbGRzVG91Y2hlZCxcbiAgICAgICAgaXNGaWVsZFZhbGlkYXRpbmcsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yLFxuICAgICAgICBzZXRGaWVsZFRvdWNoZWQsXG4gICAgICAgIHNldEZpZWxkc1RvdWNoZWQsIHJlc2V0RmllbGRzOiByZXNldEZvcm1GaWVsZHMsIHN1Ym1pdDogc3VibWl0V2l0aFZhbGlkYXRpb24sIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUuZm9ybUluc3RhbmNlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGdldEZpZWxkRXJyb3IsXG4gICAgICAgIGdldEZpZWxkV2FybmluZyxcbiAgICAgICAgZ2V0RmllbGRzRXJyb3IsXG4gICAgICAgIGlzRmllbGRUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkc1RvdWNoZWQsXG4gICAgICAgIGlzRmllbGRWYWxpZGF0aW5nLFxuICAgICAgICBzZXRGaWVsZHNFcnJvcixcbiAgICAgICAgc2V0RmllbGRUb3VjaGVkLFxuICAgICAgICBzZXRGaWVsZHNUb3VjaGVkLFxuICAgICAgICByZXNldEZvcm1GaWVsZHMsXG4gICAgICAgIHN1Ym1pdFdpdGhWYWxpZGF0aW9uLFxuICAgICAgICBkZWZpbmVGaWVsZCxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IGZvcm1Db3JlLndhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkOiBhbGxUb3VjaGVkLFxuICAgICAgICB2YWxpZGF0aW5nLFxuICAgICAgICBmaWVsZFJ1bGVzOiBmb3JtQ29yZS5maWVsZFJ1bGVzLFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yOiBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZFdhcm5pbmc6IGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgZm9ybUNvcmUud2FybmluZ3MsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|