occam-nominal 1.0.342 → 1.0.344
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/liminal.js +5 -5
- package/lib/element/assertion/subproof.js +5 -4
- package/lib/element/assertion/type.js +17 -17
- package/lib/element/assumption.js +5 -5
- package/lib/element/combinator/bracketed.js +3 -3
- package/lib/element/combinator.js +7 -7
- package/lib/element/constraint.js +4 -4
- package/lib/element/constructor.js +18 -18
- package/lib/element/declaration/cotype.js +3 -4
- package/lib/element/declaration/type.js +13 -12
- package/lib/element/deduction.js +4 -4
- package/lib/element/derivation.js +5 -4
- package/lib/element/frame.js +4 -4
- package/lib/element/generator.js +4 -3
- package/lib/element/goal.js +5 -5
- package/lib/element/judgement.js +4 -4
- package/lib/element/metavariable.js +26 -26
- package/lib/element/proofAssertion/step.js +3 -3
- package/lib/element/rule.js +7 -7
- package/lib/element/schema.js +5 -5
- package/lib/element/section.js +3 -3
- package/lib/element/signature.js +4 -3
- package/lib/element/statement.js +4 -5
- package/lib/element/subDerivation.js +5 -4
- package/lib/element/subproof.js +3 -4
- package/lib/element/term.js +9 -7
- package/lib/element/topLevelAssertion/axiom.js +4 -3
- package/lib/element/topLevelAssertion.js +20 -24
- package/lib/process/unification.js +3 -4
- package/lib/process/unify.js +36 -33
- package/lib/process/validation.js +48 -51
- package/lib/utilities/continuation.js +167 -13
- package/package.json +3 -3
- package/src/context/liminal.js +3 -3
- package/src/element/assertion/subproof.js +4 -4
- package/src/element/assertion/type.js +16 -16
- package/src/element/assumption.js +2 -4
- package/src/element/combinator/bracketed.js +2 -2
- package/src/element/combinator.js +6 -6
- package/src/element/constraint.js +3 -4
- package/src/element/constructor.js +19 -20
- package/src/element/declaration/cotype.js +1 -4
- package/src/element/declaration/type.js +14 -14
- package/src/element/deduction.js +3 -3
- package/src/element/derivation.js +4 -4
- package/src/element/frame.js +4 -5
- package/src/element/generator.js +3 -3
- package/src/element/goal.js +2 -3
- package/src/element/judgement.js +3 -3
- package/src/element/metavariable.js +36 -36
- package/src/element/proofAssertion/step.js +3 -4
- package/src/element/rule.js +3 -4
- package/src/element/schema.js +3 -3
- package/src/element/section.js +2 -3
- package/src/element/signature.js +2 -2
- package/src/element/statement.js +3 -5
- package/src/element/subDerivation.js +3 -3
- package/src/element/subproof.js +2 -4
- package/src/element/term.js +10 -6
- package/src/element/topLevelAssertion/axiom.js +3 -3
- package/src/element/topLevelAssertion.js +20 -22
- package/src/process/unification.js +1 -3
- package/src/process/unify.js +45 -39
- package/src/process/validation.js +46 -53
- package/src/utilities/continuation.js +230 -11
package/lib/context/liminal.js
CHANGED
|
@@ -9,16 +9,16 @@ Object.defineProperty(exports, "default", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
const _necessary = require("necessary");
|
|
12
|
-
const _occamlanguages = require("occam-languages");
|
|
13
12
|
const _substitutions = require("../utilities/substitutions");
|
|
14
13
|
const _context = /*#__PURE__*/ _interop_require_default(require("../context"));
|
|
15
14
|
const _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
|
|
15
|
+
const _continuation = require("../utilities/continuation");
|
|
16
16
|
function _interop_require_default(obj) {
|
|
17
17
|
return obj && obj.__esModule ? obj : {
|
|
18
18
|
default: obj
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
const {
|
|
21
|
+
const { push, find, first } = _necessary.arrayUtilities;
|
|
22
22
|
class LiminalContext extends _context.default {
|
|
23
23
|
constructor(context, derivedSubstitutions){
|
|
24
24
|
super(context);
|
|
@@ -73,9 +73,9 @@ class LiminalContext extends _context.default {
|
|
|
73
73
|
}
|
|
74
74
|
resolveDerivedSubstitutions(continuation) {
|
|
75
75
|
const context = this, derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions);
|
|
76
|
-
return forEach(metavariableNodes, (metavariableNode, continuation)=>{
|
|
76
|
+
return (0, _continuation.forEach)(metavariableNodes, (metavariableNode, continuation)=>{
|
|
77
77
|
const complexDerivedSubstitutions = this.findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode);
|
|
78
|
-
return forEach(complexDerivedSubstitutions, (complexDerivedSubstitution, continuation)=>{
|
|
78
|
+
return (0, _continuation.forEach)(complexDerivedSubstitutions, (complexDerivedSubstitution, continuation)=>{
|
|
79
79
|
const derivedSubstitution = complexDerivedSubstitution, resolved = derivedSubstitution.isResolved();
|
|
80
80
|
if (resolved) {
|
|
81
81
|
return continuation();
|
|
@@ -198,4 +198,4 @@ class LiminalContext extends _context.default {
|
|
|
198
198
|
}
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IHB1c2gsIGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGltaW5hbENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgZGVyaXZlZFN1YnN0aXR1dGlvbnMpIHtcbiAgICBzdXBlcihjb250ZXh0KTtcblxuICAgIHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBwdXNoKGRlcml2ZWRTdWJzdGl0dXRpb25zLCB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIGNvbnRleHQuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24oKSB7XG4gICAgbGV0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0RGVyaXZlZFN1YnN0aXR1dGlvbiA9IGZpcnN0KHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IGZpcnN0RGVyaXZlZFN1YnN0aXR1dGlvbjsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0U29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uKCkge1xuICAgIGxldCBzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKCk7XG5cbiAgICBpZiAoc29sZURlcml2ZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uTm9uVHJpdmlhbCA9IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uLmlzTm9uVHJpdmlhbCgpO1xuXG4gICAgICBpZiAoc29sZURlcml2ZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsKSB7XG4gICAgICAgIHNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uOyAgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGFkZERlcml2ZWRTdWJzdGl0dXRpb24oZGVyaXZlZFN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uQSA9IGRlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmcgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgZGVyaXZlZCBzdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbkIgPSB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLmZpbmQoKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25CID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQiA9IGRlcml2ZWRTdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhkZXJpdmVkU3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7ZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZ30nIGRlcml2ZWQgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5wdXNoKGRlcml2ZWRTdWJzdGl0dXRpb24pO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYC4uLmFkZGVkIHRoZSAnJHtkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgZGVyaXZlZCBzdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgfVxuXG4gIGFkZERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMuZm9yRWFjaCgoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGREZXJpdmVkU3Vic3RpdHV0aW9uKGRlcml2ZWRTdWJzdGl0dXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zKGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBmb3JFYWNoKG1ldGF2YXJpYWJsZU5vZGVzLCAobWV0YXZhcmlhYmxlTm9kZSwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIHJldHVybiBmb3JFYWNoKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucywgKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgcmVzb2x2ZWQgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmlzUmVzb2x2ZWQoKTtcblxuICAgICAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbi5yZXNvbHZlKGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgICB9LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICBhcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVzID0gbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpLFxuICAgICAgICAgIHJlc29sdmVkID0gbWV0YXZhcmlhYmxlTm9kZXMuZXZlcnkoKG1ldGF2YXJpYWJsZU5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zLmV2ZXJ5KChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvblJlc29sdmVkID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvblJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZW1wdHkgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDApO1xuXG4gICAgcmV0dXJuIGVtcHR5O1xuICB9XG5cbiAgcXVhbGlmeShhc3N1bXB0aW9uLCBjb25zdHJhaW50KSB7XG4gICAgbGV0IHF1YWxpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZW1wdHkgPSB0aGlzLmlzRW1wdHkoKTtcblxuICAgIGlmIChlbXB0eSkge1xuICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKCk7XG5cbiAgICAgIGlmIChzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IFJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICBjb250ZXh0ID0gdGhpcyxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IFJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24uZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgICByZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24uY29tcGFyZVN1YnN0aXR1dGlvbihzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbik7XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb25Db21wYXJlc1RvU3NvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKSB7XG4gICAgICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFsaWZpZXM7XG4gIH1cblxuICBjb21taXQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGBDb21taXR0aW5nIHRoZSBsaW1pbmFsIGNvbnRleHRgKTtcblxuICAgIGNvbnRleHQuYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnModGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbihjYWxsYmFjaykge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBkZXJpdmVkU3Vic3RpdHV0aW9ucy5maW5kKGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25zKGNhbGxiYWNrKSB7XG4gICAgbGV0IGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuXG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IGZpbmQoZGVyaXZlZFN1YnN0aXR1dGlvbnMsIGNhbGxiYWNrKTsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbigoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGRlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKHZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbigoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvblNpbXBsZSA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNTaW1wbGUoKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUpIHtcbiAgICAgICAgY29uc3Qgc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IGRlcml2ZWRTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbnMoKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4ID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5pc0NvbXBsZXgoKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7ICAvLy9cbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IGRlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNEZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gKGRlcml2ZWRTdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIGxpbWluYWxDb250ZXh0ID0gbmV3IExpbWluYWxDb250ZXh0KGNvbnRleHQsIGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBsaW1pbmFsQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkxpbWluYWxDb250ZXh0IiwiZm9yRWFjaCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsInB1c2giLCJmaW5kIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsIkNvbnRleHQiLCJjb250ZXh0IiwiZGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldENvbnRleHQiLCJnZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiIsInNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdERlcml2ZWRTdWJzdGl0dXRpb24iLCJnZXRTb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwiLCJpc05vblRyaXZpYWwiLCJhZGREZXJpdmVkU3Vic3RpdHV0aW9uIiwiZGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb25BIiwiZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkIiLCJkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQiIsImlzRXF1YWxUbyIsImRlYnVnIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJyZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJjb250aW51YXRpb24iLCJtZXRhdmFyaWFibGVOb2RlcyIsIm1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucyIsImZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwiaXNSZXNvbHZlZCIsInJlc29sdmUiLCJhcmVEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiZXZlcnkiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uUmVzb2x2ZWQiLCJpc0VtcHR5IiwiZW1wdHkiLCJxdWFsaWZ5IiwiYXNzdW1wdGlvbiIsImNvbnN0cmFpbnQiLCJxdWFsaWZpZXMiLCJSZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZWxlbWVudHMiLCJyZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50IiwicmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZURlcml2ZWRTdWJzdGl0dXRpb24iLCJjb21wYXJlU3Vic3RpdHV0aW9uIiwiY29tbWl0IiwidW5kZWZpbmVkIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb24iLCJjYWxsYmFjayIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsInNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUiLCJpc1NpbXBsZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBsZXgiLCJpc0NvbXBsZXgiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZyb21Ob3RoaW5nIiwibGltaW5hbENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBcUJBOzs7MkJBVlU7Z0NBQ087K0JBQ29CO2dFQUV0QztpRUFDQzs7Ozs7O0FBRXJCLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHFDQUFxQixFQUNuQyxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRTdCLE1BQU1OLHVCQUF1Qk8sZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxvQkFBb0IsQ0FBRTtRQUN6QyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMsd0JBQXdCRCx1QkFBdUIsRUFBRSxFQUFFO1FBQ2pELE1BQU1ELFVBQVUsSUFBSSxDQUFDRyxVQUFVO1FBRS9CUixLQUFLTSxzQkFBc0IsSUFBSSxDQUFDQSxvQkFBb0I7UUFFcERELFFBQVFFLHVCQUF1QixDQUFDRDtRQUVoQyxPQUFPQTtJQUNUO0lBRUFHLDZCQUE2QjtRQUMzQixJQUFJQywwQkFBMEI7UUFFOUIsTUFBTUMsNkJBQTZCLElBQUksQ0FBQ0wsb0JBQW9CLENBQUNNLE1BQU07UUFFbkUsSUFBSUQsK0JBQStCLEdBQUc7WUFDcEMsTUFBTUUsMkJBQTJCWCxNQUFNLElBQUksQ0FBQ0ksb0JBQW9CO1lBRWhFSSwwQkFBMEJHLDBCQUEwQixHQUFHO1FBQ3pEO1FBRUEsT0FBT0g7SUFDVDtJQUVBSSx1Q0FBdUM7UUFD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
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5cbmNvbnN0IHsgcHVzaCwgZmluZCwgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaW1pbmFsQ29udGV4dCBleHRlbmRzIENvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBkZXJpdmVkU3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyA9IGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goZGVyaXZlZFN1YnN0aXR1dGlvbnMsIHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgY29udGV4dC5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPSB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uID0gZmlyc3QodGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc29sZURlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRTb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24oKSB7XG4gICAgbGV0IHNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24oKTtcblxuICAgIGlmIChzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc29sZURlcml2ZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsID0gc29sZURlcml2ZWRTdWJzdGl0dXRpb24uaXNOb25Ucml2aWFsKCk7XG5cbiAgICAgIGlmIChzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwpIHtcbiAgICAgICAgc29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uID0gc29sZURlcml2ZWRTdWJzdGl0dXRpb247ICAvLy9cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgYWRkRGVyaXZlZFN1YnN0aXR1dGlvbihkZXJpdmVkU3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25BID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZyA9IGRlcml2ZWRTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2Rlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnN0aXR1dGlvbiB0byB0aGUgbGltaW5hbCBjb250ZXh0Li4uYCk7XG5cbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uQiA9IHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMuZmluZCgoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbkIgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25BRXF1YWxUb0Rlcml2ZWRTdWJzdGl0dXRpb25CID0gZGVyaXZlZFN1YnN0aXR1dGlvbkEuaXNFcXVhbFRvKGRlcml2ZWRTdWJzdGl0dXRpb25CKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25BRXF1YWxUb0Rlcml2ZWRTdWJzdGl0dXRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbkIgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgZGVyaXZlZCBzdWJzdGl0dXRpb24gaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgbGltaW5hbCBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLnB1c2goZGVyaXZlZFN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Rlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmd9JyBkZXJpdmVkIHN1YnN0aXR1dGlvbiB0byB0aGUgbGltaW5hbCBjb250ZXh0LmApO1xuICB9XG5cbiAgYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpIHtcbiAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucy5mb3JFYWNoKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZERlcml2ZWRTdWJzdGl0dXRpb24oZGVyaXZlZFN1YnN0aXR1dGlvbik7XG4gICAgfSk7XG4gIH1cblxuICByZXNvbHZlRGVyaXZlZFN1YnN0aXR1dGlvbnMoY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVzID0gbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGZvckVhY2gobWV0YXZhcmlhYmxlTm9kZXMsIChtZXRhdmFyaWFibGVOb2RlLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgcmV0dXJuIGZvckVhY2goY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zLCAoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICByZXNvbHZlZCA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uLnJlc29sdmUoY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIGFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQoKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMgPSBtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyksXG4gICAgICAgICAgcmVzb2x2ZWQgPSBtZXRhdmFyaWFibGVOb2Rlcy5ldmVyeSgobWV0YXZhcmlhYmxlTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5maW5kQ29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgICAgICAgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQgPSBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMuZXZlcnkoKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uUmVzb2x2ZWQgPSBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbi5pc1Jlc29sdmVkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiByZXNvbHZlZDtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnNMZW5ndGggPSB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBlbXB0eSA9IChkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gZW1wdHk7XG4gIH1cblxuICBxdWFsaWZ5KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQpIHtcbiAgICBsZXQgcXVhbGlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBlbXB0eSA9IHRoaXMuaXNFbXB0eSgpO1xuXG4gICAgaWYgKGVtcHR5KSB7XG4gICAgICBxdWFsaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24oKTtcblxuICAgICAgaWYgKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgUmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzLFxuICAgICAgICAgICAgICByZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uID0gUmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbi5mcm9tQXNzdW1wdGlvbkFuZENvbnN0cmFpbnQoYXNzdW1wdGlvbiwgY29uc3RyYWludCwgY29udGV4dCksXG4gICAgICAgICAgICAgIHJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb25Db21wYXJlc1RvU3NvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gcmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbi5jb21wYXJlU3Vic3RpdHV0aW9uKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKTtcblxuICAgICAgICBpZiAocmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZURlcml2ZWRTdWJzdGl0dXRpb24pIHtcbiAgICAgICAgICBxdWFsaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1YWxpZmllcztcbiAgfVxuXG4gIGNvbW1pdChjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYENvbW1pdHRpbmcgdGhlIGxpbWluYWwgY29udGV4dGApO1xuXG4gICAgY29udGV4dC5hZGREZXJpdmVkU3Vic3RpdHV0aW9ucyh0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zKTtcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9uKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGRlcml2ZWRTdWJzdGl0dXRpb25zLmZpbmQoY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbnMoY2FsbGJhY2spIHtcbiAgICBsZXQgZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG5cbiAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKTtcblxuICAgIGRlcml2ZWRTdWJzdGl0dXRpb25zID0gZmluZChkZXJpdmVkU3Vic3RpdHV0aW9ucywgY2FsbGJhY2spOyAgLy8vXG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGVNYXRjaGVzID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAodmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb247ICAvLy9cblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZFNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uU2ltcGxlID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5pc1NpbXBsZSgpO1xuXG4gICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvblNpbXBsZSkge1xuICAgICAgICBjb25zdCBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9ucygoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBsZXggPSBkZXJpdmVkU3Vic3RpdHV0aW9uLmlzQ29tcGxleCgpO1xuXG4gICAgICBpZiAoZGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBsZXgpIHtcbiAgICAgICAgY29uc3QgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24gPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb24oKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHsgIC8vL1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IChkZXJpdmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoZGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgbGltaW5hbENvbnRleHQgPSBuZXcgTGltaW5hbENvbnRleHQoY29udGV4dCwgZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGxpbWluYWxDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiTGltaW5hbENvbnRleHQiLCJwdXNoIiwiZmluZCIsImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsImRlcml2ZWRTdWJzdGl0dXRpb25zIiwiZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXRDb250ZXh0IiwiZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24iLCJzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uIiwiZ2V0U29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uIiwic29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uIiwic29sZURlcml2ZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsIiwiaXNOb25Ucml2aWFsIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbiIsImRlcml2ZWRTdWJzdGl0dXRpb24iLCJkZXJpdmVkU3Vic3RpdHV0aW9uQSIsImRlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlcml2ZWRTdWJzdGl0dXRpb25CIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkFFcXVhbFRvRGVyaXZlZFN1YnN0aXR1dGlvbkIiLCJpc0VxdWFsVG8iLCJkZWJ1ZyIsImFkZERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZm9yRWFjaCIsInJlc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucyIsImNvbnRpbnVhdGlvbiIsIm1ldGF2YXJpYWJsZU5vZGVzIiwibWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJtZXRhdmFyaWFibGVOb2RlIiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZmluZENvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uIiwicmVzb2x2ZWQiLCJpc1Jlc29sdmVkIiwicmVzb2x2ZSIsImFyZURlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJldmVyeSIsImNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25SZXNvbHZlZCIsImlzRW1wdHkiLCJlbXB0eSIsInF1YWxpZnkiLCJhc3N1bXB0aW9uIiwiY29uc3RyYWludCIsInF1YWxpZmllcyIsIlJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsInJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24iLCJmcm9tQXNzdW1wdGlvbkFuZENvbnN0cmFpbnQiLCJyZWZlcmVuY2VEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImNvbXBhcmVTdWJzdGl0dXRpb24iLCJjb21taXQiLCJ1bmRlZmluZWQiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbiIsImNhbGxiYWNrIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25zIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaFZhcmlhYmxlTm9kZSIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwic2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblNpbXBsZSIsImlzU2ltcGxlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJkZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGxleCIsImlzQ29tcGxleCIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoU3Vic3RpdHV0aW9uTm9kZSIsImlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCIsImlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlIiwiZnJvbU5vdGhpbmciLCJsaW1pbmFsQ29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBWUE7OztlQUFxQkE7OzsyQkFWVTsrQkFDMkI7Z0VBRXRDO2lFQUNDOzhCQUVHOzs7Ozs7QUFFeEIsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRTdCLE1BQU1KLHVCQUF1QkssZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxvQkFBb0IsQ0FBRTtRQUN6QyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMsd0JBQXdCRCx1QkFBdUIsRUFBRSxFQUFFO1FBQ2pELE1BQU1ELFVBQVUsSUFBSSxDQUFDRyxVQUFVO1FBRS9CUixLQUFLTSxzQkFBc0IsSUFBSSxDQUFDQSxvQkFBb0I7UUFFcERELFFBQVFFLHVCQUF1QixDQUFDRDtRQUVoQyxPQUFPQTtJQUNUO0lBRUFHLDZCQUE2QjtRQUMzQixJQUFJQywwQkFBMEI7UUFFOUIsTUFBTUMsNkJBQTZCLElBQUksQ0FBQ0wsb0JBQW9CLENBQUNNLE1BQU07UUFFbkUsSUFBSUQsK0JBQStCLEdBQUc7WUFDcEMsTUFBTUUsMkJBQTJCWCxNQUFNLElBQUksQ0FBQ0ksb0JBQW9CO1lBRWhFSSwwQkFBMEJHLDBCQUEwQixHQUFHO1FBQ3pEO1FBRUEsT0FBT0g7SUFDVDtJQUVBSSx1Q0FBdUM7UUFDckMsSUFBSUMsb0NBQW9DO1FBRXhDLE1BQU1MLDBCQUEwQixJQUFJLENBQUNELDBCQUEwQjtRQUUvRCxJQUFJQyw0QkFBNEIsTUFBTTtZQUNwQyxNQUFNTSxvQ0FBb0NOLHdCQUF3Qk8s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
|
|
@@ -12,6 +12,7 @@ const _necessary = require("necessary");
|
|
|
12
12
|
const _occamlanguages = require("occam-languages");
|
|
13
13
|
const _assertion = /*#__PURE__*/ _interop_require_default(require("../assertion"));
|
|
14
14
|
const _elements = require("../../elements");
|
|
15
|
+
const _continuation = require("../../utilities/continuation");
|
|
15
16
|
const _instantiate = require("../../process/instantiate");
|
|
16
17
|
const _context = require("../../utilities/context");
|
|
17
18
|
const _element = require("../../utilities/element");
|
|
@@ -20,7 +21,7 @@ function _interop_require_default(obj) {
|
|
|
20
21
|
default: obj
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
|
-
const { last, front } = _necessary.arrayUtilities, { breakPointFromJSON } = _occamlanguages.breakPointUtilities
|
|
24
|
+
const { last, front } = _necessary.arrayUtilities, { breakPointFromJSON } = _occamlanguages.breakPointUtilities;
|
|
24
25
|
const _default = (0, _elements.define)(class SubproofAssertion extends _assertion.default {
|
|
25
26
|
constructor(context, string, node, breakPoint, statements){
|
|
26
27
|
super(context, string, node, breakPoint);
|
|
@@ -72,7 +73,7 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
|
|
|
72
73
|
});
|
|
73
74
|
}
|
|
74
75
|
validateStatements(context, continuation) {
|
|
75
|
-
return every(this.statements, (statement, continuation)=>{
|
|
76
|
+
return (0, _continuation.every)(this.statements, context, (statement, continuation)=>{
|
|
76
77
|
(0, _context.descend)((context)=>{
|
|
77
78
|
return statement.validate(context, (statement)=>{
|
|
78
79
|
let statementValidates = false;
|
|
@@ -186,7 +187,7 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
|
|
|
186
187
|
return continuation(suppositionsUnify);
|
|
187
188
|
}
|
|
188
189
|
let index = -1;
|
|
189
|
-
return backwardsEvery(suppositions, (supposition, continuation)=>{
|
|
190
|
+
return (0, _continuation.backwardsEvery)(suppositions, (supposition, continuation)=>{
|
|
190
191
|
index++;
|
|
191
192
|
return this.unifySupposition(supposition, index, generalContext, specificContext, continuation);
|
|
192
193
|
}, continuation);
|
|
@@ -217,4 +218,4 @@ function statementsFromSubproofAssertionNode(subproofAssertionNode, context) {
|
|
|
217
218
|
return statements;
|
|
218
219
|
}
|
|
219
220
|
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgZGVzY2VuZCwgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGxhc3QsIGZyb250IH0gPSBhcnJheVV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBldmVyeSwgYmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFN1YnByb29mQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHM7XG4gIH1cblxuICBnZXREZWR1Y2VkU3RhdGVtZW50KCkge1xuICAgIGNvbnN0IGxhc3RTdGF0ZW1lbnQgPSBsYXN0KHRoaXMuc3RhdGVtZW50cyksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IGxhc3RTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdXBwb3NlZFN0YXRlbWVudChpbmRleCkge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuc3RhdGVtZW50c1tpbmRleF0sXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7ICAvLy9cblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN1cHBvc2VkU3RhdGVtZW50cygpIHtcbiAgICBjb25zdCBmcm9udFN0YXRlbWVudHMgPSBmcm9udCh0aGlzLnN0YXRlbWVudHMpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50cyA9IGZyb250U3RhdGVtZW50czsgIC8vL1xuXG4gICAgcmV0dXJuIHN1cHBvc2VkU3RhdGVtZW50cztcbiAgfVxuXG4gIGdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRBc3NlcnRpb24gPSB0aGlzLmZpbmRWYWxpZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSB2YWxpZEFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbiBpcyBhbHJlYWR5IHZhbGlkLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1YnByb29mQXNzZXJ0aW9uKTtcbiAgICB9XG5cbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgdGhpcy52YWxpZGF0ZVN0YXRlbWVudHMoY29udGV4dCwgKHN0YXRlbWVudHNWYWxpZGF0ZSkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RhdGVtZW50c1ZhbGlkYXRlKSB7XG4gICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpczsgLy8vXG5cbiAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBhc3NlcnRpb247ICAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VicHJvb2ZBc3NlcnRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnRzKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIHJldHVybiBldmVyeSh0aGlzLnN0YXRlbWVudHMsIChzdGF0ZW1lbnQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgZGVzY2VuZCgoY29udGV4dCkgPT4ge1xuICAgICAgICByZXR1cm4gc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdW5pZnlTY2hlbWEoc2NoZW1hLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgZGVkdWN0aW9uID0gc2NoZW1hLmdldERlZHVjdGlvbigpLFxuICAgICAgICAgIGRlZHVjdGlvblVuaWZpZXMgPSB0aGlzLnVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25zID0gc2NoZW1hLmdldFN1cHBvc2l0aW9ucygpLFxuICAgICAgICAgICAgc3VwcG9zaXRpb25zVW5pZnkgPSB0aGlzLnVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIGlmIChzdXBwb3NpdGlvbnNVbmlmeSkge1xuICAgICAgICBzY2hlbWFVbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2YuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBsYXN0U3RlcCA9IHN1YnByb29mLmdldExhc3RTdGVwKCk7XG5cbiAgICByZXR1cm4gdGhpcy51bmlmeUxhc3RTdGVwKGxhc3RTdGVwLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAobGFzdFN0ZXBVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgc3VicHJvb2ZVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgIGlmICghbGFzdFN0ZXBVbmlmaWVzKSB7XG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VicHJvb2ZVbmlmaWVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VicHJvb2YuZ2V0U3VwcG9zaXRpb25zKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN1cHBvc2l0aW9uc1VuaWZ5KSA9PiB7XG4gICAgICAgIGlmIChzdXBwb3NpdGlvbnNVbmlmeSkge1xuICAgICAgICAgIHN1YnByb29mVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VicHJvb2ZVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VicHJvb2ZVbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlMYXN0U3RlcChsYXN0U3RlcCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxhc3RTdGVwU3RyaW5nID0gbGFzdFN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IHRoaXMuZ2V0RGVkdWNlZFN0YXRlbWVudCgpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnRTdHJpbmcgPSBkZWR1Y2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC4uLmApXG5cbiAgICBjb25zdCBsYXN0U3RlcENvbnRleHQgPSBsYXN0U3RlcC5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBsYXN0U3RlcENvbnRleHQ7ICAvLy9cblxuICAgIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsYXN0U3RlcFN0YXRlbWVudCA9IGxhc3RTdGVwLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICByZXR1cm4gZGVkdWNlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChsYXN0U3RlcFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGxhc3RTdGVwU3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICBsZXQgbGFzdFN0ZXBVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGxhc3RTdGVwU3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgIGxhc3RTdGVwVW5pZmllcyA9IHRydWU7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhc3RTdGVwVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC5gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYXN0U3RlcFVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBkZWR1Y3Rpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gZGVkdWN0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSB0aGlzLmdldERlZHVjZWRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50U3RyaW5nID0gZGVkdWNlZFN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24gd2l0aCB0aGUgJyR7ZGVkdWNlZFN0YXRlbWVudFN0cmluZ30nIGRlZHVjZWQgc3RhdGVtZW50Li4uYClcblxuICAgIGNvbnN0IGRlZHVjdGlvbkNvbnRleHQgPSBkZWR1Y3Rpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gZGVkdWN0aW9uQ29udGV4dDsgIC8vL1xuXG4gICAgcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGRlZHVjdGlvblN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgIGRlZHVjdGlvblN0YXRlbWVudFVuaWZpZXMgPSBkZWR1Y2VkU3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KGRlZHVjdGlvblN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIGlmIChkZWR1Y3Rpb25TdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgIGRlZHVjdGlvblVuaWZpZXMgPSB0cnVlO1xuXG4gICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG4gICAgICB9XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChkZWR1Y3Rpb25VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24gd2l0aCB0aGUgJyR7ZGVkdWNlZFN0YXRlbWVudFN0cmluZ30nIGRlZHVjZWQgc3RhdGVtZW50LmApXG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZHVjdGlvblVuaWZpZXM7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBpbmRleCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gdGhpcy5nZXRTdXBwb3NlZFN0YXRlbWVudChpbmRleCksXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25TdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgcmV0dXJuIHN1cHBvc2VkU3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN1cHBvc2l0aW9uU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3VwcG9zaXRpb25TdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgIGxldCBzdXBwb3NpdGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3VwcG9zaXRpb25TdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgc3VwcG9zaXRpb25VbmlmaWVzID0gdHJ1ZTtcblxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VwcG9zaXRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbiB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC5gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvblVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnRzID0gdGhpcy5nZXRTdXBwb3NlZFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VwcG9zaXRpb25zVW5pZnkpO1xuICAgIH1cblxuICAgIGxldCBpbmRleCA9IC0xO1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGluZGV4LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU3VicHJvb2ZBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzdWJwcm9vckFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHN1YnByb29yQXNzZXJ0aW9uID0gbmV3IFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cyk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb3JBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZXMgPSBzdWJwcm9vZkFzc2VydGlvbk5vZGUuZ2V0U3RhdGVtZW50Tm9kZXMoKSxcbiAgICAgICAgc3RhdGVtZW50cyA9IHN0YXRlbWVudE5vZGVzLm1hcCgoc3RhdGVtZXROb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWV0Tm9kZSk7XG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVtZW50O1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50cztcbn1cbiJdLCJuYW1lcyI6WyJsYXN0IiwiZnJvbnQiLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJldmVyeSIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImdldERlZHVjZWRTdGF0ZW1lbnQiLCJsYXN0U3RhdGVtZW50IiwiZGVkdWNlZFN0YXRlbWVudCIsImdldFN1cHBvc2VkU3RhdGVtZW50IiwiaW5kZXgiLCJzdGF0ZW1lbnQiLCJzdXBwb3NlZFN0YXRlbWVudCIsImdldFN1cHBvc2VkU3RhdGVtZW50cyIsImZyb250U3RhdGVtZW50cyIsInN1cHBvc2VkU3RhdGVtZW50cyIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsInN1YnByb29mQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZEFzc2VydGlvbiIsImZpbmRWYWxpZEFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJzdGF0ZW1lbnRzVmFsaWRhdGUiLCJ2YWxpZGF0ZXMiLCJhc3NlcnRpb24iLCJhZGRBc3NlcnRpb24iLCJkZXNjZW5kIiwic3RhdGVtZW50VmFsaWRhdGVzIiwidW5pZnlTY2hlbWEiLCJzY2hlbWEiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInNjaGVtYVVuaWZpZXMiLCJzY2hlbWFTdHJpbmciLCJkZWR1Y3Rpb24iLCJnZXREZWR1Y3Rpb24iLCJkZWR1Y3Rpb25VbmlmaWVzIiwidW5pZnlEZWR1Y3Rpb24iLCJzdXBwb3NpdGlvbnMiLCJnZXRTdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNVbmlmeSIsInVuaWZ5U3VwcG9zaXRpb25zIiwidW5pZnlTdWJwcm9vZiIsInN1YnByb29mIiwic3VicHJvb2ZTdHJpbmciLCJsYXN0U3RlcCIsImdldExhc3RTdGVwIiwidW5pZnlMYXN0U3RlcCIsImxhc3RTdGVwVW5pZmllcyIsInN1YnByb29mVW5pZmllcyIsImxhc3RTdGVwU3RyaW5nIiwiZGVkdWNlZFN0YXRlbWVudFN0cmluZyIsImxhc3RTdGVwQ29udGV4dCIsImdldENvbnRleHQiLCJyZWNvbmNpbGUiLCJsYXN0U3RlcFN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwibGFzdFN0ZXBTdGF0ZW1lbnRVbmlmaWVzIiwiY29tbWl0IiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImRlZHVjdGlvblN0YXRlbWVudCIsImRlZHVjdGlvblN0YXRlbWVudFVuaWZpZXMiLCJ1bmlmeVN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblN0cmluZyIsInN1cHBvc2VkU3RhdGVtZW50U3RyaW5nIiwic3VwcG9zaXRpb25Db250ZXh0Iiwic3VwcG9zaXRpb25TdGF0ZW1lbnQiLCJzdXBwb3NpdGlvblN0YXRlbWVudFVuaWZpZXMiLCJzdXBwb3NpdGlvblVuaWZpZXMiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIiwic3VicHJvb3JBc3NlcnRpb24iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnRzRnJvbVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGVzIiwiZ2V0U3RhdGVtZW50Tm9kZXMiLCJtYXAiLCJzdGF0ZW1ldE5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFnQkE7OztlQUFBOzs7MkJBZCtCO2dDQUM0QjtrRUFFckM7MEJBRUM7NkJBQ3NCO3lCQUNHO3lCQUNHOzs7Ozs7QUFFbkQsTUFBTSxFQUFFQSxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYyxFQUNoQyxFQUFFQyxrQkFBa0IsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDNUMsRUFBRUMsS0FBSyxFQUFFQyxjQUFjLEVBQUUsR0FBR0MscUNBQXFCO01BRXZELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMEJBQTBCQyxrQkFBUztJQUM3RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsQ0FBRTtRQUN6RCxLQUFLLENBQUNKLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0QsVUFBVTtJQUN4QjtJQUVBRSxzQkFBc0I7UUFDcEIsTUFBTUMsZ0JBQWdCbEIsS0FBSyxJQUFJLENBQUNlLFVBQVUsR0FDcENJLG1CQUFtQkQsZUFBZSxHQUFHO1FBRTNDLE9BQU9DO0lBQ1Q7SUFFQUMscUJBQXFCQyxLQUFLLEVBQUU7UUFDMUIsTUFBTUMsWUFBWSxJQUFJLENBQUNQLFVBQVUsQ0FBQ00sTUFBTSxFQUNsQ0Usb0JBQW9CRCxXQUFZLEdBQUc7UUFFekMsT0FBT0M7SUFDVDtJQUVBQyx3QkFBd0I7UUFDdEIsTUFBTUMsa0JBQWtCeEIsTUFBTSxJQUFJLENBQUNjLFVBQVUsR0FDdkNXLHFCQUFxQkQsaUJBQWtCLEdBQUc7UUFFaEQsT0FBT0M7SUFDVDtJQUVBQywyQkFBMkI7UUFDekIsTUFBTWQsT0FBTyxJQUFJLENBQUNlLE9BQU8sSUFDbkJDLHdCQUF3QmhCLE1BQU0sR0FBRztRQUV2QyxPQUFPZ0I7SUFDVDtJQUVBQyxTQUFTbkIsT0FBTyxFQUFFb0IsWUFBWSxFQUFFO1FBQzlCLE1BQU1DLDBCQUEwQixJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXREdEIsUUFBUXVCLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRix3QkFBd0IsdUJBQXVCLENBQUM7UUFFakYsTUFBTUcsaUJBQWlCLElBQUksQ0FBQ0Msa0JBQWtCLENBQUN6QjtRQUUvQyxJQUFJd0IsbUJBQW1CLE1BQU07WUFDM0IsTUFBTUUsb0JBQW9CRixnQkFBZ0IsR0FBRztZQUU3Q3hCLFFBQVEyQixLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUVOLHdCQUF3QixzQ0FBc0MsQ0FBQztZQUV4RixPQUFPRCxhQUFhTTtRQUN0QjtRQUVBLElBQUlBLG9CQUFvQjtRQUV4QixJQUFJLENBQUNFLGtCQUFrQixDQUFDNUIsU0FBUyxDQUFDNkI7WUFDaEMsSUFBSUMsWUFBWTtZQUVoQixJQUFJRCxvQkFBb0I7Z0JBQ3RCQyxZQUFZO1lBQ2Q7WUFFQSxJQUFJQSxXQUFXO2dCQUNiLE1BQU1DLFlBQVksSUFBSSxFQUFFLEdBQUc7Z0JBRTNCTCxvQkFBb0JLLFdBQVksR0FBRztnQkFFbkMvQixRQUFRZ0MsWUFBWSxDQUFDRDtZQUN2QjtZQUVBLElBQUlELFdBQVc7Z0JBQ2I5QixRQUFRMkIsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVOLHdCQUF3QixxQkFBcUIsQ0FBQztZQUNuRjtZQUVBLE9BQU9ELGFBQWFNO1FBQ3RCO0lBQ0Y7SUFFQUUsbUJBQW1CNUIsT0FBTyxFQUFFb0IsWUFBWSxFQUFFO1FBQ3hDLE9BQU8xQixNQUFNLElBQUksQ0FBQ1UsVUFBVSxFQUFFLENBQUNPLFdBQVdTO1lBQ3hDYSxJQUFBQSxnQkFBTyxFQUFDLENBQUNqQztnQkFDUCxPQUFPVyxVQUFVUSxRQUFRLENBQUNuQixTQUFTLENBQUNXO29CQUNsQyxJQUFJdUIscUJBQXFCO29CQUV6QixJQUFJdkIsY0FBYyxNQUFNO3dCQUN0QnVCLHFCQUFxQjtvQkFDdkI7b0JBRUEsT0FBT2QsYUFBYWM7Z0JBQ3RCO1lBQ0YsR0FBR2xDO1FBQ0wsR0FBR29CO0lBQ0w7SUFFQWUsWUFBWUMsTUFBTSxFQUFFQyxjQUFjLEVBQUVDLGVBQWUsRUFBRTtRQUNuRCxJQUFJQyxnQkFBZ0I7UUFFcEIsTUFBTXZDLFVBQVVzQyxpQkFDVkUsZUFBZUosT0FBT2QsU0FBUyxJQUMvQkQsMEJBQTBCLElBQUksQ0FBQ0MsU0FBUztRQUU5Q3RCLFFBQVF1QixLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVpQixhQUFhLG1CQUFtQixFQUFFbkIsd0JBQXdCLHVCQUF1QixDQUFDO1FBRWpILE1BQU1vQixZQUFZTCxPQUFPTSxZQUFZLElBQy9CQyxtQkFBbUIsSUFBSSxDQUFDQyxjQUFjLENBQUNILFdBQVdKLGdCQUFnQkM7UUFFeEUsSUFBSUssa0JBQWtCO1lBQ3BCLE1BQU1FLGVBQWVULE9BQU9VLGVBQWUsSUFDckNDLG9CQUFvQixJQUFJLENBQUNDLGlCQUFpQixDQUFDSCxjQUFjUixnQkFBZ0JDO1lBRS9FLElBQUlTLG1CQUFtQjtnQkFDckJSLGdCQUFnQjtZQUNsQjtRQUNGO1FBRUEsSUFBSUEsZUFBZTtZQUNqQnZDLFFBQVEyQixLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRWEsYUFBYSxtQkFBbUIsRUFBRW5CLHdCQUF3QixxQkFBcUIsQ0FBQztRQUNuSDtRQUVBLE9BQU9rQjtJQUNUO0lBRUFVLGNBQWNDLFFBQVEsRUFBRWIsY0FBYyxFQUFFQyxlQUFlLEVBQUVsQixZQUFZLEVBQUU7UUFDckUsTUFBTXBCLFVBQVVzQyxpQkFDVmEsaUJBQWlCRCxTQUFTNUIsU0FBUyxJQUNuQ0QsMEJBQTBCLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFckR0QixRQUFRdUIsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFNEIsZUFBZSxxQkFBcUIsRUFBRTlCLHdCQUF3Qix1QkFBdUIsQ0FBQztRQUVySCxNQUFNK0IsV0FBV0YsU0FBU0csV0FBVztRQUVyQyxPQUFPLElBQUksQ0FBQ0MsYUFBYSxDQUFDRixVQUFVZixnQkFBZ0JDLGlCQUFpQixDQUFDaUI7WUFDcEUsSUFBSUMsa0JBQWtCO1lBRXRCLElBQUksQ0FBQ0QsaUJBQWlCO2dCQUNwQixPQUFPbkMsYUFBYW9DO1lBQ3RCO1lBRUEsTUFBTVgsZUFBZUssU0FBU0osZUFBZTtZQUU3QyxPQUFPLElBQUksQ0FBQ0UsaUJBQWlCLENBQUNILGNBQWNSLGdCQUFnQkMsaUJBQWlCLENBQUNTO2dCQUM1RSxJQUFJQSxtQkFBbUI7b0JBQ3JCUyxrQkFBa0I7Z0JBQ3BCO2dCQUVBLElBQUlBLGlCQUFpQjtvQkFDbkJ4RCxRQUFRMkIsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUV3QixlQUFlLHFCQUFxQixFQUFFOUIsd0JBQXdCLHFCQUFxQixDQUFDO2dCQUN2SDtnQkFFQSxPQUFPRCxhQUFhb0M7WUFDdEI7UUFDRjtJQUNGO0lBRUFGLGNBQWNGLFFBQVEsRUFBRWYsY0FBYyxFQUFFQyxlQUFlLEVBQUVsQixZQUFZLEVBQUU7UUFDckUsTUFBTXBCLFVBQVVzQyxpQkFDVm1CLGlCQUFpQkwsU0FBUzlCLFNBQVMsSUFDbkNkLG1CQUFtQixJQUFJLENBQUNGLG1CQUFtQixJQUMzQ29ELHlCQUF5QmxELGlCQUFpQmMsU0FBUztRQUV6RHRCLFFBQVF1QixLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVrQyxlQUFlLHNCQUFzQixFQUFFQyx1QkFBdUIsc0JBQXNCLENBQUM7UUFFcEgsTUFBTUMsa0JBQWtCUCxTQUFTUSxVQUFVO1FBRTNDdEIsa0JBQWtCcUIsaUJBQWtCLEdBQUc7UUFFdkNFLElBQUFBLGtCQUFTLEVBQUMsQ0FBQ3ZCO1lBQ1QsTUFBTXdCLG9CQUFvQlYsU0FBU1csWUFBWTtZQUUvQyxPQUFPdkQsaUJBQWlCd0QsY0FBYyxDQUFDRixtQkFBbUJ6QixnQkFBZ0JDLGlCQUFpQixDQUFDMkI7Z0JBQzFGLElBQUlWLGtCQUFrQjtnQkFFdEIsSUFBSVUsMEJBQTBCO29CQUM1QlYsa0JBQWtCO29CQUVsQmpCLGdCQUFnQjRCLE1BQU0sQ0FBQ2xFO2dCQUN6QjtnQkFFQSxJQUFJdUQsaUJBQWlCO29CQUNuQnZELFFBQVEyQixLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRThCLGVBQWUsc0JBQXNCLEVBQUVDLHVCQUF1QixvQkFBb0IsQ0FBQztnQkFDdEg7Z0JBRUEsT0FBT3RDLGFBQWFtQztZQUN0QjtRQUNGLEdBQUdqQjtJQUNMO0lBRUFNLGVBQWVILFNBQVMsRUFBRUosY0FBYyxFQUFFQyxlQUFlLEVBQUU7UUFDekQsSUFBSUssbUJBQW1CO1FBRXZCLE1BQU0zQyxVQUFVc0MsaUJBQ1Y2QixrQkFBa0IxQixVQUFVbkIsU0FBUyxJQUNyQ2QsbUJBQW1CLElBQUksQ0FBQ0YsbUJBQW1CLElBQzNDb0QseUJBQXlCbEQsaUJBQWlCYyxTQUFTO1FBRXpEdEIsUUFBUXVCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRTRDLGdCQUFnQixzQkFBc0IsRUFBRVQsdUJBQXVCLHNCQUFzQixDQUFDO1FBRXJILE1BQU1VLG1CQUFtQjNCLFVBQVVtQixVQUFVO1FBRTdDdEIsa0JBQWtCOEIsa0JBQW1CLEdBQUc7UUFFeENQLElBQUFBLGtCQUFTLEVBQUMsQ0FBQ3ZCO1lBQ1QsTUFBTStCLHFCQUFxQjVCLFVBQVVzQixZQUFZLElBQzNDTyw0QkFBNEI5RCxpQkFBaUJ3RCxjQUFjLENBQUNLLG9CQUFvQmhDLGdCQUFnQkM7WUFFdEcsSUFBSWdDLDJCQUEyQjtnQkFDN0IzQixtQkFBbUI7Z0JBRW5CTCxnQkFBZ0I0QixNQUFNLENBQUNsRTtZQUN6QjtRQUNGLEdBQUdzQztRQUVILElBQUlLLGtCQUFrQjtZQUNwQjNDLFFBQVEyQixLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRXdDLGdCQUFnQixzQkFBc0IsRUFBRVQsdUJBQXVCLG9CQUFvQixDQUFDO1FBQ3ZIO1FBRUEsT0FBT2Y7SUFDVDtJQUVBNEIsaUJBQWlCQyxXQUFXLEVBQUU5RCxLQUFLLEVBQUUyQixjQUFjLEVBQUVDLGVBQWUsRUFBRWxCLFlBQVksRUFBRTtRQUNsRixNQUFNcEIsVUFBVXNDLGlCQUNWMUIsb0JBQW9CLElBQUksQ0FBQ0gsb0JBQW9CLENBQUNDLFFBQzlDK0Qsb0JBQW9CRCxZQUFZbEQsU0FBUyxJQUN6Q29ELDBCQUEwQjlELGtCQUFrQlUsU0FBUztRQUUzRHRCLFFBQVF1QixLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVrRCxrQkFBa0Isd0JBQXdCLEVBQUVDLHdCQUF3Qix1QkFBdUIsQ0FBQztRQUUzSCxNQUFNQyxxQkFBcUJILFlBQVlaLFVBQVU7UUFFakR0QixrQkFBa0JxQyxvQkFBcUIsR0FBRztRQUUxQ2QsSUFBQUEsa0JBQVMsRUFBQyxDQUFDdkI7WUFDVCxNQUFNc0MsdUJBQXVCSixZQUFZVCxZQUFZO1lBRXJELE9BQU9uRCxrQkFBa0JvRCxjQUFjLENBQUNZLHNCQUFzQnZDLGdCQUFnQkMsaUJBQWlCLENBQUN1QztnQkFDOUYsSUFBSUMscUJBQXFCO2dCQUV6QixJQUFJRCw2QkFBNkI7b0JBQy9CQyxxQkFBcUI7b0JBRXJCeEMsZ0JBQWdCNEIsTUFBTSxDQUFDbEU7Z0JBQ3pCO2dCQUVBLElBQUk4RSxvQkFBb0I7b0JBQ3RCOUUsUUFBUTJCLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFOEMsa0JBQWtCLHdCQUF3QixFQUFFQyx3QkFBd0IscUJBQXFCLENBQUM7Z0JBQzdIO2dCQUVBLE9BQU90RCxhQUFhMEQ7WUFDdEI7UUFDRixHQUFHeEM7SUFDTDtJQUVBVSxrQkFBa0JILFlBQVksRUFBRVIsY0FBYyxFQUFFQyxlQUFlLEVBQUVsQixZQUFZLEVBQUU7UUFDN0UsTUFBTUwscUJBQXFCLElBQUksQ0FBQ0YscUJBQXFCLElBQy9Da0UscUJBQXFCbEMsYUFBYW1DLE1BQU0sRUFDeENDLDJCQUEyQmxFLG1CQUFtQmlFLE1BQU07UUFFMUQsSUFBSUQsdUJBQXVCRSwwQkFBMEI7WUFDbkQsTUFBTWxDLG9CQUFvQjtZQUUxQixPQUFPM0IsYUFBYTJCO1FBQ3RCO1FBRUEsSUFBSXJDLFFBQVEsQ0FBQztRQUViLE9BQU9mLGVBQWVrRCxjQUFjLENBQUMyQixhQUFhcEQ7WUFDaERWO1lBRUEsT0FBTyxJQUFJLENBQUM2RCxnQkFBZ0IsQ0FBQ0MsYUFBYTlELE9BQU8yQixnQkFBZ0JDLGlCQUFpQmxCO1FBQ3BGLEdBQUdBO0lBQ0w7SUFFQSxPQUFPOEQsT0FBTyxvQkFBb0I7SUFFbEMsT0FBT0MsU0FBU0MsSUFBSSxFQUFFcEYsT0FBTyxFQUFFO1FBQzdCLElBQUlxRixvQkFBb0I7UUFFeEIsTUFBTSxFQUFFSCxJQUFJLEVBQUUsR0FBR0U7UUFFakIsSUFBSSxJQUFJLENBQUNGLElBQUksS0FBS0EsTUFBTTtZQUN0QkksSUFBQUEsb0JBQVcsRUFBQyxDQUFDdEY7Z0JBQ1gsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR21GLE1BQ2JsRSx3QkFBd0JxRSxJQUFBQSx5Q0FBNEIsRUFBQ3RGLFFBQVFELFVBQzdERSxPQUFPZ0IsdUJBQ1BmLGFBQWFYLG1CQUFtQjRGLE9BQ2hDaEYsYUFBYW9GLG9DQUFvQ3RFLHVCQUF1QmxCO2dCQUU5RUEsVUFBVTtnQkFFVnFGLG9CQUFvQixJQUFJdkYsa0JBQWtCRSxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZQztZQUMvRSxHQUFHSjtRQUNMO1FBRUEsT0FBT3FGO0lBQ1Q7SUFFQSxPQUFPSSxjQUFjOUUsU0FBUyxFQUFFWCxPQUFPLEVBQUU7UUFDdkMsTUFBTTBGLGdCQUFnQi9FLFVBQVVNLE9BQU8sSUFDakNTLG9CQUFvQmlFLElBQUFBLDJDQUFrQyxFQUFDRCxlQUFlMUY7UUFFNUUsT0FBTzBCO0lBQ1Q7QUFDRjtBQUVBLFNBQVM4RCxvQ0FBb0N0RSxxQkFBcUIsRUFBRWxCLE9BQU87SUFDekUsTUFBTTRGLGlCQUFpQjFFLHNCQUFzQjJFLGlCQUFpQixJQUN4RHpGLGFBQWF3RixlQUFlRSxHQUFHLENBQUMsQ0FBQ0M7UUFDL0IsTUFBTXBGLFlBQVlYLFFBQVFnRyw0QkFBNEIsQ0FBQ0Q7UUFFdkQsT0FBT3BGO0lBQ1Q7SUFFTixPQUFPUDtBQUNUIn0=
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBldmVyeSwgYmFja3dhcmRzRXZlcnkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBkZXNjZW5kLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgbGFzdCwgZnJvbnQgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdWJwcm9vZkFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50cykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0RGVkdWNlZFN0YXRlbWVudCgpIHtcbiAgICBjb25zdCBsYXN0U3RhdGVtZW50ID0gbGFzdCh0aGlzLnN0YXRlbWVudHMpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSBsYXN0U3RhdGVtZW50OyAvLy9cblxuICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudHNbaW5kZXhdLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50ID0gc3RhdGVtZW50OyAgLy8vXG5cbiAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdXBwb3NlZFN0YXRlbWVudHMoKSB7XG4gICAgY29uc3QgZnJvbnRTdGF0ZW1lbnRzID0gZnJvbnQodGhpcy5zdGF0ZW1lbnRzKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHMgPSBmcm9udFN0YXRlbWVudHM7ICAvLy9cblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkQXNzZXJ0aW9uID0gdGhpcy5maW5kVmFsaWRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gdmFsaWRBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24gaXMgYWxyZWFkeSB2YWxpZC5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZkFzc2VydGlvbik7XG4gICAgfVxuXG4gICAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIHRoaXMudmFsaWRhdGVTdGF0ZW1lbnRzKGNvbnRleHQsIChzdGF0ZW1lbnRzVmFsaWRhdGUpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudHNWYWxpZGF0ZSkge1xuICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1YnByb29mQXNzZXJ0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50cyhjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICByZXR1cm4gZXZlcnkodGhpcy5zdGF0ZW1lbnRzLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGRlc2NlbmQoKGNvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHVuaWZ5U2NoZW1hKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hLmdldFN0cmluZygpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGRlZHVjdGlvbiA9IHNjaGVtYS5nZXREZWR1Y3Rpb24oKSxcbiAgICAgICAgICBkZWR1Y3Rpb25VbmlmaWVzID0gdGhpcy51bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHNjaGVtYS5nZXRTdXBwb3NpdGlvbnMoKSxcbiAgICAgICAgICAgIHN1cHBvc2l0aW9uc1VuaWZ5ID0gdGhpcy51bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25zVW5pZnkpIHtcbiAgICAgICAgc2NoZW1hVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgbGFzdFN0ZXAgPSBzdWJwcm9vZi5nZXRMYXN0U3RlcCgpO1xuXG4gICAgcmV0dXJuIHRoaXMudW5pZnlMYXN0U3RlcChsYXN0U3RlcCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGxhc3RTdGVwVW5pZmllcykgPT4ge1xuICAgICAgbGV0IHN1YnByb29mVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWxhc3RTdGVwVW5pZmllcykge1xuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1YnByb29mVW5pZmllcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1YnByb29mLmdldFN1cHBvc2l0aW9ucygpO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdXBwb3NpdGlvbnNVbmlmeSkgPT4ge1xuICAgICAgICBpZiAoc3VwcG9zaXRpb25zVW5pZnkpIHtcbiAgICAgICAgICBzdWJwcm9vZlVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YnByb29mVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1YnByb29mVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5TGFzdFN0ZXAobGFzdFN0ZXAsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBsYXN0U3RlcFN0cmluZyA9IGxhc3RTdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSB0aGlzLmdldERlZHVjZWRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50U3RyaW5nID0gZGVkdWNlZFN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYXN0U3RlcFN0cmluZ30nIGxhc3Qgc3RlcCB3aXRoIHRoZSAnJHtkZWR1Y2VkU3RhdGVtZW50U3RyaW5nfScgZGVkdWNlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3QgbGFzdFN0ZXBDb250ZXh0ID0gbGFzdFN0ZXAuZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gbGFzdFN0ZXBDb250ZXh0OyAgLy8vXG5cbiAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgbGFzdFN0ZXBTdGF0ZW1lbnQgPSBsYXN0U3RlcC5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQobGFzdFN0ZXBTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChsYXN0U3RlcFN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgbGV0IGxhc3RTdGVwVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChsYXN0U3RlcFN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICBsYXN0U3RlcFVuaWZpZXMgPSB0cnVlO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0U3RlcFVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtsYXN0U3RlcFN0cmluZ30nIGxhc3Qgc3RlcCB3aXRoIHRoZSAnJHtkZWR1Y2VkU3RhdGVtZW50U3RyaW5nfScgZGVkdWNlZCBzdGF0ZW1lbnQuYClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24obGFzdFN0ZXBVbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICB1bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgZGVkdWN0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50ID0gdGhpcy5nZXREZWR1Y2VkU3RhdGVtZW50KCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudFN0cmluZyA9IGRlZHVjZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC4uLmApXG5cbiAgICBjb25zdCBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGRlZHVjdGlvbkNvbnRleHQ7ICAvLy9cblxuICAgIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBkZWR1Y3Rpb25TdGF0ZW1lbnQgPSBkZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICBkZWR1Y3Rpb25TdGF0ZW1lbnRVbmlmaWVzID0gZGVkdWNlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChkZWR1Y3Rpb25TdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAoZGVkdWN0aW9uU3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICBkZWR1Y3Rpb25VbmlmaWVzID0gdHJ1ZTtcblxuICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC5gKVxuICAgIH1cblxuICAgIHJldHVybiBkZWR1Y3Rpb25VbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgaW5kZXgsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudCA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uU3RyaW5nID0gc3VwcG9zaXRpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmcgPSBzdXBwb3NlZFN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uIHdpdGggdGhlICcke3N1cHBvc2VkU3RhdGVtZW50U3RyaW5nfScgc3VwcG9zZWQgc3RhdGVtZW50Li4uYClcblxuICAgIGNvbnN0IHN1cHBvc2l0aW9uQ29udGV4dCA9IHN1cHBvc2l0aW9uLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IHN1cHBvc2l0aW9uQ29udGV4dDsgIC8vL1xuXG4gICAgcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uU3RhdGVtZW50ID0gc3VwcG9zaXRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdXBwb3NpdGlvblN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN1cHBvc2l0aW9uU3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICBsZXQgc3VwcG9zaXRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN1cHBvc2l0aW9uU3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgIHN1cHBvc2l0aW9uVW5pZmllcyA9IHRydWU7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1cHBvc2l0aW9uVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VwcG9zaXRpb25VbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zTGVuZ3RoID0gc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGggPSBzdXBwb3NlZFN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdXBwb3NpdGlvbnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uc1VuaWZ5KTtcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSAtMTtcblxuICAgIHJldHVybiBiYWNrd2FyZHNFdmVyeShzdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICBpbmRleCsrO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBpbmRleCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlN1YnByb29mQXNzZXJ0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb3JBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICBzdWJwcm9vckFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29yQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWV0Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1ldE5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG4iXSwibmFtZXMiOlsibGFzdCIsImZyb250IiwiYXJyYXlVdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnRzIiwiZ2V0U3RhdGVtZW50cyIsImdldERlZHVjZWRTdGF0ZW1lbnQiLCJsYXN0U3RhdGVtZW50IiwiZGVkdWNlZFN0YXRlbWVudCIsImdldFN1cHBvc2VkU3RhdGVtZW50IiwiaW5kZXgiLCJzdGF0ZW1lbnQiLCJzdXBwb3NlZFN0YXRlbWVudCIsImdldFN1cHBvc2VkU3RhdGVtZW50cyIsImZyb250U3RhdGVtZW50cyIsInN1cHBvc2VkU3RhdGVtZW50cyIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsInN1YnByb29mQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZEFzc2VydGlvbiIsImZpbmRWYWxpZEFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJzdGF0ZW1lbnRzVmFsaWRhdGUiLCJ2YWxpZGF0ZXMiLCJhc3NlcnRpb24iLCJhZGRBc3NlcnRpb24iLCJldmVyeSIsImRlc2NlbmQiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ1bmlmeVNjaGVtYSIsInNjaGVtYSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic2NoZW1hVW5pZmllcyIsInNjaGVtYVN0cmluZyIsImRlZHVjdGlvbiIsImdldERlZHVjdGlvbiIsImRlZHVjdGlvblVuaWZpZXMiLCJ1bmlmeURlZHVjdGlvbiIsInN1cHBvc2l0aW9ucyIsImdldFN1cHBvc2l0aW9ucyIsInN1cHBvc2l0aW9uc1VuaWZ5IiwidW5pZnlTdXBwb3NpdGlvbnMiLCJ1bmlmeVN1YnByb29mIiwic3VicHJvb2YiLCJzdWJwcm9vZlN0cmluZyIsImxhc3RTdGVwIiwiZ2V0TGFzdFN0ZXAiLCJ1bmlmeUxhc3RTdGVwIiwibGFzdFN0ZXBVbmlmaWVzIiwic3VicHJvb2ZVbmlmaWVzIiwibGFzdFN0ZXBTdHJpbmciLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwibGFzdFN0ZXBDb250ZXh0IiwiZ2V0Q29udGV4dCIsInJlY29uY2lsZSIsImxhc3RTdGVwU3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnQiLCJsYXN0U3RlcFN0YXRlbWVudFVuaWZpZXMiLCJjb21taXQiLCJkZWR1Y3Rpb25TdHJpbmciLCJkZWR1Y3Rpb25Db250ZXh0IiwiZGVkdWN0aW9uU3RhdGVtZW50IiwiZGVkdWN0aW9uU3RhdGVtZW50VW5pZmllcyIsInVuaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmciLCJzdXBwb3NpdGlvbkNvbnRleHQiLCJzdXBwb3NpdGlvblN0YXRlbWVudCIsInN1cHBvc2l0aW9uU3RhdGVtZW50VW5pZmllcyIsInN1cHBvc2l0aW9uVW5pZmllcyIsInN1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsInN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCIsImJhY2t3YXJkc0V2ZXJ5IiwibmFtZSIsImZyb21KU09OIiwianNvbiIsInN1YnByb29yQXNzZXJ0aW9uIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsImdldFN0YXRlbWVudE5vZGVzIiwibWFwIiwic3RhdGVtZXROb2RlIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZ0JBOzs7ZUFBQTs7OzJCQWQrQjtnQ0FDSztrRUFFZDswQkFFQzs4QkFDZTs2QkFDTzt5QkFDRzt5QkFDRzs7Ozs7O0FBRW5ELE1BQU0sRUFBRUEsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWMsRUFDaEMsRUFBRUMsa0JBQWtCLEVBQUUsR0FBR0MsbUNBQW1CO01BRWxELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMEJBQTBCQyxrQkFBUztJQUM3RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsQ0FBRTtRQUN6RCxLQUFLLENBQUNKLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0QsVUFBVTtJQUN4QjtJQUVBRSxzQkFBc0I7UUFDcEIsTUFBTUMsZ0JBQWdCZixLQUFLLElBQUksQ0FBQ1ksVUFBVSxHQUNwQ0ksbUJBQW1CRCxlQUFlLEdBQUc7UUFFM0MsT0FBT0M7SUFDVDtJQUVBQyxxQkFBcUJDLEtBQUssRUFBRTtRQUMxQixNQUFNQyxZQUFZLElBQUksQ0FBQ1AsVUFBVSxDQUFDTSxNQUFNLEVBQ2xDRSxvQkFBb0JELFdBQVksR0FBRztRQUV6QyxPQUFPQztJQUNUO0lBRUFDLHdCQUF3QjtRQUN0QixNQUFNQyxrQkFBa0JyQixNQUFNLElBQUksQ0FBQ1csVUFBVSxHQUN2Q1cscUJBQXFCRCxpQkFBa0IsR0FBRztRQUVoRCxPQUFPQztJQUNUO0lBRUFDLDJCQUEyQjtRQUN6QixNQUFNZCxPQUFPLElBQUksQ0FBQ2UsT0FBTyxJQUNuQkMsd0JBQXdCaEIsTUFBTSxHQUFHO1FBRXZDLE9BQU9nQjtJQUNUO0lBRUFDLFNB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
|
|
@@ -47,12 +47,12 @@ const _default = (0, _elements.define)(class TypeAssertion extends _assertion.de
|
|
|
47
47
|
if (validAssertion !== null) {
|
|
48
48
|
const typeAssertion = validAssertion; ///
|
|
49
49
|
context.debug(`...the '${typeAssertionString}' type assertion is already valid.`);
|
|
50
|
-
return continuation(typeAssertion);
|
|
50
|
+
return continuation(typeAssertion, context);
|
|
51
51
|
}
|
|
52
|
-
this.validateType(context, (typeValidates)=>{
|
|
52
|
+
return this.validateType(context, (typeValidates, context)=>{
|
|
53
53
|
if (!typeValidates) {
|
|
54
54
|
const typeAssertion = null;
|
|
55
|
-
return continuation(typeAssertion);
|
|
55
|
+
return continuation(typeAssertion, context);
|
|
56
56
|
}
|
|
57
57
|
const validateWhenStated = this.validateWhenStated.bind(this), validateWhenDerived = this.validateWhenDerived.bind(this);
|
|
58
58
|
return (0, _continuation.exists)([
|
|
@@ -69,7 +69,7 @@ const _default = (0, _elements.define)(class TypeAssertion extends _assertion.de
|
|
|
69
69
|
if (validates) {
|
|
70
70
|
context.debug(`...verified the '${typeAssertionString}' type assertion.`);
|
|
71
71
|
}
|
|
72
|
-
return continuation(typeAssertion);
|
|
72
|
+
return continuation(typeAssertion, context);
|
|
73
73
|
});
|
|
74
74
|
});
|
|
75
75
|
}
|
|
@@ -107,20 +107,20 @@ const _default = (0, _elements.define)(class TypeAssertion extends _assertion.de
|
|
|
107
107
|
if (typeValidates) {
|
|
108
108
|
context.debug(`...validated the '${typeAssertionString}' type assertion's type.`);
|
|
109
109
|
}
|
|
110
|
-
return continuation(typeValidates);
|
|
110
|
+
return continuation(typeValidates, context);
|
|
111
111
|
}
|
|
112
112
|
validateWhenStated(context, continuation) {
|
|
113
113
|
const stated = context.isStated();
|
|
114
114
|
if (!stated) {
|
|
115
115
|
const validatesWhenStated = false;
|
|
116
|
-
return continuation(validatesWhenStated);
|
|
116
|
+
return continuation(validatesWhenStated, context);
|
|
117
117
|
}
|
|
118
118
|
const typeAssertionString = this.getString(); ///
|
|
119
119
|
context.trace(`Validating the '${typeAssertionString}' stated type assertion...`);
|
|
120
120
|
return this.term.validate(context, (term, context)=>{
|
|
121
121
|
if (term === null) {
|
|
122
122
|
const validatesWhenStated = false;
|
|
123
|
-
return continuation(validatesWhenStated);
|
|
123
|
+
return continuation(validatesWhenStated, context);
|
|
124
124
|
}
|
|
125
125
|
const termType = term.getType(), termTypeEqualToType = termType.isEqualTo(this.type), termTypeSuperTypeOfType = termType.isSuperTypeOf(this.type);
|
|
126
126
|
let validatesWhenStated = false;
|
|
@@ -140,18 +140,18 @@ const _default = (0, _elements.define)(class TypeAssertion extends _assertion.de
|
|
|
140
140
|
if (validatesWhenStated) {
|
|
141
141
|
context.debug(`...validated the '${typeAssertionString}' stated type assertion.`);
|
|
142
142
|
}
|
|
143
|
-
return continuation(validatesWhenStated);
|
|
143
|
+
return continuation(validatesWhenStated, context);
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
146
|
validateWhenDerived(context, continuation) {
|
|
147
147
|
const stated = context.isStated();
|
|
148
148
|
if (stated) {
|
|
149
149
|
const validatesWhenDerived = false;
|
|
150
|
-
return continuation(validatesWhenDerived);
|
|
150
|
+
return continuation(validatesWhenDerived, context);
|
|
151
151
|
}
|
|
152
152
|
const typeAssertionString = this.getString(); ///
|
|
153
153
|
context.trace(`Validating the '${typeAssertionString}' derived type assertion...`);
|
|
154
|
-
validateWhenDerived(this.term, this.type, context, (term)=>{
|
|
154
|
+
validateWhenDerived(this.term, this.type, context, (term, context)=>{
|
|
155
155
|
let validatesWhenDerived = false;
|
|
156
156
|
if (term !== null) {
|
|
157
157
|
this.term = term;
|
|
@@ -160,7 +160,7 @@ const _default = (0, _elements.define)(class TypeAssertion extends _assertion.de
|
|
|
160
160
|
if (validatesWhenDerived) {
|
|
161
161
|
context.debug(`...validated the '${typeAssertionString}' derived type assertion.`);
|
|
162
162
|
}
|
|
163
|
-
return continuation(validatesWhenDerived);
|
|
163
|
+
return continuation(validatesWhenDerived, context);
|
|
164
164
|
});
|
|
165
165
|
}
|
|
166
166
|
unifyIndependently(generalContext, specificContext) {
|
|
@@ -221,24 +221,24 @@ const _default = (0, _elements.define)(class TypeAssertion extends _assertion.de
|
|
|
221
221
|
});
|
|
222
222
|
function validateWhenDerived(term, type, context, continuation) {
|
|
223
223
|
if (term === null) {
|
|
224
|
-
return continuation(term);
|
|
224
|
+
return continuation(term, context);
|
|
225
225
|
}
|
|
226
226
|
return term.validate(context, (term, context)=>{
|
|
227
227
|
if (term === null) {
|
|
228
|
-
return continuation(term);
|
|
228
|
+
return continuation(term, context);
|
|
229
229
|
}
|
|
230
230
|
const termType = term.getType(), termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
|
|
231
231
|
if (!termTypeEqualToOrSubTypeOfType) {
|
|
232
232
|
term = null;
|
|
233
|
-
return continuation(term);
|
|
233
|
+
return continuation(term, context);
|
|
234
234
|
}
|
|
235
235
|
const termEstablished = term.isEstablished();
|
|
236
236
|
if (!termEstablished) {
|
|
237
237
|
term = null;
|
|
238
|
-
return continuation(term);
|
|
238
|
+
return continuation(term, context);
|
|
239
239
|
}
|
|
240
|
-
return continuation(term);
|
|
240
|
+
return continuation(term, context);
|
|
241
241
|
});
|
|
242
242
|
}
|
|
243
243
|
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi90eXBlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlVHlwZUFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB0eXBlRnJvbUpTT04sIHR5cGVUb1R5cGVKU09OIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9qc29uXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdWJzdGl0dXRpb25zXCI7XG5pbXBvcnQgeyB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2Fzc2lnblwiO1xuaW1wb3J0IHsgdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSwgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFR5cGVBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0VHlwZUFzc2VydGlvbk5Cb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHR5cGVBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRBc3NlcnRpb24gPSB0aGlzLmZpbmRWYWxpZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IHZhbGlkQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbiBpcyBhbHJlYWR5IHZhbGlkLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHR5cGVBc3NlcnRpb24pO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVUeXBlKGNvbnRleHQsICh0eXBlVmFsaWRhdGVzKSA9PiB7XG4gICAgICBpZiAoIXR5cGVWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0eXBlQXNzZXJ0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdGVXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlblN0YXRlZCxcbiAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZFxuICAgICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgICAgICAgdHlwZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgIC8vL1xuXG4gICAgICAgICAgdGhpcy5hc3NpZ24oY29udGV4dCk7XG5cbiAgICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHR5cGVBc3NlcnRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBkaXNjaGFyZ2UoY29udGV4dCkge1xuICAgIGxldCBkaXNjaGFyZ2VzID0gZmFsc2U7XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmdpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnModGhpcy50ZXJtLCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgdHlwZUVxdWFsVG9UZXJtVHlwZSA9IHRoaXMudHlwZS5pc0VxdWFsVG8odGVybVR5cGUpO1xuXG4gICAgICBpZiAodHlwZUVxdWFsVG9UZXJtVHlwZSkge1xuICAgICAgICBjb25zdCB0ZXJtRXN0YWJsaXNoZWQgPSB0ZXJtLmlzRXN0YWJsaXNoZWQoKTtcblxuICAgICAgICBpZiAodGVybUVzdGFibGlzaGVkKSB7XG4gICAgICAgICAgZGlzY2hhcmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlzY2hhcmdlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uZGlzY2hhcmdlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBkaXNjaGFyZ2VzO1xuICB9XG5cbiAgdmFsaWRhdGVUeXBlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0eXBlVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uJ3MgdHlwZS4uLmApO1xuXG4gICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gICAgICB0eXBlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHlwZVN0cmluZyA9IHRoaXMudHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbidzIHR5cGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0eXBlVmFsaWRhdGVzKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0YXRlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoIXN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyBzdGF0ZWQgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnRlcm0udmFsaWRhdGUoY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgIGlmICh0ZXJtID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgdGVybVR5cGVFcXVhbFRvVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUbyh0aGlzLnR5cGUpLFxuICAgICAgICAgICAgdGVybVR5cGVTdXBlclR5cGVPZlR5cGUgPSB0ZXJtVHlwZS5pc1N1cGVyVHlwZU9mKHRoaXMudHlwZSk7XG5cbiAgICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChmYWxzZSkge1xuICAgICAgICAvLy9cbiAgICAgIH0gZWxzZSBpZiAodGVybVR5cGVFcXVhbFRvVHlwZSkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGVybVR5cGVTdXBlclR5cGVPZlR5cGUpIHtcbiAgICAgICAgY29uc3QgdGVybUVzdGFibGlzaGVkID0gdGVybS5pc0VzdGFibGlzaGVkKCk7XG5cbiAgICAgICAgaWYgKHRlcm1Fc3RhYmxpc2hlZCkge1xuICAgICAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICAgIHRoaXMudGVybSA9IHRlcm07XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHN0YXRlZCB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQodGhpcy50ZXJtLCB0aGlzLnR5cGUsIGNvbnRleHQsICh0ZXJtKSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy50ZXJtID0gdGVybTtcblxuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZXJpdmVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG5cbiAgICBkZWJ1Z2dlclxuXG4gICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGxldCB0ZXJtO1xuXG4gICAgdGVybSA9IHRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnModGhpcy50ZXJtLCBjb250ZXh0KTtcblxuICAgIHRlcm0gPSB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIHRoaXMudHlwZSwgY29udGV4dCk7IC8vXG5cbiAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh1bmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaWZpZXNJbmRlcGVuZGVudGx5O1xuICB9XG5cbiAgYXNzaWduKGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoIXN0YXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICB2YXJpYWJsZUFzc2lnbWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KHZhcmlhYmxlQXNzaWdtZW50KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGVUb1R5cGVKU09OKHRoaXMudHlwZSksXG4gICAgICAgICAgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IHR5cGUgPSB0eXBlSlNPTixcbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlR5cGVBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbjtcblxuICAgIGlmICh0aGlzLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICB0eXBlQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlVHlwZUFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgdHlwZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGlmICh0ZXJtID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtKTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtLnZhbGlkYXRlKGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgaWYgKHRlcm0gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKTtcblxuICAgIGlmICghdGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICB0ZXJtID0gbnVsbDtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXJtRXN0YWJsaXNoZWQgPSB0ZXJtLmlzRXN0YWJsaXNoZWQoKTtcblxuICAgIGlmICghdGVybUVzdGFibGlzaGVkKSB7XG4gICAgICB0ZXJtID0gbnVsbDtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm0pO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJUeXBlQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsInR5cGUiLCJnZXRUZXJtIiwiZ2V0VHlwZSIsImdldFR5cGVBc3NlcnRpb25OQm9kZSIsImdldE5vZGUiLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwidHlwZUFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRBc3NlcnRpb24iLCJmaW5kVmFsaWRBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZVR5cGUiLCJ0eXBlVmFsaWRhdGVzIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwiYmluZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJ2YWxpZGF0ZXMiLCJhc3NlcnRpb24iLCJhc3NpZ24iLCJhZGRBc3NlcnRpb24iLCJkaXNjaGFyZ2UiLCJkaXNjaGFyZ2VzIiwidGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyIsInRlcm1UeXBlIiwidHlwZUVxdWFsVG9UZXJtVHlwZSIsImlzRXF1YWxUbyIsInRlcm1Fc3RhYmxpc2hlZCIsImlzRXN0YWJsaXNoZWQiLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwidHlwZVN0cmluZyIsInN0YXRlZCIsImlzU3RhdGVkIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInRlcm1UeXBlRXF1YWxUb1R5cGUiLCJ0ZXJtVHlwZVN1cGVyVHlwZU9mVHlwZSIsImlzU3VwZXJUeXBlT2YiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInVuaWZ5SW5kZXBlbmRlbnRseSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidW5pZmllc0luZGVwZW5kZW50bHkiLCJ2YXJpYWJsZUFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQXNzZXJ0aW9uIiwiYWRkQXNzaWdubWVudCIsInRvSlNPTiIsInR5cGVKU09OIiwidHlwZVRvVHlwZUpTT04iLCJuYW1lIiwiZ2V0TmFtZSIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVUeXBlQXNzZXJ0aW9uIiwidGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tSlNPTiIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OztnQ0Fmb0M7a0VBRWQ7MEJBRUM7OEJBQ0E7eUJBQ0s7NkJBQ2E7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
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi90eXBlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlVHlwZUFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB0eXBlRnJvbUpTT04sIHR5cGVUb1R5cGVKU09OIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9qc29uXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdWJzdGl0dXRpb25zXCI7XG5pbXBvcnQgeyB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2Fzc2lnblwiO1xuaW1wb3J0IHsgdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSwgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFR5cGVBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0VHlwZUFzc2VydGlvbk5Cb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHR5cGVBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRBc3NlcnRpb24gPSB0aGlzLmZpbmRWYWxpZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IHZhbGlkQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbiBpcyBhbHJlYWR5IHZhbGlkLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHR5cGVBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVHlwZShjb250ZXh0LCAodHlwZVZhbGlkYXRlcywgY29udGV4dCkgPT4ge1xuICAgICAgaWYgKCF0eXBlVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odHlwZUFzc2VydGlvbiwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiBleGlzdHMoW1xuICAgICAgICB2YWxpZGF0ZVdoZW5TdGF0ZWQsXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWRcbiAgICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgICAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb25zdCBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgICAgICAgIHR5cGVBc3NlcnRpb24gPSBhc3NlcnRpb247ICAvLy9cblxuICAgICAgICAgIHRoaXMuYXNzaWduKGNvbnRleHQpO1xuXG4gICAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0eXBlQXNzZXJ0aW9uLCBjb250ZXh0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGlzY2hhcmdlKGNvbnRleHQpIHtcbiAgICBsZXQgZGlzY2hhcmdlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCk7XG5cbiAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHR5cGVFcXVhbFRvVGVybVR5cGUgPSB0aGlzLnR5cGUuaXNFcXVhbFRvKHRlcm1UeXBlKTtcblxuICAgICAgaWYgKHR5cGVFcXVhbFRvVGVybVR5cGUpIHtcbiAgICAgICAgY29uc3QgdGVybUVzdGFibGlzaGVkID0gdGVybS5pc0VzdGFibGlzaGVkKCk7XG5cbiAgICAgICAgaWYgKHRlcm1Fc3RhYmxpc2hlZCkge1xuICAgICAgICAgIGRpc2NoYXJnZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpc2NoYXJnZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzY2hhcmdlcztcbiAgfVxuXG4gIHZhbGlkYXRlVHlwZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdHlwZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbidzIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IG5vbWluYWxUeXBlTmFtZSA9IHRoaXMudHlwZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgICAgdHlwZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBub3QgcHJlc2VudC5gKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24ncyB0eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odHlwZVZhbGlkYXRlcywgY29udGV4dCk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy50ZXJtLnZhbGlkYXRlKGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBpZiAodGVybSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb1R5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG8odGhpcy50eXBlKSxcbiAgICAgICAgICAgIHRlcm1UeXBlU3VwZXJUeXBlT2ZUeXBlID0gdGVybVR5cGUuaXNTdXBlclR5cGVPZih0aGlzLnR5cGUpO1xuXG4gICAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoZmFsc2UpIHtcbiAgICAgICAgLy8vXG4gICAgICB9IGVsc2UgaWYgKHRlcm1UeXBlRXF1YWxUb1R5cGUpIHtcbiAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRlcm1UeXBlU3VwZXJUeXBlT2ZUeXBlKSB7XG4gICAgICAgIGNvbnN0IHRlcm1Fc3RhYmxpc2hlZCA9IHRlcm0uaXNFc3RhYmxpc2hlZCgpO1xuXG4gICAgICAgIGlmICh0ZXJtRXN0YWJsaXNoZWQpIHtcbiAgICAgICAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyBzdGF0ZWQgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlblN0YXRlZCwgY29udGV4dCk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy50eXBlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMudGVybSA9IHRlcm07XG5cbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgZGVyaXZlZCB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCwgY29udGV4dCk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuXG4gICAgZGVidWdnZXJcblxuICAgIGxldCB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgLy8vXG4gICAgICAgICAgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBsZXQgdGVybTtcblxuICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCk7XG5cbiAgICB0ZXJtID0gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCB0aGlzLnR5cGUsIGNvbnRleHQpOyAvL1xuXG4gICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgIHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5LmApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlmaWVzSW5kZXBlbmRlbnRseTtcbiAgfVxuXG4gIGFzc2lnbihjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVBc3NpZ21lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbWVudCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlVG9UeXBlSlNPTih0aGlzLnR5cGUpLFxuICAgICAgICAgIG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCB0eXBlID0gdHlwZUpTT04sXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUeXBlQXNzZXJ0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdHlwZUFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgdHlwZUFzc2VydGlvbk5vZGUgPSBpbnN0YW50aWF0ZVR5cGVBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHR5cGVBc3NlcnRpb25Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgdGVybSA9IHRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUodHlwZUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICB0eXBlID0gdHlwZUZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHR5cGVBc3NlcnRpb24gPSBuZXcgVHlwZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHR5cGVBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIHR5cGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBpZiAodGVybSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjb250aW51YXRpb24odGVybSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGVybS52YWxpZGF0ZShjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgIGlmICh0ZXJtID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgdGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodHlwZSk7XG5cbiAgICBpZiAoIXRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSkge1xuICAgICAgdGVybSA9IG51bGw7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGVybUVzdGFibGlzaGVkID0gdGVybS5pc0VzdGFibGlzaGVkKCk7XG5cbiAgICBpZiAoIXRlcm1Fc3RhYmxpc2hlZCkge1xuICAgICAgdGVybSA9IG51bGw7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtLCBjb250ZXh0KTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiVHlwZUFzc2VydGlvbiIsIkFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRlcm0iLCJ0eXBlIiwiZ2V0VGVybSIsImdldFR5cGUiLCJnZXRUeXBlQXNzZXJ0aW9uTkJvZGUiLCJnZXROb2RlIiwidHlwZUFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsInR5cGVBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkQXNzZXJ0aW9uIiwiZmluZFZhbGlkQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVUeXBlIiwidHlwZVZhbGlkYXRlcyIsInZhbGlkYXRlV2hlblN0YXRlZCIsImJpbmQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwidmFsaWRhdGVzIiwiYXNzZXJ0aW9uIiwiYXNzaWduIiwiYWRkQXNzZXJ0aW9uIiwiZGlzY2hhcmdlIiwiZGlzY2hhcmdlcyIsInRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnMiLCJ0ZXJtVHlwZSIsInR5cGVFcXVhbFRvVGVybVR5cGUiLCJpc0VxdWFsVG8iLCJ0ZXJtRXN0YWJsaXNoZWQiLCJpc0VzdGFibGlzaGVkIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsInR5cGVTdHJpbmciLCJzdGF0ZWQiLCJpc1N0YXRlZCIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ0ZXJtVHlwZUVxdWFsVG9UeXBlIiwidGVybVR5cGVTdXBlclR5cGVPZlR5cGUiLCJpc1N1cGVyVHlwZU9mIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJ1bmlmeUluZGVwZW5kZW50bHkiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwidmFyaWFibGVBc3NpZ21lbnQiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFzc2VydGlvbiIsImFkZEFzc2lnbm1lbnQiLCJ0b0pTT04iLCJ0eXBlSlNPTiIsInR5cGVUb1R5cGVKU09OIiwibmFtZSIsImdldE5hbWUiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlVHlwZUFzc2VydGlvbiIsInRlcm1Gcm9tVHlwZUFzc2VydGlvbk5vZGUiLCJ0eXBlRnJvbUpTT04iLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFpQkE7OztlQUFBOzs7Z0NBZm9DO2tFQUVkOzBCQUVDOzhCQUNBO3lCQUNLOzZCQUNhO3NCQUNJOytCQUNBO3dCQUNPO3lCQUNzQjs7Ozs7O0FBRTFFLE1BQU0sRUFBRUEsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLHNCQUFzQkMsa0JBQVM7SUFDekQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLElBQUksQ0FBRTtRQUN6RCxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtJQUNkO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0YsSUFBSTtJQUNsQjtJQUVBRyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNGLElBQUk7SUFDbEI7SUFFQUcsd0JBQXdCO1FBQ3RCLE1BQU1OLE9BQU8sSUFBSSxDQUFDTyxPQUFPLElBQ25CQyxvQkFBb0JSLE1BQU0sR0FBRztRQUVuQyxPQUFPUTtJQUNUO0lBRUFDLFNBQVNYLE9BQU8sRUFBRVksWUFBWSxFQUFFO1FBQzlCLE1BQU1DLHNCQUFzQixJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRWxEZCxRQUFRZSxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsb0JBQW9CLG1CQUFtQixDQUFDO1FBRXpFLE1BQU1HLGlCQUFpQixJQUFJLENBQUNDLGtCQUFrQixDQUFDakI7UUFFL0MsSUFBSWdCLG1CQUFtQixNQUFNO1lBQzNCLE1BQU1FLGdCQUFnQkYsZ0JBQWdCLEdBQUc7WUFFekNoQixRQUFRbUIsS0FBSyxDQUFDLENBQUMs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
|