occam-verify-cli 1.0.609 → 1.0.612
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/ephemeral.js +2 -2
- package/lib/context/file/nominal.js +17 -47
- package/lib/context/liminal.js +36 -39
- package/lib/context/scoped.js +8 -8
- package/lib/context.js +76 -48
- package/lib/element/assertion/contained.js +8 -1
- package/lib/element/assertion/defined.js +11 -4
- package/lib/element/assertion/property.js +8 -1
- package/lib/element/assertion/satisfies.js +8 -1
- package/lib/element/assertion/subproof.js +8 -1
- package/lib/element/assertion/type.js +8 -1
- package/lib/element/assumption.js +11 -11
- package/lib/element/combinator/bracketed.js +8 -1
- package/lib/element/constructor/bracketed.js +8 -1
- package/lib/element/declaration/combinator.js +8 -1
- package/lib/element/declaration/complexType.js +8 -1
- package/lib/element/declaration/constructor.js +32 -25
- package/lib/element/declaration/metavariable.js +9 -9
- package/lib/element/declaration/simpleType.js +8 -1
- package/lib/element/declaration/typePrefix.js +8 -1
- package/lib/element/declaration/variable.js +16 -9
- package/lib/element/frame.js +28 -23
- package/lib/element/judgement.js +4 -4
- package/lib/element/metavariable.js +25 -11
- package/lib/element/proofAssertion/premise.js +8 -1
- package/lib/element/proofAssertion/step.js +8 -1
- package/lib/element/proofAssertion/supposition.js +8 -1
- package/lib/element/reference.js +13 -1
- package/lib/element/statement.js +16 -1
- package/lib/element/substitution/frame.js +18 -11
- package/lib/element/substitution/reference.js +18 -11
- package/lib/element/substitution/statement.js +26 -13
- package/lib/element/substitution/term.js +11 -10
- package/lib/element/substitution.js +15 -8
- package/lib/element/variable.js +6 -5
- package/lib/process/unify.js +2 -2
- package/lib/utilities/element.js +3 -3
- package/lib/utilities/substitutions.js +15 -16
- package/lib/utilities/unification.js +30 -15
- package/package.json +2 -2
- package/src/context/ephemeral.js +1 -1
- package/src/context/file/nominal.js +15 -25
- package/src/context/liminal.js +31 -35
- package/src/context/scoped.js +6 -5
- package/src/context.js +68 -40
- package/src/element/assertion/contained.js +7 -0
- package/src/element/assertion/defined.js +13 -3
- package/src/element/assertion/property.js +7 -0
- package/src/element/assertion/satisfies.js +7 -0
- package/src/element/assertion/subproof.js +7 -0
- package/src/element/assertion/type.js +7 -0
- package/src/element/assumption.js +2 -2
- package/src/element/combinator/bracketed.js +7 -0
- package/src/element/constructor/bracketed.js +7 -0
- package/src/element/declaration/combinator.js +7 -0
- package/src/element/declaration/complexType.js +7 -0
- package/src/element/declaration/constructor.js +31 -24
- package/src/element/declaration/metavariable.js +6 -6
- package/src/element/declaration/simpleType.js +7 -0
- package/src/element/declaration/typePrefix.js +7 -0
- package/src/element/declaration/variable.js +13 -6
- package/src/element/frame.js +28 -26
- package/src/element/judgement.js +1 -1
- package/src/element/metavariable.js +28 -11
- package/src/element/proofAssertion/premise.js +7 -0
- package/src/element/proofAssertion/step.js +7 -0
- package/src/element/proofAssertion/supposition.js +7 -0
- package/src/element/reference.js +14 -0
- package/src/element/statement.js +18 -0
- package/src/element/substitution/frame.js +10 -14
- package/src/element/substitution/reference.js +10 -14
- package/src/element/substitution/statement.js +13 -15
- package/src/element/substitution/term.js +8 -13
- package/src/element/substitution.js +12 -6
- package/src/element/variable.js +4 -2
- package/src/process/unify.js +1 -1
- package/src/utilities/element.js +2 -2
- package/src/utilities/substitutions.js +13 -16
- package/src/utilities/unification.js +2 -4
|
@@ -12,8 +12,8 @@ _export(exports, {
|
|
|
12
12
|
get frameFromFrameAndSubstitutions () {
|
|
13
13
|
return frameFromFrameAndSubstitutions;
|
|
14
14
|
},
|
|
15
|
-
get
|
|
16
|
-
return
|
|
15
|
+
get metavariableNamesFromSubstitutions () {
|
|
16
|
+
return metavariableNamesFromSubstitutions;
|
|
17
17
|
},
|
|
18
18
|
get statementFromStatementAndSubstitutions () {
|
|
19
19
|
return statementFromStatementAndSubstitutions;
|
|
@@ -31,7 +31,7 @@ function termFromTermAndSubstitutions(term, generalContext, specificContext) {
|
|
|
31
31
|
if (termSingular) {
|
|
32
32
|
var variableIdentifier = termNode.getVariableIdentifier(), variable = generalContext.findVariableByVariableIdentifier(variableIdentifier);
|
|
33
33
|
if (variable !== null) {
|
|
34
|
-
var substitution = specificContext.
|
|
34
|
+
var substitution = specificContext.findSubstitutionByVariableIdentifier(variableIdentifier);
|
|
35
35
|
if (substitution !== null) {
|
|
36
36
|
var termSubstitution = substitution, replacementTerm = termSubstitution.getReplacementTerm();
|
|
37
37
|
term = replacementTerm; ///
|
|
@@ -48,7 +48,7 @@ function frameFromFrameAndSubstitutions(frame, generalContext, specificContext)
|
|
|
48
48
|
if (frameSingular) {
|
|
49
49
|
var metavariableName = frameNode.getMetavariableName(), metavariable = generalContext.findMetavariableByMetavariableName(metavariableName);
|
|
50
50
|
if (metavariable !== null) {
|
|
51
|
-
var substitution = specificContext.
|
|
51
|
+
var substitution = specificContext.findSubstitutionByMetavariableName(metavariableName);
|
|
52
52
|
if (substitution !== null) {
|
|
53
53
|
var frameSubstitution = substitution, replacementFrame = frameSubstitution.getReplacementFrame();
|
|
54
54
|
frame = replacementFrame; ///
|
|
@@ -69,14 +69,14 @@ function statementFromStatementAndSubstitutions(statement, generalContext, speci
|
|
|
69
69
|
var context = generalContext; ///
|
|
70
70
|
generalContext = specificContext; ///
|
|
71
71
|
specificContext = context; ///
|
|
72
|
-
substitution = specificContext.findSubstitutionBySubstitutionNode(substitutionNode
|
|
72
|
+
substitution = specificContext.findSubstitutionBySubstitutionNode(substitutionNode);
|
|
73
73
|
context = generalContext; ///
|
|
74
74
|
generalContext = specificContext; ///
|
|
75
75
|
specificContext = context; ///
|
|
76
76
|
}
|
|
77
77
|
var metavariableName = statementNode.getMetavariableName(), metavariable = generalContext.findMetavariableByMetavariableName(metavariableName);
|
|
78
78
|
if (metavariable !== null) {
|
|
79
|
-
substitution = substitution !== null ? specificContext.
|
|
79
|
+
substitution = substitution !== null ? specificContext.findSubstitutionByMetavariableNameAndSubstitution(metavariableName, substitution) : specificContext.findSubstitutionByMetavariableName(metavariableName);
|
|
80
80
|
if (substitution !== null) {
|
|
81
81
|
var statementSubstitution = substitution, replacementStatement = statementSubstitution.getReplacementStatement();
|
|
82
82
|
statement = replacementStatement; ///
|
|
@@ -86,21 +86,20 @@ function statementFromStatementAndSubstitutions(statement, generalContext, speci
|
|
|
86
86
|
}
|
|
87
87
|
return statement;
|
|
88
88
|
}
|
|
89
|
-
function
|
|
90
|
-
var
|
|
89
|
+
function metavariableNamesFromSubstitutions(substitutions) {
|
|
90
|
+
var metavariableNames = [];
|
|
91
91
|
substitutions.forEach(function(substitution) {
|
|
92
|
-
var
|
|
93
|
-
if (
|
|
94
|
-
|
|
92
|
+
var metavariableName = substitution.getMetavariableName();
|
|
93
|
+
if (metavariableName !== null) {
|
|
94
|
+
metavariableNames.push(metavariableName);
|
|
95
95
|
}
|
|
96
96
|
});
|
|
97
|
-
compress(
|
|
98
|
-
|
|
99
|
-
if (!metavariableComparesToMetavariableB) {
|
|
97
|
+
compress(metavariableNames, function(metavariableNameA, metavariableNameB) {
|
|
98
|
+
if (metavariableNameB !== metavariableNameB) {
|
|
100
99
|
return true;
|
|
101
100
|
}
|
|
102
101
|
});
|
|
103
|
-
return
|
|
102
|
+
return metavariableNames;
|
|
104
103
|
}
|
|
105
104
|
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3Vic3RpdHV0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB0ZXJtU2luZ3VsYXIgPSB0ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIHRlcm0gPSBudWxsOyAgLy8vXG5cbiAgICBpZiAodGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICAgIHZhcmlhYmxlID0gZ2VuZXJhbENvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZSh2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHRlcm1TdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudFRlcm0gPSB0ZXJtU3Vic3RpdHV0aW9uLmdldFJlcGxhY2VtZW50VGVybSgpO1xuXG4gICAgICAgICAgdGVybSA9IHJlcGxhY2VtZW50VGVybTsgLy8vXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyYW1lRnJvbUZyYW1lQW5kU3Vic3RpdHV0aW9ucyhmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBpZiAoZnJhbWUgIT09IG51bGwpIHtcbiAgICBjb25zdCBmcmFtZU5vZGUgPSBmcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgZnJhbWVTaW5ndWxhciA9IGZyYW1lLmlzU2luZ3VsYXIoKTtcblxuICAgIGZyYW1lID0gbnVsbDsgIC8vL1xuXG4gICAgaWYgKGZyYW1lU2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBmcmFtZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gZ2VuZXJhbENvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb24gPSBzcGVjaWZpY0NvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGZyYW1lU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudEZyYW1lID0gZnJhbWVTdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnRGcmFtZSgpO1xuXG4gICAgICAgICAgZnJhbWUgPSByZXBsYWNlbWVudEZyYW1lOyAvLy9cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zKHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3RhdGVtZW50U2luZ3VsYXIgPSBzdGF0ZW1lbnQuaXNTaW5ndWxhcigpO1xuXG4gICAgc3RhdGVtZW50ID0gbnVsbDtcblxuICAgIGlmIChzdGF0ZW1lbnRTaW5ndWxhcikge1xuICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgbGV0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7IC8vL1xuXG4gICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzcGVjaWZpY0NvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAvLy9cblxuICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBzdGF0ZW1lbnROb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IGdlbmVyYWxDb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgICAgc3Vic3RpdHV0aW9uID0gKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50U3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudCA9IHN0YXRlbWVudFN1YnN0aXR1dGlvbi5nZXRSZXBsYWNlbWVudFN0YXRlbWVudCgpO1xuXG4gICAgICAgICAgc3RhdGVtZW50ID0gcmVwbGFjZW1lbnRTdGF0ZW1lbnQ7IC8vL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ldGF2YXJpYWJsZXNGcm9tU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZXMgPSBbXTtcblxuICBzdWJzdGl0dXRpb25zLmZvckVhY2goKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dCwgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gc3Vic3RpdHV0aW9uLmdldE1ldGF2YXJpYWJsZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIG1ldGF2YXJpYWJsZXMucHVzaChtZXRhdmFyaWFibGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29tcHJlc3MobWV0YXZhcmlhYmxlcywgKG1ldGF2YXJpYWJsZUEsIG1ldGF2YXJpYWJsZUIpID0+IHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlQiA9IG1ldGF2YXJpYWJsZUIuY29tcGFyZShtZXRhdmFyaWFibGVBKTtcblxuICAgIGlmICghbWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZUIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG59XG4iXSwibmFtZXMiOlsiZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlc0Zyb21TdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsInRlcm0iLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInRlcm1Ob2RlIiwiZ2V0Tm9kZSIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwic3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGUiLCJ0ZXJtU3Vic3RpdHV0aW9uIiwicmVwbGFjZW1lbnRUZXJtIiwiZ2V0UmVwbGFjZW1lbnRUZXJtIiwiZnJhbWUiLCJmcmFtZU5vZGUiLCJmcmFtZVNpbmd1bGFyIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwiZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJyZXBsYWNlbWVudEZyYW1lIiwiZ2V0UmVwbGFjZW1lbnRGcmFtZSIsInN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRTaW5ndWxhciIsInN1YnN0aXR1dGlvbk5vZGUiLCJnZXRTdWJzdGl0dXRpb25Ob2RlIiwiY29udGV4dCIsImZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUiLCJmaW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZXMiLCJmb3JFYWNoIiwiZ2V0TWV0YXZhcmlhYmxlIiwicHVzaCIsIm1ldGF2YXJpYWJsZUEiLCJtZXRhdmFyaWFibGVCIiwibWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZUIiLCJjb21wYXJlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFpQ2dCQTtlQUFBQTs7UUE0RUFDO2VBQUFBOztRQWpEQUM7ZUFBQUE7O1FBdERBQztlQUFBQTs7O3lCQUplO0FBRS9CLElBQU0sQUFBRUMsV0FB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
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3Vic3RpdHV0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyh0ZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB0ZXJtU2luZ3VsYXIgPSB0ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIHRlcm0gPSBudWxsOyAgLy8vXG5cbiAgICBpZiAodGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0ZXJtTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICAgIHZhcmlhYmxlID0gZ2VuZXJhbENvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgdGVybVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50VGVybSA9IHRlcm1TdWJzdGl0dXRpb24uZ2V0UmVwbGFjZW1lbnRUZXJtKCk7XG5cbiAgICAgICAgICB0ZXJtID0gcmVwbGFjZW1lbnRUZXJtOyAvLy9cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0ZXJtO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zKGZyYW1lLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZVNpbmd1bGFyID0gZnJhbWUuaXNTaW5ndWxhcigpO1xuXG4gICAgZnJhbWUgPSBudWxsOyAgLy8vXG5cbiAgICBpZiAoZnJhbWVTaW5ndWxhcikge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBnZW5lcmFsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRGcmFtZSA9IGZyYW1lU3Vic3RpdHV0aW9uLmdldFJlcGxhY2VtZW50RnJhbWUoKTtcblxuICAgICAgICAgIGZyYW1lID0gcmVwbGFjZW1lbnRGcmFtZTsgLy8vXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50QW5kU3Vic3RpdHV0aW9ucyhzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN0YXRlbWVudFNpbmd1bGFyID0gc3RhdGVtZW50LmlzU2luZ3VsYXIoKTtcblxuICAgIHN0YXRlbWVudCA9IG51bGw7XG5cbiAgICBpZiAoc3RhdGVtZW50U2luZ3VsYXIpIHtcbiAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJzdGl0dXRpb25Ob2RlKCk7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICAgIGxldCBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAvLy9cblxuICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgc3Vic3RpdHV0aW9uID0gc3BlY2lmaWNDb250ZXh0LmZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgLy8vXG5cbiAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBnZW5lcmFsQ29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGVOYW1lLCBzdWJzdGl0dXRpb24pIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZW1lbnRTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gc3RhdGVtZW50U3Vic3RpdHV0aW9uLmdldFJlcGxhY2VtZW50U3RhdGVtZW50KCk7XG5cbiAgICAgICAgICBzdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudDsgLy8vXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWV0YXZhcmlhYmxlTmFtZXNGcm9tU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWVzID0gW107XG5cbiAgc3Vic3RpdHV0aW9ucy5mb3JFYWNoKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gc3Vic3RpdHV0aW9uLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVOYW1lICE9PSBudWxsKSB7XG4gICAgICBtZXRhdmFyaWFibGVOYW1lcy5wdXNoKG1ldGF2YXJpYWJsZU5hbWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29tcHJlc3MobWV0YXZhcmlhYmxlTmFtZXMsIChtZXRhdmFyaWFibGVOYW1lQSwgbWV0YXZhcmlhYmxlTmFtZUIpID0+IHtcbiAgICBpZiAobWV0YXZhcmlhYmxlTmFtZUIgIT09IG1ldGF2YXJpYWJsZU5hbWVCKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVOYW1lcztcbn1cbiJdLCJuYW1lcyI6WyJmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMiLCJtZXRhdmFyaWFibGVOYW1lc0Zyb21TdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiY29tcHJlc3MiLCJhcnJheVV0aWxpdGllcyIsInRlcm0iLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInRlcm1Ob2RlIiwiZ2V0Tm9kZSIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwic3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVJZGVudGlmaWVyIiwidGVybVN1YnN0aXR1dGlvbiIsInJlcGxhY2VtZW50VGVybSIsImdldFJlcGxhY2VtZW50VGVybSIsImZyYW1lIiwiZnJhbWVOb2RlIiwiZnJhbWVTaW5ndWxhciIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsImZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWUiLCJmcmFtZVN1YnN0aXR1dGlvbiIsInJlcGxhY2VtZW50RnJhbWUiLCJnZXRSZXBsYWNlbWVudEZyYW1lIiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFNpbmd1bGFyIiwic3Vic3RpdHV0aW9uTm9kZSIsImdldFN1YnN0aXR1dGlvbk5vZGUiLCJjb250ZXh0IiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsImZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJyZXBsYWNlbWVudFN0YXRlbWVudCIsImdldFJlcGxhY2VtZW50U3RhdGVtZW50Iiwic3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZU5hbWVzIiwiZm9yRWFjaCIsInB1c2giLCJtZXRhdmFyaWFibGVOYW1lQSIsIm1ldGF2YXJpYWJsZU5hbWVCIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFpQ2dCQTtlQUFBQTs7UUE0RUFDO2VBQUFBOztRQWpEQUM7ZUFBQUE7O1FBdERBQztlQUFBQTs7O3lCQUplO0FBRS9CLElBQU0sQUFBRUMsV0FBYUMseUJBQWMsQ0FBM0JEO0FBRUQsU0FBU0QsNkJBQTZCRyxJQUFJLEVBQUVDLGNBQWMsRUFBRUMsZUFBZTtJQUNoRixJQUFJRixTQUFTLE1BQU07UUFDakIsSUFBTUcsV0FBV0gsS0FBS0ksT0FBTyxJQUN2QkMsZUFBZUwsS0FBS00sVUFBVTtRQUVwQ04sT0FBTyxNQUFPLEdBQUc7UUFFakIsSUFBSUssY0FBYztZQUNoQixJQUFNRSxxQkFBcUJKLFNBQVNLLHFCQUFxQixJQUNuREMsV0FBV1IsZUFBZVMsZ0NBQWdDLENBQUNIO1lBRWpFLElBQUlFLGFBQWEsTUFBTTtnQkFDckIsSUFBTUUsZUFBZVQsZ0JBQWdCVSxvQ0FBb0MsQ0FB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
|
|
@@ -212,7 +212,7 @@ function unifyStatementWithReference(statement, reference, satisfiesAssertion, c
|
|
|
212
212
|
}
|
|
213
213
|
function unifyStatementAsSatisfiesAssertion(statement, reference, satisfiesAssertion, context) {
|
|
214
214
|
return _async_to_generator(function() {
|
|
215
|
-
var statementUnifiesAsSatisfiesAssertion, statementString, stated, assignments, subproofOrProofAssertions, topLevelAssertion, axiom, satisfiable,
|
|
215
|
+
var statementUnifiesAsSatisfiesAssertion, statementString, stated, assignments, subproofOrProofAssertions, topLevelAssertion, axiom, satisfiable, substitutions, topLevelAssertionUnifies, substitutionsCorrelates, axiomString;
|
|
216
216
|
return _ts_generator(this, function(_state) {
|
|
217
217
|
statementUnifiesAsSatisfiesAssertion = false;
|
|
218
218
|
satisfiesAssertion = (0, _statement.satisfiesAssertionFromStatement)(statement, context);
|
|
@@ -237,9 +237,9 @@ function unifyStatementAsSatisfiesAssertion(statement, reference, satisfiesAsser
|
|
|
237
237
|
if (axiom !== null) {
|
|
238
238
|
satisfiable = axiom.isSatisfiable();
|
|
239
239
|
if (satisfiable) {
|
|
240
|
-
|
|
240
|
+
substitutions = [], topLevelAssertionUnifies = axiom.unifyTopLevelAssertion(topLevelAssertion, substitutions, context);
|
|
241
241
|
if (topLevelAssertionUnifies) {
|
|
242
|
-
substitutionsCorrelates = satisfiesAssertion.correlateSubstitutions(
|
|
242
|
+
substitutionsCorrelates = satisfiesAssertion.correlateSubstitutions(substitutions, context);
|
|
243
243
|
if (substitutionsCorrelates) {
|
|
244
244
|
statementUnifiesAsSatisfiesAssertion = true;
|
|
245
245
|
}
|
|
@@ -264,15 +264,29 @@ function unifyStatementAsSatisfiesAssertion(statement, reference, satisfiesAsser
|
|
|
264
264
|
}
|
|
265
265
|
function unifyStatementWithTopLevelAssertion(statement, reference, satisfiesAssertion, context) {
|
|
266
266
|
return _async_to_generator(function() {
|
|
267
|
-
var statementUnifiesWithTopLevelAssertion,
|
|
267
|
+
var statementUnifiesWithTopLevelAssertion, topLevelAssertion, statementString, topLevelAssertionString, subproofOrProofAssertions, statementAndSubproofOrProofAssertionsUnify, metavariable;
|
|
268
268
|
return _ts_generator(this, function(_state) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
269
|
+
switch(_state.label){
|
|
270
|
+
case 0:
|
|
271
|
+
statementUnifiesWithTopLevelAssertion = false;
|
|
272
|
+
if (!(reference !== null)) return [
|
|
273
|
+
3,
|
|
274
|
+
2
|
|
275
|
+
];
|
|
276
|
+
topLevelAssertion = context.findTopLevelAssertionByReference(reference);
|
|
277
|
+
if (!(topLevelAssertion !== null)) return [
|
|
278
|
+
3,
|
|
279
|
+
2
|
|
280
|
+
];
|
|
273
281
|
statementString = statement.getString(), topLevelAssertionString = reference.getString();
|
|
274
282
|
context.trace("Unifying the '".concat(statementString, "' statement with the '").concat(topLevelAssertionString, "' top level assertion..."));
|
|
275
|
-
subproofOrProofAssertions = context.getSubproofOrProofAssertions()
|
|
283
|
+
subproofOrProofAssertions = context.getSubproofOrProofAssertions();
|
|
284
|
+
return [
|
|
285
|
+
4,
|
|
286
|
+
topLevelAssertion.unifyStatementAndSubproofOrProofAssertions(statement, subproofOrProofAssertions, context)
|
|
287
|
+
];
|
|
288
|
+
case 1:
|
|
289
|
+
statementAndSubproofOrProofAssertionsUnify = _state.sent();
|
|
276
290
|
if (statementAndSubproofOrProofAssertionsUnify) {
|
|
277
291
|
metavariable = reference.getMetavariable();
|
|
278
292
|
debugger;
|
|
@@ -288,12 +302,13 @@ function unifyStatementWithTopLevelAssertion(statement, reference, satisfiesAsse
|
|
|
288
302
|
if (statementUnifiesWithTopLevelAssertion) {
|
|
289
303
|
context.debug("...unified the '".concat(statementString, "' statement with the '").concat(topLevelAssertionString, "' top level assertion."));
|
|
290
304
|
}
|
|
291
|
-
|
|
305
|
+
_state.label = 2;
|
|
306
|
+
case 2:
|
|
307
|
+
return [
|
|
308
|
+
2,
|
|
309
|
+
statementUnifiesWithTopLevelAssertion
|
|
310
|
+
];
|
|
292
311
|
}
|
|
293
|
-
return [
|
|
294
|
-
2,
|
|
295
|
-
statementUnifiesWithTopLevelAssertion
|
|
296
|
-
];
|
|
297
312
|
});
|
|
298
313
|
})();
|
|
299
314
|
}
|
|
@@ -460,4 +475,4 @@ var unifyStatements = [
|
|
|
460
475
|
compareStatementWithSubproofOrProofAssertions
|
|
461
476
|
];
|
|
462
477
|
|
|
463
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdW5pZmljYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGVxdWFsaXR5RnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQsXG4gICAgICAgICB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlbWVudFwiO1xuXG5jb25zdCB7IGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSdWxlKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcnVsZVN0cmluZyA9IHJ1bGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgcnVsZS51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFJ1bGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2Uoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSByZWZlcmVuY2UudmFsaWRhdGVNZXRhdmFyaWFibGUoY29udGV4dCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlVmFsaWRhdGVzKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICAgIGRlYnVnZ2VyXG5cbiAgICAgIC8vIHN5bnRoZXRpY2FsbHkoKGNvbnRleHQpID0+IHtcbiAgICAgIC8vICAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzO1xuICAgICAgLy9cbiAgICAgIC8vICAgU3RhdGVtZW50U3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgICAvLyAgdmFsaWRhdGVcbiAgICAgIC8vXG4gICAgICAvLyB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFJlZmVyZW5jZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVkID0gdHJ1ZSxcbiAgICAgICAgICBhc3NpZ25tZW50cyA9IG51bGw7XG5cbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24udmVyaWZ5U2lnbmF0dXJlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24gPSBiYWNrd2FyZHNTb21lKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIChzdGVwc09yU3VicHJvb2YpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IHN0ZXBzT3JTdWJwcm9vZi51bmlmeVdpdGhTYXRpc2ZpZXNBc3NlcnRpb24oc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICByZWZlcmVuY2UgPSBzYXRpc2ZpZXNBc3NlcnRpb24uZ2V0UmVmZXJlbmNlKCk7XG5cbiAgICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICAgICAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc2F0aXNmaWFibGUgPSBheGlvbS5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgICAgICBpZiAoc2F0aXNmaWFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uVW5pZmllcyA9IGF4aW9tLnVuaWZ5VG9wTGV2ZWxBc3NlcnRpb24odG9wTGV2ZWxBc3NlcnRpb24sIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzID0gc2F0aXNmaWVzQXNzZXJ0aW9uLmNvcnJlbGF0ZVN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBheGlvbVN0cmluZyA9IGF4aW9tLmdldFN0cmluZygpO1xuXG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdW5pZnkgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBiZWNhdXNlIGl0IGlzIG5vdCBzYXRpc2ZpYWJsZS5gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoVG9wTGV2ZWxBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCB7IFN1YnN0aXR1dGlvbnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gY29udGV4dC5maW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZShyZWZlcmVuY2UpLFxuICAgICAgICAgIGdlbmVyYWxTdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uczsgLy8vXG5cbiAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgICBzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkgPSB0b3BMZXZlbEFzc2VydGlvbi51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSkge1xuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICAgICAgZGVidWdnZXJcblxuICAgICAgICAvLyBzeW50aGV0aWNhbGx5KChjb250ZXh0KSA9PiB7XG4gICAgICAgIC8vICAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzO1xuICAgICAgICAvL1xuICAgICAgICAvLyAgIFN0YXRlbWVudFN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBjb250ZXh0KTtcblxuICAgICAgICAvLyB2YWlkZGF0ZVxuICAgICAgICAvL1xuICAgICAgICAvLyB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3RvcExldmVsQXNzZXJ0aW9uU3RyaW5nfScgdG9wIGxldmVsIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRBRXF1YWxpdHkoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gKTtcblxuICAgICAgY29uc3QgZXF1YWxpdHlFcXVhbCA9IGVxdWFsaXR5LmlzRXF1YWwoY29udGV4dCk7XG5cbiAgICAgIGlmIChlcXVhbGl0eUVxdWFsKSB7XG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNBRXF1YWxpdHkgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBRXF1YWxpdHk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQgPSB0cnVlO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50O1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbihzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIHN0YXRlbWVudFVuaWZpZXNBc1R5cGVBc3NlcnRpb24gPSB0cnVlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBjb25zdCB0ZXJtID0gcHJvcGVydHlBc3NlcnRpb24uZ2V0VGVybSgpLFxuICAgICAgICAgICAgZXF1aXZhbGVuY2UgPSBjb250ZXh0LmZpbmRFcXVpdmFsZW5jZUJ5VGVybSh0ZXJtKTtcblxuICAgICAgaWYgKGVxdWl2YWxlbmNlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uTWF0Y2hlcyA9IGVxdWl2YWxlbmNlLnNvbWVPdGhlclRlcm0odGVybSwgKHRlcm0pID0+IHsgIC8vL1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbi5nZXRQcm9wZXJ0eVJlbGF0aW9uKCksXG4gICAgICAgICAgICAgICAgY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uID0gY29udGV4dC5jb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24odGVybSwgcHJvcGVydHlSZWxhdGlvbik7XG5cbiAgICAgICAgICBpZiAoY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbk1hdGNoZXMpIHtcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb247XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aFNhdGlzZmllc0Fzc2VydGlvbihzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uU3RyaW5nID0gc2F0aXNmaWVzQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVtbnQgd2l0aCB0aGUgJyR7c2F0aXNmaWVzQXNzZXJ0aW9uU3RyaW5nfScgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXMgPSBzYXRpc2ZpZXNBc3NlcnRpb24udW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0YXRlbWVudCwgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW1udCB3aXRoIHRoZSAnJHtzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmd9JyBzYXRpc2ZpZXMgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGFyZVN0YXRlbWVudFdpdGhTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudEVxdWF0ZXNXaXRoU3RlcE9yU3VicHJvb2ZzID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYENvbXBhcmluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlIHN1YnByb29mcyBvciBwcm9vZiBhc3NzZXJ0aW9ucy4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoU3RlcHMgPSBzdGF0ZW1lbnQuY29tcGFyZVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhTdGVwcykge1xuICAgICAgc3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uY29tcGFyZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSBzdWJwcm9vZnMgb3IgcHJvb2YgYXNzc2VydGlvbnMuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudEVxdWF0ZXNXaXRoU3RlcE9yU3VicHJvb2ZzO1xufVxuXG5leHBvcnQgY29uc3QgdW5pZnlTdGF0ZW1lbnRzID0gW1xuICB1bmlmeVN0YXRlbWVudFdpdGhSdWxlLFxuICB1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2UsXG4gIHVuaWZ5U3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24sXG4gIHVuaWZ5U3RhdGVtZW50V2l0aFRvcExldmVsQXNzZXJ0aW9uLFxuICB1bmlmeVN0YXRlbWVudEFFcXVhbGl0eSxcbiAgdW5pZnlTdGF0ZW1lbnRBc0p1ZGdlbWVudCxcbiAgdW5pZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24sXG4gIHVuaWZ5U3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uLFxuICBjb21wYXJlU3RhdGVtZW50V2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNcbl07XG4iXSwibmFtZXMiOlsidW5pZnlTdGF0ZW1lbnRzIiwiYmFja3dhcmRzU29tZSIsImFycmF5VXRpbGl0aWVzIiwidW5pZnlTdGF0ZW1lbnRXaXRoUnVsZSIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInNhdGlzZmllc0Fzc2VydGlvbiIsImNvbnRleHQiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFJ1bGUiLCJydWxlIiwicnVsZVN0cmluZyIsInN0YXRlbWVudFN0cmluZyIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwidW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZGVidWciLCJ1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2UiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFJlZmVyZW5jZSIsInJlZmVyZW5jZVN0cmluZyIsIm1ldGF2YXJpYWJsZVZhbGlkYXRlcyIsIm1ldGF2YXJpYWJsZSIsInZhbGlkYXRlTWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwidW5pZnlTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbiIsInN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbiIsInN0YXRlZCIsImFzc2lnbm1lbnRzIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJheGlvbSIsInNhdGlzZmlhYmxlIiwic3Vic3RpdHV0aW9ucyIsInRvcExldmVsQXNzZXJ0aW9uVW5pZmllcyIsInN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzIiwiYXhpb21TdHJpbmciLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmVyaWZ5U2lnbmF0dXJlIiwic3RlcHNPclN1YnByb29mIiwic3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbiIsInVuaWZ5V2l0aFNhdGlzZmllc0Fzc2VydGlvbiIsImZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlIiwiZ2V0UmVmZXJlbmNlIiwiZmluZEF4aW9tQnlSZWZlcmVuY2UiLCJpc1NhdGlzZmlhYmxlIiwidW5pZnlUb3BMZXZlbEFzc2VydGlvbiIsImNvcnJlbGF0ZVN1YnN0aXR1dGlvbnMiLCJ1bmlmeVN0YXRlbWVudFdpdGhUb3BMZXZlbEFzc2VydGlvbiIsInN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24iLCJTdWJzdGl0dXRpb25zIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbnMiLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsImVsZW1lbnRzIiwidW5pZnlTdGF0ZW1lbnRBRXF1YWxpdHkiLCJzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eUVxdWFsIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwiaXNFcXVhbCIsInVuaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInRlcm0iLCJlcXVpdmFsZW5jZSIsInByb3BlcnR5QXNzZXJ0aW9uTWF0Y2hlcyIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsImdldFRlcm0iLCJmaW5kRXF1aXZhbGVuY2VCeVRlcm0iLCJzb21lT3RoZXJUZXJtIiwicHJvcGVydHlSZWxhdGlvbiIsImdldFByb3BlcnR5UmVsYXRpb24iLCJjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJjb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJ1bmlmeVN0YXRlbWVudFdpdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvblN0cmluZyIsInN0YXRlbWVudFVuaWZpZXMiLCJjb21wYXJlU3RhdGVtZW50V2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcyIsInN0YXRlbWVudFVuaWZpZXNXaXRoU3RlcHMiLCJjb21wYXJlU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBa1ZhQTs7O2VBQUFBOzs7eUJBaFZrQjsrREFFVjt5QkFNMkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVoRCxJQUFNLEFBQUVDLGdCQUFrQkMseUJBQWMsQ0FBaENEO0FBRVIsU0FBZUUsdUJBQXVCQyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLE9BQU87O1lBQ2pGQywwQkFHSUMsTUFHRUMsWUFDQUMsaUJBSUFDLDJCQUNBQzs7OztvQkFaTkwsMkJBQTJCO3lCQUUzQkgsQ0FBQUEsY0FBYyxJQUFHLEdBQWpCQTs7OztvQkFDSUksT0FBT0YsUUFBUU8sbUJBQW1CLENBQUNUO3lCQUVyQ0ksQ0FBQUEsU0FBUyxJQUFHLEdBQVpBOzs7O29CQUNJQyxhQUFhRCxLQUFLTSxTQUFTLElBQzNCSixrQkFBa0JQLFVBQVVXLFNBQVM7b0JBRTNDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxpQkFBd0ROLE9BQXhDQyxpQkFBZ0IsMEJBQW1DLE9BQVhELFlBQVc7b0JBRTVFRSw0QkFBNEJMLFFBQVFVLDRCQUE0QjtvQkFDbkI7O3dCQUFNUixLQUFLUywwQ0FBMEMsQ0FBQ2QsV0FBV1EsMkJBQTJCTDs7O29CQUF6SU0sNkNBQTZDO29CQUVuRCxJQUFJQSw0Q0FBNEM7d0JBQzlDTCwyQkFBMkI7b0JBQzdCO29CQUVBLElBQUlBLDBCQUEwQjt3QkFDNUJELFFBQVFZLEtBQUssQ0FBQyxBQUFDLG1CQUEwRFQsT0FBeENDLGlCQUFnQiwwQkFBbUMsT0FBWEQsWUFBVztvQkFDdEY7OztvQkFJSjs7d0JBQU9GOzs7O0lBQ1Q7O0FBRUEsU0FBZVksNEJBQTRCaEIsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPOztZQUN0RmMsK0JBR0lWLGlCQUNBVyxpQkFJQUMsdUJBR0VDOztZQVhOSCxnQ0FBZ0M7WUFFcEMsSUFBSWhCLGNBQWMsTUFBTTtnQkFDaEJNLGtCQUFrQlAsVUFBVVcsU0FBUyxJQUNyQ08sa0JBQWtCakIsVUFBVVUsU0FBUztnQkFFM0NSLFFBQVFTLEtBQUssQ0FBQyxBQUFDLGlCQUF3RE0sT0FBeENYLGlCQUFnQiwwQkFBd0MsT0FBaEJXLGlCQUFnQjtnQkFFakZDLHdCQUF3QmxCLFVBQVVvQixvQkFBb0IsQ0FBQ2xCO2dCQUU3RCxJQUFJZ0IsdUJBQXVCO29CQUNuQkMsZUFBZW5CLFVBQVVxQixlQUFlO29CQUU5QyxRQUFRO29CQUVSLCtCQUErQjtvQkFDL0IsZ0RBQWdEO29CQUNoRCxFQUFFO29CQUNGLDBGQUEwRjtvQkFFMUYsWUFBWTtvQkFDWixFQUFFO29CQUNGLHVDQUF1QztvQkFFdkNMLGdDQUFnQztnQkFDbEM7Z0JBRUEsSUFBSUEsK0JBQStCO29CQUNqQ2QsUUFBUVksS0FBSyxDQUFDLEFBQUMsbUJBQTBERyxPQUF4Q1gsaUJBQWdCLDBCQUF3QyxPQUFoQlcsaUJBQWdCO2dCQUMzRjtZQUNGO1lBRUE7O2dCQUFPRDs7O0lBQ1Q7O0FBRUEsU0FBZU0sbUNBQW1DdkIsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPOztZQUM3RnFCLHNDQUtJakIsaUJBSUFrQixRQUNBQyxhQUtFbEIsMkJBVUFtQixtQkFLRUMsT0FHRUMsYUFHRUMsZ0JBQ0FDLDBCQUdFQyx5QkFPRkM7O1lBL0NaVCx1Q0FBdUM7WUFFM0N0QixxQkFBcUJnQyxJQUFBQSwwQ0FBK0IsRUFBQ2xDLFdBQVdHO1lBRWhFLElBQUlELHVCQUF1QixNQUFNO2dCQUN6Qkssa0JBQWtCUCxVQUFVVyxTQUFTO2dCQUUzQ1IsUUFBUVMsS0FBSyxDQUFDLEFBQUMsaUJBQWdDLE9BQWhCTCxpQkFBZ0I7Z0JBRXpDa0IsU0FBUyxNQUNUQyxjQUFjO2dCQUVwQnhCLG1CQUFtQmlDLGVBQWUsQ0FBQ1QsYUFBYUQsUUFBUXRCO2dCQUV4RCxJQUFJRixjQUFjLE1BQU07b0JBQ2hCTyw0QkFBNEJMLFFBQVFVLDRCQUE0QjtvQkFFdEVXLHVDQUF1QzNCLGNBQWNXLDJCQUEyQixTQUFDNEI7d0JBQy9FLElBQU1DLDhDQUE4Q0QsZ0JBQWdCRSwyQkFBMkIsQ0FBQ3BDLG9CQUFvQkM7d0JBRXBILElBQUlrQyw2Q0FBNkM7NEJBQy9DLE9BQU87d0JBQ1Q7b0JBQ0Y7Z0JBQ0YsT0FBTztvQkFDQ1Ysb0JBQW9CeEIsUUFBUW9DLGdDQUFnQyxDQUFDdEM7b0JBRW5FLElBQUkwQixzQkFBc0IsTUFBTTt3QkFDOUIxQixZQUFZQyxtQkFBbUJzQyxZQUFZO3dCQUVyQ1osUUFBUXpCLFFBQVFzQyxvQkFBb0IsQ0FBQ3hDO3dCQUUzQyxJQUFJMkIsVUFBVSxNQUFNOzRCQUNaQyxjQUFjRCxNQUFNYyxhQUFhOzRCQUV2QyxJQUFJYixhQUFhO2dDQUNUQyxxQkFDQUMsMkJBQTJCSCxNQUFNZSxzQkFBc0IsQ0FBQ2hCLG1CQUFtQkcsZ0JBQWUzQjtnQ0FFaEcsSUFBSTRCLDBCQUEwQjtvQ0FDdEJDLDBCQUEwQjlCLG1CQUFtQjBDLHNCQUFzQixDQUFDZCxnQkFBZTNCO29DQUV6RixJQUFJNkIseUJBQXlCO3dDQUMzQlIsdUNBQXVDO29DQUN6QztnQ0FDRjs0QkFDRixPQUFPO2dDQUNDUyxjQUFjTCxNQUFNakIsU0FBUztnQ0FFbkNSLFFBQVFZLEtBQUssQ0FBQyxBQUFDLDZCQUF3QyxPQUFaa0IsYUFBWTs0QkFDekQ7d0JBQ0Y7b0JBQ0Y7Z0JBQ0Y7Z0JBRUEsSUFBSVQsc0NBQXNDO29CQUN4Q3JCLFFBQVFZLEtBQUssQ0FBQyxBQUFDLG1CQUFrQyxPQUFoQlIsaUJBQWdCO2dCQUNuRDtZQUNGO1lBRUE7O2dCQUFPaUI7OztJQUNUOztBQUVBLFNBQWVxQixvQ0FBb0M3QyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLE9BQU87O1lBQzlGMkMsdUNBR01DLGVBQ0ZwQixtQkFDQXFCLHNCQUdFekMsaUJBQ0EwQyx5QkFJQXpDLDJCQUNBQyw0Q0FHRVc7O1lBakJSMEIsd0NBQXdDO1lBRTVDLElBQUk3QyxjQUFjLE1BQU07Z0JBQ2Q4QyxnQkFBa0JHLGlCQUFRLENBQTFCSCxlQUNGcEIsb0JBQW9CeEIsUUFBUW9DLGdDQUFnQyxDQUFDdEMsWUFDN0QrQyx1QkFBdUJsQixlQUFlLEdBQUc7Z0JBRS9DLElBQUlILHNCQUFzQixNQUFNO29CQUN4QnBCLGtCQUFrQlAsVUFBVVcsU0FBUyxJQUNyQ3NDLDBCQUEwQmhELFVBQVVVLFNBQVM7b0JBRW5EUixRQUFRUyxLQUFLLENBQUMsQUFBQyxpQkFBd0RxQyxPQUF4QzFDLGlCQUFnQiwwQkFBZ0QsT0FBeEIwQyx5QkFBd0I7b0JBRXpGekMsNEJBQTRCTCxRQUFRVSw0QkFBNEIsSUFDaEVKLDZDQUE2Q2tCLGtCQUFrQmIsMENBQTBDLENBQUNkLFdBQVdRLDJCQUEyQkw7b0JBRXRKLElBQUlNLDRDQUE0Qzt3QkFDeENXLGVBQWVuQixVQUFVcUIsZUFBZTt3QkFFOUMsUUFBUTt3QkFFUiwrQkFBK0I7d0JBQy9CLGdEQUFnRDt3QkFDaEQsRUFBRTt3QkFDRiwwRkFBMEY7d0JBRTFGLFdBQVc7d0JBQ1gsRUFBRTt3QkFDRix1Q0FBdUM7d0JBRXZDd0Isd0NBQXdDO29CQUMxQztvQkFFQSxJQUFJQSx1Q0FBdUM7d0JBQ3pDM0MsUUFBUVksS0FBSyxDQUFDLEFBQUMsbUJBQTBEa0MsT0FBeEMxQyxpQkFBZ0IsMEJBQWdELE9BQXhCMEMseUJBQXdCO29CQUNuRztnQkFDRjtZQUNGO1lBRUE7O2dCQUFPSDs7O0lBQ1Q7O0FBRUEsU0FBZUssd0JBQXdCbkQsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPOztZQUNsRmlELDJCQUdJQyxVQUdFOUMsaUJBSUErQzs7WUFWTkYsNEJBQTRCO1lBRWhDLElBQUluRCxjQUFjLE1BQU07Z0JBQ2hCb0QsV0FBV0UsSUFBQUEsZ0NBQXFCLEVBQUN2RCxXQUFXRztnQkFFbEQsSUFBSWtELGFBQWEsTUFBTTtvQkFDZjlDLGtCQUFrQlAsVUFBVVcsU0FBUztvQkFFM0NSLFFBQVFTLEtBQUssQ0FBQyxBQUFDLGlCQUFnQyxPQUFoQkwsaUJBQWdCO29CQUV6QytDLGdCQUFnQkQsU0FBU0csT0FBTyxDQUFDckQ7b0JBRXZDLElBQUltRCxlQUFlO3dCQUNqQkYsNEJBQTRCO29CQUM5QjtvQkFFQSxJQUFJQSwyQkFBMkI7d0JBQzdCakQsUUFBUVksS0FBSyxDQUFDLEFBQUMsbUJBQWtDLE9BQWhCUixpQkFBZ0I7b0JBQ25EO2dCQUNGO1lBQ0Y7WUFFQTs7Z0JBQU82Qzs7O0lBQ1Q7O0FBRUEsU0FBZUssMEJBQTBCekQsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPOztZQUNwRnVELDZCQUdJQyxXQUdFcEQ7O1lBTk5tRCw4QkFBOEI7WUFFbEMsSUFBSXpELGNBQWMsTUFBTTtnQkFDaEIwRCxZQUFZQyxJQUFBQSxpQ0FBc0IsRUFBQzVELFdBQVdHO2dCQUVwRCxJQUFJd0QsY0FBYyxNQUFNO29CQUNoQnBELGtCQUFrQlAsVUFBVVcsU0FBUztvQkFFM0NSLFFBQVFTLEtBQUssQ0FBQyxBQUFDLGlCQUFnQyxPQUFoQkwsaUJBQWdCO29CQUUvQ21ELDhCQUE4QjtvQkFFOUIsSUFBSUEsNkJBQTZCO3dCQUMvQnZELFFBQVFZLEtBQUssQ0FBQyxBQUFDLG1CQUFrQyxPQUFoQlIsaUJBQWdCO29CQUNuRDtnQkFDRjtZQUNGO1lBRUE7O2dCQUFPbUQ7OztJQUNUOztBQUVBLFNBQWVHLDhCQUE4QjdELFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTzs7WUFDeEYyRCxpQ0FHSUMsZUFHRXhEOztZQU5OdUQsa0NBQWtDO1lBRXRDLElBQUk3RCxjQUFjLE1BQU07Z0JBQ2hCOEQsZ0JBQWdCQyxJQUFBQSxxQ0FBMEIsRUFBQ2hFLFdBQVdHO2dCQUU1RCxJQUFJNEQsa0JBQWtCLE1BQU07b0JBQ3BCeEQsa0JBQWtCUCxVQUFVVyxTQUFTO29CQUUzQ1IsUUFBUVMsS0FBSyxDQUFDLEFBQUMsaUJBQWdDLE9BQWhCTCxpQkFBZ0I7b0JBRS9DdUQsa0NBQWtDO29CQUVsQzNELFFBQVFZLEtBQUssQ0FBQyxBQUFDLG1CQUFrQyxPQUFoQlIsaUJBQWdCO2dCQUNuRDtZQUNGO1lBRUE7O2dCQUFPdUQ7OztJQUNUOztBQUVBLFNBQWVHLGtDQUFrQ2pFLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTzs7WUFDNUYrRCxxQ0FHSUMsbUJBR0U1RCxpQkFJQTZELE1BQ0FDLGFBR0VDOztZQWRSSixzQ0FBc0M7WUFFMUMsSUFBSWpFLGNBQWMsTUFBTTtnQkFDaEJrRSxvQkFBb0JJLElBQUFBLHlDQUE4QixFQUFDdkUsV0FBV0c7Z0JBRXBFLElBQUlnRSxzQkFBc0IsTUFBTTtvQkFDeEI1RCxrQkFBa0JQLFVBQVVXLFNBQVM7b0JBRTNDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxpQkFBZ0MsT0FBaEJMLGlCQUFnQjtvQkFFekM2RCxPQUFPRCxrQkFBa0JLLE9BQU8sSUFDaENILGNBQWNsRSxRQUFRc0UscUJBQXFCLENBQUNMO29CQUVsRCxJQUFJQyxnQkFBZ0IsTUFBTTt3QkFDbEJDLDJCQUEyQkQsWUFBWUssYUFBYSxDQUFDTixNQUFNLFNBQUNBOzRCQUNoRSxJQUFNTyxtQkFBbUJSLGtCQUFrQlMsbUJBQW1CLElBQ3hEQyxvQ0FBb0MxRSxRQUFRMkUsOEJBQThCLENBQUNWLE1BQU1POzRCQUV2RixJQUFJRSxtQ0FBbUM7Z0NBQ3JDLE9BQU87NEJBQ1Q7d0JBQ0Y7d0JBRUEsSUFBSVAsMEJBQTBCOzRCQUM1Qkosc0NBQXNDO3dCQUN4QztvQkFDRjtvQkFFQSxJQUFJQSxxQ0FBcUM7d0JBQ3ZDL0QsUUFBUVksS0FBSyxDQUFDLEFBQUMsbUJBQWtDLE9BQWhCUixpQkFBZ0I7b0JBQ25EO2dCQUNGO1lBQ0Y7WUFFQTs7Z0JBQU8yRDs7O0lBQ1Q7O0FBRUEsU0FBZWEscUNBQXFDL0UsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPOztZQUMvRjZFLHdDQUdJekUsaUJBQ0EwRSwwQkFJQXpFLDJCQUNBMEU7O1lBVEpGLHlDQUF5QztZQUU3QyxJQUFJOUUsdUJBQXVCLE1BQU07Z0JBQ3pCSyxrQkFBa0JQLFVBQVVXLFNBQVMsSUFDckNzRSwyQkFBMkIvRSxtQkFBbUJTLFNBQVM7Z0JBRTdEUixRQUFRUyxLQUFLLENBQUMsQUFBQyxpQkFBeURxRSxPQUF6QzFFLGlCQUFnQiwyQkFBa0QsT0FBekIwRSwwQkFBeUI7Z0JBRTNGekUsNEJBQTRCTCxRQUFRVSw0QkFBNEIsSUFDaEVxRSxtQkFBbUJoRixtQkFBbUJZLDBDQUEwQyxDQUFDZCxXQUFXUSwyQkFBMkJMO2dCQUU3SCxJQUFJK0Usa0JBQWtCO29CQUNwQkYseUNBQXlDO2dCQUMzQztnQkFFQSxJQUFJQSx3Q0FBd0M7b0JBQzFDN0UsUUFBUVksS0FBSyxDQUFDLEFBQUMsbUJBQTJEa0UsT0FBekMxRSxpQkFBZ0IsMkJBQWtELE9BQXpCMEUsMEJBQXlCO2dCQUNyRztZQUNGO1lBRUE7O2dCQUFPRDs7O0lBQ1Q7O0FBRUEsU0FBZUcsOENBQThDbkYsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPOztZQUN4R2lGLHFDQUdJN0UsaUJBSUFDLDJCQUNBNkU7O1lBUkpELHNDQUFzQztZQUUxQyxJQUFJbkYsY0FBYyxNQUFNO2dCQUNoQk0sa0JBQWtCUCxVQUFVVyxTQUFTO2dCQUUzQ1IsUUFBUVMsS0FBSyxDQUFDLEFBQUMsa0JBQWlDLE9BQWhCTCxpQkFBZ0I7Z0JBRTFDQyw0QkFBNEJMLFFBQVFVLDRCQUE0QixJQUNoRXdFLDRCQUE0QnJGLFVBQVVzRixnQ0FBZ0MsQ0FBQzlFLDJCQUEyQkw7Z0JBRXhHLElBQUlrRiwyQkFBMkI7b0JBQzdCRCxzQ0FBc0M7Z0JBQ3hDO2dCQUVBLElBQUlBLHFDQUFxQztvQkFDdkNqRixRQUFRWSxLQUFLLENBQUMsQUFBQyxvQkFBbUMsT0FBaEJSLGlCQUFnQjtnQkFDcEQ7WUFDRjtZQUVBOztnQkFBTzZFOzs7SUFDVDs7QUFFTyxJQUFNeEYsa0JBQWtCO0lBQzdCRztJQUNBaUI7SUFDQU87SUFDQXNCO0lBQ0FNO0lBQ0FNO0lBQ0FJO0lBQ0FJO0lBQ0FjO0lBQ0FJO0NBQ0QifQ==
|
|
478
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdW5pZmljYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGVxdWFsaXR5RnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQsXG4gICAgICAgICB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlbWVudFwiO1xuXG5jb25zdCB7IGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSdWxlKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcnVsZVN0cmluZyA9IHJ1bGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gYXdhaXQgcnVsZS51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFJ1bGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2Uoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSByZWZlcmVuY2UudmFsaWRhdGVNZXRhdmFyaWFibGUoY29udGV4dCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlVmFsaWRhdGVzKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICAgIGRlYnVnZ2VyXG5cbiAgICAgIC8vIHN5bnRoZXRpY2FsbHkoKGNvbnRleHQpID0+IHtcbiAgICAgIC8vICAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzO1xuICAgICAgLy9cbiAgICAgIC8vICAgU3RhdGVtZW50U3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgICAvLyAgdmFsaWRhdGVcbiAgICAgIC8vXG4gICAgICAvLyB9LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFJlZmVyZW5jZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVkID0gdHJ1ZSxcbiAgICAgICAgICBhc3NpZ25tZW50cyA9IG51bGw7XG5cbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24udmVyaWZ5U2lnbmF0dXJlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24gPSBiYWNrd2FyZHNTb21lKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIChzdGVwc09yU3VicHJvb2YpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IHN0ZXBzT3JTdWJwcm9vZi51bmlmeVdpdGhTYXRpc2ZpZXNBc3NlcnRpb24oc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3RlcE9yU3ViUHJvb2ZVbmlmaWVzV0l0aFNhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9wTGV2ZWxBc3NlcnRpb24gPSBjb250ZXh0LmZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICByZWZlcmVuY2UgPSBzYXRpc2ZpZXNBc3NlcnRpb24uZ2V0UmVmZXJlbmNlKCk7XG5cbiAgICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICAgICAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc2F0aXNmaWFibGUgPSBheGlvbS5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgICAgICBpZiAoc2F0aXNmaWFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uVW5pZmllcyA9IGF4aW9tLnVuaWZ5VG9wTGV2ZWxBc3NlcnRpb24odG9wTGV2ZWxBc3NlcnRpb24sIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzID0gc2F0aXNmaWVzQXNzZXJ0aW9uLmNvcnJlbGF0ZVN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBheGlvbVN0cmluZyA9IGF4aW9tLmdldFN0cmluZygpO1xuXG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdW5pZnkgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBiZWNhdXNlIGl0IGlzIG5vdCBzYXRpc2ZpYWJsZS5gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoVG9wTGV2ZWxBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIGlmICh0b3BMZXZlbEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgICAgdG9wTGV2ZWxBc3NlcnRpb25TdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICAgIHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSA9IGF3YWl0IHRvcExldmVsQXNzZXJ0aW9uLnVuaWZ5U3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGF0ZW1lbnQsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5KSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTtcblxuICAgICAgICBkZWJ1Z2dlclxuXG4gICAgICAgIC8vIHN5bnRoZXRpY2FsbHkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgLy8gICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHM7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgU3RhdGVtZW50U3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgICAgIC8vIHZhaWRkYXRlXG4gICAgICAgIC8vXG4gICAgICAgIC8vIH0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7dG9wTGV2ZWxBc3NlcnRpb25TdHJpbmd9JyB0b3AgbGV2ZWwgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFFcXVhbGl0eShzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5ID0gZmFsc2U7XG5cbiAgaWYgKHJlZmVyZW5jZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gICAgICBjb25zdCBlcXVhbGl0eUVxdWFsID0gZXF1YWxpdHkuaXNFcXVhbChjb250ZXh0KTtcblxuICAgICAgaWYgKGVxdWFsaXR5RXF1YWwpIHtcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3QganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCk7XG5cbiAgICAgIHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudCA9IHRydWU7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50LmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbiA9IHRydWU7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICAgIGNvbnN0IHRlcm0gPSBwcm9wZXJ0eUFzc2VydGlvbi5nZXRUZXJtKCksXG4gICAgICAgICAgICBlcXVpdmFsZW5jZSA9IGNvbnRleHQuZmluZEVxdWl2YWxlbmNlQnlUZXJtKHRlcm0pO1xuXG4gICAgICBpZiAoZXF1aXZhbGVuY2UgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25NYXRjaGVzID0gZXF1aXZhbGVuY2Uuc29tZU90aGVyVGVybSh0ZXJtLCAodGVybSkgPT4geyAgLy8vXG4gICAgICAgICAgY29uc3QgcHJvcGVydHlSZWxhdGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uLmdldFByb3BlcnR5UmVsYXRpb24oKSxcbiAgICAgICAgICAgICAgICBjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24gPSBjb250ZXh0LmNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKTtcblxuICAgICAgICAgIGlmIChjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uTWF0Y2hlcykge1xuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmcgPSBzYXRpc2ZpZXNBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW1udCB3aXRoIHRoZSAnJHtzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmd9JyBzYXRpc2ZpZXMgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllcyA9IHNhdGlzZmllc0Fzc2VydGlvbi51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbW50IHdpdGggdGhlICcke3NhdGlzZmllc0Fzc2VydGlvblN0cmluZ30nIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb21wYXJlU3RhdGVtZW50V2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgc3VicHJvb2ZzIG9yIHByb29mIGFzc3NlcnRpb25zLi4uYCk7XG5cbiAgICBjb25zdCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zID0gY29udGV4dC5nZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhTdGVwcyA9IHN0YXRlbWVudC5jb21wYXJlU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFN0ZXBzKSB7XG4gICAgICBzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudEVxdWF0ZXNXaXRoU3RlcE9yU3VicHJvb2ZzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5jb21wYXJlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlIHN1YnByb29mcyBvciBwcm9vZiBhc3NzZXJ0aW9ucy5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnM7XG59XG5cbmV4cG9ydCBjb25zdCB1bmlmeVN0YXRlbWVudHMgPSBbXG4gIHVuaWZ5U3RhdGVtZW50V2l0aFJ1bGUsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aFJlZmVyZW5jZSxcbiAgdW5pZnlTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoVG9wTGV2ZWxBc3NlcnRpb24sXG4gIHVuaWZ5U3RhdGVtZW50QUVxdWFsaXR5LFxuICB1bmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICB1bmlmeVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB1bmlmeVN0YXRlbWVudFdpdGhTYXRpc2ZpZXNBc3NlcnRpb24sXG4gIGNvbXBhcmVTdGF0ZW1lbnRXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1xuXTtcbiJdLCJuYW1lcyI6WyJ1bmlmeVN0YXRlbWVudHMiLCJiYWNrd2FyZHNTb21lIiwiYXJyYXlVdGlsaXRpZXMiLCJ1bmlmeVN0YXRlbWVudFdpdGhSdWxlIiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2F0aXNmaWVzQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZSIsInJ1bGUiLCJydWxlU3RyaW5nIiwic3RhdGVtZW50U3RyaW5nIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsImZpbmRSdWxlQnlSZWZlcmVuY2UiLCJnZXRTdHJpbmciLCJ0cmFjZSIsImdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJ1bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJkZWJ1ZyIsInVuaWZ5U3RhdGVtZW50V2l0aFJlZmVyZW5jZSIsInN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlIiwicmVmZXJlbmNlU3RyaW5nIiwibWV0YXZhcmlhYmxlVmFsaWRhdGVzIiwibWV0YXZhcmlhYmxlIiwidmFsaWRhdGVNZXRhdmFyaWFibGUiLCJnZXRNZXRhdmFyaWFibGUiLCJ1bmlmeVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RhdGVkIiwiYXNzaWdubWVudHMiLCJ0b3BMZXZlbEFzc2VydGlvbiIsImF4aW9tIiwic2F0aXNmaWFibGUiLCJzdWJzdGl0dXRpb25zIiwidG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzIiwic3Vic3RpdHV0aW9uc0NvcnJlbGF0ZXMiLCJheGlvbVN0cmluZyIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ2ZXJpZnlTaWduYXR1cmUiLCJzdGVwc09yU3VicHJvb2YiLCJzdGVwT3JTdWJQcm9vZlVuaWZpZXNXSXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwidW5pZnlXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwiZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UiLCJnZXRSZWZlcmVuY2UiLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsImlzU2F0aXNmaWFibGUiLCJ1bmlmeVRvcExldmVsQXNzZXJ0aW9uIiwiY29ycmVsYXRlU3Vic3RpdHV0aW9ucyIsInVuaWZ5U3RhdGVtZW50V2l0aFRvcExldmVsQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiIsInRvcExldmVsQXNzZXJ0aW9uU3RyaW5nIiwidW5pZnlTdGF0ZW1lbnRBRXF1YWxpdHkiLCJzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eUVxdWFsIiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwiaXNFcXVhbCIsInVuaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzQXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInRlcm0iLCJlcXVpdmFsZW5jZSIsInByb3BlcnR5QXNzZXJ0aW9uTWF0Y2hlcyIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsImdldFRlcm0iLCJmaW5kRXF1aXZhbGVuY2VCeVRlcm0iLCJzb21lT3RoZXJUZXJtIiwicHJvcGVydHlSZWxhdGlvbiIsImdldFByb3BlcnR5UmVsYXRpb24iLCJjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJjb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJ1bmlmeVN0YXRlbWVudFdpdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvblN0cmluZyIsInN0YXRlbWVudFVuaWZpZXMiLCJjb21wYXJlU3RhdGVtZW50V2l0aFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcyIsInN0YXRlbWVudFVuaWZpZXNXaXRoU3RlcHMiLCJjb21wYXJlU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZ1ZhQTs7O2VBQUFBOzs7eUJBOVVrQjsrREFFVjt5QkFNMkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVoRCxJQUFNLEFBQUVDLGdCQUFrQkMseUJBQWMsQ0FBaENEO0FBRVIsU0FBZUUsdUJBQXVCQyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLE9BQU87O1lBQ2pGQywwQkFHSUMsTUFHRUMsWUFDQUMsaUJBSUFDLDJCQUNBQzs7OztvQkFaTkwsMkJBQTJCO3lCQUUzQkgsQ0FBQUEsY0FBYyxJQUFHLEdBQWpCQTs7OztvQkFDSUksT0FBT0YsUUFBUU8sbUJBQW1CLENBQUNUO3lCQUVyQ0ksQ0FBQUEsU0FBUyxJQUFHLEdBQVpBOzs7O29CQUNJQyxhQUFhRCxLQUFLTSxTQUFTLElBQzNCSixrQkFBa0JQLFVBQVVXLFNBQVM7b0JBRTNDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxpQkFBd0ROLE9BQXhDQyxpQkFBZ0IsMEJBQW1DLE9BQVhELFlBQVc7b0JBRTVFRSw0QkFBNEJMLFFBQVFVLDRCQUE0QjtvQkFDbkI7O3dCQUFNUixLQUFLUywwQ0FBMEMsQ0FBQ2QsV0FBV1EsMkJBQTJCTDs7O29CQUF6SU0sNkNBQTZDO29CQUVuRCxJQUFJQSw0Q0FBNEM7d0JBQzlDTCwyQkFBMkI7b0JBQzdCO29CQUVBLElBQUlBLDBCQUEwQjt3QkFDNUJELFFBQVFZLEtBQUssQ0FBQyxBQUFDLG1CQUEwRFQsT0FBeENDLGlCQUFnQiwwQkFBbUMsT0FBWEQsWUFBVztvQkFDdEY7OztvQkFJSjs7d0JBQU9GOzs7O0lBQ1Q7O0FBRUEsU0FBZVksNEJBQTRCaEIsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPOztZQUN0RmMsK0JBR0lWLGlCQUNBVyxpQkFJQUMsdUJBR0VDOztZQVhOSCxnQ0FBZ0M7WUFFcEMsSUFBSWhCLGNBQWMsTUFBTTtnQkFDaEJNLGtCQUFrQlAsVUFBVVcsU0FBUyxJQUNyQ08sa0JBQWtCakIsVUFBVVUsU0FBUztnQkFFM0NSLFFBQVFTLEtBQUssQ0FBQyxBQUFDLGlCQUF3RE0sT0FBeENYLGlCQUFnQiwwQkFBd0MsT0FBaEJXLGlCQUFnQjtnQkFFakZDLHdCQUF3QmxCLFVBQVVvQixvQkFBb0IsQ0FBQ2xCO2dCQUU3RCxJQUFJZ0IsdUJBQXVCO29CQUNuQkMsZUFBZW5CLFVBQVVxQixlQUFlO29CQUU5QyxRQUFRO29CQUVSLCtCQUErQjtvQkFDL0IsZ0RBQWdEO29CQUNoRCxFQUFFO29CQUNGLDBGQUEwRjtvQkFFMUYsWUFBWTtvQkFDWixFQUFFO29CQUNGLHVDQUF1QztvQkFFdkNMLGdDQUFnQztnQkFDbEM7Z0JBRUEsSUFBSUEsK0JBQStCO29CQUNqQ2QsUUFBUVksS0FBSyxDQUFDLEFBQUMsbUJBQTBERyxPQUF4Q1gsaUJBQWdCLDBCQUF3QyxPQUFoQlcsaUJBQWdCO2dCQUMzRjtZQUNGO1lBRUE7O2dCQUFPRDs7O0lBQ1Q7O0FBRUEsU0FBZU0sbUNBQW1DdkIsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPOztZQUM3RnFCLHNDQUtJakIsaUJBSUFrQixRQUNBQyxhQUtFbEIsMkJBVUFtQixtQkFLRUMsT0FHRUMsYUFHRUMsZUFDQUMsMEJBR0VDLHlCQU9GQzs7WUEvQ1pULHVDQUF1QztZQUUzQ3RCLHFCQUFxQmdDLElBQUFBLDBDQUErQixFQUFDbEMsV0FBV0c7WUFFaEUsSUFBSUQsdUJBQXVCLE1BQU07Z0JBQ3pCSyxrQkFBa0JQLFVBQVVXLFNBQVM7Z0JBRTNDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxpQkFBZ0MsT0FBaEJMLGlCQUFnQjtnQkFFekNrQixTQUFTLE1BQ1RDLGNBQWM7Z0JBRXBCeEIsbUJBQW1CaUMsZUFBZSxDQUFDVCxhQUFhRCxRQUFRdEI7Z0JBRXhELElBQUlGLGNBQWMsTUFBTTtvQkFDaEJPLDRCQUE0QkwsUUFBUVUsNEJBQTRCO29CQUV0RVcsdUNBQXVDM0IsY0FBY1csMkJBQTJCLFNBQUM0Qjt3QkFDL0UsSUFBTUMsOENBQThDRCxnQkFBZ0JFLDJCQUEyQixDQUFDcEMsb0JBQW9CQzt3QkFFcEgsSUFBSWtDLDZDQUE2Qzs0QkFDL0MsT0FBTzt3QkFDVDtvQkFDRjtnQkFDRixPQUFPO29CQUNDVixvQkFBb0J4QixRQUFRb0MsZ0NBQWdDLENBQUN0QztvQkFFbkUsSUFBSTBCLHNCQUFzQixNQUFNO3dCQUM5QjFCLFlBQVlDLG1CQUFtQnNDLFlBQVk7d0JBRXJDWixRQUFRekIsUUFBUXNDLG9CQUFvQixDQUFDeEM7d0JBRTNDLElBQUkyQixVQUFVLE1BQU07NEJBQ1pDLGNBQWNELE1BQU1jLGFBQWE7NEJBRXZDLElBQUliLGFBQWE7Z0NBQ1RDLG9CQUNBQywyQkFBMkJILE1BQU1lLHNCQUFzQixDQUFDaEIsbUJBQW1CRyxlQUFlM0I7Z0NBRWhHLElBQUk0QiwwQkFBMEI7b0NBQ3RCQywwQkFBMEI5QixtQkFBbUIwQyxzQkFBc0IsQ0FBQ2QsZUFBZTNCO29DQUV6RixJQUFJNkIseUJBQXlCO3dDQUMzQlIsdUNBQXVDO29DQUN6QztnQ0FDRjs0QkFDRixPQUFPO2dDQUNDUyxjQUFjTCxNQUFNakIsU0FBUztnQ0FFbkNSLFFBQVFZLEtBQUssQ0FBQyxBQUFDLDZCQUF3QyxPQUFaa0IsYUFBWTs0QkFDekQ7d0JBQ0Y7b0JBQ0Y7Z0JBQ0Y7Z0JBRUEsSUFBSVQsc0NBQXNDO29CQUN4Q3JCLFFBQVFZLEtBQUssQ0FBQyxBQUFDLG1CQUFrQyxPQUFoQlIsaUJBQWdCO2dCQUNuRDtZQUNGO1lBRUE7O2dCQUFPaUI7OztJQUNUOztBQUVBLFNBQWVxQixvQ0FBb0M3QyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLE9BQU87O1lBQzlGMkMsdUNBR0luQixtQkFHRXBCLGlCQUNBd0MseUJBSUF2QywyQkFDQUMsNENBR0VXOzs7O29CQWZSMEIsd0NBQXdDO3lCQUV4QzdDLENBQUFBLGNBQWMsSUFBRyxHQUFqQkE7Ozs7b0JBQ0kwQixvQkFBb0J4QixRQUFRb0MsZ0NBQWdDLENBQUN0Qzt5QkFFL0QwQixDQUFBQSxzQkFBc0IsSUFBRyxHQUF6QkE7Ozs7b0JBQ0lwQixrQkFBa0JQLFVBQVVXLFNBQVMsSUFDckNvQywwQkFBMEI5QyxVQUFVVSxTQUFTO29CQUVuRFIsUUFBUVMsS0FBSyxDQUFDLEFBQUMsaUJBQXdEbUMsT0FBeEN4QyxpQkFBZ0IsMEJBQWdELE9BQXhCd0MseUJBQXdCO29CQUV6RnZDLDRCQUE0QkwsUUFBUVUsNEJBQTRCO29CQUNuQjs7d0JBQU1jLGtCQUFrQmIsMENBQTBDLENBQUNkLFdBQVdRLDJCQUEyQkw7OztvQkFBdEpNLDZDQUE2QztvQkFFbkQsSUFBSUEsNENBQTRDO3dCQUN4Q1csZUFBZW5CLFVBQVVxQixlQUFlO3dCQUU5QyxRQUFRO3dCQUVSLCtCQUErQjt3QkFDL0IsZ0RBQWdEO3dCQUNoRCxFQUFFO3dCQUNGLDBGQUEwRjt3QkFFMUYsV0FBVzt3QkFDWCxFQUFFO3dCQUNGLHVDQUF1Qzt3QkFFdkN3Qix3Q0FBd0M7b0JBQzFDO29CQUVBLElBQUlBLHVDQUF1Qzt3QkFDekMzQyxRQUFRWSxLQUFLLENBQUMsQUFBQyxtQkFBMERnQyxPQUF4Q3hDLGlCQUFnQiwwQkFBZ0QsT0FBeEJ3Qyx5QkFBd0I7b0JBQ25HOzs7b0JBSUo7O3dCQUFPRDs7OztJQUNUOztBQUVBLFNBQWVFLHdCQUF3QmhELFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTzs7WUFDbEY4QywyQkFHSUMsVUFHRTNDLGlCQUlBNEM7O1lBVk5GLDRCQUE0QjtZQUVoQyxJQUFJaEQsY0FBYyxNQUFNO2dCQUNoQmlELFdBQVdFLElBQUFBLGdDQUFxQixFQUFDcEQsV0FBV0c7Z0JBRWxELElBQUkrQyxhQUFhLE1BQU07b0JBQ2YzQyxrQkFBa0JQLFVBQVVXLFNBQVM7b0JBRTNDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxpQkFBZ0MsT0FBaEJMLGlCQUFnQjtvQkFFekM0QyxnQkFBZ0JELFNBQVNHLE9BQU8sQ0FBQ2xEO29CQUV2QyxJQUFJZ0QsZUFBZTt3QkFDakJGLDRCQUE0QjtvQkFDOUI7b0JBRUEsSUFBSUEsMkJBQTJCO3dCQUM3QjlDLFFBQVFZLEtBQUssQ0FBQyxBQUFDLG1CQUFrQyxPQUFoQlIsaUJBQWdCO29CQUNuRDtnQkFDRjtZQUNGO1lBRUE7O2dCQUFPMEM7OztJQUNUOztBQUVBLFNBQWVLLDBCQUEwQnRELFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTzs7WUFDcEZvRCw2QkFHSUMsV0FHRWpEOztZQU5OZ0QsOEJBQThCO1lBRWxDLElBQUl0RCxjQUFjLE1BQU07Z0JBQ2hCdUQsWUFBWUMsSUFBQUEsaUNBQXNCLEVBQUN6RCxXQUFXRztnQkFFcEQsSUFBSXFELGNBQWMsTUFBTTtvQkFDaEJqRCxrQkFBa0JQLFVBQVVXLFNBQVM7b0JBRTNDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxpQkFBZ0MsT0FBaEJMLGlCQUFnQjtvQkFFL0NnRCw4QkFBOEI7b0JBRTlCLElBQUlBLDZCQUE2Qjt3QkFDL0JwRCxRQUFRWSxLQUFLLENBQUMsQUFBQyxtQkFBa0MsT0FBaEJSLGlCQUFnQjtvQkFDbkQ7Z0JBQ0Y7WUFDRjtZQUVBOztnQkFBT2dEOzs7SUFDVDs7QUFFQSxTQUFlRyw4QkFBOEIxRCxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLE9BQU87O1lBQ3hGd0QsaUNBR0lDLGVBR0VyRDs7WUFOTm9ELGtDQUFrQztZQUV0QyxJQUFJMUQsY0FBYyxNQUFNO2dCQUNoQjJELGdCQUFnQkMsSUFBQUEscUNBQTBCLEVBQUM3RCxXQUFXRztnQkFFNUQsSUFBSXlELGtCQUFrQixNQUFNO29CQUNwQnJELGtCQUFrQlAsVUFBVVcsU0FBUztvQkFFM0NSLFFBQVFTLEtBQUssQ0FBQyxBQUFDLGlCQUFnQyxPQUFoQkwsaUJBQWdCO29CQUUvQ29ELGtDQUFrQztvQkFFbEN4RCxRQUFRWSxLQUFLLENBQUMsQUFBQyxtQkFBa0MsT0FBaEJSLGlCQUFnQjtnQkFDbkQ7WUFDRjtZQUVBOztnQkFBT29EOzs7SUFDVDs7QUFFQSxTQUFlRyxrQ0FBa0M5RCxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLE9BQU87O1lBQzVGNEQscUNBR0lDLG1CQUdFekQsaUJBSUEwRCxNQUNBQyxhQUdFQzs7WUFkUkosc0NBQXNDO1lBRTFDLElBQUk5RCxjQUFjLE1BQU07Z0JBQ2hCK0Qsb0JBQW9CSSxJQUFBQSx5Q0FBOEIsRUFBQ3BFLFdBQVdHO2dCQUVwRSxJQUFJNkQsc0JBQXNCLE1BQU07b0JBQ3hCekQsa0JBQWtCUCxVQUFVVyxTQUFTO29CQUUzQ1IsUUFBUVMsS0FBSyxDQUFDLEFBQUMsaUJBQWdDLE9BQWhCTCxpQkFBZ0I7b0JBRXpDMEQsT0FBT0Qsa0JBQWtCSyxPQUFPLElBQ2hDSCxjQUFjL0QsUUFBUW1FLHFCQUFxQixDQUFDTDtvQkFFbEQsSUFBSUMsZ0JBQWdCLE1BQU07d0JBQ2xCQywyQkFBMkJELFlBQVlLLGFBQWEsQ0FBQ04sTUFBTSxTQUFDQTs0QkFDaEUsSUFBTU8sbUJBQW1CUixrQkFBa0JTLG1CQUFtQixJQUN4REMsb0NBQW9DdkUsUUFBUXdFLDhCQUE4QixDQUFDVixNQUFNTzs0QkFFdkYsSUFBSUUsbUNBQW1DO2dDQUNyQyxPQUFPOzRCQUNUO3dCQUNGO3dCQUVBLElBQUlQLDBCQUEwQjs0QkFDNUJKLHNDQUFzQzt3QkFDeEM7b0JBQ0Y7b0JBRUEsSUFBSUEscUNBQXFDO3dCQUN2QzVELFFBQVFZLEtBQUssQ0FBQyxBQUFDLG1CQUFrQyxPQUFoQlIsaUJBQWdCO29CQUNuRDtnQkFDRjtZQUNGO1lBRUE7O2dCQUFPd0Q7OztJQUNUOztBQUVBLFNBQWVhLHFDQUFxQzVFLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTzs7WUFDL0YwRSx3Q0FHSXRFLGlCQUNBdUUsMEJBSUF0RSwyQkFDQXVFOztZQVRKRix5Q0FBeUM7WUFFN0MsSUFBSTNFLHVCQUF1QixNQUFNO2dCQUN6Qkssa0JBQWtCUCxVQUFVVyxTQUFTLElBQ3JDbUUsMkJBQTJCNUUsbUJBQW1CUyxTQUFTO2dCQUU3RFIsUUFBUVMsS0FBSyxDQUFDLEFBQUMsaUJBQXlEa0UsT0FBekN2RSxpQkFBZ0IsMkJBQWtELE9BQXpCdUUsMEJBQXlCO2dCQUUzRnRFLDRCQUE0QkwsUUFBUVUsNEJBQTRCLElBQ2hFa0UsbUJBQW1CN0UsbUJBQW1CWSwwQ0FBMEMsQ0FBQ2QsV0FBV1EsMkJBQTJCTDtnQkFFN0gsSUFBSTRFLGtCQUFrQjtvQkFDcEJGLHlDQUF5QztnQkFDM0M7Z0JBRUEsSUFBSUEsd0NBQXdDO29CQUMxQzFFLFFBQVFZLEtBQUssQ0FBQyxBQUFDLG1CQUEyRCtELE9BQXpDdkUsaUJBQWdCLDJCQUFrRCxPQUF6QnVFLDBCQUF5QjtnQkFDckc7WUFDRjtZQUVBOztnQkFBT0Q7OztJQUNUOztBQUVBLFNBQWVHLDhDQUE4Q2hGLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTzs7WUFDeEc4RSxxQ0FHSTFFLGlCQUlBQywyQkFDQTBFOztZQVJKRCxzQ0FBc0M7WUFFMUMsSUFBSWhGLGNBQWMsTUFBTTtnQkFDaEJNLGtCQUFrQlAsVUFBVVcsU0FBUztnQkFFM0NSLFFBQVFTLEtBQUssQ0FBQyxBQUFDLGtCQUFpQyxPQUFoQkwsaUJBQWdCO2dCQUUxQ0MsNEJBQTRCTCxRQUFRVSw0QkFBNEIsSUFDaEVxRSw0QkFBNEJsRixVQUFVbUYsZ0NBQWdDLENBQUMzRSwyQkFBMkJMO2dCQUV4RyxJQUFJK0UsMkJBQTJCO29CQUM3QkQsc0NBQXNDO2dCQUN4QztnQkFFQSxJQUFJQSxxQ0FBcUM7b0JBQ3ZDOUUsUUFBUVksS0FBSyxDQUFDLEFBQUMsb0JBQW1DLE9BQWhCUixpQkFBZ0I7Z0JBQ3BEO1lBQ0Y7WUFFQTs7Z0JBQU8wRTs7O0lBQ1Q7O0FBRU8sSUFBTXJGLGtCQUFrQjtJQUM3Qkc7SUFDQWlCO0lBQ0FPO0lBQ0FzQjtJQUNBRztJQUNBTTtJQUNBSTtJQUNBSTtJQUNBYztJQUNBSTtDQUNEIn0=
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-verify-cli",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.612",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-verify-cli",
|
|
7
7
|
"description": "Occam's Verifier",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"argumentative": "^2.0.36",
|
|
14
14
|
"necessary": "^17.0.9",
|
|
15
15
|
"occam-file-system": "^6.0.505",
|
|
16
|
-
"occam-furtle": "^3.0.
|
|
16
|
+
"occam-furtle": "^3.0.109",
|
|
17
17
|
"occam-grammars": "^1.3.510",
|
|
18
18
|
"occam-languages": "^0.0.79",
|
|
19
19
|
"occam-lexers": "^23.1.34",
|
package/src/context/ephemeral.js
CHANGED
|
@@ -216,7 +216,7 @@ export default class EphemeralContext extends Context {
|
|
|
216
216
|
return reference;
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
-
findSubstitutionBySubstitutionNode(substitutionNode
|
|
219
|
+
findSubstitutionBySubstitutionNode(substitutionNode) {
|
|
220
220
|
const substitution = this.substitutions.find((substitution) => {
|
|
221
221
|
const substitutionNodeMatches = substitution.matchNode(substitutionNode);
|
|
222
222
|
|
|
@@ -41,8 +41,10 @@ const { push, filter } = arrayUtilities,
|
|
|
41
41
|
|
|
42
42
|
export default class NominalFileContext extends FileContext {
|
|
43
43
|
constructor(context, filePath, tokens, node, lexer, parser, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables) {
|
|
44
|
-
super(context, filePath, tokens, node
|
|
44
|
+
super(context, filePath, tokens, node);
|
|
45
45
|
|
|
46
|
+
this.lexer = lexer;
|
|
47
|
+
this.parser = parser;
|
|
46
48
|
this.context = context;
|
|
47
49
|
this.filePath = filePath;
|
|
48
50
|
this.tokens = tokens;
|
|
@@ -63,33 +65,25 @@ export default class NominalFileContext extends FileContext {
|
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
getLexer() {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (lexer === null) {
|
|
68
|
+
if (this.lexer === null) {
|
|
69
69
|
const combinedCustomGrammar = this.getCombinedCustomGrammar(),
|
|
70
70
|
nominalLexer = nominalLexerFromCombinedCustomGrammar(NominalLexer, combinedCustomGrammar);
|
|
71
71
|
|
|
72
|
-
lexer = nominalLexer; ///
|
|
73
|
-
|
|
74
|
-
this.setLexer(lexer);
|
|
72
|
+
this.lexer = nominalLexer; ///
|
|
75
73
|
}
|
|
76
74
|
|
|
77
|
-
return lexer;
|
|
75
|
+
return this.lexer;
|
|
78
76
|
}
|
|
79
77
|
|
|
80
78
|
getParser() {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (parser === null) {
|
|
79
|
+
if (this.parser === null) {
|
|
84
80
|
const combinedCustomGrammar = this.getCombinedCustomGrammar(),
|
|
85
81
|
nominalParser = nominalParserFromCombinedCustomGrammar(NominalParser, combinedCustomGrammar);
|
|
86
82
|
|
|
87
|
-
parser = nominalParser; ///
|
|
88
|
-
|
|
89
|
-
this.setParser(parser);
|
|
83
|
+
this.parser = nominalParser; ///
|
|
90
84
|
}
|
|
91
85
|
|
|
92
|
-
return parser;
|
|
86
|
+
return this.parser;
|
|
93
87
|
}
|
|
94
88
|
|
|
95
89
|
getJudgements() {
|
|
@@ -630,17 +624,13 @@ export default class NominalFileContext extends FileContext {
|
|
|
630
624
|
return label;
|
|
631
625
|
}
|
|
632
626
|
|
|
633
|
-
|
|
627
|
+
findJudgementByMetavariableName(metavariableName) {
|
|
634
628
|
const judgements = this.getJudgements(),
|
|
635
629
|
judgement = judgements.find((judgement) => {
|
|
636
|
-
const
|
|
637
|
-
|
|
638
|
-
if (judgementSingular) {
|
|
639
|
-
const judgementMetavariableComparesToMetavariable = judgement.compareMetavariable(metavariable);
|
|
630
|
+
const judgementMetavariableComparesToMetavariable = judgement.matchMetavariableName(metavariableName);
|
|
640
631
|
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
}
|
|
632
|
+
if (judgementMetavariableComparesToMetavariable) {
|
|
633
|
+
return true;
|
|
644
634
|
}
|
|
645
635
|
}) || null;
|
|
646
636
|
|
|
@@ -885,7 +875,7 @@ export default class NominalFileContext extends FileContext {
|
|
|
885
875
|
constructors = [],
|
|
886
876
|
metatheorems = [],
|
|
887
877
|
metavariables = [],
|
|
888
|
-
nominalFileContext = FileContext.
|
|
878
|
+
nominalFileContext = FileContext.fromFile(NominalFileContext, file, lexer, parser, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables, context);
|
|
889
879
|
|
|
890
880
|
return nominalFileContext;
|
|
891
881
|
}
|
|
@@ -906,7 +896,7 @@ export default class NominalFileContext extends FileContext {
|
|
|
906
896
|
constructors = null,
|
|
907
897
|
metatheorems = null,
|
|
908
898
|
metavariables = null,
|
|
909
|
-
nominalFileContext = FileContext.
|
|
899
|
+
nominalFileContext = FileContext.fromFilePath(NominalFileContext, filePath, lexer, parser, types, rules, axioms, lemmas, theorems, variables, metaLemmas, conjectures, combinators, typePrefixes, constructors, metatheorems, metavariables, context);
|
|
910
900
|
|
|
911
901
|
return nominalFileContext;
|
|
912
902
|
}
|
package/src/context/liminal.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
|
-
import {
|
|
4
|
+
import { metavariableNamesFromSubstitutions } from "../utilities/substitutions";
|
|
5
5
|
import { substitutionsStringFromSubstitutions } from "../utilities/string";
|
|
6
6
|
|
|
7
7
|
import Context from "../context";
|
|
@@ -120,10 +120,10 @@ export default class LiminalContext extends Context {
|
|
|
120
120
|
|
|
121
121
|
resolveSubstitutions(generalContext, specificContext) {
|
|
122
122
|
const substitutions = this.getSubstitutions(),
|
|
123
|
-
|
|
123
|
+
metavariableNames = metavariableNamesFromSubstitutions(substitutions);
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
const complexSubstitutions = this.
|
|
125
|
+
metavariableNames.forEach((metavariableName) => {
|
|
126
|
+
const complexSubstitutions = this.findComplexSubstitutionsByMetavariableName(metavariableName),
|
|
127
127
|
complexSubstitutionsResolved = complexSubstitutions.every((complexSubstitution) => {
|
|
128
128
|
const substitution = complexSubstitution, ///
|
|
129
129
|
resolved = substitution.isResolved();
|
|
@@ -141,9 +141,9 @@ export default class LiminalContext extends Context {
|
|
|
141
141
|
|
|
142
142
|
areSubstitutionsResolved(generalContext, specificContext) {
|
|
143
143
|
const substitutions = this.getSubstitutions(),
|
|
144
|
-
|
|
145
|
-
resolved =
|
|
146
|
-
const complexSubstitutions = this.
|
|
144
|
+
metavariableNames = metavariableNamesFromSubstitutions(substitutions),
|
|
145
|
+
resolved = metavariableNames.every((metavariableName) => {
|
|
146
|
+
const complexSubstitutions = this.findComplexSubstitutionsByMetavariableName(metavariableName),
|
|
147
147
|
complexSubstitutionsResolved = complexSubstitutions.every((complexSubstitution) => {
|
|
148
148
|
const complexSubstitutionResolved = complexSubstitution.isResolved();
|
|
149
149
|
|
|
@@ -185,14 +185,14 @@ export default class LiminalContext extends Context {
|
|
|
185
185
|
return substitutions;
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
-
|
|
188
|
+
findSubstitutionByVariableIdentifier(variable) {
|
|
189
189
|
const substitution = this.findSubstitution((substitution) => {
|
|
190
190
|
const substitutionVariable = substitution.getVariable();
|
|
191
191
|
|
|
192
192
|
if (substitutionVariable !== null) {
|
|
193
|
-
const
|
|
193
|
+
const substitutionVariableMatchesVariableIdentifier = substitutionVariable.matchVariableIdentifier(variableIdentifier);
|
|
194
194
|
|
|
195
|
-
if (
|
|
195
|
+
if (substitutionVariableMatchesVariableIdentifier) {
|
|
196
196
|
return true;
|
|
197
197
|
}
|
|
198
198
|
}
|
|
@@ -201,31 +201,27 @@ export default class LiminalContext extends Context {
|
|
|
201
201
|
return substitution;
|
|
202
202
|
}
|
|
203
203
|
|
|
204
|
-
|
|
204
|
+
findSubstitutionByMetavariableName(metavariableName) {
|
|
205
205
|
const substitution = this.findSubstitution((substitution) => { ///
|
|
206
|
-
const
|
|
206
|
+
const substitutionMatchesMetavariableName = substitution.matchMetavariableName(metavariableName);
|
|
207
207
|
|
|
208
|
-
if (
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
if (substitutionMetavvariableComparesToMetavariable) {
|
|
212
|
-
return true;
|
|
213
|
-
}
|
|
208
|
+
if (substitutionMatchesMetavariableName) {
|
|
209
|
+
return true;
|
|
214
210
|
}
|
|
215
211
|
}) || null;
|
|
216
212
|
|
|
217
213
|
return substitution;
|
|
218
214
|
}
|
|
219
215
|
|
|
220
|
-
|
|
216
|
+
findSimpleSubstitutionByMetavariableName(metavariableName) {
|
|
221
217
|
const simpleSubstitution = this.findSubstitution((substitution) => {
|
|
222
218
|
const substitutionSimple = substitution.isSimple();
|
|
223
219
|
|
|
224
220
|
if (substitutionSimple) {
|
|
225
221
|
const simpleSubstitution = substitution, ///
|
|
226
|
-
|
|
222
|
+
simpleSubstitutionMatchesMetavariableName = simpleSubstitution.matchMetavariableName(metavariableName);
|
|
227
223
|
|
|
228
|
-
if (
|
|
224
|
+
if (simpleSubstitutionMatchesMetavariableName) {
|
|
229
225
|
return true;
|
|
230
226
|
}
|
|
231
227
|
}
|
|
@@ -234,30 +230,30 @@ export default class LiminalContext extends Context {
|
|
|
234
230
|
return simpleSubstitution;
|
|
235
231
|
}
|
|
236
232
|
|
|
237
|
-
|
|
238
|
-
const
|
|
233
|
+
findComplexSubstitutionsByMetavariableName(metavariableName) {
|
|
234
|
+
const complexSubstitution = this.findSubstitutions((substitution) => {
|
|
239
235
|
const substitutionComplex = substitution.isComplex();
|
|
240
236
|
|
|
241
237
|
if (substitutionComplex) {
|
|
242
|
-
const complexSubstitution = substitution,
|
|
243
|
-
|
|
238
|
+
const complexSubstitution = substitution, ///
|
|
239
|
+
complexSubstitutionMatchesMetavariableName = complexSubstitution.matchMetavariableName(metavariableName);
|
|
244
240
|
|
|
245
|
-
if (
|
|
241
|
+
if (complexSubstitutionMatchesMetavariableName) {
|
|
246
242
|
return true;
|
|
247
243
|
}
|
|
248
244
|
}
|
|
249
|
-
});
|
|
245
|
+
}) || null;
|
|
250
246
|
|
|
251
|
-
return
|
|
247
|
+
return complexSubstitution;
|
|
252
248
|
}
|
|
253
249
|
|
|
254
|
-
|
|
250
|
+
findSubstitutionByMetavariableNameAndSubstitution(metavariableName, substitution) {
|
|
255
251
|
const substitutionA = substitution; ///
|
|
256
252
|
|
|
257
253
|
substitution = this.findSubstitution((substitution) => { ///
|
|
258
|
-
const
|
|
254
|
+
const substitutionMatchesMetavariableName = substitution.matchMetavariableName(metavariableName);
|
|
259
255
|
|
|
260
|
-
if (
|
|
256
|
+
if (substitutionMatchesMetavariableName) {
|
|
261
257
|
const substitutionB = substitution, ///
|
|
262
258
|
substitutionBSubstitutionComparesToSubstitutionA = substitutionB.compare(substitutionA);
|
|
263
259
|
|
|
@@ -270,15 +266,15 @@ export default class LiminalContext extends Context {
|
|
|
270
266
|
return substitution;
|
|
271
267
|
}
|
|
272
268
|
|
|
273
|
-
|
|
274
|
-
const simpleSubstitution = this.
|
|
269
|
+
isSimpleSubstitutionPresentByMetavariableName(metavariableName) {
|
|
270
|
+
const simpleSubstitution = this.findSimpleSubstitutionByMetavariableName(metavariableName),
|
|
275
271
|
simpleSubstitutionPresent = (simpleSubstitution !== null);
|
|
276
272
|
|
|
277
273
|
return simpleSubstitutionPresent;
|
|
278
274
|
}
|
|
279
275
|
|
|
280
|
-
|
|
281
|
-
substitution = this.
|
|
276
|
+
isSubstitutionPresentByMetavariableNameAndSubstitution(metavariableName, substitution) {
|
|
277
|
+
substitution = this.findSubstitutionByMetavariableNameAndSubstitution(metavariableName, substitution); ///
|
|
282
278
|
|
|
283
279
|
const substitutionPresent = (substitution !== null);
|
|
284
280
|
|