occam-nominal 1.0.336 → 1.0.340
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/lib/context.js +5 -1
- package/lib/element/assumption.js +134 -111
- package/lib/element/constraint.js +114 -102
- package/lib/element/goal.js +65 -55
- package/lib/element/hypothesis.js +2 -2
- package/lib/element/judgement.js +13 -14
- package/lib/element/label.js +24 -21
- package/lib/element/metaType.js +2 -2
- package/lib/element/metavariable.js +25 -26
- package/lib/element/parameter.js +2 -2
- package/lib/element/procedureCall.js +2 -2
- package/lib/element/procedureReference.js +2 -2
- package/lib/element/reference.js +25 -22
- package/lib/element/schema.js +165 -154
- package/lib/element/signature.js +2 -2
- package/lib/element/statement.js +4 -2
- package/lib/element/substitution/reference.js +22 -29
- package/lib/element/typePrefix.js +2 -2
- package/lib/process/unification.js +36 -42
- package/package.json +3 -3
- package/src/context.js +6 -0
- package/src/element/assumption.js +158 -132
- package/src/element/constraint.js +134 -125
- package/src/element/goal.js +79 -72
- package/src/element/hypothesis.js +2 -2
- package/src/element/judgement.js +18 -20
- package/src/element/label.js +25 -24
- package/src/element/metaType.js +2 -2
- package/src/element/metavariable.js +32 -31
- package/src/element/parameter.js +2 -2
- package/src/element/procedureCall.js +2 -2
- package/src/element/procedureReference.js +2 -2
- package/src/element/reference.js +26 -25
- package/src/element/schema.js +193 -195
- package/src/element/signature.js +2 -2
- package/src/element/statement.js +6 -2
- package/src/element/substitution/reference.js +22 -35
- package/src/element/typePrefix.js +2 -2
- package/src/process/unification.js +39 -54
package/lib/element/goal.js
CHANGED
|
@@ -55,7 +55,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
55
55
|
}
|
|
56
56
|
return newObj;
|
|
57
57
|
}
|
|
58
|
-
const {
|
|
58
|
+
const { clone } = _necessary.arrayUtilities, { each, filter } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
|
|
59
59
|
const _default = (0, _elements.define)(class Goal extends _occamlanguages.Element {
|
|
60
60
|
constructor(context, string, node, breakPoint, reference, statement){
|
|
61
61
|
super(context, string, node, breakPoint);
|
|
@@ -189,85 +189,94 @@ const _default = (0, _elements.define)(class Goal extends _occamlanguages.Elemen
|
|
|
189
189
|
let schemas;
|
|
190
190
|
schemas = context.getSchemas();
|
|
191
191
|
schemas = clone(schemas); ///
|
|
192
|
-
filter(schemas, (schema)=>{
|
|
193
|
-
const label = schema.getLabel()
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
192
|
+
return filter(schemas, (schema, continuation)=>{
|
|
193
|
+
const label = schema.getLabel();
|
|
194
|
+
return this.unifyLabel(label, context, continuation);
|
|
195
|
+
}, ()=>{
|
|
196
|
+
return each(schemas, (schema, continuation)=>{
|
|
197
|
+
return this.unifySchema(schema, context, continuation);
|
|
198
|
+
}, (schemasUnifiy)=>{
|
|
199
|
+
if (schemasUnifiy) {
|
|
200
|
+
validatesWhenDerived = true;
|
|
201
|
+
}
|
|
202
|
+
if (validatesWhenDerived) {
|
|
203
|
+
context.debug(`...validated the '${goalString}' derived goal.`);
|
|
204
|
+
}
|
|
205
|
+
return continuation(validatesWhenDerived);
|
|
206
|
+
});
|
|
203
207
|
});
|
|
204
|
-
if (schemasUnifiy) {
|
|
205
|
-
validatesWhenDerived = true;
|
|
206
|
-
}
|
|
207
|
-
if (validatesWhenDerived) {
|
|
208
|
-
context.debug(`...validated the '${goalString}' derived goal.`);
|
|
209
|
-
}
|
|
210
|
-
return validatesWhenDerived;
|
|
211
208
|
}
|
|
212
|
-
unifyLabel(label, context) {
|
|
213
|
-
let labelUnifies;
|
|
209
|
+
unifyLabel(label, context, continuation) {
|
|
214
210
|
const goalString = this.getString(), labelString = label.getString();
|
|
215
211
|
context.trace(`Unifying the '${labelString}' label with the '${goalString}' goal...`);
|
|
216
212
|
(0, _context.reconcile)((context)=>{
|
|
217
|
-
|
|
213
|
+
return this.reference.unifyLabel(label, context, (labelUnifies)=>{
|
|
214
|
+
if (labelUnifies) {
|
|
215
|
+
context.debug(`...unified the '${labelString}' label with the '${goalString}' goal's reference.`);
|
|
216
|
+
}
|
|
217
|
+
return continuation(labelUnifies);
|
|
218
|
+
});
|
|
218
219
|
}, context);
|
|
219
|
-
if (labelUnifies) {
|
|
220
|
-
context.debug(`...unified the '${labelString}' label with the '${goalString}' goal's reference.`);
|
|
221
|
-
}
|
|
222
|
-
return labelUnifies;
|
|
223
220
|
}
|
|
224
|
-
unifySchema(schema, context) {
|
|
225
|
-
let schemaUnifies = false;
|
|
221
|
+
unifySchema(schema, context, continuation) {
|
|
226
222
|
const goalString = this.getString(), schemaString = schema.getString();
|
|
227
223
|
context.trace(`Unifying the '${schemaString}' schema with the '${goalString}' goal...`);
|
|
228
224
|
const generalContext = context; ///
|
|
229
225
|
(0, _context.reconcile)((context)=>{
|
|
230
|
-
const label = schema.getLabel()
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
226
|
+
const label = schema.getLabel();
|
|
227
|
+
return this.reference.unifyLabel(label, context, (labelUnifies)=>{
|
|
228
|
+
if (labelUnifies) {
|
|
229
|
+
const specificContext = context, schemaConditional = schema.isConditional(), subproofAssertion = subproofAssertionFromStatement(this.statement, context);
|
|
230
|
+
if (schemaConditional) {
|
|
231
|
+
if (subproofAssertion === null) {
|
|
232
|
+
const schemaUnifies = false;
|
|
233
|
+
return continuation(schemaUnifies);
|
|
234
|
+
}
|
|
235
|
+
return subproofAssertion.unifySchema(schema, generalContext, specificContext, (schemaUnifies)=>{
|
|
236
|
+
if (schemaUnifies) {
|
|
237
|
+
context.debug(`...unified the '${schemaString}' schema with the '${goalString}' goal.`);
|
|
238
|
+
}
|
|
239
|
+
return continuation(schemaUnifies);
|
|
240
|
+
});
|
|
241
|
+
}
|
|
234
242
|
if (subproofAssertion !== null) {
|
|
235
|
-
schemaUnifies =
|
|
243
|
+
const schemaUnifies = false;
|
|
244
|
+
return continuation(schemaUnifies);
|
|
236
245
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
246
|
+
const deduction = schema.getDeduction();
|
|
247
|
+
this.unifyDeduction(deduction, generalContext, specificContext, (deductionUnifies)=>{
|
|
248
|
+
let schemaUnifies = false;
|
|
240
249
|
if (deductionUnifies) {
|
|
241
250
|
schemaUnifies = true;
|
|
242
251
|
}
|
|
243
|
-
|
|
252
|
+
if (schemaUnifies) {
|
|
253
|
+
context.debug(`...unified the '${schemaString}' schema with the '${goalString}' goal.`);
|
|
254
|
+
}
|
|
255
|
+
return continuation(schemaUnifies);
|
|
256
|
+
});
|
|
244
257
|
}
|
|
245
|
-
}
|
|
258
|
+
});
|
|
246
259
|
}, context);
|
|
247
|
-
if (schemaUnifies) {
|
|
248
|
-
context.debug(`...unified the '${schemaString}' schema with the '${goalString}' goal.`);
|
|
249
|
-
}
|
|
250
|
-
return schemaUnifies;
|
|
251
260
|
}
|
|
252
|
-
unifyDeduction(deduction, generalContext, specificContext) {
|
|
253
|
-
let deductionUnifies;
|
|
261
|
+
unifyDeduction(deduction, generalContext, specificContext, continuation) {
|
|
254
262
|
const context = specificContext, goalString = this.getString(), deductionString = deduction.getString();
|
|
255
263
|
context.trace(`Unifying the '${deductionString}' deduction's statement with the '${goalString}' goal's '${goalString}' statement...`);
|
|
256
264
|
const statement = deduction.getStatement(), deductionContext = deduction.getContext(); ///
|
|
257
265
|
specificContext = deductionContext; ///
|
|
258
266
|
(0, _context.reconcile)((specificContext)=>{
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
267
|
+
return this.statement.unifyStatement(statement, generalContext, specificContext, (statementUnifies)=>{
|
|
268
|
+
let deductionUnifies = false;
|
|
269
|
+
if (statementUnifies) {
|
|
270
|
+
deductionUnifies = true;
|
|
271
|
+
specificContext.commit(context);
|
|
272
|
+
}
|
|
273
|
+
if (deductionUnifies) {
|
|
274
|
+
context.debug(`...unified the '${deductionString}' deduction's statement with the '${goalString}' goal's '${goalString}' statement.`);
|
|
275
|
+
}
|
|
276
|
+
return continuation(deductionUnifies);
|
|
277
|
+
});
|
|
264
278
|
}, specificContext);
|
|
265
|
-
if (deductionUnifies) {
|
|
266
|
-
context.debug(`...unified the '${deductionString}' deduction's statement with the '${goalString}' goal's '${goalString}' statement.`);
|
|
267
|
-
}
|
|
268
|
-
return deductionUnifies;
|
|
269
279
|
}
|
|
270
|
-
static name = "Goal";
|
|
271
280
|
toJSON() {
|
|
272
281
|
const string = this.getString();
|
|
273
282
|
let breakPoint;
|
|
@@ -280,6 +289,7 @@ const _default = (0, _elements.define)(class Goal extends _occamlanguages.Elemen
|
|
|
280
289
|
};
|
|
281
290
|
return json;
|
|
282
291
|
}
|
|
292
|
+
static name = "Goal";
|
|
283
293
|
static fromJSON(json, context) {
|
|
284
294
|
return (0, _context.instantiate)((context)=>{
|
|
285
295
|
const { string } = json, goalNode = (0, _instantiate.instantiateGoal)(string, context), node = goalNode, breakPoint = breakPointFromJSON(json), reference = referenceFromGoalNode(goalNode, context), statement = statementFromGoalNode(goalNode, context), goal = new Goal(context, string, node, breakPoint, reference, statement);
|
|
@@ -305,4 +315,4 @@ function subproofAssertionFromStatement(statement, context) {
|
|
|
305
315
|
return subproofAssertion;
|
|
306
316
|
}
|
|
307
317
|
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2dvYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVHb2FsIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBmaWx0ZXIgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgZWFjaCwgY2xvbmUgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgR29hbCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRHb2FsTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZ29hbE5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gZ29hbE5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZ2V0U3RhdGVtZW50Tm9kZSgpOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkgeyByZXR1cm4gdGhpcy5yZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7IH1cblxuICBpc0VxdWFsVG8oZ29hbCkge1xuICAgIGNvbnN0IGdvYWxOb2RlID0gZ29hbC5nZXROb2RlKCksXG4gICAgICAgICAgZ29hbE5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEdvYWxOb2RlKGdvYWxOb2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gZ29hbE5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoR29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gZ29hbE5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZ29hbE5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGdvYWxOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG4gIH1cblxuICBmaW5kVmFsaWRHb2FsKGNvbnRleHQpIHtcbiAgICBjb25zdCBnb2FsTm9kZSA9IHRoaXMuZ2V0R29hbE5vZGUoKSxcbiAgICAgICAgICBnb2FsID0gY29udGV4dC5maW5kR29hbEJ5R29hbE5vZGUoZ29hbE5vZGUpLFxuICAgICAgICAgIHZhbGlkR29hbCA9IGdvYWw7ICAvLy9cblxuICAgIHJldHVybiB2YWxpZEdvYWw7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkR29hbCA9IHRoaXMuZmluZFZhbGlkR29hbChjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEdvYWwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGdvYWwgPSB2YWxpZEdvYWw7IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwgaXMgYWxyZWFkeSB2YWxpZC5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihnb2FsKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZSA9IHRoaXMudmFsaWRhdGVSZWZlcmVuY2UuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVSZWZlcmVuY2UsXG4gICAgICB2YWxpZGF0ZVN0YXRlbWVudFxuICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgIGlmICghdmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGdvYWwgPSBudWxsO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZ29hbCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQsXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBnb2FsID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgZ29hbCA9IHRoaXM7IC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGRHb2FsKGdvYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGdvYWwpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVJlZmVyZW5jZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyByZWZlcmVuY2UuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0LCAocmVmZXJlbmNlKSA9PiB7XG4gICAgICBsZXQgcmVmZXJlbmNlVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3MgcmVmZXJlbmNlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHJlZmVyZW5jZVZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtnb2FsU3RyaW5nfScgc3RhdGVkIGdvYWwuLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtnb2FsU3RyaW5nfScgc3RhdGVkIGdvYWwuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGRlcml2ZWQgZ29hbC4uLmApO1xuXG4gICAgbGV0IHNjaGVtYXM7XG5cbiAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICBzY2hlbWFzID0gY2xvbmUoc2NoZW1hcyk7IC8vL1xuXG4gICAgZmlsdGVyKHNjaGVtYXMsIChzY2hlbWEpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCksXG4gICAgICAgICAgICBsYWJlbFVuaWZpZXMgPSB0aGlzLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQpO1xuXG4gICAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hc1VuaWZpeSA9IGVhY2goc2NoZW1hcywgKHNjaGVtYSkgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hVW5pZmllcyA9IHRoaXMudW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc2NoZW1hc1VuaWZpeSkge1xuICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtnb2FsU3RyaW5nfScgZGVyaXZlZCBnb2FsLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQpIHtcbiAgICBsZXQgbGFiZWxVbmlmaWVzO1xuXG4gICAgY29uc3QgZ29hbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwgd2l0aCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuLi5gKTtcblxuICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgbGFiZWxVbmlmaWVzID0gdGhpcy5yZWZlcmVuY2UudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3MgcmVmZXJlbmNlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBsYWJlbFVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgICBsZXQgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ29hbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbC4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCksXG4gICAgICAgICAgICBsYWJlbFVuaWZpZXMgPSB0aGlzLnJlZmVyZW5jZS51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0KTtcblxuICAgICAgaWYgKGxhYmVsVW5pZmllcykge1xuICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIHNjaGVtYUNvbmRpdGlvbmFsID0gc2NoZW1hLmlzQ29uZGl0aW9uYWwoKSxcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQodGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzY2hlbWFDb25kaXRpb25hbCkge1xuICAgICAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2NoZW1hVW5pZmllcyA9IHN1YnByb29mQXNzZXJ0aW9uLnVuaWZ5U2NoZW1hKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZGVkdWN0aW9uID0gc2NoZW1hLmdldERlZHVjdGlvbigpLFxuICAgICAgICAgICAgICAgICAgZGVkdWN0aW9uVW5pZmllcyA9IHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAoc2NoZW1hVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IGRlZHVjdGlvblVuaWZpZXM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ29hbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbCdzICcke2dvYWxTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTsgLy8vXG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBkZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRVbmlmaWVzID0gdGhpcy5zdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgZGVkdWN0aW9uVW5pZmllcyA9IHRydWU7XG5cbiAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbidzIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbCdzICcke2dvYWxTdHJpbmd9JyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZHVjdGlvblVuaWZpZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiR29hbFwiO1xuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGdvYWxOb2RlID0gaW5zdGFudGlhdGVHb2FsKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gZ29hbE5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGdvYWwgPSBuZXcgR29hbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICAgICAgcmV0dXJuIGdvYWw7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiByZWZlcmVuY2VGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGdvYWxOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGdvYWxOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uO1xuXG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uID0gU3VicHJvb2ZBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cbiJdLCJuYW1lcyI6WyJmaWx0ZXIiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJlYWNoIiwiY2xvbmUiLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkdvYWwiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwicmVmZXJlbmNlIiwic3RhdGVtZW50IiwiZ2V0UmVmZXJlbmNlIiwiZ2V0U3RhdGVtZW50IiwiZ2V0R29hbE5vZGUiLCJnZXROb2RlIiwiZ29hbE5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0TWV0YXZhcmlhYmxlIiwiaXNFcXVhbFRvIiwiZ29hbCIsImdvYWxOb2RlTWF0Y2hlcyIsIm1hdGNoR29hbE5vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiZmluZFZhbGlkR29hbCIsImZpbmRHb2FsQnlHb2FsTm9kZSIsInZhbGlkR29hbCIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwiZ29hbFN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImJpbmQiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsImFsbCIsInZhbGlkYXRlcyIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZVdoZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhZGRHb2FsIiwicmVmZXJlbmNlVmFsaWRhdGVzIiwic3RhdGVtZW50VmFsaWRhdGVzIiwic3RhdGVkIiwiaXNTdGF0ZWQiLCJzY2hlbWFzIiwiZ2V0U2NoZW1hcyIsInNjaGVtYSIsImxhYmVsIiwiZ2V0TGFiZWwiLCJsYWJlbFVuaWZpZXMiLCJ1bmlmeUxhYmVsIiwic2NoZW1hc1VuaWZpeSIsInNjaGVtYVVuaWZpZXMiLCJ1bmlmeVNjaGVtYSIsImxhYmVsU3RyaW5nIiwicmVjb25jaWxlIiwic2NoZW1hU3RyaW5nIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzY2hlbWFDb25kaXRpb25hbCIsImlzQ29uZGl0aW9uYWwiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJkZWR1Y3Rpb24iLCJnZXREZWR1Y3Rpb24iLCJkZWR1Y3Rpb25VbmlmaWVzIiwidW5pZnlEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25TdHJpbmciLCJkZWR1Y3Rpb25Db250ZXh0IiwiZ2V0Q29udGV4dCIsInN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeVN0YXRlbWVudCIsImNvbW1pdCIsIm5hbWUiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlR29hbCIsInJlZmVyZW5jZUZyb21Hb2FsTm9kZSIsInN0YXRlbWVudEZyb21Hb2FsTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsImVsZW1lbnRzIiwiZnJvbVN0YXRlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZ0JBOzs7ZUFBQTs7OzJCQWQrQjtnQ0FDcUM7a0VBRS9DOzhCQUdPOzZCQUNJO3lCQUNPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdkMsTUFBTSxFQUFFQSxNQUFNLEVBQUUsR0FBR0MscUNBQXFCLEVBQ2xDLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjLEVBQ2hDLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyx1QkFBTztJQUM5QyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxDQUFFO1FBQ25FLEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtJQUNuQjtJQUVBQyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFDdkI7SUFFQUcsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRixTQUFTO0lBQ3ZCO0lBRUFHLGNBQWM7UUFDWixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsV0FBV1IsTUFBTyxHQUFHO1FBRTNCLE9BQU9RO0lBQ1Q7SUFFQUMsbUJBQW1CO1FBQUUsT0FBTyxJQUFJLENBQUNOLFNBQVMsQ0FBQ00sZ0JBQWdCO0lBQUk7SUFFL0RDLGtCQUFrQjtRQUFFLE9BQU8sSUFBSSxDQUFDUixTQUFTLENBQUNRLGVBQWU7SUFBSTtJQUU3REMsVUFBVUMsSUFBSSxFQUFFO1FBQ2QsTUFBTUosV0FBV0ksS0FBS0wsT0FBTyxJQUN2Qk0sa0JBQWtCLElBQUksQ0FBQ0MsYUFBYSxDQUFDTixXQUNyQ08sVUFBVUYsaUJBQWtCLEdBQUc7UUFFckMsT0FBT0U7SUFDVDtJQUVBRCxjQUFjTixRQUFRLEVBQUU7UUFDdEIsTUFBTVIsT0FBT1EsVUFDUFEsY0FBYyxJQUFJLENBQUNDLFNBQVMsQ0FBQ2pCLE9BQzdCYSxrQkFBa0JHLGFBQWEsR0FBRztRQUV4QyxPQUFPSDtJQUNUO0lBRUFLLHNCQUFzQnBCLE9BQU8sRUFBRTtRQUM3QixJQUFJcUIsb0JBQW9CO1FBRXhCLE1BQU1DLGdCQUFnQixJQUFJLENBQUNYLGdCQUFnQixJQUNyQ1ksd0JBQXdCRCxjQUFjRSx3QkFBd0I7UUFFcEUsSUFBSUQsMEJBQTBCLE1BQU07WUFDbENGLG9CQUFvQnJCLFFBQVF5Qiw0QkFBNEIsQ0FBQ0Y7UUFDM0Q7UUFFQSxPQUFPRjtJQUNUO0lBRUFLLGNBQWMxQixPQUFPLEVBQUU7UUFDckIsTUFBTVUsV0FBVyxJQUFJLENBQUNGLFdBQVcsSUFDM0JNLE9BQU9kLFFBQVEyQixrQkFBa0IsQ0FBQ2pCLFdBQ2xDa0IsWUFBWWQsTUFBTyxHQUFHO1FBRTVCLE9BQU9jO0lBQ1Q7SUFFQUMsU0FBUzdCLE9BQU8sRUFBRThCLFlBQVksRUFBRTtRQUM5QixNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFekNoQyxRQUFRaUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLFdBQVcsU0FBUyxDQUFDO1FBRXRELE1BQU1ILFlBQVksSUFBSSxDQUFDRixhQUFhLENBQUMxQjtRQUVyQyxJQUFJNEIsY0FBYyxNQUFNO1lBQ3RCLE1BQU1kLE9BQU9jLFdBQVcsR0FBRztZQUUzQjVCLFFBQVFrQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUVILFdBQVcsd0JBQXdCLENBQUM7WUFFN0QsT0FBT0QsYUFBYWhCO1FBQ3RCO1FBRUEsTUFBTXFCLG9CQUFvQixJQUFJLENBQUNBLGlCQUFpQixDQUFDQyxJQUFJLENBQUMsSUFBSSxHQUNwREMsb0JBQW9CLElBQUksQ0FBQ0EsaUJBQWlCLENBQUNELElBQUksQ0FBQyxJQUFJO1FBRTFELE9BQU9FLElBQUFBLGlCQUFHLEVBQUM7WUFDVEQ7WUFDQUY7U0FDRCxFQUFFbkMsU0FBUyxDQUFDdUM7WUFDWCxJQUFJLENBQUNBLFdBQVc7Z0JBQ2QsTUFBTXpCLE9BQU87Z0JBRWIsT0FBT2dCLGFBQWFoQjtZQUN0QjtZQUVBLE1BQU0wQixzQkFBc0IsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQ0wsSUFBSSxDQUFDLElBQUksR0FDdkRNLHVCQUF1QixJQUFJLENBQUNDLG1CQUFtQixDQUFDUCxJQUFJLENBQUMsSUFBSTtZQUUvRCxPQUFPUSxJQUFBQSxvQkFBTSxFQUFDO2dCQUNaSjtnQkFDQUU7YUFDRCxFQUFFMUMsU0FBUyxDQUFDdUM7Z0JBQ1gsSUFBSXpCLE9BQU87Z0JBRVgsSUFBSXlCLFdBQVc7b0JBQ2J6QixPQUFPLElBQUksRUFBRSxHQUFHO29CQUVoQmQsUUFBUTZDLE9BQU8sQ0FBQy9CO2dCQUNsQjtnQkFFQSxJQUFJeUIsV0FBVztvQkFDYnZDLFFBQVFrQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRUgsV0FBVyxPQUFPLENBQUM7Z0JBQ3hEO2dCQUVBLE9BQU9ELGFBQWFoQjtZQUN0QjtRQUNGO0lBQ0Y7SUFFQXVCLGtCQUFrQnJDLE9BQU8sRUFBRThCLFlBQVksRUFBRTtRQUN2QyxNQUFNQyxhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFekNoQyxRQUFRaUMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLFdBQVcscUJBQXFCLENBQUM7UUFFbEUsT0FBTyxJQUFJLENBQUMzQixTQUFTLENBQUN5QixRQUFRLENBQUM3QixTQUFTLENBQUNJO1lBQ3ZDLElBQUkwQyxxQkFBcUI7WUFFekIsSUFBSTFDLGNBQWMsTUFBTTtnQkFDdEIsSUFBSSxDQUFDQSxTQUFTLEdBQUdBO2dCQUVqQjBDLHFCQUFxQjtZQUN2QjtZQUVBLElBQUlBLG9CQUFvQjtnQkFDdEI5QyxRQUFRa0MsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVILFdBQVcsbUJBQW1CLENBQUM7WUFDcEU7WUFFQSxPQUFPRCxhQUFhZ0I7UUFDdEI7SUFDRjtJQUVBWCxrQkFBa0JuQyxPQUFPLEVBQUU4QixZQUFZLEVBQUU7UUFDdkMsTUFBTUMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXpDaEMsUUFBUWlDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLHFCQUFxQixDQUFDO1FBRWxFLE9BQU8sSUFBSSxDQUFDMUIsU0FBUyxDQUFDd0IsUUFBUSxDQUFDN0IsU0FBUyxDQUFDSztZQUN2QyxJQUFJMEMscUJBQXFCO1lBRXpCLElBQUkxQyxjQUFjLE1BQU07Z0JBQ3RCMEMscUJBQXFCO1lBQ3ZCO1lBRUEsSUFBSUEsb0JBQW9CO2dCQUN0Qi9DLFFBQVFrQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRUgsV0FBVyxtQkFBbUIsQ0FBQztZQUNwRTtZQUVBLE9BQU9ELGFBQWFpQjtRQUN0QjtJQUNGO0lBRUFOLG1CQUFtQnpDLE9BQU8sRUFBRThCLFlBQVksRUFBRTtRQUN4QyxNQUFNa0IsU0FBU2hELFFBQVFpRCxRQUFRO1FBRS9CLElBQUksQ0FBQ0QsUUFBUTtZQUNYLE1BQU1SLHNCQUFzQjtZQUU1QixPQUFPVixhQUFhVTtRQUN0QjtRQUVBLElBQUlBO1FBRUosTUFBTVQsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXpDaEMsUUFBUWlDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLGdCQUFnQixDQUFDO1FBRTdEUyxzQkFBc0I7UUFFdEIsSUFBSUEscUJBQXFCO1lBQ3ZCeEMsUUFBUWtDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFSCxXQUFXLGNBQWMsQ0FBQztRQUMvRDtRQUVBLE9BQU9ELGFBQWFVO0lBQ3RCO0lBRUFHLG9CQUFvQjNDLE9BQU8sRUFBRThCLFlBQVksRUFBRTtRQUN6QyxNQUFNa0IsU0FBU2hELFFBQVFpRCxRQUFRO1FBRS9CLElBQUlELFFBQVE7WUFDVixNQUFNTix1QkFBdUI7WUFFN0IsT0FBT1osYUFBYVk7UUFDdEI7UUFFQSxJQUFJQSx1QkFBdUI7UUFFM0IsTUFBTVgsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXpDaEMsUUFBUWlDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLGlCQUFpQixDQUFDO1FBRTlELElBQUltQjtRQUVKQSxVQUFVbEQsUUFBUW1ELFVBQVU7UUFFNUJELFVBQVUxRCxNQUFNMEQsVUFBVSxHQUFHO1FBRTdCN0QsT0FBTzZELFNBQVMsQ0FBQ0U7WUFDZixNQUFNQyxRQUFRRCxPQUFPRSxRQUFRLElBQ3ZCQyxlQUFlLElBQUksQ0FBQ0MsVUFBVSxDQUFDSCxPQUFPckQ7WUFFNUMsSUFBSXVELGNBQWM7Z0JBQ2hCLE9BQU87WUFDVDtRQUNGO1FBRUEsTUFBTUUsZ0JBQWdCbEUsS0FBSzJELFNBQVMsQ0FBQ0U7WUFDbkMsTUFBTU0sZ0JBQWdCLElBQUksQ0FBQ0MsV0FBVyxDQUFDUCxRQUFRcEQ7WUFFL0MsSUFBSTBELGVBQWU7Z0JBQ2pCLE9BQU87WUFDVDtRQUNGO1FBRUEsSUFBSUQsZUFBZTtZQUNqQmYsdUJBQXVCO1FBQ3pCO1FBRUEsSUFBSUEsc0JBQXNCO1lBQ3hCMUMsUUFBUWtDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFSCxXQUFXLGVBQWUsQ0FBQztRQUNoRTtRQUVBLE9BQU9XO0lBQ1Q7SUFFQWMsV0FBV0gsS0FBSyxFQUFFckQsT0FBTyxFQUFFO1FBQ3pCLElBQUl1RDtRQUVKLE1BQU14QixhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUMzQjRCLGNBQWNQLE1BQU1yQixTQUFTO1FBRW5DaEMsUUFBUWlDLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRTJCLFlBQVksa0JBQWtCLEVBQUU3QixXQUFXLFNBQVMsQ0FBQztRQUVwRjhCLElBQUFBLGtCQUFTLEVBQUMsQ0FBQzdEO1lBQ1R1RCxlQUFlLElBQUksQ0FBQ25ELFNBQVMsQ0FBQ29ELFVBQVUsQ0FBQ0gsT0FBT3JEO1FBQ2xELEdBQUdBO1FBRUgsSUFBSXVELGNBQWM7WUFDaEJ2RCxRQUFRa0MsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUwQixZQUFZLGtCQUFrQixFQUFFN0IsV0FBVyxtQkFBbUIsQ0FBQztRQUNsRztRQUVBLE9BQU93QjtJQUNUO0lBRUFJLFlBQVlQLE1BQU0sRUFBRXBELE9BQU8sRUFBRTtRQUMzQixJQUFJMEQsZ0JBQWdCO1FBRXBCLE1BQU0zQixhQUFhLElBQUksQ0FBQ0MsU0FBUyxJQUMzQjhCLGVBQWVWLE9BQU9wQixTQUFTO1FBRXJDaEMsUUFBUWlDLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRTZCLGFBQWEsbUJBQW1CLEVBQUUvQixXQUFXLFNBQVMsQ0FBQztRQUV0RixNQUFNZ0MsaUJBQWlCL0QsU0FBVSxHQUFHO1FBRXBDNkQsSUFBQUEsa0JBQVMsRUFBQyxDQUFDN0Q7WUFDVCxNQUFNcUQsUUFBUUQsT0FBT0UsUUFBUSxJQUN2QkMsZUFBZSxJQUFJLENBQUNuRCxTQUFTLENBQUNvRCxVQUFVLENBQUNILE9BQU9yRDtZQUV0RCxJQUFJdUQsY0FBYztnQkFDaEIsTUFBTVMsa0JBQWtCaEUsU0FDbEJpRSxvQkFBb0JiLE9BQU9jLGFBQWEsSUFDeEM3QyxvQkFBb0I4QywrQkFBK0IsSUFBSSxDQUFDOUQsU0FBUyxFQUFFTDtnQkFFekUsSUFBSWlFLG1CQUFtQjtvQkFDckIsSUFBSTVDLHNCQUFzQixNQUFNO3dCQUM5QnFDLGdCQUFnQnJDLGtCQUFrQnNDLFdBQVcsQ0FBQ1AsUUFBUVcsZ0JBQWdCQztvQkFDeEU7Z0JBQ0YsT0FBTztvQkFDTCxJQUFJM0Msc0JBQXNCLE1BQU07d0JBQzlCLE1BQU0rQyxZQUFZaEIsT0FBT2lCLFlBQVksSUFDL0JDLG1CQUFtQixJQUFJLENBQUNDLGNBQWMsQ0FBQ0gsV0FBV0wsZ0JBQWdCQzt3QkFFeEUsSUFBSU0sa0JBQWtCOzRCQUNwQlosZ0JBQWdCO3dCQUNsQjtvQkFDRjtnQkFDRjtZQUNGO1FBQ0YsR0FBRzFEO1FBRUgsSUFBSTBELGVBQWU7WUFDakIxRCxRQUFRa0MsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUU0QixhQUFhLG1CQUFtQixFQUFFL0IsV0FBVyxPQUFPLENBQUM7UUFDeEY7UUFFQSxPQUFPMkI7SUFDVDtJQUVBYSxlQUFlSCxTQUFTLEVBQUVMLGNBQWMsRUFBRUMsZUFBZSxFQUFFO1FBQ3pELElBQUlNO1FBRUosTUFBTXRFLFVBQVVnRSxpQkFDVmpDLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQzNCd0Msa0JBQWtCSixVQUFVcEMsU0FBUztRQUUzQ2hDLFFBQVFpQyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUV1QyxnQkFBZ0IsbUNBQW1DLEVBQUV6QyxXQUFXLFVBQVUsRUFBRUEsV0FBVyxjQUFjLENBQUM7UUFFckksTUFBTTFCLFlBQVkrRCxVQUFVN0QsWUFBWSxJQUNsQ2tFLG1CQUFtQkwsVUFBVU0sVUFBVSxJQUFJLEdBQUc7UUFFcERWLGtCQUFrQlMsa0JBQWtCLEdBQUc7UUFFdkNaLElBQUFBLGtCQUFTLEVBQUMsQ0FBQ0c7WUFDVCxNQUFNVyxtQkFBbUIsSUFBSSxDQUFDdEUsU0FBUyxDQUFDdUUsY0FBYyxDQUFDdkUsV0FBVzBELGdCQUFnQkM7WUFFbEYsSUFBSVcsa0JBQWtCO2dCQUNwQkwsbUJBQW1CO2dCQUVuQk4sZ0JBQWdCYSxNQUFNLENBQUM3RTtZQUN6QjtRQUNGLEdBQUdnRTtRQUVILElBQUlNLGtCQUFrQjtZQUNwQnRFLFFBQVFrQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRXNDLGdCQUFnQixrQ0FBa0MsRUFBRXpDLFdBQVcsVUFBVSxFQUFFQSxXQUFXLFlBQVksQ0FBQztRQUN0STtRQUVBLE9BQU91QztJQUNUO0lBRUEsT0FBT1EsT0FBTyxPQUFPO0lBRXJCQyxTQUFTO1FBQ1AsTUFBTTlFLFNBQVMsSUFBSSxDQUFDK0IsU0FBUztRQUU3QixJQUFJN0I7UUFFSkEsYUFBYSxJQUFJLENBQUM2RSxhQUFhO1FBRS9CLE1BQU1DLGlCQUFpQnRGLDJCQUEyQlE7UUFFbERBLGFBQWE4RSxnQkFBaUIsR0FBRztRQUVqQyxNQUFNQyxPQUFPO1lBQ1hqRjtZQUNBRTtRQUNGO1FBRUEsT0FBTytFO0lBQ1Q7SUFFQSxPQUFPQyxTQUFTRCxJQUFJLEVBQUVsRixPQUFPLEVBQUU7UUFDN0IsT0FBT29GLElBQUFBLG9CQUFXLEVBQUMsQ0FBQ3BGO1lBQ2xCLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdpRixNQUNieEUsV0FBVzJFLElBQUFBLDRCQUFlLEVBQUNwRixRQUFRRCxVQUNuQ0UsT0FBT1EsVUFDUFAsYUFBYVQsbUJBQW1Cd0YsT0FDaEM5RSxZQUFZa0Ysc0JBQXNCNUUsVUFBVVYsVUFDNUNLLFlBQVlrRixzQkFBc0I3RSxVQUFVVixVQUM1Q2MsT0FBTyxJQUFJaEIsS0FBS0UsU0FBU0MsUUFBUUMsTUFBTUMsWUFBWUMsV0FBV0M7WUFFcEUsT0FBT1M7UUFDVCxHQUFHZDtJQUNMO0FBQ0Y7QUFFQSxTQUFTc0Ysc0JBQXNCNUUsUUFBUSxFQUFFVixPQUFPO0lBQzlDLE1BQU13RixtQkFBbUI5RSxTQUFTK0UsbUJBQW1CLENBQUN6RixVQUNoREksWUFBWUosUUFBUTBGLCtCQUErQixDQUFDRjtJQUUxRCxPQUFPcEY7QUFDVDtBQUVBLFNBQVNtRixzQkFBc0I3RSxRQUFRLEVBQUVWLE9BQU87SUFDOUMsTUFBTXNCLGdCQUFnQlosU0FBU0MsZ0JBQWdCLElBQ3pDTixZQUFZTCxRQUFRMkYsNEJBQTRCLENBQUNyRTtJQUV2RCxPQUFPakI7QUFDVDtBQUVBLFNBQVM4RCwrQkFBK0I5RCxTQUFTLEVBQUVMLE9BQU87SUFDeEQsSUFBSXFCO0lBRUosTUFBTSxFQUFFdUUsaUJBQWlCLEVBQUUsR0FBR0MsaUJBQVE7SUFFdEN4RSxvQkFBb0J1RSxrQkFBa0JFLGFBQWEsQ0FBQ3pGLFdBQVdMO0lBRS9ELElBQUlxQixzQkFBc0IsTUFBTTtRQUM5QkEsb0JBQW9CQSxrQkFBa0JRLFFBQVEsQ0FBQzdCLFVBQVcsR0FBRztJQUMvRDtJQUVBLE9BQU9xQjtBQUNUIn0=
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2dvYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVHb2FsIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBjbG9uZSB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGVhY2gsIGZpbHRlciB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgR29hbCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRHb2FsTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZ29hbE5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gZ29hbE5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZ2V0U3RhdGVtZW50Tm9kZSgpOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkgeyByZXR1cm4gdGhpcy5yZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7IH1cblxuICBpc0VxdWFsVG8oZ29hbCkge1xuICAgIGNvbnN0IGdvYWxOb2RlID0gZ29hbC5nZXROb2RlKCksXG4gICAgICAgICAgZ29hbE5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEdvYWxOb2RlKGdvYWxOb2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gZ29hbE5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoR29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gZ29hbE5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZ29hbE5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGdvYWxOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7XG4gICAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG4gIH1cblxuICBmaW5kVmFsaWRHb2FsKGNvbnRleHQpIHtcbiAgICBjb25zdCBnb2FsTm9kZSA9IHRoaXMuZ2V0R29hbE5vZGUoKSxcbiAgICAgICAgICBnb2FsID0gY29udGV4dC5maW5kR29hbEJ5R29hbE5vZGUoZ29hbE5vZGUpLFxuICAgICAgICAgIHZhbGlkR29hbCA9IGdvYWw7ICAvLy9cblxuICAgIHJldHVybiB2YWxpZEdvYWw7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkR29hbCA9IHRoaXMuZmluZFZhbGlkR29hbChjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEdvYWwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGdvYWwgPSB2YWxpZEdvYWw7IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwgaXMgYWxyZWFkeSB2YWxpZC5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihnb2FsKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZSA9IHRoaXMudmFsaWRhdGVSZWZlcmVuY2UuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVSZWZlcmVuY2UsXG4gICAgICB2YWxpZGF0ZVN0YXRlbWVudFxuICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgIGlmICghdmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGdvYWwgPSBudWxsO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZ29hbCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQsXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBnb2FsID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgZ29hbCA9IHRoaXM7IC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGRHb2FsKGdvYWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGdvYWwpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVJlZmVyZW5jZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyByZWZlcmVuY2UuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0LCAocmVmZXJlbmNlKSA9PiB7XG4gICAgICBsZXQgcmVmZXJlbmNlVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3MgcmVmZXJlbmNlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHJlZmVyZW5jZVZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtnb2FsU3RyaW5nfScgc3RhdGVkIGdvYWwuLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlXG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtnb2FsU3RyaW5nfScgc3RhdGVkIGdvYWwuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGRlcml2ZWQgZ29hbC4uLmApO1xuXG4gICAgbGV0IHNjaGVtYXM7XG5cbiAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCk7XG5cbiAgICBzY2hlbWFzID0gY2xvbmUoc2NoZW1hcyk7IC8vL1xuXG4gICAgcmV0dXJuIGZpbHRlcihzY2hlbWFzLCAoc2NoZW1hLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgcmV0dXJuIGVhY2goc2NoZW1hcywgKHNjaGVtYSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5U2NoZW1hKHNjaGVtYSwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICAgIH0sIChzY2hlbWFzVW5pZml5KSA9PiB7XG4gICAgICAgIGlmIChzY2hlbWFzVW5pZml5KSB7XG4gICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtnb2FsU3RyaW5nfScgZGVyaXZlZCBnb2FsLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsLi4uYCk7XG5cbiAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZS51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCAobGFiZWxVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmIChsYWJlbFVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3MgcmVmZXJlbmNlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbFVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLFxuICAgICAgICAgIHNjaGVtYVN0cmluZyA9IHNjaGVtYS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2UudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCwgKGxhYmVsVW5pZmllcykgPT4ge1xuICAgICAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgY29uc3Qgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIHNjaGVtYUNvbmRpdGlvbmFsID0gc2NoZW1hLmlzQ29uZGl0aW9uYWwoKSxcbiAgICAgICAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCh0aGlzLnN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoc2NoZW1hQ29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBjb25zdCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uLnVuaWZ5U2NoZW1hKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHNjaGVtYVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuYCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGVkdWN0aW9uID0gc2NoZW1hLmdldERlZHVjdGlvbigpO1xuXG4gICAgICAgICAgdGhpcy51bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChkZWR1Y3Rpb25VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgICBzY2hlbWFVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbidzIHN0YXRlbWVudCAgd2l0aCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyAnJHtnb2FsU3RyaW5nfScgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBkZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgZGVkdWN0aW9uQ29udGV4dCA9IGRlZHVjdGlvbi5nZXRDb250ZXh0KCk7IC8vL1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gZGVkdWN0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgbGV0IGRlZHVjdGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgIGRlZHVjdGlvblVuaWZpZXMgPSB0cnVlO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWR1Y3Rpb25VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50IHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3MgJyR7Z29hbFN0cmluZ30nIHN0YXRlbWVudC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVkdWN0aW9uVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkdvYWxcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBnb2FsTm9kZSA9IGluc3RhbnRpYXRlR29hbChzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGdvYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBnb2FsID0gbmV3IEdvYWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgICAgIHJldHVybiBnb2FsO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG59KTtcblxuZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBnb2FsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBnb2FsTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5mdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbjtcblxuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cztcblxuICBzdWJwcm9vZkFzc2VydGlvbiA9IFN1YnByb29mQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG4iXSwibmFtZXMiOlsiY2xvbmUiLCJhcnJheVV0aWxpdGllcyIsImVhY2giLCJmaWx0ZXIiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJHb2FsIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInJlZmVyZW5jZSIsInN0YXRlbWVudCIsImdldFJlZmVyZW5jZSIsImdldFN0YXRlbWVudCIsImdldEdvYWxOb2RlIiwiZ2V0Tm9kZSIsImdvYWxOb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldE1ldGF2YXJpYWJsZSIsImlzRXF1YWxUbyIsImdvYWwiLCJnb2FsTm9kZU1hdGNoZXMiLCJtYXRjaEdvYWxOb2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImZpbmRWYWxpZEdvYWwiLCJmaW5kR29hbEJ5R29hbE5vZGUiLCJ2YWxpZEdvYWwiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsImdvYWxTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJiaW5kIiwidmFsaWRhdGVSZWZlcmVuY2UiLCJhbGwiLCJ2YWxpZGF0ZXMiLCJ2YWxpZGF0ZXNXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwiYWRkR29hbCIsInJlZmVyZW5jZVZhbGlkYXRlcyIsInN0YXRlbWVudFZhbGlkYXRlcyIsInN0YXRlZCIsImlzU3RhdGVkIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJzY2hlbWEiLCJsYWJlbCIsImdldExhYmVsIiwidW5pZnlMYWJlbCIsInVuaWZ5U2NoZW1hIiwic2NoZW1hc1VuaWZpeSIsImxhYmVsU3RyaW5nIiwicmVjb25jaWxlIiwibGFiZWxVbmlmaWVzIiwic2NoZW1hU3RyaW5nIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzY2hlbWFDb25kaXRpb25hbCIsImlzQ29uZGl0aW9uYWwiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJzY2hlbWFVbmlmaWVzIiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwidW5pZnlEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25VbmlmaWVzIiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJjb21taXQiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUdvYWwiLCJyZWZlcmVuY2VGcm9tR29hbE5vZGUiLCJzdGF0ZW1lbnRGcm9tR29hbE5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJlbGVtZW50cyIsImZyb21TdGF0ZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWdCQTs7O2VBQUE7OzsyQkFkK0I7Z0NBQ3FDO2tFQUUvQzs4QkFHTzs2QkFDSTt5QkFDTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXZDLE1BQU0sRUFBRUEsS0FBSyxFQUFFLEdBQUdDLHlCQUFjLEVBQzFCLEVBQUVDLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdDLHFDQUFxQixFQUN4QyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsYUFBYUMsdUJBQU87SUFDOUMsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUVDLFNBQVMsQ0FBRTtRQUNuRSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRixTQUFTO0lBQ3ZCO0lBRUFHLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQ0YsU0FBUztJQUN2QjtJQUVBRyxjQUFjO1FBQ1osTUFBTU4sT0FBTyxJQUFJLENBQUNPLE9BQU8sSUFDbkJDLFdBQVdSLE1BQU8sR0FBRztRQUUzQixPQUFPUTtJQUNUO0lBRUFDLG1CQUFtQjtRQUFFLE9BQU8sSUFBSSxDQUFDTixTQUFTLENBQUNNLGdCQUFnQjtJQUFJO0lBRS9EQyxrQkFBa0I7UUFBRSxPQUFPLElBQUksQ0FBQ1IsU0FBUyxDQUFDUSxlQUFlO0lBQUk7SUFFN0RDLFVBQVVDLElBQUksRUFBRTtRQUNkLE1BQU1KLFdBQVdJLEtBQUtMLE9BQU8sSUFDdkJNLGtCQUFrQixJQUFJLENBQUNDLGFBQWEsQ0FBQ04sV0FDckNPLFVBQVVGLGlCQUFrQixHQUFHO1FBRXJDLE9BQU9FO0lBQ1Q7SUFFQUQsY0FBY04sUUFBUSxFQUFFO1FBQ3RCLE1BQU1SLE9BQU9RLFVBQ1BRLGNBQWMsSUFBSSxDQUFDQyxTQUFTLENBQUNqQixPQUM3QmEsa0JBQWtCRyxhQUFhLEdBQUc7UUFFeEMsT0FBT0g7SUFDVDtJQUVBSyxzQkFBc0JwQixPQUFPLEVBQUU7UUFDN0IsSUFBSXFCLG9CQUFvQjtRQUV4QixNQUFNQyxnQkFBZ0IsSUFBSSxDQUFDWCxnQkFBZ0IsSUFDckNZLHdCQUF3QkQsY0FBY0Usd0JBQXdCO1FBRXBFLElBQUlELDBCQUEwQixNQUFNO1lBQ2xDRixvQkFBb0JyQixRQUFReUIsNEJBQTRCLENBQUNGO1FBQzNEO1FBRUEsT0FBT0Y7SUFDVDtJQUVBSyxjQUFjMUIsT0FBTyxFQUFFO1FBQ3JCLE1BQU1VLFdBQVcsSUFBSSxDQUFDRixXQUFXLElBQzNCTSxPQUFPZCxRQUFRMkIsa0JBQWtCLENBQUNqQixXQUNsQ2tCLFlBQVlkLE1BQU8sR0FBRztRQUU1QixPQUFPYztJQUNUO0lBRUFDLFNBQVM3QixPQUFPLEVBQUU4QixZQUFZLEVBQUU7UUFDOUIsTUFBTUMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXpDaEMsUUFBUWlDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLFNBQVMsQ0FBQztRQUV0RCxNQUFNSCxZQUFZLElBQUksQ0FBQ0YsYUFBYSxDQUFDMUI7UUFFckMsSUFBSTRCLGNBQWMsTUFBTTtZQUN0QixNQUFNZCxPQUFPYyxXQUFXLEdBQUc7WUFFM0I1QixRQUFRa0MsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFSCxXQUFXLHdCQUF3QixDQUFDO1lBRTdELE9BQU9ELGFBQWFoQjtRQUN0QjtRQUVBLE1BQU1xQixvQkFBb0IsSUFBSSxDQUFDQSxpQkFBaUIsQ0FBQ0MsSUFBSSxDQUFDLElBQUksR0FDcERDLG9CQUFvQixJQUFJLENBQUNBLGlCQUFpQixDQUFDRCxJQUFJLENBQUMsSUFBSTtRQUUxRCxPQUFPRSxJQUFBQSxpQkFBRyxFQUFDO1lBQ1REO1lBQ0FGO1NBQ0QsRUFBRW5DLFNBQVMsQ0FBQ3VDO1lBQ1gsSUFBSSxDQUFDQSxXQUFXO2dCQUNkLE1BQU16QixPQUFPO2dCQUViLE9BQU9nQixhQUFhaEI7WUFDdEI7WUFFQSxNQUFNMEIsc0JBQXNCLElBQUksQ0FBQ0Msa0JBQWtCLENBQUNMLElBQUksQ0FBQyxJQUFJLEdBQ3ZETSx1QkFBdUIsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ1AsSUFBSSxDQUFDLElBQUk7WUFFL0QsT0FBT1EsSUFBQUEsb0JBQU0sRUFBQztnQkFDWko7Z0JBQ0FFO2FBQ0QsRUFBRTFDLFNBQVMsQ0FBQ3VDO2dCQUNYLElBQUl6QixPQUFPO2dCQUVYLElBQUl5QixXQUFXO29CQUNiekIsT0FBTyxJQUFJLEVBQUUsR0FBRztvQkFFaEJkLFFBQVE2QyxPQUFPLENBQUMvQjtnQkFDbEI7Z0JBRUEsSUFBSXlCLFdBQVc7b0JBQ2J2QyxRQUFRa0MsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVILFdBQVcsT0FBTyxDQUFDO2dCQUN4RDtnQkFFQSxPQUFPRCxhQUFhaEI7WUFDdEI7UUFDRjtJQUNGO0lBRUF1QixrQkFBa0JyQyxPQUFPLEVBQUU4QixZQUFZLEVBQUU7UUFDdkMsTUFBTUMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXpDaEMsUUFBUWlDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRixXQUFXLHFCQUFxQixDQUFDO1FBRWxFLE9BQU8sSUFBSSxDQUFDM0IsU0FBUyxDQUFDeUIsUUFBUSxDQUFDN0IsU0FBUyxDQUFDSTtZQUN2QyxJQUFJMEMscUJBQXFCO1lBRXpCLElBQUkxQyxjQUFjLE1BQU07Z0JBQ3RCLElBQUksQ0FBQ0EsU0FBUyxHQUFHQTtnQkFFakIwQyxxQkFBcUI7WUFDdkI7WUFFQSxJQUFJQSxvQkFBb0I7Z0JBQ3RCOUMsUUFBUWtDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFSCxXQUFXLG1CQUFtQixDQUFDO1lBQ3BFO1lBRUEsT0FBT0QsYUFBYWdCO1FBQ3RCO0lBQ0Y7SUFFQVgsa0JBQWtCbkMsT0FBTyxFQUFFOEIsWUFBWSxFQUFFO1FBQ3ZDLE1BQU1DLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV6Q2hDLFFBQVFpQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsV0FBVyxxQkFBcUIsQ0FBQztRQUVsRSxPQUFPLElBQUksQ0FBQzFCLFNBQVMsQ0FBQ3dCLFFBQVEsQ0FBQzdCLFNBQVMsQ0FBQ0s7WUFDdkMsSUFBSTBDLHFCQUFxQjtZQUV6QixJQUFJMUMsY0FBYyxNQUFNO2dCQUN0QjBDLHFCQUFxQjtZQUN2QjtZQUVBLElBQUlBLG9CQUFvQjtnQkFDdEIvQyxRQUFRa0MsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVILFdBQVcsbUJBQW1CLENBQUM7WUFDcEU7WUFFQSxPQUFPRCxhQUFhaUI7UUFDdEI7SUFDRjtJQUVBTixtQkFBbUJ6QyxPQUFPLEVBQUU4QixZQUFZLEVBQUU7UUFDeEMsTUFBTWtCLFNBQVNoRCxRQUFRaUQsUUFBUTtRQUUvQixJQUFJLENBQUNELFFBQVE7WUFDWCxNQUFNUixzQkFBc0I7WUFFNUIsT0FBT1YsYUFBYVU7UUFDdEI7UUFFQSxJQUFJQTtRQUVKLE1BQU1ULGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV6Q2hDLFFBQVFpQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsV0FBVyxnQkFBZ0IsQ0FBQztRQUU3RFMsc0JBQXNCO1FBRXRCLElBQUlBLHFCQUFxQjtZQUN2QnhDLFFBQVFrQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRUgsV0FBVyxjQUFjLENBQUM7UUFDL0Q7UUFFQSxPQUFPRCxhQUFhVTtJQUN0QjtJQUVBRyxvQkFBb0IzQyxPQUFPLEVBQUU4QixZQUFZLEVBQUU7UUFDekMsTUFBTWtCLFNBQVNoRCxRQUFRaUQsUUFBUTtRQUUvQixJQUFJRCxRQUFRO1lBQ1YsTUFBTU4sdUJBQXVCO1lBRTdCLE9BQU9aLGFBQWFZO1FBQ3RCO1FBRUEsSUFBSUEsdUJBQXVCO1FBRTNCLE1BQU1YLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV6Q2hDLFFBQVFpQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsV0FBVyxpQkFBaUIsQ0FBQztRQUU5RCxJQUFJbUI7UUFFSkEsVUFBVWxELFFBQVFtRCxVQUFVO1FBRTVCRCxVQUFVN0QsTUFBTTZELFVBQVUsR0FBRztRQUU3QixPQUFPMUQsT0FBTzBELFNBQVMsQ0FBQ0UsUUFBUXRCO1lBQzlCLE1BQU11QixRQUFRRCxPQUFPRSxRQUFRO1lBRTdCLE9BQU8sSUFBSSxDQUFDQyxVQUFVLENBQUNGLE9BQU9yRCxTQUFTOEI7UUFDekMsR0FBRztZQUNELE9BQU92QyxLQUFLMkQsU0FBUyxDQUFDRSxRQUFRdEI7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDMEIsV0FBVyxDQUFDSixRQUFRcEQsU0FBUzhCO1lBQzNDLEdBQUcsQ0FBQzJCO2dCQUNGLElBQUlBLGVBQWU7b0JBQ2pCZix1QkFBdUI7Z0JBQ3pCO2dCQUVBLElBQUlBLHNCQUFzQjtvQkFDeEIxQyxRQUFRa0MsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVILFdBQVcsZUFBZSxDQUFDO2dCQUNoRTtnQkFFQSxPQUFPRCxhQUFhWTtZQUN0QjtRQUNGO0lBQ0Y7SUFFQWEsV0FBV0YsS0FBSyxFQUFFckQsT0FBTyxFQUFFOEIsWUFBWSxFQUFFO1FBQ3ZDLE1BQU1DLGFBQWEsSUFBSSxDQUFDQyxTQUFTLElBQzNCMEIsY0FBY0wsTUFBTXJCLFNBQVM7UUFFbkNoQyxRQUFRaUMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFeUIsWUFBWSxrQkFBa0IsRUFBRTNCLFdBQVcsU0FBUyxDQUFDO1FBRXBGNEIsSUFBQUEsa0JBQVMsRUFBQyxDQUFDM0Q7WUFDVCxPQUFPLElBQUksQ0FBQ0ksU0FBUyxDQUFDbUQsVUFBVSxDQUFDRixPQUFPckQsU0FBUyxDQUFDNEQ7Z0JBQ2hELElBQUlBLGNBQWM7b0JBQ2hCNUQsUUFBUWtDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFd0IsWUFBWSxrQkFBa0IsRUFBRTNCLFdBQVcsbUJBQW1CLENBQUM7Z0JBQ2xHO2dCQUVBLE9BQU9ELGFBQWE4QjtZQUN0QjtRQUNGLEdBQUc1RDtJQUNMO0lBRUF3RCxZQUFZSixNQUFNLEVBQUVwRCxPQUFPLEVBQUU4QixZQUFZLEVBQUU7UUFDekMsTUFBTUMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFDM0I2QixlQUFlVCxPQUFPcEIsU0FBUztRQUVyQ2hDLFFBQVFpQyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUU0QixhQUFhLG1CQUFtQixFQUFFOUIsV0FBVyxTQUFTLENBQUM7UUFFdEYsTUFBTStCLGlCQUFpQjlELFNBQVUsR0FBRztRQUVwQzJELElBQUFBLGtCQUFTLEVBQUMsQ0FBQzNEO1lBQ1QsTUFBTXFELFFBQVFELE9BQU9FLFFBQVE7WUFFN0IsT0FBTyxJQUFJLENBQUNsRCxTQUFTLENBQUNtRCxVQUFVLENBQUNGLE9BQU9yRCxTQUFTLENBQUM0RDtnQkFDaEQsSUFBSUEsY0FBYztvQkFDaEIsTUFBTUcsa0JBQWtCL0QsU0FDbEJnRSxvQkFBb0JaLE9BQU9hLGFBQWEsSUFDeEM1QyxvQkFBb0I2QywrQkFBK0IsSUFBSSxDQUFDN0QsU0FBUyxFQUFFTDtvQkFFekUsSUFBSWdFLG1CQUFtQjt3QkFDckIsSUFBSTNDLHNCQUFzQixNQUFNOzRCQUM5QixNQUFNOEMsZ0JBQWdCOzRCQUV0QixPQUFPckMsYUFBYXFDO3dCQUN0Qjt3QkFFQSxPQUFPOUMsa0JBQWtCbUMsV0FBVyxDQUFDSixRQUFRVSxnQkFBZ0JDLGlCQUFpQixDQUFDSTs0QkFDN0UsSUFBSUEsZUFBZTtnQ0FDakJuRSxRQUFRa0MsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUyQixhQUFhLG1CQUFtQixFQUFFOUIsV0FBVyxPQUFPLENBQUM7NEJBQ3hGOzRCQUVBLE9BQU9ELGFBQWFxQzt3QkFDdEI7b0JBQ0Y7b0JBRUEsSUFBSTlDLHNCQUFzQixNQUFNO3dCQUM5QixNQUFNOEMsZ0JBQWdCO3dCQUV0QixPQUFPckMsYUFBYXFDO29CQUN0QjtvQkFFQSxNQUFNQyxZQUFZaEIsT0FBT2lCLFlBQVk7b0JBRXJDLElBQUksQ0FBQ0MsY0FBYyxDQUFDRixXQUFXTixnQkFBZ0JDLGlCQUFpQixDQUFDUTt3QkFDL0QsSUFBSUosZ0JBQWdCO3dCQUVwQixJQUFJSSxrQkFBa0I7NEJBQ3BCSixnQkFBZ0I7d0JBQ2xCO3dCQUVBLElBQUlBLGVBQWU7NEJBQ2pCbkUsUUFBUWtDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFMkIsYUFBYSxtQkFBbUIsRUFBRTlCLFdBQVcsT0FBTyxDQUFDO3dCQUN4Rjt3QkFFQSxPQUFPRCxhQUFhcUM7b0JBQ3RCO2dCQUNGO1lBQ0Y7UUFDRixHQUFHbkU7SUFDTDtJQUVBc0UsZUFBZUYsU0FBUyxFQUFFTixjQUFjLEVBQUVDLGVBQWUsRUFBRWpDLFlBQVksRUFBRTtRQUN2RSxNQUFNOUIsVUFBVStELGlCQUNWaEMsYUFBYSxJQUFJLENBQUNDLFNBQVMsSUFDM0J3QyxrQkFBa0JKLFVBQVVwQyxTQUFTO1FBRTNDaEMsUUFBUWlDLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRXVDLGdCQUFnQixtQ0FBbUMsRUFBRXpDLFdBQVcsVUFBVSxFQUFFQSxXQUFXLGNBQWMsQ0FBQztRQUVySSxNQUFNMUIsWUFBWStELFVBQVU3RCxZQUFZLElBQ2xDa0UsbUJBQW1CTCxVQUFVTSxVQUFVLElBQUksR0FBRztRQUVwRFgsa0JBQWtCVSxrQkFBa0IsR0FBRztRQUV2Q2QsSUFBQUEsa0JBQVMsRUFBQyxDQUFDSTtZQUNULE9BQU8sSUFBSSxDQUFDMUQsU0FBUyxDQUFDc0UsY0FBYyxDQUFDdEUsV0FBV3lELGdCQUFnQkMsaUJBQWlCLENBQUNhO2dCQUNoRixJQUFJTCxtQkFBbUI7Z0JBRXZCLElBQUlLLGtCQUFrQjtvQkFDcEJMLG1CQUFtQjtvQkFFbkJSLGdCQUFnQmMsTUFBTSxDQUFDN0U7Z0JBQ3pCO2dCQUVBLElBQUl1RSxrQkFBa0I7b0JBQ3BCdkUsUUFBUWtDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFc0MsZ0JBQWdCLGtDQUFrQyxFQUFFekMsV0FBVyxVQUFVLEVBQUVBLFdBQVcsWUFBWSxDQUFDO2dCQUN0STtnQkFFQSxPQUFPRCxhQUFheUM7WUFDdEI7UUFDRixHQUFHUjtJQUNMO0lBRUFlLFNBQVM7UUFDUCxNQUFNN0UsU0FBUyxJQUFJLENBQUMrQixTQUFTO1FBRTdCLElBQUk3QjtRQUVKQSxhQUFhLElBQUksQ0FBQzRFLGFBQWE7UUFFL0IsTUFBTUMsaUJBQWlCckYsMkJBQTJCUTtRQUVsREEsYUFBYTZFLGdCQUFpQixHQUFHO1FBRWpDLE1BQU1DLE9BQU87WUFDWGhGO1lBQ0FFO1FBQ0Y7UUFFQSxPQUFPOEU7SUFDVDtJQUVBLE9BQU9DLE9BQU8sT0FBTztJQUVyQixPQUFPQyxTQUFTRixJQUFJLEVBQUVqRixPQUFPLEVBQUU7UUFDN0IsT0FBT29GLElBQUFBLG9CQUFXLEVBQUMsQ0FBQ3BGO1lBQ2xCLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdnRixNQUNidkUsV0FBVzJFLElBQUFBLDRCQUFlLEVBQUNwRixRQUFRRCxVQUNuQ0UsT0FBT1EsVUFDUFAsYUFBYVQsbUJBQW1CdUYsT0FDaEM3RSxZQUFZa0Ysc0JBQXNCNUUsVUFBVVYsVUFDNUNLLFlBQVlrRixzQkFBc0I3RSxVQUFVVixVQUM1Q2MsT0FBTyxJQUFJaEIsS0FBS0UsU0FBU0MsUUFBUUMsTUFBTUMsWUFBWUMsV0FBV0M7WUFFcEUsT0FBT1M7UUFDVCxHQUFHZDtJQUNMO0FBQ0Y7QUFFQSxTQUFTc0Ysc0JBQXNCNUUsUUFBUSxFQUFFVixPQUFPO0lBQzlDLE1BQU13RixtQkFBbUI5RSxTQUFTK0UsbUJBQW1CLENBQUN6RixVQUNoREksWUFBWUosUUFBUTBGLCtCQUErQixDQUFDRjtJQUUxRCxPQUFPcEY7QUFDVDtBQUVBLFNBQVNtRixzQkFBc0I3RSxRQUFRLEVBQUVWLE9BQU87SUFDOUMsTUFBTXNCLGdCQUFnQlosU0FBU0MsZ0JBQWdCLElBQ3pDTixZQUFZTCxRQUFRMkYsNEJBQTRCLENBQUNyRTtJQUV2RCxPQUFPakI7QUFDVDtBQUVBLFNBQVM2RCwrQkFBK0I3RCxTQUFTLEVBQUVMLE9BQU87SUFDeEQsSUFBSXFCO0lBRUosTUFBTSxFQUFFdUUsaUJBQWlCLEVBQUUsR0FBR0MsaUJBQVE7SUFFdEN4RSxvQkFBb0J1RSxrQkFBa0JFLGFBQWEsQ0FBQ3pGLFdBQVdMO0lBRS9ELElBQUlxQixzQkFBc0IsTUFBTTtRQUM5QkEsb0JBQW9CQSxrQkFBa0JRLFFBQVEsQ0FBQzdCLFVBQVcsR0FBRztJQUMvRDtJQUVBLE9BQU9xQjtBQUNUIn0=
|
|
@@ -154,7 +154,6 @@ const _default = (0, _elements.define)(class Hypothesis extends _occamlanguages.
|
|
|
154
154
|
}
|
|
155
155
|
return procedureCallDischarges;
|
|
156
156
|
}
|
|
157
|
-
static name = "Hypothesis";
|
|
158
157
|
toJSON() {
|
|
159
158
|
const context = this.getContext();
|
|
160
159
|
return (0, _context.serialise)((context)=>{
|
|
@@ -171,6 +170,7 @@ const _default = (0, _elements.define)(class Hypothesis extends _occamlanguages.
|
|
|
171
170
|
return json;
|
|
172
171
|
}, context);
|
|
173
172
|
}
|
|
173
|
+
static name = "Hypothesis";
|
|
174
174
|
static fromJSON(json, context) {
|
|
175
175
|
let hypothesis;
|
|
176
176
|
(0, _context.instantiate)((context)=>{
|
|
@@ -183,4 +183,4 @@ const _default = (0, _elements.define)(class Hypothesis extends _occamlanguages.
|
|
|
183
183
|
}
|
|
184
184
|
});
|
|
185
185
|
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2h5cG90aGVzaXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVIeXBvdGhlc2lzIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGRlY2xhcmUsIGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUsIHByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSHlwb3RoZXNpcyBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcbiAgICB0aGlzLnByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZUNhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldEh5cG90aGVzaXNOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBoeXBvdGhlc2lzTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2lzTm9kZTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBhd2FpdCB0aGlzLmJyZWFrKGNvbnRleHQpO1xuXG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgaWYgKCh0aGlzLnN0YXRlbWVudCAhPT0gbnVsbCkgfHwgKHRoaXMucHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkpIHtcbiAgICAgIGRlY2xhcmUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBiZWNhdXNlIGl0IGlzIG5vbnNlbnNlLmApO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgYXdhaXQgYXR0ZW1wdChhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50VmFsaWRhdGVzID0gYXdhaXQgdGhpcy52YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0KSxcbiAgICAgICAgICAgIHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSAgdGhpcy52YWxpZGF0ZVByb2NlZHVyZUNhbGwoY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMgfHwgcHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykge1xuICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGF3YWl0IHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJ3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVByb2NlZHVyZUNhbGwoY29udGV4dCkge1xuICAgIGxldCBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMncyBwcm9jZWR1cmUgY2FsbC4uLmApO1xuXG4gICAgICBjb25zdCBwcm9jZWR1cmVDYWxsID0gdGhpcy5wcm9jZWR1cmVDYWxsLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICAgIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICAgIHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJ3MgcHJvY2VkdXJlIGNhbGwuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2NlZHVyZUNhbGxWYWxpZGF0ZXM7XG4gIH1cblxuICBkaXNjaGFyZ2UoY29udGV4dCkge1xuICAgIGxldCBkaXNjaGFyZ2VzID0gZmFsc2U7XG5cbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudERpc2NoYXJnZXMgPSB0aGlzLmRpc2NoYXJnZVN0YXRlbWVudChjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnREaXNjaGFyZ2VzKSB7XG4gICAgICBkaXNjaGFyZ2VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZGlzY2hhcmdlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc2NoYXJnZXM7XG4gIH1cblxuICBkaXNjaGFyZ2VTdGF0ZW1lbnQoY29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnREaXNjaGFyZ2VzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgICAgY29uc3QgZGlzY2hhcmdlcyA9IHRoaXMuc3RhdGVtZW50LmRpc2NoYXJnZShjb250ZXh0KTsgIC8vL1xuXG4gICAgICBpZiAoZGlzY2hhcmdlcykge1xuICAgICAgICBzdGF0ZW1lbnREaXNjaGFyZ2VzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudERpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHN0YXRlbWVudC5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50RGlzY2hhcmdlcztcbiAgfVxuXG4gIGFzeW5jIGRpc2NoYXJnZUdpdmVuVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gICAgbGV0IGRpc2NoYXJnZXNHaXZlblRlcm0gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHByb2NlZHVyZUNhbGxEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gYXdhaXQgdGhpcy5kaXNjaGFyZ2VQcm9jZWR1cmVDYWxsR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHByb2NlZHVyZUNhbGxEaXNjaGFyZ2VzR2l2ZW5UZXJtKSB7XG4gICAgICBkaXNjaGFyZ2VzR2l2ZW5UZXJtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZGlzY2hhcmdlc0dpdmVuVGVybSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuICAgIH1cblxuICAgIHJldHVybiBkaXNjaGFyZ2VzR2l2ZW5UZXJtO1xuICB9XG5cbiAgYXN5bmMgZGlzY2hhcmdlUHJvY2VkdXJlQ2FsbEdpdmVuVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gICAgbGV0IHByb2NlZHVyZUNhbGxEaXNjaGFyZ2VzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMncyBwcm9jZWR1cmUgY2FsbCBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgICAgY29uc3QgZGlzY2hhcmdlcyA9IGF3YWl0IHRoaXMucHJvY2VkdXJlQ2FsbC5kaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCk7ICAvLy9cblxuICAgICAgaWYgKGRpc2NoYXJnZXMpIHtcbiAgICAgICAgcHJvY2VkdXJlQ2FsbERpc2NoYXJnZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2VkdXJlQ2FsbERpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHByb2NlZHVyZSBjYWxsIGdpdmVuIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlQ2FsbERpc2NoYXJnZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiSHlwb3RoZXNpc1wiO1xuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICByZXR1cm4gc2VyaWFsaXNlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBicmVha1BvaW50XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGh5cG90aGVzaXM7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGh5cG90aGVzaXNOb2RlID0gaW5zdGFudGlhdGVIeXBvdGhlc2lzKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBoeXBvdGhlc2lzTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgaHlwb3RoZXNpcyA9IG5ldyBIeXBvdGhlc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcbiAgICAgIH0sIGpzb24sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkh5cG90aGVzaXMiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwicHJvY2VkdXJlQ2FsbCIsImdldFN0YXRlbWVudCIsImdldFByb2NlZHVyZUNhbGwiLCJnZXRIeXBvdGhlc2lzTm9kZSIsImdldE5vZGUiLCJoeXBvdGhlc2lzTm9kZSIsInZlcmlmeSIsInZlcmlmaWVzIiwiYnJlYWsiLCJoeXBvdGhlc2lzU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWNsYXJlIiwidmFsaWRhdGVzIiwidmFsaWRhdGUiLCJkZWJ1ZyIsImF0dGVtcHQiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsInByb2NlZHVyZUNhbGxWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVByb2NlZHVyZUNhbGwiLCJjb21taXQiLCJkaXNjaGFyZ2UiLCJkaXNjaGFyZ2VzIiwic3RhdGVtZW50RGlzY2hhcmdlcyIsImRpc2NoYXJnZVN0YXRlbWVudCIsImRpc2NoYXJnZUdpdmVuVGVybSIsInRlcm0iLCJkaXNjaGFyZ2VzR2l2ZW5UZXJtIiwidGVybVN0cmluZyIsInByb2NlZHVyZUNhbGxEaXNjaGFyZ2VzR2l2ZW5UZXJtIiwiZGlzY2hhcmdlUHJvY2VkdXJlQ2FsbEdpdmVuVGVybSIsInByb2NlZHVyZUNhbGxEaXNjaGFyZ2VzIiwibmFtZSIsInRvSlNPTiIsImdldENvbnRleHQiLCJzZXJpYWxpc2UiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJoeXBvdGhlc2lzIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlSHlwb3RoZXNpcyIsInN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBQTs7O2dDQVQ2QzswQkFFdEI7NkJBQ2U7eUJBQ2dDO3lCQUNPO0FBRTdFLE1BQU0sRUFBRUEsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG1CQUFtQkMsdUJBQU87SUFDcEQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUVDLGFBQWEsQ0FBRTtRQUN2RSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7SUFDdkI7SUFFQUMsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRixTQUFTO0lBQ3ZCO0lBRUFHLG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQ0YsYUFBYTtJQUMzQjtJQUVBRyxvQkFBb0I7UUFDbEIsTUFBTU4sT0FBTyxJQUFJLENBQUNPLE9BQU8sSUFDbkJDLGlCQUFpQlIsTUFBTyxHQUFHO1FBRWpDLE9BQU9RO0lBQ1Q7SUFFQSxNQUFNQyxPQUFPWCxPQUFPLEVBQUU7UUFDcEIsSUFBSVksV0FBVztRQUVmLE1BQU0sSUFBSSxDQUFDQyxLQUFLLENBQUNiO1FBRWpCLE1BQU1jLG1CQUFtQixJQUFJLENBQUNDLFNBQVMsSUFBSSxHQUFHO1FBRTlDZixRQUFRZ0IsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixpQkFBaUIsZUFBZSxDQUFDO1FBRWpFLElBQUksQUFBQyxJQUFJLENB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
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2h5cG90aGVzaXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVIeXBvdGhlc2lzIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGRlY2xhcmUsIGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUsIHByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSHlwb3RoZXNpcyBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcHJvY2VkdXJlQ2FsbCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcbiAgICB0aGlzLnByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZUNhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldEh5cG90aGVzaXNOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBoeXBvdGhlc2lzTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBoeXBvdGhlc2lzTm9kZTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBhd2FpdCB0aGlzLmJyZWFrKGNvbnRleHQpO1xuXG4gICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgaWYgKCh0aGlzLnN0YXRlbWVudCAhPT0gbnVsbCkgfHwgKHRoaXMucHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkpIHtcbiAgICAgIGRlY2xhcmUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LCBjb250ZXh0KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBiZWNhdXNlIGl0IGlzIG5vbnNlbnNlLmApO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy4uLmApO1xuXG4gICAgYXdhaXQgYXR0ZW1wdChhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50VmFsaWRhdGVzID0gYXdhaXQgdGhpcy52YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0KSxcbiAgICAgICAgICAgIHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSAgdGhpcy52YWxpZGF0ZVByb2NlZHVyZUNhbGwoY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMgfHwgcHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykge1xuICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgaHlwb3RoZXNpc1N0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGF3YWl0IHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJ3Mgc3RhdGVtZW50LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVByb2NlZHVyZUNhbGwoY29udGV4dCkge1xuICAgIGxldCBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMncyBwcm9jZWR1cmUgY2FsbC4uLmApO1xuXG4gICAgICBjb25zdCBwcm9jZWR1cmVDYWxsID0gdGhpcy5wcm9jZWR1cmVDYWxsLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG5cbiAgICAgIGlmIChwcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICAgIHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzJ3MgcHJvY2VkdXJlIGNhbGwuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2NlZHVyZUNhbGxWYWxpZGF0ZXM7XG4gIH1cblxuICBkaXNjaGFyZ2UoY29udGV4dCkge1xuICAgIGxldCBkaXNjaGFyZ2VzID0gZmFsc2U7XG5cbiAgICBjb25zdCBoeXBvdGhlc2lzU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudERpc2NoYXJnZXMgPSB0aGlzLmRpc2NoYXJnZVN0YXRlbWVudChjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnREaXNjaGFyZ2VzKSB7XG4gICAgICBkaXNjaGFyZ2VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZGlzY2hhcmdlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc2NoYXJnZXM7XG4gIH1cblxuICBkaXNjaGFyZ2VTdGF0ZW1lbnQoY29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnREaXNjaGFyZ2VzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgICAgY29uc3QgZGlzY2hhcmdlcyA9IHRoaXMuc3RhdGVtZW50LmRpc2NoYXJnZShjb250ZXh0KTsgIC8vL1xuXG4gICAgICBpZiAoZGlzY2hhcmdlcykge1xuICAgICAgICBzdGF0ZW1lbnREaXNjaGFyZ2VzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudERpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHN0YXRlbWVudC5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50RGlzY2hhcmdlcztcbiAgfVxuXG4gIGFzeW5jIGRpc2NoYXJnZUdpdmVuVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gICAgbGV0IGRpc2NoYXJnZXNHaXZlblRlcm0gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHByb2NlZHVyZUNhbGxEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gYXdhaXQgdGhpcy5kaXNjaGFyZ2VQcm9jZWR1cmVDYWxsR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHByb2NlZHVyZUNhbGxEaXNjaGFyZ2VzR2l2ZW5UZXJtKSB7XG4gICAgICBkaXNjaGFyZ2VzR2l2ZW5UZXJtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZGlzY2hhcmdlc0dpdmVuVGVybSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuICAgIH1cblxuICAgIHJldHVybiBkaXNjaGFyZ2VzR2l2ZW5UZXJtO1xuICB9XG5cbiAgYXN5bmMgZGlzY2hhcmdlUHJvY2VkdXJlQ2FsbEdpdmVuVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gICAgbGV0IHByb2NlZHVyZUNhbGxEaXNjaGFyZ2VzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wcm9jZWR1cmVDYWxsICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIGh5cG90aGVzaXNTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMncyBwcm9jZWR1cmUgY2FsbCBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgICAgY29uc3QgZGlzY2hhcmdlcyA9IGF3YWl0IHRoaXMucHJvY2VkdXJlQ2FsbC5kaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCk7ICAvLy9cblxuICAgICAgaWYgKGRpc2NoYXJnZXMpIHtcbiAgICAgICAgcHJvY2VkdXJlQ2FsbERpc2NoYXJnZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2VkdXJlQ2FsbERpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7aHlwb3RoZXNpc1N0cmluZ30nIGh5cG90aGVzaXMnIHByb2NlZHVyZSBjYWxsIGdpdmVuIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlQ2FsbERpc2NoYXJnZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiSHlwb3RoZXNpc1wiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGh5cG90aGVzaXM7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGh5cG90aGVzaXNOb2RlID0gaW5zdGFudGlhdGVIeXBvdGhlc2lzKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBoeXBvdGhlc2lzTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tSHlwb3RoZXNpc05vZGUoaHlwb3RoZXNpc05vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21IeXBvdGhlc2lzTm9kZShoeXBvdGhlc2lzTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgaHlwb3RoZXNpcyA9IG5ldyBIeXBvdGhlc2lzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcbiAgICAgIH0sIGpzb24sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGh5cG90aGVzaXM7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkh5cG90aGVzaXMiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwicHJvY2VkdXJlQ2FsbCIsImdldFN0YXRlbWVudCIsImdldFByb2NlZHVyZUNhbGwiLCJnZXRIeXBvdGhlc2lzTm9kZSIsImdldE5vZGUiLCJoeXBvdGhlc2lzTm9kZSIsInZlcmlmeSIsInZlcmlmaWVzIiwiYnJlYWsiLCJoeXBvdGhlc2lzU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWNsYXJlIiwidmFsaWRhdGVzIiwidmFsaWRhdGUiLCJkZWJ1ZyIsImF0dGVtcHQiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsInByb2NlZHVyZUNhbGxWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVByb2NlZHVyZUNhbGwiLCJjb21taXQiLCJkaXNjaGFyZ2UiLCJkaXNjaGFyZ2VzIiwic3RhdGVtZW50RGlzY2hhcmdlcyIsImRpc2NoYXJnZVN0YXRlbWVudCIsImRpc2NoYXJnZUdpdmVuVGVybSIsInRlcm0iLCJkaXNjaGFyZ2VzR2l2ZW5UZXJtIiwidGVybVN0cmluZyIsInByb2NlZHVyZUNhbGxEaXNjaGFyZ2VzR2l2ZW5UZXJtIiwiZGlzY2hhcmdlUHJvY2VkdXJlQ2FsbEdpdmVuVGVybSIsInByb2NlZHVyZUNhbGxEaXNjaGFyZ2VzIiwidG9KU09OIiwiZ2V0Q29udGV4dCIsInNlcmlhbGlzZSIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJoeXBvdGhlc2lzIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlSHlwb3RoZXNpcyIsInN0YXRlbWVudEZyb21IeXBvdGhlc2lzTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tSHlwb3RoZXNpc05vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBQTs7O2dDQVQ2QzswQkFFdEI7NkJBQ2U7eUJBQ2dDO3lCQUNPO0FBRTdFLE1BQU0sRUFBRUEsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG1CQUFtQkMsdUJBQU87SUFDcEQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUVDLGFBQWEsQ0FBRTtRQUN2RSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLGFBQWEsR0FBR0E7SUFDdkI7SUFFQUMsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRixTQUFTO0lBQ3ZCO0lBRUFHLG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQ0YsYUFBYTtJQUMzQjtJQUVBRyxvQkFBb0I7UUFDbEIsTUFBTU4sT0FBTyxJQUFJLENBQUNPLE9BQU8sSUFDbkJDLGlCQUFpQlIsTUFBTyxHQUFHO1FBRWpDLE9BQU9RO0lBQ1Q7SUFFQSxNQUFNQyxPQUFPWCxPQUFPLEVBQUU7UUFDcEIsSUFBSVksV0FBVztRQUVmLE1BQU0sSUFBSSxDQUFDQyxLQUFLLENBQUNiO1FBRWpCLE1BQU1jLG1CQUFtQixJQUFJLENBQUNDLFNBQVMsSUFBSSxHQUFHO1FBRTlDZixRQUFRZ0IsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixpQkFBaUIsZUFBZSxDQUFDO1FBRWpFLElBQUksQUFBQyxJQUFJLENB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
|
package/lib/element/judgement.js
CHANGED
|
@@ -57,7 +57,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
57
57
|
}
|
|
58
58
|
return newObj;
|
|
59
59
|
}
|
|
60
|
-
const { one, push } = _necessary.arrayUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
|
|
60
|
+
const { one } = _occamlanguages.continuationUtilities, { push } = _necessary.arrayUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
|
|
61
61
|
const _default = (0, _elements.define)(class Judgement extends _occamlanguages.Element {
|
|
62
62
|
constructor(context, string, node, breakPoint, frame, goal){
|
|
63
63
|
super(context, string, node, breakPoint);
|
|
@@ -238,24 +238,22 @@ const _default = (0, _elements.define)(class Judgement extends _occamlanguages.E
|
|
|
238
238
|
continuation(validatesWhenDerived);
|
|
239
239
|
return;
|
|
240
240
|
}
|
|
241
|
-
let validatesWhenDerived = false;
|
|
242
241
|
const judgementString = this.getString(); ///
|
|
243
242
|
context.trace(`Validating the '${judgementString}' derived judgement...`);
|
|
244
|
-
const schemas = context.getSchemas(), judgement = this
|
|
245
|
-
|
|
243
|
+
const schemas = context.getSchemas(), judgement = this; ///
|
|
244
|
+
return one(schemas, (schema, continuation)=>{
|
|
245
|
+
schema.unifyJudgement(judgement, context, continuation);
|
|
246
|
+
}, (judgementUnifies)=>{
|
|
247
|
+
let validatesWhenDerived = false;
|
|
246
248
|
if (judgementUnifies) {
|
|
247
|
-
|
|
249
|
+
validatesWhenDerived = true;
|
|
248
250
|
}
|
|
251
|
+
if (validatesWhenDerived) {
|
|
252
|
+
context.debug(`...validated the '${judgementString}' derived judgement.`);
|
|
253
|
+
}
|
|
254
|
+
return continuation(validatesWhenDerived);
|
|
249
255
|
});
|
|
250
|
-
if (judgementUnifies) {
|
|
251
|
-
validatesWhenDerived = true;
|
|
252
|
-
}
|
|
253
|
-
if (validatesWhenDerived) {
|
|
254
|
-
context.debug(`...validated the '${judgementString}' derived judgement.`);
|
|
255
|
-
}
|
|
256
|
-
return validatesWhenDerived;
|
|
257
256
|
}
|
|
258
|
-
static name = "Judgement";
|
|
259
257
|
toJSON() {
|
|
260
258
|
const string = this.getString();
|
|
261
259
|
let breakPoint;
|
|
@@ -268,6 +266,7 @@ const _default = (0, _elements.define)(class Judgement extends _occamlanguages.E
|
|
|
268
266
|
};
|
|
269
267
|
return json;
|
|
270
268
|
}
|
|
269
|
+
static name = "Judgement";
|
|
271
270
|
static fromJSON(json, context) {
|
|
272
271
|
return (0, _context.instantiate)((context)=>{
|
|
273
272
|
const { string } = json, judgementNode = (0, _instantiate.instantiateJudgement)(string, context), node = judgementNode, breakPoint = breakPointFromJSON(json), frame = frameFromJudgementNode(judgementNode, context), goal = goalFromJudgementNode(judgementNode, context);
|
|
@@ -305,4 +304,4 @@ function implicitAssumptionsFromProofAssertions(proofAssertions, context) {
|
|
|
305
304
|
return implicitAssumptions;
|
|
306
305
|
}
|
|
307
306
|
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2p1ZGdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUsfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGFsbCwgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGVxdWF0ZVN0YXRlbWVudHMgfSBmcm9tIFwiLi4vcHJvY2Vzcy9lcXVhdGVcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlSnVkZ2VtZW50IH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgb25lLCBwdXNoIH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEp1ZGdlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGZyYW1lLCBnb2FsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLmdvYWwgPSBnb2FsO1xuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdvYWw7XG4gIH1cblxuICBnZXRKdWRnZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4ganVkZ2VtZW50Tm9kZTtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7XG4gICAgY29uc3QganVkZ2VtZW50Tm9kZSA9IHRoaXMuZ2V0SnVkZ2VtZW50Tm9kZSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0ganVkZ2VtZW50Tm9kZS5pc1Npbmd1bGFyKCk7XG5cbiAgICByZXR1cm4gc2luZ3VsYXI7XG4gIH1cblxuICBpc0VxdWFsVG8oanVkZ2VtZW50KSB7XG4gICAgY29uc3QganVkZ2VtZW50Tm9kZSA9IGp1ZGdlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAganVkZ2VtZW50Tm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0ganVkZ2VtZW50Tm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVEZWZpbmVkKG1ldGF2YXJpYWJsZSkgeyByZXR1cm4gdGhpcy5mcmFtZS5pc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlKTsgfVxuXG4gIGlzSW1wbGljaXQoKSB7IHJldHVybiB0aGlzLmZyYW1lLmlzSW1wbGljaXQoKTsgfVxuXG4gIGdldFN0YXRlbWVudCgpIHsgcmV0dXJuIHRoaXMuZ29hbC5nZXRTdGF0ZW1lbnQoKTsgfVxuXG4gIGdldFJlZmVyZW5jZSgpIHsgcmV0dXJuIHRoaXMuZ29hbC5nZXRSZWZlcmVuY2UoKTsgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMuZnJhbWUuZ2V0TWV0YXZhcmlhYmxlKCk7IH1cblxuICBnZXRBc3N1bXB0aW9ucyhjb250ZXh0KSB7XG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZSgpLFxuICAgICAgICAgIGZyYW1lQXNzdW1wdGlvbnMgPSB0aGlzLmZyYW1lLmdldEFzc3VtcHRpb25zKCk7XG5cbiAgICBwdXNoKGFzc3VtcHRpb25zLCBmcmFtZUFzc3VtcHRpb25zKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0UHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25zID0gaW1wbGljaXRBc3N1bXB0aW9uc0Zyb21Qcm9vZkFzc2VydGlvbnMocHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgcHVzaChhc3N1bXB0aW9ucywgaW1wbGljaXRBc3N1bXB0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zO1xuICB9XG5cbiAgbWF0Y2hKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpIHtcbiAgICBjb25zdCBub2RlID0ganVkZ2VtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBqdWRnZW1lbnROb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7IHJldHVybiB0aGlzLmZyYW1lLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KSB7IHJldHVybiB0aGlzLmdvYWwuZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpOyB9XG5cbiAgZmluZFZhbGlkSnVkZ2VtZW50KGNvbnRleHQpIHtcbiAgICBjb25zdCBqdWRnZW1lbnROb2RlID0gdGhpcy5nZXRKdWRnZW1lbnROb2RlKCksXG4gICAgICAgICAganVkZ2VtZW50ID0gY29udGV4dC5maW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgIHZhbGlkSnVkZ2VtZW5ldCA9IGp1ZGdlbWVudDsgIC8vL1xuXG4gICAgcmV0dXJuIHZhbGlkSnVkZ2VtZW5ldDtcbiAgfVxuXG4gIGNvbXBhcmVTdGVwKHN0ZXAsIGNvbnRleHQpIHtcbiAgICBsZXQgY29tcGFyZXNUb1N0ZXAgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSBzdGVwLmdldFN0cmluZygpLFxuICAgICAganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB0byB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpLFxuICAgICAgY29tcGFyZXNUb1N0YXRlbWVudCA9IHRoaXMuY29tcGFyZVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKGNvbXBhcmVzVG9TdGF0ZW1lbnQpIHtcbiAgICAgIGNvbXBhcmVzVG9TdGVwID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY29tcGFyZXNUb1N0ZXApIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB0byB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlc1RvU3RlcDtcbiAgfVxuXG4gIGNvbXBhcmVTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVzVG9TdGF0ZW1lbnQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IGxlZnRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7ICAvLy9cblxuICAgIHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICBjb25zdCByaWdodFN0YXRlbWVudCA9IHN0YXRlbWVudCwgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudHNFcXVhdGUgPSBlcXVhdGVTdGF0ZW1lbnRzKGxlZnRTdGF0ZW1lbnQsIHJpZ2h0U3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRzRXF1YXRlKSB7XG4gICAgICBjb21wYXJlc1RvU3RhdGVtZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY29tcGFyZXNUb1N0YXRlbWVudCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uY29tcGFyZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlc1RvU3RhdGVtZW50O1xuICB9XG5cbiAgY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkgeyByZXR1cm4gdGhpcy5mcmFtZS5jb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTsgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRKdWRnZW1lbnQgPSB0aGlzLmZpbmRWYWxpZEp1ZGdlbWVudChjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QganVkZ2VtZW50ID0gdmFsaWRKdWRnZW1lbnQ7IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50IGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oanVkZ2VtZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZUdvYWwgPSB0aGlzLnZhbGlkYXRlR29hbC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlRnJhbWUgPSB0aGlzLnZhbGlkYXRlRnJhbWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVGcmFtZSxcbiAgICAgIHZhbGlkYXRlR29hbFxuICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgIGlmICghdmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGp1ZGdlbWVudCA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihqdWRnZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gZXhpc3RzKFtcbiAgICAgICAgdmFsaWRhdGVXaGVuU3RhdGVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBqdWRnZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgICAgICAgIGNvbnRleHQuYWRkSnVkZ2VtZW50KGp1ZGdlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGp1ZGdlbWVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlR29hbChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCdzIGdvYWwuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmdvYWwudmFsaWRhdGUoY29udGV4dCwgKGdvYWwpID0+IHtcbiAgICAgIGxldCBnb2FsVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChnb2FsICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ29hbCA9IGdvYWw7XG5cbiAgICAgICAgZ29hbFZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChnb2FsVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50J3MgZ29hbC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihnb2FsVmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlRnJhbWUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyBmcmFtZS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZnJhbWUudmFsaWRhdGUoY29udGV4dCwgKGZyYW1lKSA9PiB7XG4gICAgICBsZXQgZnJhbWVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICBmcmFtZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmcmFtZVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCdzIGZyYW1lLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lVmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0YXRlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoIXN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICAgIH1cblxuICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkO1xuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScgc3RhdGVkIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRydWU7XG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBzdGF0ZWQganVkZ2VtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlblN0YXRlZCk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGRlcml2ZWQganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCksXG4gICAgICAgICAganVkZ2VtZW50ID0gdGhpcywgLy8vXG4gICAgICAgICAganVkZ2VtZW50VW5pZmllcyA9IG9uZShzY2hlbWFzLCAoc2NoZW1hKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBqdWRnZW1lbnRVbmlmaWVzID0gc2NoZW1hLnVuaWZ5SnVkZ2VtZW50KGp1ZGdlbWVudCwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChqdWRnZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgaWYgKGp1ZGdlbWVudFVuaWZpZXMpIHtcbiAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScgZGVyaXZlZCBqdWRnZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkp1ZGdlbWVudFwiO1xuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGp1ZGdlbWVudE5vZGUgPSBpbnN0YW50aWF0ZUp1ZGdlbWVudChzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGp1ZGdlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBnb2FsID0gZ29hbEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgY29uc3QganVkZ2VtZW50ID0gbmV3IEp1ZGdlbWVudChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGZyYW1lLCBnb2FsKTtcblxuICAgICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21Qcm9vZkFzc2VydGlvbihwcm9vZkFzc2VydGlvbiwgY29udGV4dCkge1xuICAgIGxldCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByb29mQXNzZXJ0aW9uLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICAgIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG59KTtcblxuZnVuY3Rpb24gZ29hbEZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZ29hbE5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEdvYWxOb2RlKCksXG4gICAgICAgIGdvYWwgPSBjb250ZXh0LmZpbmRHb2FsQnlHb2xhTm9kZShnb2FsTm9kZSk7XG5cbiAgcmV0dXJuIGdvYWw7XG59XG5cbmZ1bmN0aW9uIGZyYW1lRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBmcmFtZU5vZGUgPSBqdWRnZW1lbnROb2RlLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICBmcmFtZSA9IGNvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmZ1bmN0aW9uIGltcGxpY2l0QXNzdW1wdGlvbnNGcm9tUHJvb2ZBc3NlcnRpb25zKHByb29mQXNzZXJ0aW9ucywgY29udGV4dCkge1xuICBjb25zdCB7IEltcGxpY2l0QXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbnMgPSBwcm9vZkFzc2VydGlvbnMubWFwKChwcm9vZkFzc2VydGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHByb29mQXNzZXJ0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbiA9IEltcGxpY2l0QXNzdW1wdGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9ucztcbn1cblxuIl0sIm5hbWVzIjpbIm9uZSIsInB1c2giLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkp1ZGdlbWVudCIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJmcmFtZSIsImdvYWwiLCJnZXRGcmFtZSIsImdldEFzc3VtcHRpb24iLCJnZXRKdWRnZW1lbnROb2RlIiwiZ2V0Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJpc1Npbmd1bGFyIiwic2luZ3VsYXIiLCJpc0VxdWFsVG8iLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoSnVkZ2VtZW50Tm9kZSIsImVxdWFsVG8iLCJpc01ldGF2YXJpYWJsZURlZmluZWQiLCJtZXRhdmFyaWFibGUiLCJpc0ltcGxpY2l0IiwiZ2V0U3RhdGVtZW50IiwiZ2V0UmVmZXJlbmNlIiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0QXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9ucyIsImZyYW1lQXNzdW1wdGlvbnMiLCJwcm9vZkFzc2VydGlvbnMiLCJnZXRQcm9vZkFzc2VydGlvbnMiLCJpbXBsaWNpdEFzc3VtcHRpb25zIiwiaW1wbGljaXRBc3N1bXB0aW9uc0Zyb21Qcm9vZkFzc2VydGlvbnMiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJmaW5kVmFsaWRKdWRnZW1lbnQiLCJmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlIiwidmFsaWRKdWRnZW1lbmV0IiwiY29tcGFyZVN0ZXAiLCJzdGVwIiwiY29tcGFyZXNUb1N0ZXAiLCJzdGVwU3RyaW5nIiwiZ2V0U3RyaW5nIiwianVkZ2VtZW50U3RyaW5nIiwidHJhY2UiLCJzdGF0ZW1lbnQiLCJjb21wYXJlc1RvU3RhdGVtZW50IiwiY29tcGFyZVN0YXRlbWVudCIsImRlYnVnIiwic3RhdGVtZW50U3RyaW5nIiwibGVmdFN0YXRlbWVudCIsInJpZ2h0U3RhdGVtZW50Iiwic3RhdGVtZW50c0VxdWF0ZSIsImVxdWF0ZVN0YXRlbWVudHMiLCJjb21wYXJlTWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsInZhbGlkSnVkZ2VtZW50IiwidmFsaWRhdGVHb2FsIiwiYmluZCIsInZhbGlkYXRlRnJhbWUiLCJhbGwiLCJ2YWxpZGF0ZXMiLCJ2YWxpZGF0ZVdoZW5TdGF0ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwiYWRkSnVkZ2VtZW50IiwiZ29hbFZhbGlkYXRlcyIsImZyYW1lVmFsaWRhdGVzIiwic3RhdGVkIiwiaXNTdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuU3RhdGVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJzY2hlbWFzIiwiZ2V0U2NoZW1hcyIsImp1ZGdlbWVudFVuaWZpZXMiLCJzY2hlbWEiLCJ1bmlmeUp1ZGdlbWVudCIsIm5hbWUiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlSnVkZ2VtZW50IiwiZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZSIsImdvYWxGcm9tSnVkZ2VtZW50Tm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJmcm9tUHJvb2ZBc3NlcnRpb24iLCJwcm9vZkFzc2VydGlvbiIsImdldFN0YXRlbWVudE5vZGUiLCJnb2FsTm9kZSIsImdldEdvYWxOb2RlIiwiZmluZEdvYWxCeUdvbGFOb2RlIiwiZnJhbWVOb2RlIiwiZ2V0RnJhbWVOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJlbGVtZW50cyIsIm1h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
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2p1ZGdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSx9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZXF1YXRlU3RhdGVtZW50cyB9IGZyb20gXCIuLi9wcm9jZXNzL2VxdWF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVKdWRnZW1lbnQgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsganVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBvbmUgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBKdWRnZW1lbnQgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBmcmFtZSwgZ29hbCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gICAgdGhpcy5nb2FsID0gZ29hbDtcbiAgfVxuXG4gIGdldEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nb2FsO1xuICB9XG5cbiAgZ2V0SnVkZ2VtZW50Tm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAganVkZ2VtZW50Tm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudE5vZGU7XG4gIH1cblxuICBpc1Npbmd1bGFyKCkge1xuICAgIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSB0aGlzLmdldEp1ZGdlbWVudE5vZGUoKSxcbiAgICAgICAgICBzaW5ndWxhciA9IGp1ZGdlbWVudE5vZGUuaXNTaW5ndWxhcigpO1xuXG4gICAgcmV0dXJuIHNpbmd1bGFyO1xuICB9XG5cbiAgaXNFcXVhbFRvKGp1ZGdlbWVudCkge1xuICAgIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSBqdWRnZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGp1ZGdlbWVudE5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IGp1ZGdlbWVudE5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUpIHsgcmV0dXJuIHRoaXMuZnJhbWUuaXNNZXRhdmFyaWFibGVEZWZpbmVkKG1ldGF2YXJpYWJsZSk7IH1cblxuICBpc0ltcGxpY2l0KCkgeyByZXR1cm4gdGhpcy5mcmFtZS5pc0ltcGxpY2l0KCk7IH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7IHJldHVybiB0aGlzLmdvYWwuZ2V0U3RhdGVtZW50KCk7IH1cblxuICBnZXRSZWZlcmVuY2UoKSB7IHJldHVybiB0aGlzLmdvYWwuZ2V0UmVmZXJlbmNlKCk7IH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLmZyYW1lLmdldE1ldGF2YXJpYWJsZSgpOyB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoY29udGV4dCkge1xuICAgIGNvbnN0IGFzc3VtcHRpb25zID0gW10sXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gdGhpcy5nZXRNZXRhdmFyaWFibGUoKSxcbiAgICAgICAgICBmcmFtZUFzc3VtcHRpb25zID0gdGhpcy5mcmFtZS5nZXRBc3N1bXB0aW9ucygpO1xuXG4gICAgcHVzaChhc3N1bXB0aW9ucywgZnJhbWVBc3N1bXB0aW9ucyk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9ucyA9IGltcGxpY2l0QXNzdW1wdGlvbnNGcm9tUHJvb2ZBc3NlcnRpb25zKHByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICAgIHB1c2goYXNzdW1wdGlvbnMsIGltcGxpY2l0QXNzdW1wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBhc3N1bXB0aW9ucztcbiAgfVxuXG4gIG1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGp1ZGdlbWVudE5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAganVkZ2VtZW50Tm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4ganVkZ2VtZW50Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkgeyByZXR1cm4gdGhpcy5mcmFtZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7IH1cblxuICBmaW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCkgeyByZXR1cm4gdGhpcy5nb2FsLmZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KTsgfVxuXG4gIGZpbmRWYWxpZEp1ZGdlbWVudChjb250ZXh0KSB7XG4gICAgY29uc3QganVkZ2VtZW50Tm9kZSA9IHRoaXMuZ2V0SnVkZ2VtZW50Tm9kZSgpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGNvbnRleHQuZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSxcbiAgICAgICAgICB2YWxpZEp1ZGdlbWVuZXQgPSBqdWRnZW1lbnQ7ICAvLy9cblxuICAgIHJldHVybiB2YWxpZEp1ZGdlbWVuZXQ7XG4gIH1cblxuICBjb21wYXJlU3RlcChzdGVwLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVzVG9TdGVwID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgIGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgdG8gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgIGNvbXBhcmVzVG9TdGF0ZW1lbnQgPSB0aGlzLmNvbXBhcmVTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChjb21wYXJlc1RvU3RhdGVtZW50KSB7XG4gICAgICBjb21wYXJlc1RvU3RlcCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmVzVG9TdGVwKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5jb21wYXJlZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgdG8gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1N0ZXA7XG4gIH1cblxuICBjb21wYXJlU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBjb21wYXJlc1RvU3RhdGVtZW50ID0gZmFsc2U7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB0byB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCBsZWZ0U3RhdGVtZW50ID0gc3RhdGVtZW50OyAgLy8vXG5cbiAgICBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpO1xuXG4gICAgY29uc3QgcmlnaHRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnQsICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRzRXF1YXRlID0gZXF1YXRlU3RhdGVtZW50cyhsZWZ0U3RhdGVtZW50LCByaWdodFN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50c0VxdWF0ZSkge1xuICAgICAgY29tcGFyZXNUb1N0YXRlbWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmVzVG9TdGF0ZW1lbnQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1N0YXRlbWVudDtcbiAgfVxuXG4gIGNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMuZnJhbWUuY29tcGFyZU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7IH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkSnVkZ2VtZW50ID0gdGhpcy5maW5kVmFsaWRKdWRnZW1lbnQoY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRKdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGp1ZGdlbWVudCA9IHZhbGlkSnVkZ2VtZW50OyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCBpcyBhbHJlYWR5IHZhbGlkLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGp1ZGdlbWVudCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVHb2FsID0gdGhpcy52YWxpZGF0ZUdvYWwuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZUZyYW1lID0gdGhpcy52YWxpZGF0ZUZyYW1lLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlRnJhbWUsXG4gICAgICB2YWxpZGF0ZUdvYWxcbiAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICBpZiAoIXZhbGlkYXRlcykge1xuICAgICAgICBjb25zdCBqdWRnZW1lbnQgPSBudWxsO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oanVkZ2VtZW50KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdGVXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlblN0YXRlZCxcbiAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZFxuICAgICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgICBsZXQganVkZ2VtZW50ID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAganVkZ2VtZW50ID0gdGhpczsgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZEp1ZGdlbWVudChqdWRnZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihqdWRnZW1lbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZUdvYWwoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyBnb2FsLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5nb2FsLnZhbGlkYXRlKGNvbnRleHQsIChnb2FsKSA9PiB7XG4gICAgICBsZXQgZ29hbFZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoZ29hbCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmdvYWwgPSBnb2FsO1xuXG4gICAgICAgIGdvYWxWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ29hbFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCdzIGdvYWwuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZ29hbFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZUZyYW1lKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50J3MgZnJhbWUuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmZyYW1lLnZhbGlkYXRlKGNvbnRleHQsIChmcmFtZSkgPT4ge1xuICAgICAgbGV0IGZyYW1lVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgZnJhbWVWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4udmFsaWRhdGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyBmcmFtZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihmcmFtZVZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIHN0YXRlZCBqdWRnZW1lbnQuLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScgc3RhdGVkIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoc3RhdGVkKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScgZGVyaXZlZCBqdWRnZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHNjaGVtYXMgPSBjb250ZXh0LmdldFNjaGVtYXMoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIHJldHVybiBvbmUoc2NoZW1hcywgKHNjaGVtYSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICBzY2hlbWEudW5pZnlKdWRnZW1lbnQoanVkZ2VtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChqdWRnZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKGp1ZGdlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBkZXJpdmVkIGp1ZGdlbWVudC5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfSk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiSnVkZ2VtZW50XCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAganVkZ2VtZW50Tm9kZSA9IGluc3RhbnRpYXRlSnVkZ2VtZW50KHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0ganVkZ2VtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIGZyYW1lID0gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGdvYWwgPSBnb2FsRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBjb25zdCBqdWRnZW1lbnQgPSBuZXcgSnVkZ2VtZW50KGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZnJhbWUsIGdvYWwpO1xuXG4gICAgICByZXR1cm4ganVkZ2VtZW50O1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVByb29mQXNzZXJ0aW9uKHByb29mQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gICAgbGV0IGp1ZGdlbWVudCA9IG51bGw7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gcHJvb2ZBc3NlcnRpb24uZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gICAgaWYgKHN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBnb2FsRnJvbUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSwgY29udGV4dCkge1xuICBjb25zdCBnb2FsTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0R29hbE5vZGUoKSxcbiAgICAgICAgZ29hbCA9IGNvbnRleHQuZmluZEdvYWxCeUdvbGFOb2RlKGdvYWxOb2RlKTtcblxuICByZXR1cm4gZ29hbDtcbn1cblxuZnVuY3Rpb24gZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGZyYW1lTm9kZSA9IGp1ZGdlbWVudE5vZGUuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgIGZyYW1lID0gY29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZnVuY3Rpb24gaW1wbGljaXRBc3N1bXB0aW9uc0Zyb21Qcm9vZkFzc2VydGlvbnMocHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSW1wbGljaXRBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9ucyA9IHByb29mQXNzZXJ0aW9ucy5tYXAoKHByb29mQXNzZXJ0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gcHJvb2ZBc3NlcnRpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gSW1wbGljaXRBc3N1bXB0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb247XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25zO1xufVxuXG4iXSwibmFtZXMiOlsib25lIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiSnVkZ2VtZW50IiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImZyYW1lIiwiZ29hbCIsImdldEZyYW1lIiwiZ2V0QXNzdW1wdGlvbiIsImdldEp1ZGdlbWVudE5vZGUiLCJnZXROb2RlIiwianVkZ2VtZW50Tm9kZSIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsImlzRXF1YWxUbyIsImp1ZGdlbWVudCIsImp1ZGdlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hKdWRnZW1lbnROb2RlIiwiZXF1YWxUbyIsImlzTWV0YXZhcmlhYmxlRGVmaW5lZCIsIm1ldGF2YXJpYWJsZSIsImlzSW1wbGljaXQiLCJnZXRTdGF0ZW1lbnQiLCJnZXRSZWZlcmVuY2UiLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiZnJhbWVBc3N1bXB0aW9ucyIsInByb29mQXNzZXJ0aW9ucyIsImdldFByb29mQXNzZXJ0aW9ucyIsImltcGxpY2l0QXNzdW1wdGlvbnMiLCJpbXBsaWNpdEFzc3VtcHRpb25zRnJvbVByb29mQXNzZXJ0aW9ucyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsImZpbmRWYWxpZEp1ZGdlbWVudCIsImZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUiLCJ2YWxpZEp1ZGdlbWVuZXQiLCJjb21wYXJlU3RlcCIsInN0ZXAiLCJjb21wYXJlc1RvU3RlcCIsInN0ZXBTdHJpbmciLCJnZXRTdHJpbmciLCJqdWRnZW1lbnRTdHJpbmciLCJ0cmFjZSIsInN0YXRlbWVudCIsImNvbXBhcmVzVG9TdGF0ZW1lbnQiLCJjb21wYXJlU3RhdGVtZW50IiwiZGVidWciLCJzdGF0ZW1lbnRTdHJpbmciLCJsZWZ0U3RhdGVtZW50IiwicmlnaHRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRzRXF1YXRlIiwiZXF1YXRlU3RhdGVtZW50cyIsImNvbXBhcmVNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwidmFsaWRKdWRnZW1lbnQiLCJ2YWxpZGF0ZUdvYWwiLCJiaW5kIiwidmFsaWRhdGVGcmFtZSIsImFsbCIsInZhbGlkYXRlcyIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhZGRKdWRnZW1lbnQiLCJnb2FsVmFsaWRhdGVzIiwiZnJhbWVWYWxpZGF0ZXMiLCJzdGF0ZWQiLCJpc1N0YXRlZCIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInNjaGVtYXMiLCJnZXRTY2hlbWFzIiwic2NoZW1hIiwidW5pZnlKdWRnZW1lbnQiLCJqdWRnZW1lbnRVbmlmaWVzIiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVKdWRnZW1lbnQiLCJmcmFtZUZyb21KdWRnZW1lbnROb2RlIiwiZ29hbEZyb21KdWRnZW1lbnROb2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsImZyb21Qcm9vZkFzc2VydGlvbiIsInByb29mQXNzZXJ0aW9uIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdvYWxOb2RlIiwiZ2V0R29hbE5vZGUiLCJmaW5kR29hbEJ5R29sYU5vZGUiLCJmcmFtZU5vZGUiLCJnZXRGcmFtZU5vZGUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsIkltcGxpY2l0QXNzdW1wdGlvbiIsImVsZW1lbnRzIiwibWFwIiwiaW1wbGljaXRBc3N1bXB0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFrQkE7OztlQUFBOzs7MkJBaEIrQjtnQ0FDcUM7a0VBRS9DO3lCQUdPOzhCQUNBO3dCQUNLOzZCQUNJO3lCQUNNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFM0MsTUFBTSxFQUFFQSxHQUFHLEVBQUUsR0FBR0MscUNBQXFCLEVBQy9CLEVBQUVDLElBQUksRUFBRSxHQUFHQyx5QkFBYyxFQUN6QixFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsa0JBQWtCQyx1QkFBTztJQUNuRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxDQUFFO1FBQzFELEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO0lBQ2Q7SUFFQUMsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDRixLQUFLO0lBQ25CO0lBRUFHLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRixJQUFJO0lBQ2xCO0lBRUFHLG1CQUFtQjtRQUNqQixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsZ0JBQWdCUixNQUFNLEdBQUc7UUFFL0IsT0FBT1E7SUFDVDtJQUVBQyxhQUFhO1FBQ1gsTUFBTUQsZ0JBQWdCLElBQUksQ0FBQ0YsZ0JBQWdCLElBQ3JDSSxXQUFXRixjQUFjQyxVQUFVO1FBRXpDLE9BQU9DO0lBQ1Q7SUFFQUMsVUFBVUMsU0FBUyxFQUFFO1FBQ25CLE1BQU1KLGdCQUFnQkksVUFBVUwsT0FBTyxJQUNqQ00sdUJBQXVCLElBQUksQ0FBQ0Msa0JBQWtCLENBQUNOLGdCQUMvQ08sVUFB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
|