@1money/component-ui 0.0.74 → 0.0.76
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/Dialog/Dialog.js +7 -39
- package/es/components/Dialog/constants.d.ts +0 -3
- package/es/components/Dialog/constants.js +1 -4
- package/es/components/Dialog/style/Dialog.css +0 -21
- package/es/components/ProForm/ProForm.js +46 -33
- package/es/components/ProForm/ProFormDependency.js +6 -16
- package/es/components/ProForm/ProFormItem.js +5 -7
- package/es/components/ProForm/ProFormList.js +112 -40
- package/es/components/ProForm/core/constants.d.ts +2 -0
- package/es/components/ProForm/core/constants.js +7 -1
- package/es/components/ProForm/core/devWarning.d.ts +3 -0
- package/es/components/ProForm/core/devWarning.js +22 -0
- package/es/components/ProForm/core/formStore.d.ts +10 -2
- package/es/components/ProForm/core/formStore.js +21 -2
- package/es/components/ProForm/core/hooks/useForm.js +246 -103
- package/es/components/ProForm/core/hooks/useFormCore.js +134 -28
- package/es/components/ProForm/core/interface.d.ts +124 -49
- package/es/components/ProForm/core/runRules.d.ts +44 -12
- package/es/components/ProForm/core/runRules.js +584 -133
- package/es/components/ProForm/core/useFormItem.d.ts +6 -7
- package/es/components/ProForm/core/useFormItem.js +44 -22
- package/es/components/ProForm/core/validationError.d.ts +13 -0
- package/es/components/ProForm/core/validationError.js +29 -0
- package/es/components/ProForm/fields/ProFormCheckboxGroup.js +19 -5
- package/es/components/ProForm/fields/ProFormFieldSet.js +51 -12
- package/es/components/ProForm/fields/ProFormRadioGroup.js +8 -3
- package/es/components/ProForm/fields/ProFormSelect.js +13 -7
- package/es/components/ProForm/fields/createProFormField.js +18 -25
- package/es/components/ProForm/hooks/useFieldRequest.js +10 -8
- package/es/components/ProForm/index.d.ts +2 -1
- package/es/components/ProForm/index.js +4 -1
- package/es/components/ProForm/interface.d.ts +31 -40
- package/es/components/ProForm/layouts/QueryFilter.js +24 -16
- package/es/components/ProForm/style/ProForm.css +0 -1
- package/es/components/ProForm/utils.d.ts +8 -0
- package/es/components/ProForm/utils.js +51 -3
- package/es/components/Table/core/useTableSetup.js +2 -2
- package/es/components/Table/interface.d.ts +1 -1
- package/es/index.css +1 -1
- package/lib/components/Dialog/Dialog.js +6 -38
- package/lib/components/Dialog/constants.d.ts +0 -3
- package/lib/components/Dialog/constants.js +1 -4
- package/lib/components/Dialog/style/Dialog.css +0 -21
- package/lib/components/ProForm/ProForm.js +45 -32
- package/lib/components/ProForm/ProFormDependency.js +5 -15
- package/lib/components/ProForm/ProFormItem.js +5 -7
- package/lib/components/ProForm/ProFormList.js +110 -38
- package/lib/components/ProForm/core/constants.d.ts +2 -0
- package/lib/components/ProForm/core/constants.js +8 -2
- package/lib/components/ProForm/core/devWarning.d.ts +3 -0
- package/lib/components/ProForm/core/devWarning.js +29 -0
- package/lib/components/ProForm/core/formStore.d.ts +10 -2
- package/lib/components/ProForm/core/formStore.js +23 -2
- package/lib/components/ProForm/core/hooks/useForm.js +242 -99
- package/lib/components/ProForm/core/hooks/useFormCore.js +133 -27
- package/lib/components/ProForm/core/interface.d.ts +124 -49
- package/lib/components/ProForm/core/runRules.d.ts +44 -12
- package/lib/components/ProForm/core/runRules.js +587 -133
- package/lib/components/ProForm/core/useFormItem.d.ts +6 -7
- package/lib/components/ProForm/core/useFormItem.js +43 -21
- package/lib/components/ProForm/core/validationError.d.ts +13 -0
- package/lib/components/ProForm/core/validationError.js +36 -0
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +18 -4
- package/lib/components/ProForm/fields/ProFormFieldSet.js +51 -12
- package/lib/components/ProForm/fields/ProFormRadioGroup.js +7 -2
- package/lib/components/ProForm/fields/ProFormSelect.js +13 -7
- package/lib/components/ProForm/fields/createProFormField.js +18 -25
- package/lib/components/ProForm/hooks/useFieldRequest.js +10 -8
- package/lib/components/ProForm/index.d.ts +2 -1
- package/lib/components/ProForm/index.js +10 -1
- package/lib/components/ProForm/interface.d.ts +31 -40
- package/lib/components/ProForm/layouts/QueryFilter.js +24 -16
- package/lib/components/ProForm/style/ProForm.css +0 -1
- package/lib/components/ProForm/utils.d.ts +8 -0
- package/lib/components/ProForm/utils.js +52 -3
- package/lib/components/Table/core/useTableSetup.js +2 -2
- package/lib/components/Table/interface.d.ts +1 -1
- package/lib/index.css +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server/examples.generated.json +42 -36
- package/scripts/mcp-server/index.generated.json +23 -67
|
@@ -4,11 +4,17 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
+
exports.coerceFailureReason = coerceFailureReason;
|
|
7
8
|
exports.filterRulesByTrigger = filterRulesByTrigger;
|
|
9
|
+
exports.normalizeTriggers = normalizeTriggers;
|
|
10
|
+
exports.resolveRules = resolveRules;
|
|
8
11
|
exports.runRulesAsync = runRulesAsync;
|
|
9
12
|
exports.runRulesSync = runRulesSync;
|
|
10
13
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
15
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
16
|
+
var _pathUtils = require("./pathUtils");
|
|
17
|
+
var _devWarning = require("./devWarning");
|
|
12
18
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
13
19
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
14
20
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
@@ -47,75 +53,534 @@ function isEmptyValue(value) {
|
|
|
47
53
|
return value === undefined || value === null || value === '' || Array.isArray(value) && value.length === 0;
|
|
48
54
|
}
|
|
49
55
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* Submit-time validation bypasses this filter and runs every rule.
|
|
56
|
+
* Coerce a thrown/rejected reason into displayable failure content:
|
|
57
|
+
* a non-empty Error.message or a non-empty plain string — otherwise null
|
|
58
|
+
* (caller picks its fallback). Shared with the form-level last-resort nets.
|
|
54
59
|
*/
|
|
55
|
-
function
|
|
60
|
+
function coerceFailureReason(reason) {
|
|
61
|
+
if (reason instanceof Error && reason.message) return reason.message;
|
|
62
|
+
if (typeof reason === 'string' && reason) return reason;
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Failure message for a rejected/thrown custom validator:
|
|
67
|
+
* Error.message → plain string reason → rule.message → generic fallback.
|
|
68
|
+
*/
|
|
69
|
+
function resolveFailureMessage(reason, rule) {
|
|
70
|
+
var _a;
|
|
71
|
+
return (_a = coerceFailureReason(reason)) !== null && _a !== void 0 ? _a : rule.message || 'Validation failed';
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Resolve function-form rules into static rules. The
|
|
75
|
+
* context exposes the value snapshot the run was invoked with; function rules
|
|
76
|
+
* must be cheap and side-effect free — they may be resolved more than once
|
|
77
|
+
* per validation pass.
|
|
78
|
+
*/
|
|
79
|
+
function resolveRules(rules, values, instance) {
|
|
80
|
+
// Fast path: no function rules → nothing to resolve, no ctx allocation.
|
|
81
|
+
// This also makes the engine-internal re-resolution of already-resolved
|
|
82
|
+
// arrays free.
|
|
83
|
+
if (!rules.some(function (rule) {
|
|
84
|
+
return typeof rule === 'function';
|
|
85
|
+
})) {
|
|
86
|
+
return rules;
|
|
87
|
+
}
|
|
88
|
+
// Live-instance members (setFieldsValue, getFieldError, …) are spread in
|
|
89
|
+
// when available; the reads always come from the validation-time snapshot.
|
|
90
|
+
var ctx = Object.assign(Object.assign({}, instance), {
|
|
91
|
+
getFieldValue: function getFieldValue(name) {
|
|
92
|
+
return (0, _pathUtils.resolveValue)(values, name);
|
|
93
|
+
},
|
|
94
|
+
getFieldsValue: function getFieldsValue() {
|
|
95
|
+
return values;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
return rules.map(function (rule) {
|
|
99
|
+
if (typeof rule !== 'function') return rule;
|
|
100
|
+
try {
|
|
101
|
+
return rule(ctx);
|
|
102
|
+
} catch (err) {
|
|
103
|
+
// A throwing rule factory must not crash rendering or validation —
|
|
104
|
+
// surface it as a rule that always fails with the thrown reason.
|
|
105
|
+
return {
|
|
106
|
+
validator: function validator() {
|
|
107
|
+
throw err;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Normalize a form/item-level validateTrigger config into the effective
|
|
115
|
+
* interactive event list: item-level (when present) overrides form-level;
|
|
116
|
+
* `false` disables interactive validation entirely.
|
|
117
|
+
*/
|
|
118
|
+
function normalizeTriggers(itemTrigger, formTrigger) {
|
|
119
|
+
var effective = itemTrigger === undefined ? formTrigger : itemTrigger;
|
|
120
|
+
if (effective === false) return [];
|
|
121
|
+
return Array.isArray(effective) ? effective : [effective];
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Filter rules applicable to an interactive event: the event
|
|
125
|
+
* validates only when it is in the item's effective trigger set. Within the
|
|
126
|
+
* set, a rule WITHOUT `validateTrigger` runs on every event; a rule WITH one
|
|
127
|
+
* runs only on matching events — so a rule trigger outside the item's set
|
|
128
|
+
* never fires interactively. Submit-time validation bypasses this filter and
|
|
129
|
+
* runs every rule.
|
|
130
|
+
*
|
|
131
|
+
* Dev guard: a rule whose (non-empty) trigger set is fully OUTSIDE the
|
|
132
|
+
* active set can never fire interactively — usually a leftover of the
|
|
133
|
+
* pre-0.0.76 override semantics, so it warns once. `validateTrigger: []`
|
|
134
|
+
* is the deliberate submit-only idiom and stays silent.
|
|
135
|
+
*/
|
|
136
|
+
function filterRulesByTrigger(rules, trigger, activeTriggers, fieldName) {
|
|
137
|
+
if (!activeTriggers.includes(trigger)) return [];
|
|
56
138
|
return rules.filter(function (rule) {
|
|
57
139
|
var ruleTrigger = rule.validateTrigger;
|
|
58
|
-
if (
|
|
59
|
-
|
|
140
|
+
if (ruleTrigger === undefined) return true;
|
|
141
|
+
var ruleTriggers = Array.isArray(ruleTrigger) ? ruleTrigger : [ruleTrigger];
|
|
142
|
+
var matches = ruleTriggers.includes(trigger);
|
|
143
|
+
if (!matches && ruleTriggers.length > 0 && !ruleTriggers.some(function (t) {
|
|
144
|
+
return activeTriggers.includes(t);
|
|
145
|
+
})) {
|
|
146
|
+
var name = fieldName !== null && fieldName !== void 0 ? fieldName : '(unknown)';
|
|
147
|
+
(0, _devWarning.devWarnOnce)("trigger:".concat(name, ":").concat(ruleTriggers.join(',')), "[ProForm] Field \"".concat(name, "\": rule validateTrigger [").concat(ruleTriggers.join(', '), "] is outside this field's active trigger set [").concat(activeTriggers.join(', '), "] \u2014 the rule will only run on submit. Include it in the item/form validateTrigger to run it interactively."));
|
|
148
|
+
}
|
|
149
|
+
return matches;
|
|
60
150
|
});
|
|
61
151
|
}
|
|
152
|
+
/** Built-in `type` checks. `enum` is handled separately against `rule.enum`. */
|
|
153
|
+
var TYPE_CHECKS = {
|
|
154
|
+
string: function string(v) {
|
|
155
|
+
return typeof v === 'string';
|
|
156
|
+
},
|
|
157
|
+
number: function number(v) {
|
|
158
|
+
return typeof v === 'number' && !Number.isNaN(v);
|
|
159
|
+
},
|
|
160
|
+
"boolean": function boolean(v) {
|
|
161
|
+
return typeof v === 'boolean';
|
|
162
|
+
},
|
|
163
|
+
method: function method(v) {
|
|
164
|
+
return typeof v === 'function';
|
|
165
|
+
},
|
|
166
|
+
integer: function integer(v) {
|
|
167
|
+
return typeof v === 'number' && Number.isInteger(v);
|
|
168
|
+
},
|
|
169
|
+
"float": function float(v) {
|
|
170
|
+
return typeof v === 'number' && !Number.isNaN(v) && !Number.isInteger(v);
|
|
171
|
+
},
|
|
172
|
+
array: function array(v) {
|
|
173
|
+
return Array.isArray(v);
|
|
174
|
+
},
|
|
175
|
+
object: function object(v) {
|
|
176
|
+
return (0, _typeof2["default"])(v) === 'object' && v !== null && !Array.isArray(v);
|
|
177
|
+
},
|
|
178
|
+
date: function date(v) {
|
|
179
|
+
return v instanceof Date ? !Number.isNaN(v.getTime()) : typeof (v === null || v === void 0 ? void 0 : v.getTime) === 'function' && !Number.isNaN(v.getTime());
|
|
180
|
+
},
|
|
181
|
+
regexp: function regexp(v) {
|
|
182
|
+
if (v instanceof RegExp) return true;
|
|
183
|
+
if (typeof v !== 'string') return false;
|
|
184
|
+
try {
|
|
185
|
+
new RegExp(v);
|
|
186
|
+
return true;
|
|
187
|
+
} catch (_a) {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
hex: function hex(v) {
|
|
192
|
+
return typeof v === 'string' && /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i.test(v);
|
|
193
|
+
},
|
|
194
|
+
// String-only: coercing via String() would let e.g. ['a@b.co'] stringify
|
|
195
|
+
// into a passing value.
|
|
196
|
+
email: function email(v) {
|
|
197
|
+
return typeof v === 'string' && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v);
|
|
198
|
+
},
|
|
199
|
+
url: function url(v) {
|
|
200
|
+
if (typeof v !== 'string') return false;
|
|
201
|
+
try {
|
|
202
|
+
new URL(v);
|
|
203
|
+
return true;
|
|
204
|
+
} catch (_a) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
/** Friendly generated messages for the legacy type names; others get a generic one. */
|
|
210
|
+
function typeFailureMessage(name, type) {
|
|
211
|
+
if (type === 'number') return "".concat(name, " must be a number");
|
|
212
|
+
if (type === 'email') return "".concat(name, " must be a valid email");
|
|
213
|
+
if (type === 'url') return "".concat(name, " must be a valid URL");
|
|
214
|
+
return "".concat(name, " is not a valid ").concat(type);
|
|
215
|
+
}
|
|
216
|
+
/** Measure a value for len/min/max: string → length, array → count, number → value. */
|
|
217
|
+
function measureValue(value) {
|
|
218
|
+
if (typeof value === 'string') return {
|
|
219
|
+
measured: value.length,
|
|
220
|
+
unit: ' characters'
|
|
221
|
+
};
|
|
222
|
+
if (Array.isArray(value)) return {
|
|
223
|
+
measured: value.length,
|
|
224
|
+
unit: ' items'
|
|
225
|
+
};
|
|
226
|
+
if (typeof value === 'number' && !Number.isNaN(value)) return {
|
|
227
|
+
measured: value,
|
|
228
|
+
unit: ''
|
|
229
|
+
};
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
62
232
|
/**
|
|
63
233
|
* Evaluate every built-in (non-`validator`) rule kind for a single rule.
|
|
64
|
-
* Returns the error
|
|
234
|
+
* Returns the error content for the first failing check, or null.
|
|
235
|
+
*
|
|
236
|
+
* Empty values (undefined / null / '' / empty array) are only checked by
|
|
237
|
+
* `required` — every other builtin check is skipped, so optional fields
|
|
238
|
+
* don't error until they have content. Custom validators are NOT subject to
|
|
239
|
+
* this skip (they receive the empty value and decide themselves).
|
|
65
240
|
*/
|
|
66
241
|
function checkBuiltinRules(rule, value, name) {
|
|
67
242
|
if (rule.required && isEmptyValue(value)) {
|
|
68
243
|
return rule.message || "".concat(name, " is required");
|
|
69
244
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (
|
|
84
|
-
if (rule.min !== undefined && measured < rule.min) {
|
|
85
|
-
return rule.message || "".concat(name, " must be at least ").concat(rule.min).concat(unit);
|
|
245
|
+
if (isEmptyValue(value)) return null;
|
|
246
|
+
// Non-empty string of only whitespace (the required+whitespace trim idiom).
|
|
247
|
+
if (rule.whitespace && typeof value === 'string' && value.trim() === '') {
|
|
248
|
+
return rule.message || "".concat(name, " cannot be blank");
|
|
249
|
+
}
|
|
250
|
+
// len: exact length/count/value — takes precedence over min/max.
|
|
251
|
+
if (rule.len !== undefined) {
|
|
252
|
+
var m = measureValue(value);
|
|
253
|
+
if (m !== null && m.measured !== rule.len) {
|
|
254
|
+
return rule.message || "".concat(name, " must be exactly ").concat(rule.len).concat(m.unit);
|
|
255
|
+
}
|
|
256
|
+
} else if (rule.min !== undefined || rule.max !== undefined) {
|
|
257
|
+
var _m = measureValue(value);
|
|
258
|
+
if (_m !== null) {
|
|
259
|
+
if (rule.min !== undefined && _m.measured < rule.min) {
|
|
260
|
+
return rule.message || "".concat(name, " must be at least ").concat(rule.min).concat(_m.unit);
|
|
86
261
|
}
|
|
87
|
-
if (rule.max !== undefined && measured > rule.max) {
|
|
88
|
-
return rule.message || "".concat(name, " must be no more than ").concat(rule.max).concat(unit);
|
|
262
|
+
if (rule.max !== undefined && _m.measured > rule.max) {
|
|
263
|
+
return rule.message || "".concat(name, " must be no more than ").concat(rule.max).concat(_m.unit);
|
|
89
264
|
}
|
|
90
265
|
}
|
|
91
266
|
}
|
|
92
|
-
if (rule.pattern && typeof value === 'string'
|
|
93
|
-
|
|
267
|
+
if (rule.pattern && typeof value === 'string') {
|
|
268
|
+
// A /g or /y regex is stateful: lastIndex persists across .test() calls,
|
|
269
|
+
// so repeated runs would alternate pass/fail — reset it every run.
|
|
270
|
+
if (rule.pattern.global || rule.pattern.sticky) rule.pattern.lastIndex = 0;
|
|
271
|
+
if (!rule.pattern.test(value)) {
|
|
272
|
+
return rule.message || "".concat(name, " format is invalid");
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
if (rule.type && rule.type !== 'enum' && !TYPE_CHECKS[rule.type](value)) {
|
|
276
|
+
return rule.message || typeFailureMessage(name, rule.type);
|
|
94
277
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
278
|
+
// enum membership: applies for type 'enum' or whenever rule.enum is present.
|
|
279
|
+
if (rule["enum"] && Array.isArray(rule["enum"]) && !rule["enum"].includes(value)) {
|
|
280
|
+
return rule.message || "".concat(name, " must be one of ").concat(rule["enum"].join(', '));
|
|
281
|
+
}
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
function toRuleArray(rules) {
|
|
285
|
+
if (!rules) return [];
|
|
286
|
+
return Array.isArray(rules) ? rules : [rules];
|
|
287
|
+
}
|
|
288
|
+
/** Members for deep rules: array → indexed entries, plain object → key entries. */
|
|
289
|
+
function deepMembers(value) {
|
|
290
|
+
if (Array.isArray(value)) return value.map(function (member, index) {
|
|
291
|
+
return [String(index), member];
|
|
292
|
+
});
|
|
293
|
+
if (value && (0, _typeof2["default"])(value) === 'object') return Object.entries(value);
|
|
294
|
+
return [];
|
|
295
|
+
}
|
|
296
|
+
var PASS = {
|
|
297
|
+
error: null,
|
|
298
|
+
warning: null
|
|
299
|
+
};
|
|
300
|
+
/**
|
|
301
|
+
* Dev guard for the pre-0.0.76 validator contract: returning a string or
|
|
302
|
+
* `false` used to FAIL the rule — under the `(rule, value)` contract return
|
|
303
|
+
* values are ignored and only throw/reject fails. Such a return is almost
|
|
304
|
+
* certainly a legacy validator silently passing, so it warns once.
|
|
305
|
+
*/
|
|
306
|
+
function warnLegacyValidatorReturn(name, result) {
|
|
307
|
+
if (typeof result !== 'string' && result !== false) return;
|
|
308
|
+
(0, _devWarning.devWarnOnce)("validator-return:".concat(name), "[ProForm] Field \"".concat(name, "\": a custom validator returned ").concat(typeof result === 'string' ? 'a string' : 'false', " \u2014 return values are IGNORED; validators fail by throwing or rejecting (a thrown Error's message becomes the field error)."));
|
|
309
|
+
}
|
|
310
|
+
/** Run a rule's transform, containing throws as a rule failure. */
|
|
311
|
+
function applyTransform(rule, rawValue) {
|
|
312
|
+
if (typeof rule.transform !== 'function') return {
|
|
313
|
+
ok: true,
|
|
314
|
+
value: rawValue
|
|
315
|
+
};
|
|
316
|
+
try {
|
|
317
|
+
return {
|
|
318
|
+
ok: true,
|
|
319
|
+
value: rule.transform(rawValue)
|
|
320
|
+
};
|
|
321
|
+
} catch (err) {
|
|
322
|
+
return {
|
|
323
|
+
ok: false,
|
|
324
|
+
failure: resolveFailureMessage(err, rule)
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Flatten a rule's deep sources (`fields` per key, then `defaultField` per
|
|
330
|
+
* member) into [subRule, memberValue, memberName] tuples — the single place
|
|
331
|
+
* that knows how deep rules map onto a container value.
|
|
332
|
+
*/
|
|
333
|
+
function deepRuleEntries(rule, value, name) {
|
|
334
|
+
var entries = [];
|
|
335
|
+
if (rule.fields) {
|
|
336
|
+
var source = value;
|
|
337
|
+
for (var _i = 0, _Object$entries = Object.entries(rule.fields); _i < _Object$entries.length; _i++) {
|
|
338
|
+
var _Object$entries$_i = (0, _slicedToArray2["default"])(_Object$entries[_i], 2),
|
|
339
|
+
key = _Object$entries$_i[0],
|
|
340
|
+
subRules = _Object$entries$_i[1];
|
|
341
|
+
var _iterator = _createForOfIteratorHelper(toRuleArray(subRules)),
|
|
342
|
+
_step;
|
|
343
|
+
try {
|
|
344
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
345
|
+
var subRule = _step.value;
|
|
346
|
+
entries.push([subRule, source[key], "".concat(name, ".").concat(key)]);
|
|
347
|
+
}
|
|
348
|
+
} catch (err) {
|
|
349
|
+
_iterator.e(err);
|
|
350
|
+
} finally {
|
|
351
|
+
_iterator.f();
|
|
352
|
+
}
|
|
98
353
|
}
|
|
99
354
|
}
|
|
100
|
-
if (rule.
|
|
101
|
-
|
|
102
|
-
|
|
355
|
+
if (rule.defaultField) {
|
|
356
|
+
var _iterator2 = _createForOfIteratorHelper(deepMembers(value)),
|
|
357
|
+
_step2;
|
|
358
|
+
try {
|
|
359
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
360
|
+
var _step2$value = (0, _slicedToArray2["default"])(_step2.value, 2),
|
|
361
|
+
_key = _step2$value[0],
|
|
362
|
+
member = _step2$value[1];
|
|
363
|
+
var _iterator3 = _createForOfIteratorHelper(toRuleArray(rule.defaultField)),
|
|
364
|
+
_step3;
|
|
365
|
+
try {
|
|
366
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
367
|
+
var _subRule = _step3.value;
|
|
368
|
+
entries.push([_subRule, member, "".concat(name, ".").concat(_key)]);
|
|
369
|
+
}
|
|
370
|
+
} catch (err) {
|
|
371
|
+
_iterator3.e(err);
|
|
372
|
+
} finally {
|
|
373
|
+
_iterator3.f();
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
} catch (err) {
|
|
377
|
+
_iterator2.e(err);
|
|
378
|
+
} finally {
|
|
379
|
+
_iterator2.f();
|
|
103
380
|
}
|
|
104
381
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
382
|
+
return entries;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Merge a sub-rule's outcome into the parent's channels. A sub-rule flagged
|
|
386
|
+
* `warningOnly` contributes its failure as a WARNING; otherwise its error
|
|
387
|
+
* blocks. Returns true when a blocking error landed (stop walking).
|
|
388
|
+
*/
|
|
389
|
+
function mergeSubResult(acc, subRule, sub) {
|
|
390
|
+
if (sub.warning !== null && acc.warning === null) acc.warning = sub.warning;
|
|
391
|
+
if (sub.error !== null) {
|
|
392
|
+
if (subRule.warningOnly) {
|
|
393
|
+
if (acc.warning === null) acc.warning = sub.error;
|
|
394
|
+
} else {
|
|
395
|
+
acc.error = sub.error;
|
|
396
|
+
return true;
|
|
109
397
|
}
|
|
110
398
|
}
|
|
111
|
-
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Fold one rule's outcome into the run-level channels. A rule flagged
|
|
403
|
+
* `warningOnly` downgrades everything it produced (own checks AND deep
|
|
404
|
+
* sub-rules) to a warning. Returns the blocking error to surface, or null.
|
|
405
|
+
*/
|
|
406
|
+
function foldRuleResult(rule, result, state) {
|
|
407
|
+
var _a;
|
|
408
|
+
if (rule.warningOnly) {
|
|
409
|
+
var content = (_a = result.error) !== null && _a !== void 0 ? _a : result.warning;
|
|
410
|
+
if (content !== null && state.warning === null) state.warning = content;
|
|
411
|
+
return null;
|
|
412
|
+
}
|
|
413
|
+
if (result.warning !== null && state.warning === null) state.warning = result.warning;
|
|
414
|
+
return result.error;
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Evaluate ONE rule (transform → builtin checks → validator → deep rules)
|
|
418
|
+
* synchronously. Promise-returning validators are deferred (see runRulesSync).
|
|
419
|
+
*/
|
|
420
|
+
function evalRuleSync(rule, rawValue, name) {
|
|
421
|
+
var prep = applyTransform(rule, rawValue);
|
|
422
|
+
if (!prep.ok) return {
|
|
423
|
+
error: prep.failure,
|
|
424
|
+
warning: null
|
|
425
|
+
};
|
|
426
|
+
var value = prep.value;
|
|
427
|
+
var failure = checkBuiltinRules(rule, value, name);
|
|
428
|
+
if (failure === null && typeof rule.validator === 'function') {
|
|
112
429
|
try {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
430
|
+
var result = rule.validator(rule, value);
|
|
431
|
+
if (isThenable(result)) {
|
|
432
|
+
result.then(function (resolved) {
|
|
433
|
+
return warnLegacyValidatorReturn(name, resolved);
|
|
434
|
+
}, function () {});
|
|
435
|
+
} else {
|
|
436
|
+
warnLegacyValidatorReturn(name, result);
|
|
437
|
+
}
|
|
438
|
+
} catch (err) {
|
|
439
|
+
failure = resolveFailureMessage(err, rule);
|
|
116
440
|
}
|
|
117
441
|
}
|
|
118
|
-
return
|
|
442
|
+
if (failure !== null) return {
|
|
443
|
+
error: failure,
|
|
444
|
+
warning: null
|
|
445
|
+
};
|
|
446
|
+
if ((rule.fields || rule.defaultField) && !isEmptyValue(value)) {
|
|
447
|
+
// Deep rules need a container; a non-empty primitive fails the PARENT
|
|
448
|
+
// (clear attribution) instead of producing confusing child errors.
|
|
449
|
+
if ((0, _typeof2["default"])(value) !== 'object' || value === null) {
|
|
450
|
+
return {
|
|
451
|
+
error: rule.message || "".concat(name, " must be an object or an array"),
|
|
452
|
+
warning: null
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
var acc = {
|
|
456
|
+
error: null,
|
|
457
|
+
warning: null
|
|
458
|
+
};
|
|
459
|
+
var _iterator4 = _createForOfIteratorHelper(deepRuleEntries(rule, value, name)),
|
|
460
|
+
_step4;
|
|
461
|
+
try {
|
|
462
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
463
|
+
var _step4$value = (0, _slicedToArray2["default"])(_step4.value, 3),
|
|
464
|
+
subRule = _step4$value[0],
|
|
465
|
+
subValue = _step4$value[1],
|
|
466
|
+
subName = _step4$value[2];
|
|
467
|
+
if (mergeSubResult(acc, subRule, evalRuleSync(subRule, subValue, subName))) break;
|
|
468
|
+
}
|
|
469
|
+
} catch (err) {
|
|
470
|
+
_iterator4.e(err);
|
|
471
|
+
} finally {
|
|
472
|
+
_iterator4.f();
|
|
473
|
+
}
|
|
474
|
+
return acc;
|
|
475
|
+
}
|
|
476
|
+
return PASS;
|
|
477
|
+
}
|
|
478
|
+
/** Async counterpart of evalRuleSync — custom validators are awaited. */
|
|
479
|
+
function evalRuleAsync(rule, rawValue, name) {
|
|
480
|
+
return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
481
|
+
var prep, value, failure, result, acc, _iterator5, _step5, _step5$value, subRule, subValue, subName, _t, _t2, _t3, _t4, _t5;
|
|
482
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
483
|
+
while (1) switch (_context.prev = _context.next) {
|
|
484
|
+
case 0:
|
|
485
|
+
prep = applyTransform(rule, rawValue);
|
|
486
|
+
if (prep.ok) {
|
|
487
|
+
_context.next = 1;
|
|
488
|
+
break;
|
|
489
|
+
}
|
|
490
|
+
return _context.abrupt("return", {
|
|
491
|
+
error: prep.failure,
|
|
492
|
+
warning: null
|
|
493
|
+
});
|
|
494
|
+
case 1:
|
|
495
|
+
value = prep.value;
|
|
496
|
+
failure = checkBuiltinRules(rule, value, name);
|
|
497
|
+
if (!(failure === null && typeof rule.validator === 'function')) {
|
|
498
|
+
_context.next = 5;
|
|
499
|
+
break;
|
|
500
|
+
}
|
|
501
|
+
_context.prev = 2;
|
|
502
|
+
_context.next = 3;
|
|
503
|
+
return rule.validator(rule, value);
|
|
504
|
+
case 3:
|
|
505
|
+
result = _context.sent;
|
|
506
|
+
warnLegacyValidatorReturn(name, result);
|
|
507
|
+
_context.next = 5;
|
|
508
|
+
break;
|
|
509
|
+
case 4:
|
|
510
|
+
_context.prev = 4;
|
|
511
|
+
_t = _context["catch"](2);
|
|
512
|
+
failure = resolveFailureMessage(_t, rule);
|
|
513
|
+
case 5:
|
|
514
|
+
if (!(failure !== null)) {
|
|
515
|
+
_context.next = 6;
|
|
516
|
+
break;
|
|
517
|
+
}
|
|
518
|
+
return _context.abrupt("return", {
|
|
519
|
+
error: failure,
|
|
520
|
+
warning: null
|
|
521
|
+
});
|
|
522
|
+
case 6:
|
|
523
|
+
if (!((rule.fields || rule.defaultField) && !isEmptyValue(value))) {
|
|
524
|
+
_context.next = 16;
|
|
525
|
+
break;
|
|
526
|
+
}
|
|
527
|
+
if (!((0, _typeof2["default"])(value) !== 'object' || value === null)) {
|
|
528
|
+
_context.next = 7;
|
|
529
|
+
break;
|
|
530
|
+
}
|
|
531
|
+
return _context.abrupt("return", {
|
|
532
|
+
error: rule.message || "".concat(name, " must be an object or an array"),
|
|
533
|
+
warning: null
|
|
534
|
+
});
|
|
535
|
+
case 7:
|
|
536
|
+
acc = {
|
|
537
|
+
error: null,
|
|
538
|
+
warning: null
|
|
539
|
+
};
|
|
540
|
+
_iterator5 = _createForOfIteratorHelper(deepRuleEntries(rule, value, name));
|
|
541
|
+
_context.prev = 8;
|
|
542
|
+
_iterator5.s();
|
|
543
|
+
case 9:
|
|
544
|
+
if ((_step5 = _iterator5.n()).done) {
|
|
545
|
+
_context.next = 12;
|
|
546
|
+
break;
|
|
547
|
+
}
|
|
548
|
+
_step5$value = (0, _slicedToArray2["default"])(_step5.value, 3), subRule = _step5$value[0], subValue = _step5$value[1], subName = _step5$value[2];
|
|
549
|
+
_t2 = mergeSubResult;
|
|
550
|
+
_t3 = acc;
|
|
551
|
+
_t4 = subRule;
|
|
552
|
+
_context.next = 10;
|
|
553
|
+
return evalRuleAsync(subRule, subValue, subName);
|
|
554
|
+
case 10:
|
|
555
|
+
if (!_t2(_t3, _t4, _context.sent)) {
|
|
556
|
+
_context.next = 11;
|
|
557
|
+
break;
|
|
558
|
+
}
|
|
559
|
+
return _context.abrupt("continue", 12);
|
|
560
|
+
case 11:
|
|
561
|
+
_context.next = 9;
|
|
562
|
+
break;
|
|
563
|
+
case 12:
|
|
564
|
+
_context.next = 14;
|
|
565
|
+
break;
|
|
566
|
+
case 13:
|
|
567
|
+
_context.prev = 13;
|
|
568
|
+
_t5 = _context["catch"](8);
|
|
569
|
+
_iterator5.e(_t5);
|
|
570
|
+
case 14:
|
|
571
|
+
_context.prev = 14;
|
|
572
|
+
_iterator5.f();
|
|
573
|
+
return _context.finish(14);
|
|
574
|
+
case 15:
|
|
575
|
+
return _context.abrupt("return", acc);
|
|
576
|
+
case 16:
|
|
577
|
+
return _context.abrupt("return", PASS);
|
|
578
|
+
case 17:
|
|
579
|
+
case "end":
|
|
580
|
+
return _context.stop();
|
|
581
|
+
}
|
|
582
|
+
}, _callee, null, [[2, 4], [8, 13, 14, 15]]);
|
|
583
|
+
}));
|
|
119
584
|
}
|
|
120
585
|
/**
|
|
121
586
|
* Synchronous rule run. A Promise-returning validator CANNOT be evaluated
|
|
@@ -123,128 +588,117 @@ function checkBuiltinRules(rule, value, name) {
|
|
|
123
588
|
* swallowed) and left to the async runs (blur/submit), which always await it.
|
|
124
589
|
* Failing it instead would mis-report "Validation failed" on every keystroke
|
|
125
590
|
* for perfectly valid input.
|
|
591
|
+
*
|
|
592
|
+
* The per-rule try/catch is the engine's totality choke point: NO input —
|
|
593
|
+
* including exotic values that break a builtin check — may escape as a throw;
|
|
594
|
+
* every failure surfaces through the error/warning channels.
|
|
126
595
|
*/
|
|
127
|
-
function runRulesSync(name, value, values, rules) {
|
|
128
|
-
var
|
|
129
|
-
|
|
130
|
-
|
|
596
|
+
function runRulesSync(name, value, values, rules, instance) {
|
|
597
|
+
var state = {
|
|
598
|
+
warning: null
|
|
599
|
+
};
|
|
600
|
+
var _iterator6 = _createForOfIteratorHelper(resolveRules(rules, values, instance)),
|
|
601
|
+
_step6;
|
|
131
602
|
try {
|
|
132
|
-
for (
|
|
133
|
-
var rule =
|
|
134
|
-
var
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
} catch (err) {
|
|
144
|
-
failure = err instanceof Error ? err.message : 'Validation error';
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
if (failure !== null) {
|
|
148
|
-
if (rule.warningOnly) {
|
|
149
|
-
warning = warning !== null && warning !== void 0 ? warning : failure;
|
|
150
|
-
} else {
|
|
151
|
-
return {
|
|
152
|
-
error: failure,
|
|
153
|
-
warning: warning
|
|
154
|
-
};
|
|
155
|
-
}
|
|
603
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
604
|
+
var rule = _step6.value;
|
|
605
|
+
var result = void 0;
|
|
606
|
+
try {
|
|
607
|
+
result = evalRuleSync(rule, value, name);
|
|
608
|
+
} catch (err) {
|
|
609
|
+
result = {
|
|
610
|
+
error: resolveFailureMessage(err, rule),
|
|
611
|
+
warning: null
|
|
612
|
+
};
|
|
156
613
|
}
|
|
614
|
+
var error = foldRuleResult(rule, result, state);
|
|
615
|
+
if (error !== null) return {
|
|
616
|
+
error: error,
|
|
617
|
+
warning: state.warning
|
|
618
|
+
};
|
|
157
619
|
}
|
|
158
620
|
} catch (err) {
|
|
159
|
-
|
|
621
|
+
_iterator6.e(err);
|
|
160
622
|
} finally {
|
|
161
|
-
|
|
623
|
+
_iterator6.f();
|
|
162
624
|
}
|
|
163
625
|
return {
|
|
164
626
|
error: null,
|
|
165
|
-
warning: warning
|
|
627
|
+
warning: state.warning
|
|
166
628
|
};
|
|
167
629
|
}
|
|
168
630
|
/**
|
|
169
|
-
* Asynchronous rule run. Custom validators are awaited (sync or async)
|
|
170
|
-
*
|
|
631
|
+
* Asynchronous rule run. Custom validators are awaited (sync or async):
|
|
632
|
+
* resolving passes, rejecting/throwing fails. Return values are ignored.
|
|
633
|
+
* Shares the totality choke point with runRulesSync.
|
|
171
634
|
*/
|
|
172
|
-
function runRulesAsync(name, value, values, rules) {
|
|
173
|
-
return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function
|
|
174
|
-
var
|
|
175
|
-
return _regenerator["default"].wrap(function (
|
|
176
|
-
while (1) switch (
|
|
635
|
+
function runRulesAsync(name, value, values, rules, instance) {
|
|
636
|
+
return __awaiter(this, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
637
|
+
var state, _iterator7, _step7, rule, result, error, _t6, _t7;
|
|
638
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
639
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
177
640
|
case 0:
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
641
|
+
state = {
|
|
642
|
+
warning: null
|
|
643
|
+
};
|
|
644
|
+
_iterator7 = _createForOfIteratorHelper(resolveRules(rules, values, instance));
|
|
645
|
+
_context2.prev = 1;
|
|
646
|
+
_iterator7.s();
|
|
182
647
|
case 2:
|
|
183
|
-
if ((
|
|
184
|
-
|
|
648
|
+
if ((_step7 = _iterator7.n()).done) {
|
|
649
|
+
_context2.next = 8;
|
|
185
650
|
break;
|
|
186
651
|
}
|
|
187
|
-
rule =
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
-
_context.prev = 3;
|
|
194
|
-
_context.next = 4;
|
|
195
|
-
return Promise.resolve(rule.validator(value, values));
|
|
652
|
+
rule = _step7.value;
|
|
653
|
+
result = void 0;
|
|
654
|
+
_context2.prev = 3;
|
|
655
|
+
_context2.next = 4;
|
|
656
|
+
return evalRuleAsync(rule, value, name);
|
|
196
657
|
case 4:
|
|
197
|
-
result =
|
|
198
|
-
|
|
199
|
-
failure = typeof result === 'string' ? result : 'Validation failed';
|
|
200
|
-
}
|
|
201
|
-
_context.next = 6;
|
|
658
|
+
result = _context2.sent;
|
|
659
|
+
_context2.next = 6;
|
|
202
660
|
break;
|
|
203
661
|
case 5:
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
662
|
+
_context2.prev = 5;
|
|
663
|
+
_t6 = _context2["catch"](3);
|
|
664
|
+
result = {
|
|
665
|
+
error: resolveFailureMessage(_t6, rule),
|
|
666
|
+
warning: null
|
|
667
|
+
};
|
|
207
668
|
case 6:
|
|
208
|
-
|
|
209
|
-
|
|
669
|
+
error = foldRuleResult(rule, result, state);
|
|
670
|
+
if (!(error !== null)) {
|
|
671
|
+
_context2.next = 7;
|
|
210
672
|
break;
|
|
211
673
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
warning = warning !== null && warning !== void 0 ? warning : failure;
|
|
217
|
-
_context.next = 8;
|
|
218
|
-
break;
|
|
219
|
-
case 7:
|
|
220
|
-
return _context.abrupt("return", {
|
|
221
|
-
error: failure,
|
|
222
|
-
warning: warning
|
|
674
|
+
return _context2.abrupt("return", {
|
|
675
|
+
error: error,
|
|
676
|
+
warning: state.warning
|
|
223
677
|
});
|
|
678
|
+
case 7:
|
|
679
|
+
_context2.next = 2;
|
|
680
|
+
break;
|
|
224
681
|
case 8:
|
|
225
|
-
|
|
682
|
+
_context2.next = 10;
|
|
226
683
|
break;
|
|
227
684
|
case 9:
|
|
228
|
-
|
|
229
|
-
|
|
685
|
+
_context2.prev = 9;
|
|
686
|
+
_t7 = _context2["catch"](1);
|
|
687
|
+
_iterator7.e(_t7);
|
|
230
688
|
case 10:
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
689
|
+
_context2.prev = 10;
|
|
690
|
+
_iterator7.f();
|
|
691
|
+
return _context2.finish(10);
|
|
234
692
|
case 11:
|
|
235
|
-
|
|
236
|
-
_iterator2.f();
|
|
237
|
-
return _context.finish(11);
|
|
238
|
-
case 12:
|
|
239
|
-
return _context.abrupt("return", {
|
|
693
|
+
return _context2.abrupt("return", {
|
|
240
694
|
error: null,
|
|
241
|
-
warning: warning
|
|
695
|
+
warning: state.warning
|
|
242
696
|
});
|
|
243
|
-
case
|
|
697
|
+
case 12:
|
|
244
698
|
case "end":
|
|
245
|
-
return
|
|
699
|
+
return _context2.stop();
|
|
246
700
|
}
|
|
247
|
-
},
|
|
701
|
+
}, _callee2, null, [[1, 9, 10, 11], [3, 5]]);
|
|
248
702
|
}));
|
|
249
703
|
}
|
|
250
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3J1blJ1bGVzLmpzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ydW5SdWxlcy50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJpc1RoZW5hYmxlIiwiX3R5cGVvZjIiLCJpc0VtcHR5VmFsdWUiLCJ1bmRlZmluZWQiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmaWx0ZXJSdWxlc0J5VHJpZ2dlciIsInJ1bGVzIiwidHJpZ2dlciIsImZvcm1UcmlnZ2VyIiwiZmlsdGVyIiwicnVsZSIsInJ1bGVUcmlnZ2VyIiwidmFsaWRhdGVUcmlnZ2VyIiwiaW5jbHVkZXMiLCJjaGVja0J1aWx0aW5SdWxlcyIsIm5hbWUiLCJyZXF1aXJlZCIsIm1lc3NhZ2UiLCJjb25jYXQiLCJtaW4iLCJtYXgiLCJtZWFzdXJlZCIsInVuaXQiLCJOdW1iZXIiLCJpc05hTiIsInBhdHRlcm4iLCJ0ZXN0Iiwiam9pbiIsInR5cGUiLCJlbWFpbFBhdHRlcm4iLCJTdHJpbmciLCJVUkwiLCJfYSIsInJ1blJ1bGVzU3luYyIsInZhbHVlcyIsIndhcm5pbmciLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJmYWlsdXJlIiwidmFsaWRhdG9yIiwiZXJyIiwiRXJyb3IiLCJ3YXJuaW5nT25seSIsImVycm9yIiwiZiIsInJ1blJ1bGVzQXN5bmMiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfdCIsIl90MiIsIndy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QUEsQ0FDaEMsRUFBQTtBRGxDRCIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ydW5SdWxlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG4vKiogRW1wdHkgZm9yIGByZXF1aXJlZGA6IHVuZGVmaW5lZCAvIG51bGwgLyAnJyAvIGVtcHR5IGFycmF5LiAqL1xuZnVuY3Rpb24gaXNFbXB0eVZhbHVlKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgICAgIHZhbHVlID09PSAnJyB8fFxuICAgICAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSk7XG59XG4vKipcbiAqIEZpbHRlciBydWxlcyBhcHBsaWNhYmxlIHRvIGFuIGludGVyYWN0aXZlIHRyaWdnZXIuIEEgcnVsZSBXSVRIT1VUIGFuXG4gKiBleHBsaWNpdCBgdmFsaWRhdGVUcmlnZ2VyYCBmb2xsb3dzIHRoZSBmb3JtLWxldmVsIHRyaWdnZXI7IGEgcnVsZSBXSVRIIG9uZVxuICogcnVucyBvbiBleGFjdGx5IHRob3NlIHRyaWdnZXIocyksIHJlZ2FyZGxlc3Mgb2YgdGhlIGZvcm0tbGV2ZWwgc2V0dGluZy5cbiAqIFN1Ym1pdC10aW1lIHZhbGlkYXRpb24gYnlwYXNzZXMgdGhpcyBmaWx0ZXIgYW5kIHJ1bnMgZXZlcnkgcnVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclJ1bGVzQnlUcmlnZ2VyKHJ1bGVzLCB0cmlnZ2VyLCBmb3JtVHJpZ2dlcikge1xuICAgIHJldHVybiBydWxlcy5maWx0ZXIoKHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZVRyaWdnZXIgPSBydWxlLnZhbGlkYXRlVHJpZ2dlcjtcbiAgICAgICAgaWYgKCFydWxlVHJpZ2dlcilcbiAgICAgICAgICAgIHJldHVybiBmb3JtVHJpZ2dlciA9PT0gdHJpZ2dlcjtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocnVsZVRyaWdnZXIpXG4gICAgICAgICAgICA/IHJ1bGVUcmlnZ2VyLmluY2x1ZGVzKHRyaWdnZXIpXG4gICAgICAgICAgICA6IHJ1bGVUcmlnZ2VyID09PSB0cmlnZ2VyO1xuICAgIH0pO1xufVxuLyoqXG4gKiBFdmFsdWF0ZSBldmVyeSBidWlsdC1pbiAobm9uLWB2YWxpZGF0b3JgKSBydWxlIGtpbmQgZm9yIGEgc2luZ2xlIHJ1bGUuXG4gKiBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIGZvciB0aGUgZmlyc3QgZmFpbGluZyBjaGVjaywgb3IgbnVsbC5cbiAqL1xuZnVuY3Rpb24gY2hlY2tCdWlsdGluUnVsZXMocnVsZSwgdmFsdWUsIG5hbWUpIHtcbiAgICBpZiAocnVsZS5yZXF1aXJlZCAmJiBpc0VtcHR5VmFsdWUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gaXMgcmVxdWlyZWRgO1xuICAgIH1cbiAgICAvLyBtaW4vbWF4OiBzdHJpbmcg4oaSIGxlbmd0aCwgYXJyYXkg4oaSIGl0ZW0gY291bnQsIG51bWJlciDihpIgbnVtZXJpYyB2YWx1ZVxuICAgIGlmIChydWxlLm1pbiAhPT0gdW5kZWZpbmVkIHx8IHJ1bGUubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IG1lYXN1cmVkID0gbnVsbDtcbiAgICAgICAgbGV0IHVuaXQgPSAnJztcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG1lYXN1cmVkID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgdW5pdCA9ICcgY2hhcmFjdGVycyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIG1lYXN1cmVkID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgdW5pdCA9ICcgaXRlbXMnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIU51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIG1lYXN1cmVkID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lYXN1cmVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocnVsZS5taW4gIT09IHVuZGVmaW5lZCAmJiBtZWFzdXJlZCA8IHJ1bGUubWluKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGF0IGxlYXN0ICR7cnVsZS5taW59JHt1bml0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocnVsZS5tYXggIT09IHVuZGVmaW5lZCAmJiBtZWFzdXJlZCA+IHJ1bGUubWF4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG5vIG1vcmUgdGhhbiAke3J1bGUubWF4fSR7dW5pdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChydWxlLnBhdHRlcm4gJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhcnVsZS5wYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gZm9ybWF0IGlzIGludmFsaWRgO1xuICAgIH1cbiAgICBpZiAocnVsZS5lbnVtICYmIEFycmF5LmlzQXJyYXkocnVsZS5lbnVtKSAmJiB2YWx1ZSkge1xuICAgICAgICBpZiAoIXJ1bGUuZW51bS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBvbmUgb2YgJHtydWxlLmVudW0uam9pbignLCAnKX1gO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChydWxlLnR5cGUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocnVsZS50eXBlID09PSAnZW1haWwnICYmIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGVtYWlsUGF0dGVybiA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuICAgICAgICBpZiAoIWVtYWlsUGF0dGVybi50ZXN0KFN0cmluZyh2YWx1ZSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYSB2YWxpZCBlbWFpbGA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJ1bGUudHlwZSA9PT0gJ3VybCcgJiYgdmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBVUkwoU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYSB2YWxpZCBVUkxgO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBTeW5jaHJvbm91cyBydWxlIHJ1bi4gQSBQcm9taXNlLXJldHVybmluZyB2YWxpZGF0b3IgQ0FOTk9UIGJlIGV2YWx1YXRlZFxuICogaGVyZSDigJQgaXQgaXMgZGVmZXJyZWQgKHRyZWF0ZWQgYXMgcGFzc2luZyBmb3IgdGhpcyBydW47IGl0cyByZWplY3Rpb24gaXNcbiAqIHN3YWxsb3dlZCkgYW5kIGxlZnQgdG8gdGhlIGFzeW5jIHJ1bnMgKGJsdXIvc3VibWl0KSwgd2hpY2ggYWx3YXlzIGF3YWl0IGl0LlxuICogRmFpbGluZyBpdCBpbnN0ZWFkIHdvdWxkIG1pcy1yZXBvcnQgXCJWYWxpZGF0aW9uIGZhaWxlZFwiIG9uIGV2ZXJ5IGtleXN0cm9rZVxuICogZm9yIHBlcmZlY3RseSB2YWxpZCBpbnB1dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blJ1bGVzU3luYyhuYW1lLCB2YWx1ZSwgdmFsdWVzLCBydWxlcykge1xuICAgIGxldCB3YXJuaW5nID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgbGV0IGZhaWx1cmUgPSBjaGVja0J1aWx0aW5SdWxlcyhydWxlLCB2YWx1ZSwgbmFtZSk7XG4gICAgICAgIGlmIChmYWlsdXJlID09PSBudWxsICYmIHR5cGVvZiBydWxlLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBydWxlLnZhbGlkYXRvcih2YWx1ZSwgdmFsdWVzKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC50aGVuKHVuZGVmaW5lZCwgKCkgPT4geyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZhaWx1cmUgPSB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/IHJlc3VsdCA6ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZXJyb3InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmYWlsdXJlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocnVsZS53YXJuaW5nT25seSkge1xuICAgICAgICAgICAgICAgIHdhcm5pbmcgPSB3YXJuaW5nICE9PSBudWxsICYmIHdhcm5pbmcgIT09IHZvaWQgMCA/IHdhcm5pbmcgOiBmYWlsdXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGZhaWx1cmUsIHdhcm5pbmcgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBlcnJvcjogbnVsbCwgd2FybmluZyB9O1xufVxuLyoqXG4gKiBBc3luY2hyb25vdXMgcnVsZSBydW4uIEN1c3RvbSB2YWxpZGF0b3JzIGFyZSBhd2FpdGVkIChzeW5jIG9yIGFzeW5jKS4gQVxuICogdmFsaWRhdG9yIHJldHVybmluZyBgdW5kZWZpbmVkYCBpcyB0cmVhdGVkIGFzIHBhc3NpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SdWxlc0FzeW5jKG5hbWUsIHZhbHVlLCB2YWx1ZXMsIHJ1bGVzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IHdhcm5pbmcgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICAgICAgICAgIGxldCBmYWlsdXJlID0gY2hlY2tCdWlsdGluUnVsZXMocnVsZSwgdmFsdWUsIG5hbWUpO1xuICAgICAgICAgICAgaWYgKGZhaWx1cmUgPT09IG51bGwgJiYgdHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgUHJvbWlzZS5yZXNvbHZlKHJ1bGUudmFsaWRhdG9yKHZhbHVlLCB2YWx1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSAmJiByZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID8gcmVzdWx0IDogJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZhaWx1cmUgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1ZhbGlkYXRpb24gZXJyb3InO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmYWlsdXJlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGUud2FybmluZ09ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IHdhcm5pbmcgIT09IG51bGwgJiYgd2FybmluZyAhPT0gdm9pZCAwID8gd2FybmluZyA6IGZhaWx1cmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvcjogZmFpbHVyZSwgd2FybmluZyB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCwgd2FybmluZyB9O1xuICAgIH0pO1xufSIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
704
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvcnVuUnVsZXMudHMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ydW5SdWxlcy5qcyJdLCJuYW1lcyI6WyJfcGF0aFV0aWxzIiwicmVxdWlyZSIsIl9kZXZXYXJuaW5nIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsInJlamVjdGVkIiwicmVzdWx0IiwidGhlbiIsImFwcGx5IiwiaXNUaGVuYWJsZSIsIl90eXBlb2YyIiwiaXNFbXB0eVZhbHVlIiwidW5kZWZpbmVkIiwiY29lcmNlRmFpbHVyZVJlYXNvbiIsInJlYXNvbiIsIkVycm9yIiwibWVzc2FnZSIsInJlc29sdmVGYWlsdXJlTWVzc2FnZSIsInJ1bGUiLCJfYSIsInJlc29sdmVSdWxlcyIsInJ1bGVzIiwidmFsdWVzIiwiaW5zdGFuY2UiLCJzb21lIiwiY3R4IiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0RmllbGRWYWx1ZSIsInJlc29sdmVWYWx1ZSIsImdldEZpZWxkc1ZhbHVlIiwibWFwIiwiZXJyIiwidmFsaWRhdG9yIiwibm9ybWFsaXplVHJpZ2dlcnMiLCJpdGVtVHJpZ2dlciIsImZvcm1UcmlnZ2VyIiwiZWZmZWN0aXZlIiwiZmlsdGVyUnVsZXNCeVRyaWdnZXIiLCJ0cmlnZ2VyIiwiYWN0aXZlVHJpZ2dlcnMiLCJmaWVsZE5hbWUiLCJpbmNsdWRlcyIsImZpbHRlciIsInJ1bGVUcmlnZ2VyIiwidmFsaWRhdGVUcmlnZ2VyIiwicnVsZVRyaWdnZXJzIiwibWF0Y2hlcyIsImRldldhcm5PbmNlIiwiY29uY2F0Iiwiam9pbiIsIlRZUEVfQ0hFQ0tTIiwic3RyaW5nIiwidiIsIm51bWJlciIsIk51bWJlciIsImlzTmFOIiwiYm9vbGVhbiIsIm1ldGhvZCIsImludGVnZXIiLCJpc0ludGVnZXIiLCJmbG9hdCIsImFycmF5Iiwib2JqZWN0IiwiZGF0ZSIsIkRhdGUiLCJnZXRUaW1lIiwicmVnZXhwIiwiUmVnRXhwIiwiaGV4IiwiZW1haWwiLCJ1cmwiLCJVUkwiLCJ0eXBlRmFpbHVyZU1lc3NhZ2UiLCJ0eXBlIiwibWVhc3VyZVZhbHVlIiwibWVhc3VyZWQiLCJ1bml0IiwiY2hlY2tCdWlsdGluUnVsZXMiLCJyZXF1aXJlZCIsIndoaXRlc3BhY2UiLCJ0cmltIiwibGVuIiwibSIsIm1pbiIsIm1heCIsInBhdHRlcm4iLCJnbG9iYWwiLCJzdGlja3kiLCJsYXN0SW5kZXgiLCJ0b1J1bGVBcnJheSIsImRlZXBNZW1iZXJzIiwibWVtYmVyIiwiaW5kZXgiLCJTdHJpbmciLCJlbnRyaWVzIiwiUEFTUyIsImVycm9yIiwid2FybmluZyIsIndhcm5MZWdhY3lWYWxpZGF0b3JSZXR1cm4iLCJhcHBseVRyYW5zZm9ybSIsInJhd1ZhbHVlIiwidHJhbnNmb3JtIiwib2siLCJmYWlsdXJlIiwiZGVlcFJ1bGVFbnRyaWVzIiwiZmllbGRzIiwic291cmNlIiwiX2kiLCJfT2JqZWN0JGVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfc2xpY2VkVG9BcnJheTIiLCJrZXkiLCJzdWJSdWxlcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwic3ViUnVsZSIsInB1c2giLCJkZWZhdWx0RmllbGQiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiX3N0ZXAyJHZhbHVlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlU3ViUmVzdWx0IiwiYWNjIiwic3ViIiwid2FybmluZ09ubHkiLCJmb2xkUnVsZVJlc3VsdCIsInN0YXRlIiwiY29udGVudCIsImV2YWxSdWxlU3luYyIsInByZXAiLCJyZXNvbHZlZCIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJfc3RlcDQkdmFsdWUiLCJzdWJWYWx1ZSIsInN1Yk5hbWUiLCJldmFsUnVsZUFzeW5jIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwiX3N0ZXA1JHZhbHVlIiwiX3QiLCJfdDIiLCJfdDMiLCJfdDQiLCJfdDUiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwiYWJydXB0Iiwic2VudCIsImZpbmlzaCIsInN0b3AiLCJydW5SdWxlc1N5bmMiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwicnVuUnVsZXNBc3luYyIsIl9jYWxsZWUyIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsIl90NiIsIl90NyIsIl9jb250ZXh0MiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBQTJDLFNBQUFFLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUssMkJBQUEsQ0FBQVAsQ0FBQSxNQUFBQyxDQUFBLElBQUFELENBQUEsdUJBQUFBLENBQUEsQ0FBQVEsTUFBQSxJQUFBTixDQUFBLEtBQUFGLENBQUEsR0FBQUUsQ0FBQSxPQUFBTyxFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQUUs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QUMsU0FBQTtVQUFBSixVQUFBLENBQUFyTSxDQUFBLENBQUF3TSxHQUFBO1FBQUE7VUFBQUMsU0FBQSxDQUFBZCxJQUFBO1VBQUFVLFVBQUEsQ0FBQXZMLENBQUE7VUFBQSxPQUFBMkwsU0FBQSxDQUFBWCxNQUFBO1FBQUE7VUFBQSxPQUFBVyxTQUFBLENBQUFiLE1BQUEsV0FFdkQ7WUFBRXpELEtBQUssRUFBRSxJQUFJO1lBQUVDLE9BQU8sRUFBRStCLEtBQUssQ0FBQy9CO1VBQU8sQ0FBRTtRQUFBO1FBQUE7VUFBQSxPQUFBcUUsU0FBQSxDQUFBVixJQUFBO01BQUE7SUFBQSxHQUFBSyxRQUFBO0VBQUEsQ0FDL0MsRUFBQTtBQ3RFRCIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ydW5SdWxlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBkZXZXYXJuT25jZSB9IGZyb20gJy4vZGV2V2FybmluZyc7XG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKTtcbn1cbi8qKiBFbXB0eSBmb3IgYHJlcXVpcmVkYDogdW5kZWZpbmVkIC8gbnVsbCAvICcnIC8gZW1wdHkgYXJyYXkuICovXG5mdW5jdGlvbiBpc0VtcHR5VmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICAgIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApKTtcbn1cbi8qKlxuICogQ29lcmNlIGEgdGhyb3duL3JlamVjdGVkIHJlYXNvbiBpbnRvIGRpc3BsYXlhYmxlIGZhaWx1cmUgY29udGVudDpcbiAqIGEgbm9uLWVtcHR5IEVycm9yLm1lc3NhZ2Ugb3IgYSBub24tZW1wdHkgcGxhaW4gc3RyaW5nIOKAlCBvdGhlcndpc2UgbnVsbFxuICogKGNhbGxlciBwaWNrcyBpdHMgZmFsbGJhY2spLiBTaGFyZWQgd2l0aCB0aGUgZm9ybS1sZXZlbCBsYXN0LXJlc29ydCBuZXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29lcmNlRmFpbHVyZVJlYXNvbihyZWFzb24pIHtcbiAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgRXJyb3IgJiYgcmVhc29uLm1lc3NhZ2UpXG4gICAgICAgIHJldHVybiByZWFzb24ubWVzc2FnZTtcbiAgICBpZiAodHlwZW9mIHJlYXNvbiA9PT0gJ3N0cmluZycgJiYgcmVhc29uKVxuICAgICAgICByZXR1cm4gcmVhc29uO1xuICAgIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBGYWlsdXJlIG1lc3NhZ2UgZm9yIGEgcmVqZWN0ZWQvdGhyb3duIGN1c3RvbSB2YWxpZGF0b3I6XG4gKiBFcnJvci5tZXNzYWdlIOKGkiBwbGFpbiBzdHJpbmcgcmVhc29uIOKGkiBydWxlLm1lc3NhZ2Ug4oaSIGdlbmVyaWMgZmFsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGYWlsdXJlTWVzc2FnZShyZWFzb24sIHJ1bGUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IGNvZXJjZUZhaWx1cmVSZWFzb24ocmVhc29uKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHJ1bGUubWVzc2FnZSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnKTtcbn1cbi8qKlxuICogUmVzb2x2ZSBmdW5jdGlvbi1mb3JtIHJ1bGVzIGludG8gc3RhdGljIHJ1bGVzLiBUaGVcbiAqIGNvbnRleHQgZXhwb3NlcyB0aGUgdmFsdWUgc25hcHNob3QgdGhlIHJ1biB3YXMgaW52b2tlZCB3aXRoOyBmdW5jdGlvbiBydWxlc1xuICogbXVzdCBiZSBjaGVhcCBhbmQgc2lkZS1lZmZlY3QgZnJlZSDigJQgdGhleSBtYXkgYmUgcmVzb2x2ZWQgbW9yZSB0aGFuIG9uY2VcbiAqIHBlciB2YWxpZGF0aW9uIHBhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUnVsZXMocnVsZXMsIHZhbHVlcywgaW5zdGFuY2UpIHtcbiAgICAvLyBGYXN0IHBhdGg6IG5vIGZ1bmN0aW9uIHJ1bGVzIOKGkiBub3RoaW5nIHRvIHJlc29sdmUsIG5vIGN0eCBhbGxvY2F0aW9uLlxuICAgIC8vIFRoaXMgYWxzbyBtYWtlcyB0aGUgZW5naW5lLWludGVybmFsIHJlLXJlc29sdXRpb24gb2YgYWxyZWFkeS1yZXNvbHZlZFxuICAgIC8vIGFycmF5cyBmcmVlLlxuICAgIGlmICghcnVsZXMuc29tZSgocnVsZSkgPT4gdHlwZW9mIHJ1bGUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIHJldHVybiBydWxlcztcbiAgICB9XG4gICAgLy8gTGl2ZS1pbnN0YW5jZSBtZW1iZXJzIChzZXRGaWVsZHNWYWx1ZSwgZ2V0RmllbGRFcnJvciwg4oCmKSBhcmUgc3ByZWFkIGluXG4gICAgLy8gd2hlbiBhdmFpbGFibGU7IHRoZSByZWFkcyBhbHdheXMgY29tZSBmcm9tIHRoZSB2YWxpZGF0aW9uLXRpbWUgc25hcHNob3QuXG4gICAgY29uc3QgY3R4ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBpbnN0YW5jZSksIHsgZ2V0RmllbGRWYWx1ZTogKG5hbWUpID0+IHJlc29sdmVWYWx1ZSh2YWx1ZXMsIG5hbWUpLCBnZXRGaWVsZHNWYWx1ZTogKCkgPT4gdmFsdWVzIH0pO1xuICAgIHJldHVybiBydWxlcy5tYXAoKHJ1bGUpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBydWxlICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gcnVsZShjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIEEgdGhyb3dpbmcgcnVsZSBmYWN0b3J5IG11c3Qgbm90IGNyYXNoIHJlbmRlcmluZyBvciB2YWxpZGF0aW9uIOKAlFxuICAgICAgICAgICAgLy8gc3VyZmFjZSBpdCBhcyBhIHJ1bGUgdGhhdCBhbHdheXMgZmFpbHMgd2l0aCB0aGUgdGhyb3duIHJlYXNvbi5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBOb3JtYWxpemUgYSBmb3JtL2l0ZW0tbGV2ZWwgdmFsaWRhdGVUcmlnZ2VyIGNvbmZpZyBpbnRvIHRoZSBlZmZlY3RpdmVcbiAqIGludGVyYWN0aXZlIGV2ZW50IGxpc3Q6IGl0ZW0tbGV2ZWwgKHdoZW4gcHJlc2VudCkgb3ZlcnJpZGVzIGZvcm0tbGV2ZWw7XG4gKiBgZmFsc2VgIGRpc2FibGVzIGludGVyYWN0aXZlIHZhbGlkYXRpb24gZW50aXJlbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUcmlnZ2VycyhpdGVtVHJpZ2dlciwgZm9ybVRyaWdnZXIpIHtcbiAgICBjb25zdCBlZmZlY3RpdmUgPSBpdGVtVHJpZ2dlciA9PT0gdW5kZWZpbmVkID8gZm9ybVRyaWdnZXIgOiBpdGVtVHJpZ2dlcjtcbiAgICBpZiAoZWZmZWN0aXZlID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGVmZmVjdGl2ZSkgPyBlZmZlY3RpdmUgOiBbZWZmZWN0aXZlXTtcbn1cbi8qKlxuICogRmlsdGVyIHJ1bGVzIGFwcGxpY2FibGUgdG8gYW4gaW50ZXJhY3RpdmUgZXZlbnQ6IHRoZSBldmVudFxuICogdmFsaWRhdGVzIG9ubHkgd2hlbiBpdCBpcyBpbiB0aGUgaXRlbSdzIGVmZmVjdGl2ZSB0cmlnZ2VyIHNldC4gV2l0aGluIHRoZVxuICogc2V0LCBhIHJ1bGUgV0lUSE9VVCBgdmFsaWRhdGVUcmlnZ2VyYCBydW5zIG9uIGV2ZXJ5IGV2ZW50OyBhIHJ1bGUgV0lUSCBvbmVcbiAqIHJ1bnMgb25seSBvbiBtYXRjaGluZyBldmVudHMg4oCUIHNvIGEgcnVsZSB0cmlnZ2VyIG91dHNpZGUgdGhlIGl0ZW0ncyBzZXRcbiAqIG5ldmVyIGZpcmVzIGludGVyYWN0aXZlbHkuIFN1Ym1pdC10aW1lIHZhbGlkYXRpb24gYnlwYXNzZXMgdGhpcyBmaWx0ZXIgYW5kXG4gKiBydW5zIGV2ZXJ5IHJ1bGUuXG4gKlxuICogRGV2IGd1YXJkOiBhIHJ1bGUgd2hvc2UgKG5vbi1lbXB0eSkgdHJpZ2dlciBzZXQgaXMgZnVsbHkgT1VUU0lERSB0aGVcbiAqIGFjdGl2ZSBzZXQgY2FuIG5ldmVyIGZpcmUgaW50ZXJhY3RpdmVseSDigJQgdXN1YWxseSBhIGxlZnRvdmVyIG9mIHRoZVxuICogcHJlLTAuMC43NiBvdmVycmlkZSBzZW1hbnRpY3MsIHNvIGl0IHdhcm5zIG9uY2UuIGB2YWxpZGF0ZVRyaWdnZXI6IFtdYFxuICogaXMgdGhlIGRlbGliZXJhdGUgc3VibWl0LW9ubHkgaWRpb20gYW5kIHN0YXlzIHNpbGVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlclJ1bGVzQnlUcmlnZ2VyKHJ1bGVzLCB0cmlnZ2VyLCBhY3RpdmVUcmlnZ2VycywgZmllbGROYW1lKSB7XG4gICAgaWYgKCFhY3RpdmVUcmlnZ2Vycy5pbmNsdWRlcyh0cmlnZ2VyKSlcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIHJldHVybiBydWxlcy5maWx0ZXIoKHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZVRyaWdnZXIgPSBydWxlLnZhbGlkYXRlVHJpZ2dlcjtcbiAgICAgICAgaWYgKHJ1bGVUcmlnZ2VyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgcnVsZVRyaWdnZXJzID0gQXJyYXkuaXNBcnJheShydWxlVHJpZ2dlcikgPyBydWxlVHJpZ2dlciA6IFtydWxlVHJpZ2dlcl07XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBydWxlVHJpZ2dlcnMuaW5jbHVkZXModHJpZ2dlcik7XG4gICAgICAgIGlmICghbWF0Y2hlcyAmJlxuICAgICAgICAgICAgcnVsZVRyaWdnZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFydWxlVHJpZ2dlcnMuc29tZSgodCkgPT4gYWN0aXZlVHJpZ2dlcnMuaW5jbHVkZXModCkpKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gZmllbGROYW1lICE9PSBudWxsICYmIGZpZWxkTmFtZSAhPT0gdm9pZCAwID8gZmllbGROYW1lIDogJyh1bmtub3duKSc7XG4gICAgICAgICAgICBkZXZXYXJuT25jZShgdHJpZ2dlcjoke25hbWV9OiR7cnVsZVRyaWdnZXJzLmpvaW4oJywnKX1gLCBgW1Byb0Zvcm1dIEZpZWxkIFwiJHtuYW1lfVwiOiBydWxlIHZhbGlkYXRlVHJpZ2dlciBbJHtydWxlVHJpZ2dlcnMuam9pbignLCAnKX1dIGlzIG91dHNpZGUgdGhpcyBmaWVsZCdzIGFjdGl2ZSB0cmlnZ2VyIHNldCBbJHthY3RpdmVUcmlnZ2Vycy5qb2luKCcsICcpfV0g4oCUIHRoZSBydWxlIHdpbGwgb25seSBydW4gb24gc3VibWl0LiBJbmNsdWRlIGl0IGluIHRoZSBpdGVtL2Zvcm0gdmFsaWRhdGVUcmlnZ2VyIHRvIHJ1biBpdCBpbnRlcmFjdGl2ZWx5LmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXRjaGVzO1xuICAgIH0pO1xufVxuLyoqIEJ1aWx0LWluIGB0eXBlYCBjaGVja3MuIGBlbnVtYCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYWdhaW5zdCBgcnVsZS5lbnVtYC4gKi9cbmNvbnN0IFRZUEVfQ0hFQ0tTID0ge1xuICAgIHN0cmluZzogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyxcbiAgICBudW1iZXI6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgIU51bWJlci5pc05hTih2KSxcbiAgICBib29sZWFuOiAodikgPT4gdHlwZW9mIHYgPT09ICdib29sZWFuJyxcbiAgICBtZXRob2Q6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJyxcbiAgICBpbnRlZ2VyOiAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodiksXG4gICAgZmxvYXQ6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgIU51bWJlci5pc05hTih2KSAmJiAhTnVtYmVyLmlzSW50ZWdlcih2KSxcbiAgICBhcnJheTogKHYpID0+IEFycmF5LmlzQXJyYXkodiksXG4gICAgb2JqZWN0OiAodikgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodiksXG4gICAgZGF0ZTogKHYpID0+IHYgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgID8gIU51bWJlci5pc05hTih2LmdldFRpbWUoKSlcbiAgICAgICAgOiB0eXBlb2YgKHYgPT09IG51bGwgfHwgdiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdi5nZXRUaW1lKSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgIU51bWJlci5pc05hTih2LmdldFRpbWUoKSksXG4gICAgcmVnZXhwOiAodikgPT4ge1xuICAgICAgICBpZiAodiBpbnN0YW5jZW9mIFJlZ0V4cClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIHYgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFJlZ0V4cCh2KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBoZXg6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgL14jPyhbYS1mMC05XXs2fXxbYS1mMC05XXszfSkkL2kudGVzdCh2KSxcbiAgICAvLyBTdHJpbmctb25seTogY29lcmNpbmcgdmlhIFN0cmluZygpIHdvdWxkIGxldCBlLmcuIFsnYUBiLmNvJ10gc3RyaW5naWZ5XG4gICAgLy8gaW50byBhIHBhc3NpbmcgdmFsdWUuXG4gICAgZW1haWw6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC8udGVzdCh2KSxcbiAgICB1cmw6ICh2KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgVVJMKHYpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxufTtcbi8qKiBGcmllbmRseSBnZW5lcmF0ZWQgbWVzc2FnZXMgZm9yIHRoZSBsZWdhY3kgdHlwZSBuYW1lczsgb3RoZXJzIGdldCBhIGdlbmVyaWMgb25lLiAqL1xuZnVuY3Rpb24gdHlwZUZhaWx1cmVNZXNzYWdlKG5hbWUsIHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiBgJHtuYW1lfSBtdXN0IGJlIGEgbnVtYmVyYDtcbiAgICBpZiAodHlwZSA9PT0gJ2VtYWlsJylcbiAgICAgICAgcmV0dXJuIGAke25hbWV9IG11c3QgYmUgYSB2YWxpZCBlbWFpbGA7XG4gICAgaWYgKHR5cGUgPT09ICd1cmwnKVxuICAgICAgICByZXR1cm4gYCR7bmFtZX0gbXVzdCBiZSBhIHZhbGlkIFVSTGA7XG4gICAgcmV0dXJuIGAke25hbWV9IGlzIG5vdCBhIHZhbGlkICR7dHlwZX1gO1xufVxuLyoqIE1lYXN1cmUgYSB2YWx1ZSBmb3IgbGVuL21pbi9tYXg6IHN0cmluZyDihpIgbGVuZ3RoLCBhcnJheSDihpIgY291bnQsIG51bWJlciDihpIgdmFsdWUuICovXG5mdW5jdGlvbiBtZWFzdXJlVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIHsgbWVhc3VyZWQ6IHZhbHVlLmxlbmd0aCwgdW5pdDogJyBjaGFyYWN0ZXJzJyB9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHsgbWVhc3VyZWQ6IHZhbHVlLmxlbmd0aCwgdW5pdDogJyBpdGVtcycgfTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhTnVtYmVyLmlzTmFOKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHsgbWVhc3VyZWQ6IHZhbHVlLCB1bml0OiAnJyB9O1xuICAgIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBFdmFsdWF0ZSBldmVyeSBidWlsdC1pbiAobm9uLWB2YWxpZGF0b3JgKSBydWxlIGtpbmQgZm9yIGEgc2luZ2xlIHJ1bGUuXG4gKiBSZXR1cm5zIHRoZSBlcnJvciBjb250ZW50IGZvciB0aGUgZmlyc3QgZmFpbGluZyBjaGVjaywgb3IgbnVsbC5cbiAqXG4gKiBFbXB0eSB2YWx1ZXMgKHVuZGVmaW5lZCAvIG51bGwgLyAnJyAvIGVtcHR5IGFycmF5KSBhcmUgb25seSBjaGVja2VkIGJ5XG4gKiBgcmVxdWlyZWRgIOKAlCBldmVyeSBvdGhlciBidWlsdGluIGNoZWNrIGlzIHNraXBwZWQsIHNvIG9wdGlvbmFsIGZpZWxkc1xuICogZG9uJ3QgZXJyb3IgdW50aWwgdGhleSBoYXZlIGNvbnRlbnQuIEN1c3RvbSB2YWxpZGF0b3JzIGFyZSBOT1Qgc3ViamVjdCB0b1xuICogdGhpcyBza2lwICh0aGV5IHJlY2VpdmUgdGhlIGVtcHR5IHZhbHVlIGFuZCBkZWNpZGUgdGhlbXNlbHZlcykuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQnVpbHRpblJ1bGVzKHJ1bGUsIHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKHJ1bGUucmVxdWlyZWQgJiYgaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGlzIHJlcXVpcmVkYDtcbiAgICB9XG4gICAgaWYgKGlzRW1wdHlWYWx1ZSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vIE5vbi1lbXB0eSBzdHJpbmcgb2Ygb25seSB3aGl0ZXNwYWNlICh0aGUgcmVxdWlyZWQrd2hpdGVzcGFjZSB0cmltIGlkaW9tKS5cbiAgICBpZiAocnVsZS53aGl0ZXNwYWNlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IGNhbm5vdCBiZSBibGFua2A7XG4gICAgfVxuICAgIC8vIGxlbjogZXhhY3QgbGVuZ3RoL2NvdW50L3ZhbHVlIOKAlCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgbWluL21heC5cbiAgICBpZiAocnVsZS5sZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBtID0gbWVhc3VyZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgbS5tZWFzdXJlZCAhPT0gcnVsZS5sZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBleGFjdGx5ICR7cnVsZS5sZW59JHttLnVuaXR9YDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChydWxlLm1pbiAhPT0gdW5kZWZpbmVkIHx8IHJ1bGUubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbSA9IG1lYXN1cmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocnVsZS5taW4gIT09IHVuZGVmaW5lZCAmJiBtLm1lYXN1cmVkIDwgcnVsZS5taW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVsZS5tZXNzYWdlIHx8IGAke25hbWV9IG11c3QgYmUgYXQgbGVhc3QgJHtydWxlLm1pbn0ke20udW5pdH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1bGUubWF4ICE9PSB1bmRlZmluZWQgJiYgbS5tZWFzdXJlZCA+IHJ1bGUubWF4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG5vIG1vcmUgdGhhbiAke3J1bGUubWF4fSR7bS51bml0fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJ1bGUucGF0dGVybiAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEEgL2cgb3IgL3kgcmVnZXggaXMgc3RhdGVmdWw6IGxhc3RJbmRleCBwZXJzaXN0cyBhY3Jvc3MgLnRlc3QoKSBjYWxscyxcbiAgICAgICAgLy8gc28gcmVwZWF0ZWQgcnVucyB3b3VsZCBhbHRlcm5hdGUgcGFzcy9mYWlsIOKAlCByZXNldCBpdCBldmVyeSBydW4uXG4gICAgICAgIGlmIChydWxlLnBhdHRlcm4uZ2xvYmFsIHx8IHJ1bGUucGF0dGVybi5zdGlja3kpXG4gICAgICAgICAgICBydWxlLnBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICAgICAgaWYgKCFydWxlLnBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gZm9ybWF0IGlzIGludmFsaWRgO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChydWxlLnR5cGUgJiYgcnVsZS50eXBlICE9PSAnZW51bScgJiYgIVRZUEVfQ0hFQ0tTW3J1bGUudHlwZV0odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBydWxlLm1lc3NhZ2UgfHwgdHlwZUZhaWx1cmVNZXNzYWdlKG5hbWUsIHJ1bGUudHlwZSk7XG4gICAgfVxuICAgIC8vIGVudW0gbWVtYmVyc2hpcDogYXBwbGllcyBmb3IgdHlwZSAnZW51bScgb3Igd2hlbmV2ZXIgcnVsZS5lbnVtIGlzIHByZXNlbnQuXG4gICAgaWYgKHJ1bGUuZW51bSAmJiBBcnJheS5pc0FycmF5KHJ1bGUuZW51bSkgJiYgIXJ1bGUuZW51bS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIG9uZSBvZiAke3J1bGUuZW51bS5qb2luKCcsICcpfWA7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gdG9SdWxlQXJyYXkocnVsZXMpIHtcbiAgICBpZiAoIXJ1bGVzKVxuICAgICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocnVsZXMpID8gcnVsZXMgOiBbcnVsZXNdO1xufVxuLyoqIE1lbWJlcnMgZm9yIGRlZXAgcnVsZXM6IGFycmF5IOKGkiBpbmRleGVkIGVudHJpZXMsIHBsYWluIG9iamVjdCDihpIga2V5IGVudHJpZXMuICovXG5mdW5jdGlvbiBkZWVwTWVtYmVycyh2YWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCgobWVtYmVyLCBpbmRleCkgPT4gW1N0cmluZyhpbmRleCksIG1lbWJlcl0pO1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKVxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpO1xuICAgIHJldHVybiBbXTtcbn1cbmNvbnN0IFBBU1MgPSB7IGVycm9yOiBudWxsLCB3YXJuaW5nOiBudWxsIH07XG4vKipcbiAqIERldiBndWFyZCBmb3IgdGhlIHByZS0wLjAuNzYgdmFsaWRhdG9yIGNvbnRyYWN0OiByZXR1cm5pbmcgYSBzdHJpbmcgb3JcbiAqIGBmYWxzZWAgdXNlZCB0byBGQUlMIHRoZSBydWxlIOKAlCB1bmRlciB0aGUgYChydWxlLCB2YWx1ZSlgIGNvbnRyYWN0IHJldHVyblxuICogdmFsdWVzIGFyZSBpZ25vcmVkIGFuZCBvbmx5IHRocm93L3JlamVjdCBmYWlscy4gU3VjaCBhIHJldHVybiBpcyBhbG1vc3RcbiAqIGNlcnRhaW5seSBhIGxlZ2FjeSB2YWxpZGF0b3Igc2lsZW50bHkgcGFzc2luZywgc28gaXQgd2FybnMgb25jZS5cbiAqL1xuZnVuY3Rpb24gd2FybkxlZ2FjeVZhbGlkYXRvclJldHVybihuYW1lLCByZXN1bHQpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ3N0cmluZycgJiYgcmVzdWx0ICE9PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGRldldhcm5PbmNlKGB2YWxpZGF0b3ItcmV0dXJuOiR7bmFtZX1gLCBgW1Byb0Zvcm1dIEZpZWxkIFwiJHtuYW1lfVwiOiBhIGN1c3RvbSB2YWxpZGF0b3IgcmV0dXJuZWQgJHt0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/ICdhIHN0cmluZycgOiAnZmFsc2UnfSDigJQgcmV0dXJuIHZhbHVlcyBhcmUgSUdOT1JFRDsgdmFsaWRhdG9ycyBmYWlsIGJ5IHRocm93aW5nIG9yIHJlamVjdGluZyAoYSB0aHJvd24gRXJyb3IncyBtZXNzYWdlIGJlY29tZXMgdGhlIGZpZWxkIGVycm9yKS5gKTtcbn1cbi8qKiBSdW4gYSBydWxlJ3MgdHJhbnNmb3JtLCBjb250YWluaW5nIHRocm93cyBhcyBhIHJ1bGUgZmFpbHVyZS4gKi9cbmZ1bmN0aW9uIGFwcGx5VHJhbnNmb3JtKHJ1bGUsIHJhd1ZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBydWxlLnRyYW5zZm9ybSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiByYXdWYWx1ZSB9O1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogcnVsZS50cmFuc2Zvcm0ocmF3VmFsdWUpIH07XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBmYWlsdXJlOiByZXNvbHZlRmFpbHVyZU1lc3NhZ2UoZXJyLCBydWxlKSB9O1xuICAgIH1cbn1cbi8qKlxuICogRmxhdHRlbiBhIHJ1bGUncyBkZWVwIHNvdXJjZXMgKGBmaWVsZHNgIHBlciBrZXksIHRoZW4gYGRlZmF1bHRGaWVsZGAgcGVyXG4gKiBtZW1iZXIpIGludG8gW3N1YlJ1bGUsIG1lbWJlclZhbHVlLCBtZW1iZXJOYW1lXSB0dXBsZXMg4oCUIHRoZSBzaW5nbGUgcGxhY2VcbiAqIHRoYXQga25vd3MgaG93IGRlZXAgcnVsZXMgbWFwIG9udG8gYSBjb250YWluZXIgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGRlZXBSdWxlRW50cmllcyhydWxlLCB2YWx1ZSwgbmFtZSkge1xuICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICBpZiAocnVsZS5maWVsZHMpIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdmFsdWU7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgc3ViUnVsZXNdIG9mIE9iamVjdC5lbnRyaWVzKHJ1bGUuZmllbGRzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJSdWxlIG9mIHRvUnVsZUFycmF5KHN1YlJ1bGVzKSkge1xuICAgICAgICAgICAgICAgIGVudHJpZXMucHVzaChbc3ViUnVsZSwgc291cmNlW2tleV0sIGAke25hbWV9LiR7a2V5fWBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocnVsZS5kZWZhdWx0RmllbGQpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBtZW1iZXJdIG9mIGRlZXBNZW1iZXJzKHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJSdWxlIG9mIHRvUnVsZUFycmF5KHJ1bGUuZGVmYXVsdEZpZWxkKSkge1xuICAgICAgICAgICAgICAgIGVudHJpZXMucHVzaChbc3ViUnVsZSwgbWVtYmVyLCBgJHtuYW1lfS4ke2tleX1gXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59XG4vKipcbiAqIE1lcmdlIGEgc3ViLXJ1bGUncyBvdXRjb21lIGludG8gdGhlIHBhcmVudCdzIGNoYW5uZWxzLiBBIHN1Yi1ydWxlIGZsYWdnZWRcbiAqIGB3YXJuaW5nT25seWAgY29udHJpYnV0ZXMgaXRzIGZhaWx1cmUgYXMgYSBXQVJOSU5HOyBvdGhlcndpc2UgaXRzIGVycm9yXG4gKiBibG9ja3MuIFJldHVybnMgdHJ1ZSB3aGVuIGEgYmxvY2tpbmcgZXJyb3IgbGFuZGVkIChzdG9wIHdhbGtpbmcpLlxuICovXG5mdW5jdGlvbiBtZXJnZVN1YlJlc3VsdChhY2MsIHN1YlJ1bGUsIHN1Yikge1xuICAgIGlmIChzdWIud2FybmluZyAhPT0gbnVsbCAmJiBhY2Mud2FybmluZyA9PT0gbnVsbClcbiAgICAgICAgYWNjLndhcm5pbmcgPSBzdWIud2FybmluZztcbiAgICBpZiAoc3ViLmVycm9yICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzdWJSdWxlLndhcm5pbmdPbmx5KSB7XG4gICAgICAgICAgICBpZiAoYWNjLndhcm5pbmcgPT09IG51bGwpXG4gICAgICAgICAgICAgICAgYWNjLndhcm5pbmcgPSBzdWIuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhY2MuZXJyb3IgPSBzdWIuZXJyb3I7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIEZvbGQgb25lIHJ1bGUncyBvdXRjb21lIGludG8gdGhlIHJ1bi1sZXZlbCBjaGFubmVscy4gQSBydWxlIGZsYWdnZWRcbiAqIGB3YXJuaW5nT25seWAgZG93bmdyYWRlcyBldmVyeXRoaW5nIGl0IHByb2R1Y2VkIChvd24gY2hlY2tzIEFORCBkZWVwXG4gKiBzdWItcnVsZXMpIHRvIGEgd2FybmluZy4gUmV0dXJucyB0aGUgYmxvY2tpbmcgZXJyb3IgdG8gc3VyZmFjZSwgb3IgbnVsbC5cbiAqL1xuZnVuY3Rpb24gZm9sZFJ1bGVSZXN1bHQocnVsZSwgcmVzdWx0LCBzdGF0ZSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAocnVsZS53YXJuaW5nT25seSkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gKF9hID0gcmVzdWx0LmVycm9yKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByZXN1bHQud2FybmluZztcbiAgICAgICAgaWYgKGNvbnRlbnQgIT09IG51bGwgJiYgc3RhdGUud2FybmluZyA9PT0gbnVsbClcbiAgICAgICAgICAgIHN0YXRlLndhcm5pbmcgPSBjb250ZW50O1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC53YXJuaW5nICE9PSBudWxsICYmIHN0YXRlLndhcm5pbmcgPT09IG51bGwpXG4gICAgICAgIHN0YXRlLndhcm5pbmcgPSByZXN1bHQud2FybmluZztcbiAgICByZXR1cm4gcmVzdWx0LmVycm9yO1xufVxuLyoqXG4gKiBFdmFsdWF0ZSBPTkUgcnVsZSAodHJhbnNmb3JtIOKGkiBidWlsdGluIGNoZWNrcyDihpIgdmFsaWRhdG9yIOKGkiBkZWVwIHJ1bGVzKVxuICogc3luY2hyb25vdXNseS4gUHJvbWlzZS1yZXR1cm5pbmcgdmFsaWRhdG9ycyBhcmUgZGVmZXJyZWQgKHNlZSBydW5SdWxlc1N5bmMpLlxuICovXG5mdW5jdGlvbiBldmFsUnVsZVN5bmMocnVsZSwgcmF3VmFsdWUsIG5hbWUpIHtcbiAgICBjb25zdCBwcmVwID0gYXBwbHlUcmFuc2Zvcm0ocnVsZSwgcmF3VmFsdWUpO1xuICAgIGlmICghcHJlcC5vaylcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHByZXAuZmFpbHVyZSwgd2FybmluZzogbnVsbCB9O1xuICAgIGNvbnN0IHZhbHVlID0gcHJlcC52YWx1ZTtcbiAgICBsZXQgZmFpbHVyZSA9IGNoZWNrQnVpbHRpblJ1bGVzKHJ1bGUsIHZhbHVlLCBuYW1lKTtcbiAgICBpZiAoZmFpbHVyZSA9PT0gbnVsbCAmJiB0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJ1bGUudmFsaWRhdG9yKHJ1bGUsIHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbigocmVzb2x2ZWQpID0+IHdhcm5MZWdhY3lWYWxpZGF0b3JSZXR1cm4obmFtZSwgcmVzb2x2ZWQpLCAoKSA9PiB7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd2FybkxlZ2FjeVZhbGlkYXRvclJldHVybihuYW1lLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGZhaWx1cmUgPSByZXNvbHZlRmFpbHVyZU1lc3NhZ2UoZXJyLCBydWxlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmFpbHVyZSAhPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGZhaWx1cmUsIHdhcm5pbmc6IG51bGwgfTtcbiAgICBpZiAoKHJ1bGUuZmllbGRzIHx8IHJ1bGUuZGVmYXVsdEZpZWxkKSAmJiAhaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAvLyBEZWVwIHJ1bGVzIG5lZWQgYSBjb250YWluZXI7IGEgbm9uLWVtcHR5IHByaW1pdGl2ZSBmYWlscyB0aGUgUEFSRU5UXG4gICAgICAgIC8vIChjbGVhciBhdHRyaWJ1dGlvbikgaW5zdGVhZCBvZiBwcm9kdWNpbmcgY29uZnVzaW5nIGNoaWxkIGVycm9ycy5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBydWxlLm1lc3NhZ2UgfHwgYCR7bmFtZX0gbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXlgLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWNjID0geyBlcnJvcjogbnVsbCwgd2FybmluZzogbnVsbCB9O1xuICAgICAgICBmb3IgKGNvbnN0IFtzdWJSdWxlLCBzdWJWYWx1ZSwgc3ViTmFtZV0gb2YgZGVlcFJ1bGVFbnRyaWVzKHJ1bGUsIHZhbHVlLCBuYW1lKSkge1xuICAgICAgICAgICAgaWYgKG1lcmdlU3ViUmVzdWx0KGFjYywgc3ViUnVsZSwgZXZhbFJ1bGVTeW5jKHN1YlJ1bGUsIHN1YlZhbHVlLCBzdWJOYW1lKSkpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgcmV0dXJuIFBBU1M7XG59XG4vKiogQXN5bmMgY291bnRlcnBhcnQgb2YgZXZhbFJ1bGVTeW5jIOKAlCBjdXN0b20gdmFsaWRhdG9ycyBhcmUgYXdhaXRlZC4gKi9cbmZ1bmN0aW9uIGV2YWxSdWxlQXN5bmMocnVsZSwgcmF3VmFsdWUsIG5hbWUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBwcmVwID0gYXBwbHlUcmFuc2Zvcm0ocnVsZSwgcmF3VmFsdWUpO1xuICAgICAgICBpZiAoIXByZXAub2spXG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogcHJlcC5mYWlsdXJlLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcHJlcC52YWx1ZTtcbiAgICAgICAgbGV0IGZhaWx1cmUgPSBjaGVja0J1aWx0aW5SdWxlcyhydWxlLCB2YWx1ZSwgbmFtZSk7XG4gICAgICAgIGlmIChmYWlsdXJlID09PSBudWxsICYmIHR5cGVvZiBydWxlLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSAoeWllbGQgcnVsZS52YWxpZGF0b3IocnVsZSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICB3YXJuTGVnYWN5VmFsaWRhdG9yUmV0dXJuKG5hbWUsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgZmFpbHVyZSA9IHJlc29sdmVGYWlsdXJlTWVzc2FnZShlcnIsIHJ1bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmYWlsdXJlICE9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGZhaWx1cmUsIHdhcm5pbmc6IG51bGwgfTtcbiAgICAgICAgaWYgKChydWxlLmZpZWxkcyB8fCBydWxlLmRlZmF1bHRGaWVsZCkgJiYgIWlzRW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIERlZXAgcnVsZXMgbmVlZCBhIGNvbnRhaW5lcjsgYSBub24tZW1wdHkgcHJpbWl0aXZlIGZhaWxzIHRoZSBQQVJFTlRcbiAgICAgICAgICAgIC8vIChjbGVhciBhdHRyaWJ1dGlvbikgaW5zdGVhZCBvZiBwcm9kdWNpbmcgY29uZnVzaW5nIGNoaWxkIGVycm9ycy5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHJ1bGUubWVzc2FnZSB8fCBgJHtuYW1lfSBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheWAsIHdhcm5pbmc6IG51bGwgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFjYyA9IHsgZXJyb3I6IG51bGwsIHdhcm5pbmc6IG51bGwgfTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW3N1YlJ1bGUsIHN1YlZhbHVlLCBzdWJOYW1lXSBvZiBkZWVwUnVsZUVudHJpZXMocnVsZSwgdmFsdWUsIG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmdlU3ViUmVzdWx0KGFjYywgc3ViUnVsZSwgeWllbGQgZXZhbFJ1bGVBc3luYyhzdWJSdWxlLCBzdWJWYWx1ZSwgc3ViTmFtZSkpKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBBU1M7XG4gICAgfSk7XG59XG4vKipcbiAqIFN5bmNocm9ub3VzIHJ1bGUgcnVuLiBBIFByb21pc2UtcmV0dXJuaW5nIHZhbGlkYXRvciBDQU5OT1QgYmUgZXZhbHVhdGVkXG4gKiBoZXJlIOKAlCBpdCBpcyBkZWZlcnJlZCAodHJlYXRlZCBhcyBwYXNzaW5nIGZvciB0aGlzIHJ1bjsgaXRzIHJlamVjdGlvbiBpc1xuICogc3dhbGxvd2VkKSBhbmQgbGVmdCB0byB0aGUgYXN5bmMgcnVucyAoYmx1ci9zdWJtaXQpLCB3aGljaCBhbHdheXMgYXdhaXQgaXQuXG4gKiBGYWlsaW5nIGl0IGluc3RlYWQgd291bGQgbWlzLXJlcG9ydCBcIlZhbGlkYXRpb24gZmFpbGVkXCIgb24gZXZlcnkga2V5c3Ryb2tlXG4gKiBmb3IgcGVyZmVjdGx5IHZhbGlkIGlucHV0LlxuICpcbiAqIFRoZSBwZXItcnVsZSB0cnkvY2F0Y2ggaXMgdGhlIGVuZ2luZSdzIHRvdGFsaXR5IGNob2tlIHBvaW50OiBOTyBpbnB1dCDigJRcbiAqIGluY2x1ZGluZyBleG90aWMgdmFsdWVzIHRoYXQgYnJlYWsgYSBidWlsdGluIGNoZWNrIOKAlCBtYXkgZXNjYXBlIGFzIGEgdGhyb3c7XG4gKiBldmVyeSBmYWlsdXJlIHN1cmZhY2VzIHRocm91Z2ggdGhlIGVycm9yL3dhcm5pbmcgY2hhbm5lbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SdWxlc1N5bmMobmFtZSwgdmFsdWUsIHZhbHVlcywgcnVsZXMsIGluc3RhbmNlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB7IHdhcm5pbmc6IG51bGwgfTtcbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcmVzb2x2ZVJ1bGVzKHJ1bGVzLCB2YWx1ZXMsIGluc3RhbmNlKSkge1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZXZhbFJ1bGVTeW5jKHJ1bGUsIHZhbHVlLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB7IGVycm9yOiByZXNvbHZlRmFpbHVyZU1lc3NhZ2UoZXJyLCBydWxlKSwgd2FybmluZzogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVycm9yID0gZm9sZFJ1bGVSZXN1bHQocnVsZSwgcmVzdWx0LCBzdGF0ZSk7XG4gICAgICAgIGlmIChlcnJvciAhPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yLCB3YXJuaW5nOiBzdGF0ZS53YXJuaW5nIH07XG4gICAgfVxuICAgIHJldHVybiB7IGVycm9yOiBudWxsLCB3YXJuaW5nOiBzdGF0ZS53YXJuaW5nIH07XG59XG4vKipcbiAqIEFzeW5jaHJvbm91cyBydWxlIHJ1bi4gQ3VzdG9tIHZhbGlkYXRvcnMgYXJlIGF3YWl0ZWQgKHN5bmMgb3IgYXN5bmMpOlxuICogcmVzb2x2aW5nIHBhc3NlcywgcmVqZWN0aW5nL3Rocm93aW5nIGZhaWxzLiBSZXR1cm4gdmFsdWVzIGFyZSBpZ25vcmVkLlxuICogU2hhcmVzIHRoZSB0b3RhbGl0eSBjaG9rZSBwb2ludCB3aXRoIHJ1blJ1bGVzU3luYy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blJ1bGVzQXN5bmMobmFtZSwgdmFsdWUsIHZhbHVlcywgcnVsZXMsIGluc3RhbmNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7IHdhcm5pbmc6IG51bGwgfTtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHJlc29sdmVSdWxlcyhydWxlcywgdmFsdWVzLCBpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGV2YWxSdWxlQXN5bmMocnVsZSwgdmFsdWUsIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHsgZXJyb3I6IHJlc29sdmVGYWlsdXJlTWVzc2FnZShlcnIsIHJ1bGUpLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGZvbGRSdWxlUmVzdWx0KHJ1bGUsIHJlc3VsdCwgc3RhdGUpO1xuICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yLCB3YXJuaW5nOiBzdGF0ZS53YXJuaW5nIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IG51bGwsIHdhcm5pbmc6IHN0YXRlLndhcm5pbmcgfTtcbiAgICB9KTtcbn0iXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|