occam-verify-cli 0.0.968 → 0.0.971

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.
Files changed (145) hide show
  1. package/bin/action/verify.js +6 -8
  2. package/lib/constants.js +5 -1
  3. package/lib/context/file.js +48 -53
  4. package/lib/context/local.js +45 -39
  5. package/lib/context/release.js +3 -3
  6. package/lib/declaration.js +9 -7
  7. package/lib/equivalence.js +23 -21
  8. package/lib/judgement.js +3 -3
  9. package/lib/label.js +3 -3
  10. package/lib/log.js +3 -3
  11. package/lib/metaType.js +7 -7
  12. package/lib/metavariable.js +7 -7
  13. package/lib/node/term/bracketed.js +16 -0
  14. package/lib/proofStep.js +3 -29
  15. package/lib/releaseContext/initialise.js +11 -17
  16. package/lib/resolve/substitutions.js +99 -0
  17. package/lib/rule.js +10 -6
  18. package/lib/substitution/statementForMetavariable.js +93 -98
  19. package/lib/substitution/termForVariable.js +45 -54
  20. package/lib/substitution.js +51 -9
  21. package/lib/substitutions.js +165 -12
  22. package/lib/term.js +8 -1
  23. package/lib/topLevelAssertion.js +10 -6
  24. package/lib/type.js +5 -5
  25. package/lib/unifier/metaLevel.js +10 -3
  26. package/lib/unifier/statementWithCombinator.js +6 -6
  27. package/lib/unifier.js +2 -2
  28. package/lib/unify/metavariableWithStatement.js +13 -48
  29. package/lib/unify/metavariableWithStatementGivenSubstitution.js +39 -0
  30. package/lib/unify/premiseWithProofStep.js +3 -3
  31. package/lib/unify/statement/qualified.js +117 -0
  32. package/lib/unify/statement/unqualified.js +25 -0
  33. package/lib/unify/statementWithBracketedCombinator.js +3 -3
  34. package/lib/unify/statementWithCombinators.js +5 -5
  35. package/lib/unify/statementWithMetaType.js +3 -3
  36. package/lib/unify/statementWithSttaemetnGivenEquivalences.js +45 -0
  37. package/lib/unify/suppositionWithProffStep.js +3 -3
  38. package/lib/unify/variableWithTerm.js +11 -26
  39. package/lib/utilities/array.js +5 -14
  40. package/lib/utilities/assertion.js +24 -0
  41. package/lib/utilities/brackets.js +60 -0
  42. package/lib/utilities/message.js +52 -0
  43. package/lib/utilities/name.js +7 -7
  44. package/lib/utilities/node.js +10 -17
  45. package/lib/utilities/string.js +1 -7
  46. package/lib/utilities/subproof.js +19 -0
  47. package/lib/utilities/unify.js +30 -11
  48. package/lib/variable.js +8 -8
  49. package/lib/verifier/metaLevel.js +6 -6
  50. package/lib/verifier/statementAsCombinator.js +2 -2
  51. package/lib/verify/assertion/contained.js +66 -32
  52. package/lib/verify/assertion/defined.js +51 -46
  53. package/lib/verify/assertion/subproof.js +9 -9
  54. package/lib/verify/assertion/type.js +11 -11
  55. package/lib/verify/conclusion.js +6 -6
  56. package/lib/verify/consequent.js +6 -6
  57. package/lib/verify/declaration/metavariable.js +2 -2
  58. package/lib/verify/declaration.js +34 -20
  59. package/lib/verify/equality.js +13 -13
  60. package/lib/verify/frame.js +38 -24
  61. package/lib/verify/judgement.js +13 -13
  62. package/lib/verify/metavariable.js +2 -2
  63. package/lib/verify/premise.js +5 -5
  64. package/lib/verify/proofStep.js +15 -24
  65. package/lib/verify/statement/qualified.js +15 -124
  66. package/lib/verify/statement/unqualified.js +23 -24
  67. package/lib/verify/statement.js +24 -24
  68. package/lib/verify/statementGivenMetaType.js +3 -3
  69. package/lib/verify/supposition.js +5 -5
  70. package/package.json +2 -2
  71. package/src/constants.js +1 -0
  72. package/src/context/file.js +49 -55
  73. package/src/context/local.js +34 -31
  74. package/src/context/release.js +2 -2
  75. package/src/declaration.js +12 -10
  76. package/src/equivalence.js +27 -26
  77. package/src/judgement.js +2 -2
  78. package/src/label.js +2 -2
  79. package/src/log.js +1 -1
  80. package/src/metaType.js +7 -7
  81. package/src/metavariable.js +7 -7
  82. package/src/node/term/bracketed.js +9 -0
  83. package/src/proofStep.js +3 -48
  84. package/src/releaseContext/initialise.js +13 -24
  85. package/src/resolve/substitutions.js +134 -0
  86. package/src/rule.js +10 -5
  87. package/src/substitution/statementForMetavariable.js +99 -85
  88. package/src/substitution/termForVariable.js +50 -65
  89. package/src/substitution.js +46 -8
  90. package/src/substitutions.js +176 -10
  91. package/src/term.js +6 -0
  92. package/src/topLevelAssertion.js +10 -5
  93. package/src/type.js +4 -4
  94. package/src/unifier/metaLevel.js +11 -3
  95. package/src/unifier/statementWithCombinator.js +5 -5
  96. package/src/unifier.js +1 -1
  97. package/src/unify/metavariableWithStatement.js +17 -71
  98. package/src/unify/metavariableWithStatementGivenSubstitution.js +39 -0
  99. package/src/unify/premiseWithProofStep.js +1 -1
  100. package/src/unify/statement/qualified.js +183 -0
  101. package/src/unify/statement/unqualified.js +24 -0
  102. package/src/unify/statementWithBracketedCombinator.js +2 -2
  103. package/src/unify/statementWithCombinators.js +4 -4
  104. package/src/unify/statementWithMetaType.js +2 -2
  105. package/src/unify/statementWithSttaemetnGivenEquivalences.js +51 -0
  106. package/src/unify/suppositionWithProffStep.js +1 -1
  107. package/src/unify/variableWithTerm.js +14 -35
  108. package/src/utilities/array.js +1 -16
  109. package/src/utilities/assertion.js +19 -0
  110. package/src/utilities/brackets.js +56 -0
  111. package/src/utilities/name.js +8 -8
  112. package/src/utilities/node.js +14 -17
  113. package/src/utilities/string.js +2 -2
  114. package/src/utilities/subproof.js +18 -0
  115. package/src/utilities/unify.js +24 -12
  116. package/src/variable.js +11 -11
  117. package/src/verifier/metaLevel.js +5 -5
  118. package/src/verifier/statementAsCombinator.js +2 -2
  119. package/src/verify/assertion/contained.js +80 -38
  120. package/src/verify/assertion/defined.js +64 -55
  121. package/src/verify/assertion/subproof.js +8 -8
  122. package/src/verify/assertion/type.js +11 -11
  123. package/src/verify/conclusion.js +8 -8
  124. package/src/verify/consequent.js +8 -8
  125. package/src/verify/declaration/metavariable.js +4 -3
  126. package/src/verify/declaration.js +46 -23
  127. package/src/verify/equality.js +13 -13
  128. package/src/verify/frame.js +48 -28
  129. package/src/verify/judgement.js +13 -13
  130. package/src/verify/metavariable.js +3 -3
  131. package/src/verify/premise.js +6 -6
  132. package/src/verify/proofStep.js +14 -31
  133. package/src/verify/statement/qualified.js +18 -199
  134. package/src/verify/statement/unqualified.js +25 -31
  135. package/src/verify/statement.js +23 -23
  136. package/src/verify/statementGivenMetaType.js +2 -2
  137. package/src/verify/supposition.js +6 -6
  138. package/lib/unify/statementAtainstStatement.js +0 -49
  139. package/lib/utilities/lineIndex.js +0 -52
  140. package/lib/utilities/match.js +0 -59
  141. package/lib/utilities/verify.js +0 -19
  142. package/src/unify/statementAtainstStatement.js +0 -56
  143. package/src/utilities/match.js +0 -53
  144. package/src/utilities/verify.js +0 -14
  145. /package/src/utilities/{lineIndex.js → message.js} +0 -0
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _substitution = /*#__PURE__*/ _interop_require_default(require("../substitution"));
12
12
  var _query = require("../utilities/query");
13
+ var _brackets = require("../utilities/brackets");
13
14
  function _assert_this_initialized(self) {
14
15
  if (self === void 0) {
15
16
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
@@ -88,30 +89,30 @@ function _is_native_reflect_construct() {
88
89
  return !!result;
89
90
  })();
90
91
  }
91
- var termNodeQuery = (0, _query.nodeQuery)("/*/term!"), variableNodeQuery = (0, _query.nodeQuery)("/*/variable!");
92
+ var termNodeQuery = (0, _query.nodeQuery)("/substitution/term!"), variableNodeQuery = (0, _query.nodeQuery)("/*/variable!");
92
93
  var TermForVariableSubstitution = /*#__PURE__*/ function(Substitution) {
93
94
  _inherits(TermForVariableSubstitution, Substitution);
94
- function TermForVariableSubstitution(variableNode, termNode) {
95
+ function TermForVariableSubstitution(termNode, variableNode) {
95
96
  _class_call_check(this, TermForVariableSubstitution);
96
97
  var _this;
97
98
  _this = _call_super(this, TermForVariableSubstitution);
98
- _this.variableNode = variableNode;
99
99
  _this.termNode = termNode;
100
+ _this.variableNode = variableNode;
100
101
  return _this;
101
102
  }
102
103
  _create_class(TermForVariableSubstitution, [
103
- {
104
- key: "getVariableNode",
105
- value: function getVariableNode() {
106
- return this.variableNode;
107
- }
108
- },
109
104
  {
110
105
  key: "getTermNode",
111
106
  value: function getTermNode() {
112
107
  return this.termNode;
113
108
  }
114
109
  },
110
+ {
111
+ key: "getVariableNode",
112
+ value: function getVariableNode() {
113
+ return this.variableNode;
114
+ }
115
+ },
115
116
  {
116
117
  key: "getNode",
117
118
  value: function getNode() {
@@ -123,36 +124,44 @@ var TermForVariableSubstitution = /*#__PURE__*/ function(Substitution) {
123
124
  key: "transformed",
124
125
  value: function transformed(substitutions) {
125
126
  var transformedSubstitution = null;
126
- var transformedTermNode = transformTermNode(this.termNode, substitutions), transformedVariableNode = transformVariableNode(this.variableNode, substitutions);
127
- if (transformedTermNode !== null && transformedVariableNode !== null) {
128
- var termNode = transformedTermNode, variableNode = transformedVariableNode, termForVariableSubstitution = new TermForVariableSubstitution(termNode, variableNode);
127
+ var transformedTermNode = transformTermNode(this.termNode, substitutions);
128
+ if (transformedTermNode !== null) {
129
+ var termNode = transformedTermNode, variableNode = this.variableNode, termForVariableSubstitution = new TermForVariableSubstitution(termNode, variableNode);
129
130
  transformedSubstitution = termForVariableSubstitution; ///
130
131
  }
131
132
  return transformedSubstitution;
132
133
  }
133
134
  },
135
+ {
136
+ key: "match",
137
+ value: function match(substitution) {
138
+ var termNode = substitution.getTermNode(), variableNode = substitution.getVariableNode(), termNodeMatches = this.matchTermNode(termNode), variableNodeMatches = this.matchVariableNode(variableNode), matches = termNodeMatches && variableNodeMatches;
139
+ return matches;
140
+ }
141
+ },
134
142
  {
135
143
  key: "matchTermNode",
136
144
  value: function matchTermNode(termNode) {
137
- var matchesTermNode = this.termNode.match(termNode);
138
- return matchesTermNode;
145
+ termNode = (0, _brackets.stripBracketsFromTerm)(termNode); ///
146
+ var termNodeMatches = this.termNode.match(termNode);
147
+ return termNodeMatches;
139
148
  }
140
149
  },
141
150
  {
142
151
  key: "matchVariableNode",
143
152
  value: function matchVariableNode(variableNode) {
144
- var matchesVariableNode = this.variableNode.match(variableNode);
145
- return matchesVariableNode;
153
+ var metavariableNodeMatches = this.variableNode.match(variableNode);
154
+ return metavariableNodeMatches;
146
155
  }
147
156
  },
148
157
  {
149
158
  key: "unifyWithEquivalence",
150
159
  value: function unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
151
160
  var unifiedWithEquivalence;
152
- var equivalenceMatchesVariableNode = equivalence.matchVariableNode(this.variableNode);
153
- if (equivalenceMatchesVariableNode) {
154
- var equivalenceMatchesTermNode = equivalence.matchTermNode(this.termNode);
155
- if (equivalenceMatchesTermNode) {
161
+ var equivalenceMatchesTermNode = equivalence.matchTermNode(this.termNode);
162
+ if (equivalenceMatchesTermNode) {
163
+ var equivalenceMatchesVariableNode = equivalence.matchVariableNode(this.variableNode);
164
+ if (equivalenceMatchesVariableNode) {
156
165
  unifiedWithEquivalence = true;
157
166
  }
158
167
  }
@@ -162,7 +171,8 @@ var TermForVariableSubstitution = /*#__PURE__*/ function(Substitution) {
162
171
  {
163
172
  key: "asString",
164
173
  value: function asString(localContextA, localContextB) {
165
- var termNodeB = this.termNode, termStringB = localContextB.nodeAsString(termNodeB), variableNodeA = this.variableNode, variableStringA = localContextA.nodeAsString(variableNodeA), string = "[".concat(termStringB, " for ").concat(variableStringA, "]");
174
+ var termNodeB = this.termNode, termStringB = localContextB.nodeAsString(termNodeB), variableNodeA = this.variableNode, variableStringA = localContextA.nodeAsString(variableNodeA);
175
+ var string = "[".concat(termStringB, " for ").concat(variableStringA, "]");
166
176
  return string;
167
177
  }
168
178
  }
@@ -170,25 +180,20 @@ var TermForVariableSubstitution = /*#__PURE__*/ function(Substitution) {
170
180
  {
171
181
  key: "fromSubstitutionNode",
172
182
  value: function fromSubstitutionNode(substitutionNode) {
173
- var termNode = termNodeQuery(substitutionNode), variableNode = variableNodeQuery(substitutionNode), termForVariableSubstitution = new TermForVariableSubstitution(variableNode, termNode);
174
- return termForVariableSubstitution;
175
- }
176
- },
177
- {
178
- key: "fromVariableNodeAndTermNode",
179
- value: function fromVariableNodeAndTermNode(variableNode, termNode) {
180
- var termForVariableSubstitution = new TermForVariableSubstitution(variableNode, termNode);
183
+ var termForVariableSubstitution = null;
184
+ var termNode = termNodeQuery(substitutionNode), variableNode = variableNodeQuery(substitutionNode);
185
+ if (termNode !== null) {
186
+ termNode = (0, _brackets.stripBracketsFromTerm)(termNode); ///
187
+ termForVariableSubstitution = new TermForVariableSubstitution(termNode, variableNode);
188
+ }
181
189
  return termForVariableSubstitution;
182
190
  }
183
191
  },
184
192
  {
185
- key: "fromSubstitutionAndSubstitutions",
186
- value: function fromSubstitutionAndSubstitutions(substitution, substitutions) {
187
- var termNode = substitution.getTermNode(), variableNode = substitution.getVariableNode();
188
- var transformedTermNode = transformTermNode(termNode, substitutions), transformedVariableNode = transformVariableNode(variableNode, substitutions); ///
189
- termNode = transformedTermNode; ///
190
- variableNode = transformedVariableNode; ///
191
- var termForVariableSubstitution = new TermForVariableSubstitution(variableNode, termNode);
193
+ key: "fromTernNodeAndVariableNode",
194
+ value: function fromTernNodeAndVariableNode(termNode, variableNode) {
195
+ termNode = (0, _brackets.stripBracketsFromTerm)(termNode); ///
196
+ var termForVariableSubstitution = new TermForVariableSubstitution(termNode, variableNode);
192
197
  return termForVariableSubstitution;
193
198
  }
194
199
  }
@@ -197,10 +202,10 @@ var TermForVariableSubstitution = /*#__PURE__*/ function(Substitution) {
197
202
  }(_substitution.default);
198
203
  function transformTermNode(termNode, substitutions) {
199
204
  var transformedTermNode = null;
200
- var termVariableNode = variableNodeQuery(termNode);
201
- if (termVariableNode !== null) {
205
+ var variableNode = variableNodeQuery(termNode);
206
+ if (variableNode !== null) {
202
207
  substitutions.someSubstitution(function(substitution) {
203
- var substitutionMatchesVariableNode = substitution.matchVariableNode(termVariableNode);
208
+ var substitutionMatchesVariableNode = substitution.matchVariableNode(variableNode);
204
209
  if (substitutionMatchesVariableNode) {
205
210
  var _$termNode = substitution.getTermNode();
206
211
  transformedTermNode = _$termNode; ////
@@ -210,19 +215,5 @@ function transformTermNode(termNode, substitutions) {
210
215
  }
211
216
  return transformedTermNode;
212
217
  }
213
- function transformVariableNode(variableNode, substitutions) {
214
- var transformedVariableNode = null;
215
- substitutions.someSubstitution(function(substitution) {
216
- var substitutionMatchesVariableNode = substitution.matchVariableNode(variableNode);
217
- if (substitutionMatchesVariableNode) {
218
- var termNode = substitution.getTermNode(), _$variableNode = variableNodeQuery(termNode);
219
- if (_$variableNode !== null) {
220
- transformedVariableNode = _$variableNode; ///
221
- return true;
222
- }
223
- }
224
- });
225
- return transformedVariableNode;
226
- }
227
218
 
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdWJzdGl0dXRpb24vdGVybUZvclZhcmlhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3Vic3RpdHV0aW9uIGZyb20gXCIuLi9zdWJzdGl0dXRpb25cIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiLyovdGVybSFcIiksXG4gICAgICB2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi8qL3ZhcmlhYmxlIVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHtcbiAgY29uc3RydWN0b3IodmFyaWFibGVOb2RlLCB0ZXJtTm9kZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZTtcbiAgICB0aGlzLnRlcm1Ob2RlID0gdGVybU5vZGU7XG4gIH1cblxuICBnZXRWYXJpYWJsZU5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFyaWFibGVOb2RlO1xuICB9XG5cbiAgZ2V0VGVybU5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybU5vZGU7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRlcm1Ob2RlOyAvLy9cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgdHJhbnNmb3JtZWQoc3Vic3RpdHV0aW9ucykge1xuICAgIGxldCB0cmFuc2Zvcm1lZFN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZFRlcm1Ob2RlID0gdHJhbnNmb3JtVGVybU5vZGUodGhpcy50ZXJtTm9kZSwgc3Vic3RpdHV0aW9ucyksXG4gICAgICAgICAgdHJhbnNmb3JtZWRWYXJpYWJsZU5vZGUgPSB0cmFuc2Zvcm1WYXJpYWJsZU5vZGUodGhpcy52YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgaWYgKCh0cmFuc2Zvcm1lZFRlcm1Ob2RlICE9PSBudWxsKSAmJiAodHJhbnNmb3JtZWRWYXJpYWJsZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICBjb25zdCB0ZXJtTm9kZSA9IHRyYW5zZm9ybWVkVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gdHJhbnNmb3JtZWRWYXJpYWJsZU5vZGUsXG4gICAgICAgICAgICB0ZXJtRm9yVmFyaWFibGVTdWJzdGl0dXRpb24gPSBuZXcgVGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uKHRlcm1Ob2RlLCB2YXJpYWJsZU5vZGUpO1xuXG4gICAgICB0cmFuc2Zvcm1lZFN1YnN0aXR1dGlvbiA9IHRlcm1Gb3JWYXJpYWJsZVN1YnN0aXR1dGlvbjsgIC8vL1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2Zvcm1lZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIG1hdGNoVGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCBtYXRjaGVzVGVybU5vZGUgPSB0aGlzLnRlcm1Ob2RlLm1hdGNoKHRlcm1Ob2RlKTtcblxuICAgIHJldHVybiBtYXRjaGVzVGVybU5vZGU7XG4gIH1cblxuICBtYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtYXRjaGVzVmFyaWFibGVOb2RlID0gdGhpcy52YXJpYWJsZU5vZGUubWF0Y2godmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBtYXRjaGVzVmFyaWFibGVOb2RlO1xuICB9XG5cbiAgdW5pZnlXaXRoRXF1aXZhbGVuY2UoZXF1aXZhbGVuY2UsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpIHtcbiAgICBsZXQgdW5pZmllZFdpdGhFcXVpdmFsZW5jZTtcblxuICAgIGNvbnN0IGVxdWl2YWxlbmNlTWF0Y2hlc1ZhcmlhYmxlTm9kZSA9IGVxdWl2YWxlbmNlLm1hdGNoVmFyaWFibGVOb2RlKHRoaXMudmFyaWFibGVOb2RlKTtcblxuICAgIGlmIChlcXVpdmFsZW5jZU1hdGNoZXNWYXJpYWJsZU5vZGUpIHtcbiAgICAgIGNvbnN0IGVxdWl2YWxlbmNlTWF0Y2hlc1Rlcm1Ob2RlID0gZXF1aXZhbGVuY2UubWF0Y2hUZXJtTm9kZSh0aGlzLnRlcm1Ob2RlKTtcblxuICAgICAgaWYgKGVxdWl2YWxlbmNlTWF0Y2hlc1Rlcm1Ob2RlKSB7XG4gICAgICAgIHVuaWZpZWRXaXRoRXF1aXZhbGVuY2UgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmlmaWVkV2l0aEVxdWl2YWxlbmNlO1xuICB9XG5cbiAgYXNTdHJpbmcobG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qikge1xuICAgIGNvbnN0IHRlcm1Ob2RlQiA9IHRoaXMudGVybU5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtU3RyaW5nQiA9IGxvY2FsQ29udGV4dEIubm9kZUFzU3RyaW5nKHRlcm1Ob2RlQiksXG4gICAgICAgICAgdmFyaWFibGVOb2RlQSA9IHRoaXMudmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgdmFyaWFibGVTdHJpbmdBID0gbG9jYWxDb250ZXh0QS5ub2RlQXNTdHJpbmcodmFyaWFibGVOb2RlQSksXG4gICAgICAgICAgc3RyaW5nID0gYFske3Rlcm1TdHJpbmdCfSBmb3IgJHt2YXJpYWJsZVN0cmluZ0F9XWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCB0ZXJtTm9kZSA9IHRlcm1Ob2RlUXVlcnkoc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgdmFyaWFibGVOb2RlID0gdmFyaWFibGVOb2RlUXVlcnkoc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgdGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1Gb3JWYXJpYWJsZVN1YnN0aXR1dGlvbih2YXJpYWJsZU5vZGUsIHRlcm1Ob2RlKTtcblxuICAgIHJldHVybiB0ZXJtRm9yVmFyaWFibGVTdWJzdGl0dXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVZhcmlhYmxlTm9kZUFuZFRlcm1Ob2RlKHZhcmlhYmxlTm9kZSwgdGVybU5vZGUpIHtcbiAgICBjb25zdCB0ZXJtRm9yVmFyaWFibGVTdWJzdGl0dXRpb24gPSBuZXcgVGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uKHZhcmlhYmxlTm9kZSwgdGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm1Gb3JWYXJpYWJsZVN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3Vic3RpdHV0aW9uQW5kU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb24sIHN1YnN0aXR1dGlvbnMpIHtcbiAgICBsZXQgdGVybU5vZGUgPSBzdWJzdGl0dXRpb24uZ2V0VGVybU5vZGUoKSxcbiAgICAgICAgdmFyaWFibGVOb2RlID0gc3Vic3RpdHV0aW9uLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtZWRUZXJtTm9kZSA9IHRyYW5zZm9ybVRlcm1Ob2RlKHRlcm1Ob2RlLCBzdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICB0cmFuc2Zvcm1lZFZhcmlhYmxlTm9kZSA9IHRyYW5zZm9ybVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbnMpOyAvLy9cblxuICAgIHRlcm1Ob2RlID0gdHJhbnNmb3JtZWRUZXJtTm9kZTsgLy8vXG5cbiAgICB2YXJpYWJsZU5vZGUgPSB0cmFuc2Zvcm1lZFZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICBjb25zdCB0ZXJtRm9yVmFyaWFibGVTdWJzdGl0dXRpb24gPSBuZXcgVGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uKHZhcmlhYmxlTm9kZSwgdGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm1Gb3JWYXJpYWJsZVN1YnN0aXR1dGlvbjtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1UZXJtTm9kZSh0ZXJtTm9kZSwgc3Vic3RpdHV0aW9ucykge1xuICBsZXQgdHJhbnNmb3JtZWRUZXJtTm9kZSA9IG51bGw7XG5cbiAgY29uc3QgdGVybVZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZVF1ZXJ5KHRlcm1Ob2RlKTtcblxuICBpZiAodGVybVZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIHN1YnN0aXR1dGlvbnMuc29tZVN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25NYXRjaGVzVmFyaWFibGVOb2RlID0gc3Vic3RpdHV0aW9uLm1hdGNoVmFyaWFibGVOb2RlKHRlcm1WYXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uTWF0Y2hlc1ZhcmlhYmxlTm9kZSkge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHN1YnN0aXR1dGlvbi5nZXRUZXJtTm9kZSgpO1xuXG4gICAgICAgIHRyYW5zZm9ybWVkVGVybU5vZGUgPSB0ZXJtTm9kZTsgLy8vL1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkVGVybU5vZGU7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IHRyYW5zZm9ybWVkVmFyaWFibGVOb2RlID0gbnVsbDtcblxuICBzdWJzdGl0dXRpb25zLnNvbWVTdWJzdGl0dXRpb24oKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbk1hdGNoZXNWYXJpYWJsZU5vZGUgPSBzdWJzdGl0dXRpb24ubWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgIGlmIChzdWJzdGl0dXRpb25NYXRjaGVzVmFyaWFibGVOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtTm9kZSA9IHN1YnN0aXR1dGlvbi5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gdmFyaWFibGVOb2RlUXVlcnkodGVybU5vZGUpO1xuXG4gICAgICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgICAgIHRyYW5zZm9ybWVkVmFyaWFibGVOb2RlID0gdmFyaWFibGVOb2RlOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdHJhbnNmb3JtZWRWYXJpYWJsZU5vZGU7XG59XG4iXSwibmFtZXMiOlsiVGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uIiwidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInZhcmlhYmxlTm9kZVF1ZXJ5IiwidmFyaWFibGVOb2RlIiwidGVybU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXRUZXJtTm9kZSIsImdldE5vZGUiLCJub2RlIiwidHJhbnNmb3JtZWQiLCJzdWJzdGl0dXRpb25zIiwidHJhbnNmb3JtZWRTdWJzdGl0dXRpb24iLCJ0cmFuc2Zvcm1lZFRlcm1Ob2RlIiwidHJhbnNmb3JtVGVybU5vZGUiLCJ0cmFuc2Zvcm1lZFZhcmlhYmxlTm9kZSIsInRyYW5zZm9ybVZhcmlhYmxlTm9kZSIsInRlcm1Gb3JWYXJpYWJsZVN1YnN0aXR1dGlvbiIsIm1hdGNoVGVybU5vZGUiLCJtYXRjaGVzVGVybU5vZGUiLCJtYXRjaCIsIm1hdGNoVmFyaWFibGVOb2RlIiwibWF0Y2hlc1ZhcmlhYmxlTm9kZSIsInVuaWZ5V2l0aEVxdWl2YWxlbmNlIiwiZXF1aXZhbGVuY2UiLCJsb2NhbENvbnRleHRBIiwibG9jYWxDb250ZXh0QiIsInVuaWZpZWRXaXRoRXF1aXZhbGVuY2UiLCJlcXVpdmFsZW5jZU1hdGNoZXNWYXJpYWJsZU5vZGUiLCJlcXVpdmFsZW5jZU1hdGNoZXNUZXJtTm9kZSIsImFzU3RyaW5nIiwidGVybU5vZGVCIiwidGVybVN0cmluZ0IiLCJub2RlQXNTdHJpbmciLCJ2YXJpYWJsZU5vZGVBIiwidmFyaWFibGVTdHJpbmdBIiwic3RyaW5nIiwiZnJvbVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwiZnJvbVZhcmlhYmxlTm9kZUFuZFRlcm1Ob2RlIiwiZnJvbVN1YnN0aXR1dGlvbkFuZFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb24iLCJTdWJzdGl0dXRpb24iLCJ0ZXJtVmFyaWFibGVOb2RlIiwic29tZVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbk1hdGNoZXNWYXJpYWJsZU5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBU3FCQTs7O21FQVBJO3FCQUVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTFCLElBQU1DLGdCQUFnQkMsSUFBQUEsZ0JBQVMsRUFBQyxhQUMxQkMsb0JBQW9CRCxJQUFBQSxnQkFBUyxFQUFDO0FBRXJCLElBQUEsQUFBTUYsNENBQU47Y0FBTUE7YUFBQUEsNEJBQ1BJLFlBQVksRUFBRUMsUUFBUTtnQ0FEZkw7O2dCQUVqQixrQkFGaUJBO1FBSWpCLE1BQUtJLFlBQVksR0FBR0E7UUFDcEIsTUFBS0MsUUFBUSxHQUFHQTs7O2tCQUxDTDs7WUFRbkJNLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsWUFBWTtZQUMxQjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsUUFBUTtZQUN0Qjs7O1lBRUFHLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyxPQUFPLElBQUksQ0FBQ0osUUFBUSxFQUFFLEdBQUc7Z0JBRS9CLE9BQU9JO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsWUFBWUMsYUFBYTtnQkFDdkIsSUFBSUMsMEJBQTBCO2dCQUU5QixJQUFNQyxzQkFBc0JDLGtCQUFrQixJQUFJ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
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdWJzdGl0dXRpb24vdGVybUZvclZhcmlhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3Vic3RpdHV0aW9uIGZyb20gXCIuLi9zdWJzdGl0dXRpb25cIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgc3RyaXBCcmFja2V0c0Zyb21UZXJtIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9icmFja2V0c1wiO1xuXG5jb25zdCB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N1YnN0aXR1dGlvbi90ZXJtIVwiKSxcbiAgICAgIHZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiLyovdmFyaWFibGUhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtRm9yVmFyaWFibGVTdWJzdGl0dXRpb24gZXh0ZW5kcyBTdWJzdGl0dXRpb24ge1xuICBjb25zdHJ1Y3Rvcih0ZXJtTm9kZSwgdmFyaWFibGVOb2RlKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMudGVybU5vZGUgPSB0ZXJtTm9kZTtcbiAgICB0aGlzLnZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldFRlcm1Ob2RlKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVOb2RlKCkge1xuICAgIHJldHVybiB0aGlzLnZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMudGVybU5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB0cmFuc2Zvcm1lZChzdWJzdGl0dXRpb25zKSB7XG4gICAgbGV0IHRyYW5zZm9ybWVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHRyYW5zZm9ybWVkVGVybU5vZGUgPSB0cmFuc2Zvcm1UZXJtTm9kZSh0aGlzLnRlcm1Ob2RlLCBzdWJzdGl0dXRpb25zKTtcblxuICAgIGlmICh0cmFuc2Zvcm1lZFRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtTm9kZSA9IHRyYW5zZm9ybWVkVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gdGhpcy52YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgICAgdGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1Gb3JWYXJpYWJsZVN1YnN0aXR1dGlvbih0ZXJtTm9kZSwgdmFyaWFibGVOb2RlKTtcblxuICAgICAgdHJhbnNmb3JtZWRTdWJzdGl0dXRpb24gPSB0ZXJtRm9yVmFyaWFibGVTdWJzdGl0dXRpb247ICAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBtYXRjaChzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCB0ZXJtTm9kZSA9IHN1YnN0aXR1dGlvbi5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHZhcmlhYmxlTm9kZSA9IHN1YnN0aXR1dGlvbi5nZXRWYXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICB0ZXJtTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoVGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgIHZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgbWF0Y2hlcyA9ICh0ZXJtTm9kZU1hdGNoZXMgJiYgdmFyaWFibGVOb2RlTWF0Y2hlcyk7XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoVGVybU5vZGUodGVybU5vZGUpIHtcbiAgICB0ZXJtTm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tVGVybSh0ZXJtTm9kZSk7IC8vL1xuXG4gICAgY29uc3QgdGVybU5vZGVNYXRjaGVzID0gdGhpcy50ZXJtTm9kZS5tYXRjaCh0ZXJtTm9kZSk7XG5cbiAgICByZXR1cm4gdGVybU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0aGlzLnZhcmlhYmxlTm9kZS5tYXRjaCh2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgdW5pZnlXaXRoRXF1aXZhbGVuY2UoZXF1aXZhbGVuY2UsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpIHtcbiAgICBsZXQgdW5pZmllZFdpdGhFcXVpdmFsZW5jZTtcblxuICAgIGNvbnN0IGVxdWl2YWxlbmNlTWF0Y2hlc1Rlcm1Ob2RlID0gZXF1aXZhbGVuY2UubWF0Y2hUZXJtTm9kZSh0aGlzLnRlcm1Ob2RlKTtcblxuICAgIGlmIChlcXVpdmFsZW5jZU1hdGNoZXNUZXJtTm9kZSkge1xuICAgICAgY29uc3QgZXF1aXZhbGVuY2VNYXRjaGVzVmFyaWFibGVOb2RlID0gZXF1aXZhbGVuY2UubWF0Y2hWYXJpYWJsZU5vZGUodGhpcy52YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAoZXF1aXZhbGVuY2VNYXRjaGVzVmFyaWFibGVOb2RlKSB7XG4gICAgICAgICAgdW5pZmllZFdpdGhFcXVpdmFsZW5jZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5pZmllZFdpdGhFcXVpdmFsZW5jZTtcbiAgfVxuXG4gIGFzU3RyaW5nKGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpIHtcbiAgICBjb25zdCB0ZXJtTm9kZUIgPSB0aGlzLnRlcm1Ob2RlLCAgLy8vXG4gICAgICAgICAgdGVybVN0cmluZ0IgPSBsb2NhbENvbnRleHRCLm5vZGVBc1N0cmluZyh0ZXJtTm9kZUIpLFxuICAgICAgICAgIHZhcmlhYmxlTm9kZUEgPSB0aGlzLnZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgIHZhcmlhYmxlU3RyaW5nQSA9IGxvY2FsQ29udGV4dEEubm9kZUFzU3RyaW5nKHZhcmlhYmxlTm9kZUEpO1xuXG4gICAgY29uc3Qgc3RyaW5nID0gYFske3Rlcm1TdHJpbmdCfSBmb3IgJHt2YXJpYWJsZVN0cmluZ0F9XWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBsZXQgdGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGxldCB0ZXJtTm9kZSA9IHRlcm1Ob2RlUXVlcnkoc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZVF1ZXJ5KHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgaWYgKHRlcm1Ob2RlICE9PSBudWxsKSB7XG4gICAgICB0ZXJtTm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tVGVybSh0ZXJtTm9kZSk7IC8vL1xuXG4gICAgICB0ZXJtRm9yVmFyaWFibGVTdWJzdGl0dXRpb24gPSBuZXcgVGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uKHRlcm1Ob2RlLCB2YXJpYWJsZU5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtRm9yVmFyaWFibGVTdWJzdGl0dXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVRlcm5Ob2RlQW5kVmFyaWFibGVOb2RlKHRlcm1Ob2RlLCB2YXJpYWJsZU5vZGUpIHtcbiAgICB0ZXJtTm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tVGVybSh0ZXJtTm9kZSk7IC8vL1xuXG4gICAgY29uc3QgdGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uID0gbmV3IFRlcm1Gb3JWYXJpYWJsZVN1YnN0aXR1dGlvbih0ZXJtTm9kZSwgdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiB0ZXJtRm9yVmFyaWFibGVTdWJzdGl0dXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtVGVybU5vZGUodGVybU5vZGUsIHN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IHRyYW5zZm9ybWVkVGVybU5vZGUgPSBudWxsO1xuXG4gIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZVF1ZXJ5KHRlcm1Ob2RlKTtcblxuICBpZiAodmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgc3Vic3RpdHV0aW9ucy5zb21lU3Vic3RpdHV0aW9uKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk1hdGNoZXNWYXJpYWJsZU5vZGUgPSBzdWJzdGl0dXRpb24ubWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbk1hdGNoZXNWYXJpYWJsZU5vZGUpIHtcbiAgICAgICAgY29uc3QgdGVybU5vZGUgPSBzdWJzdGl0dXRpb24uZ2V0VGVybU5vZGUoKTtcblxuICAgICAgICB0cmFuc2Zvcm1lZFRlcm1Ob2RlID0gdGVybU5vZGU7IC8vLy9cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0cmFuc2Zvcm1lZFRlcm1Ob2RlO1xufVxuIl0sIm5hbWVzIjpbIlRlcm1Gb3JWYXJpYWJsZVN1YnN0aXR1dGlvbiIsInRlcm1Ob2RlUXVlcnkiLCJub2RlUXVlcnkiLCJ2YXJpYWJsZU5vZGVRdWVyeSIsInRlcm1Ob2RlIiwidmFyaWFibGVOb2RlIiwiZ2V0VGVybU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJnZXROb2RlIiwibm9kZSIsInRyYW5zZm9ybWVkIiwic3Vic3RpdHV0aW9ucyIsInRyYW5zZm9ybWVkU3Vic3RpdHV0aW9uIiwidHJhbnNmb3JtZWRUZXJtTm9kZSIsInRyYW5zZm9ybVRlcm1Ob2RlIiwidGVybUZvclZhcmlhYmxlU3Vic3RpdHV0aW9uIiwibWF0Y2giLCJzdWJzdGl0dXRpb24iLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwidmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoVmFyaWFibGVOb2RlIiwibWF0Y2hlcyIsInN0cmlwQnJhY2tldHNGcm9tVGVybSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwidW5pZnlXaXRoRXF1aXZhbGVuY2UiLCJlcXVpdmFsZW5jZSIsImxvY2FsQ29udGV4dEEiLCJsb2NhbENvbnRleHRCIiwidW5pZmllZFdpdGhFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlTWF0Y2hlc1Rlcm1Ob2RlIiwiZXF1aXZhbGVuY2VNYXRjaGVzVmFyaWFibGVOb2RlIiwiYXNTdHJpbmciLCJ0ZXJtTm9kZUIiLCJ0ZXJtU3RyaW5nQiIsIm5vZGVBc1N0cmluZyIsInZhcmlhYmxlTm9kZUEiLCJ2YXJpYWJsZVN0cmluZ0EiLCJzdHJpbmciLCJmcm9tU3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tVGVybk5vZGVBbmRWYXJpYWJsZU5vZGUiLCJTdWJzdGl0dXRpb24iLCJzb21lU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uTWF0Y2hlc1ZhcmlhYmxlTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFVcUJBOzs7bUVBUkk7cUJBRUM7d0JBQ1k7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEMsSUFBTUMsZ0JBQWdCQyxJQUFBQSxnQkFBUyxFQUFDLHdCQUMxQkMsb0JBQW9CRCxJQUFBQSxnQkFBUyxFQUFDO0FBRXJCLElBQUEsQUFBTUYsNENBQU47Y0FBTUE7YUFBQUEsNEJBQ1BJLFFBQVEsRUFBRUMsWUFBWTtnQ0FEZkw7O2dCQUVqQixrQkFGaUJBO1FBSWpCLE1BQUtJLFFBQVEsR0FBR0E7UUFDaEIsTUFBS0MsWUFBWSxHQUFHQTs7O2tCQUxITDs7WUFRbkJNLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0YsUUFBUTtZQUN0Qjs7O1lBRUFHLEtB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
@@ -32,32 +32,74 @@ var Substitution = /*#__PURE__*/ function() {
32
32
  _class_call_check(this, Substitution);
33
33
  }
34
34
  _create_class(Substitution, [
35
+ {
36
+ key: "isSimple",
37
+ value: function isSimple() {
38
+ var simple = true;
39
+ return simple;
40
+ }
41
+ },
42
+ {
43
+ key: "isComplex",
44
+ value: function isComplex() {
45
+ var simple = this.isSimple(), complex = !simple;
46
+ return complex;
47
+ }
48
+ },
49
+ {
50
+ key: "isResolved",
51
+ value: function isResolved() {
52
+ var simple = this.isSimple(), resolved = simple; ///
53
+ return resolved;
54
+ }
55
+ },
56
+ {
57
+ key: "getMetavariableNode",
58
+ value: function getMetavariableNode() {
59
+ var metavariableNode = null;
60
+ return metavariableNode;
61
+ }
62
+ },
35
63
  {
36
64
  key: "matchTermNode",
37
65
  value: function matchTermNode(termNode) {
38
- var matchesTermNode = false;
39
- return matchesTermNode;
66
+ var termNodeMatches = false;
67
+ return termNodeMatches;
40
68
  }
41
69
  },
42
70
  {
43
71
  key: "matchVariableNode",
44
72
  value: function matchVariableNode(variableNode) {
45
- var matchesMetavariableNode = false;
46
- return matchesMetavariableNode;
73
+ var variableNodeMatches = false;
74
+ return variableNodeMatches;
47
75
  }
48
76
  },
49
77
  {
50
78
  key: "matchStatementNode",
51
79
  value: function matchStatementNode(statementNode) {
52
- var matchesStatementNode = false;
53
- return matchesStatementNode;
80
+ var statementNodeMatches = false;
81
+ return statementNodeMatches;
54
82
  }
55
83
  },
56
84
  {
57
85
  key: "matchMetavariableNode",
58
86
  value: function matchMetavariableNode(metavariableNode) {
59
- var matchesMetavariableNode = false;
60
- return matchesMetavariableNode;
87
+ var metavariableNodeMatches = false;
88
+ return metavariableNodeMatches;
89
+ }
90
+ },
91
+ {
92
+ key: "matchMetavariableNodeAndSubstitutionNode",
93
+ value: function matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
94
+ var metavariableNodeAndSubstitutionNodeMatches = false;
95
+ return metavariableNodeAndSubstitutionNodeMatches;
96
+ }
97
+ },
98
+ {
99
+ key: "unifyWithEquivalence",
100
+ value: function unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
101
+ var unifiedWithEquivalence = false;
102
+ return unifiedWithEquivalence;
61
103
  }
62
104
  },
63
105
  {
@@ -77,4 +119,4 @@ var Substitution = /*#__PURE__*/ function() {
77
119
  return Substitution;
78
120
  }();
79
121
 
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdWJzdGl0dXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YnN0aXR1dGlvbiB7XG4gIG1hdGNoVGVybU5vZGUodGVybU5vZGUpIHtcbiAgICBjb25zdCBtYXRjaGVzVGVybU5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBtYXRjaGVzVGVybU5vZGU7XG4gIH1cblxuICBtYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtYXRjaGVzTWV0YXZhcmlhYmxlTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG1hdGNoZXNNZXRhdmFyaWFibGVOb2RlO1xuICB9XG5cbiAgbWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBtYXRjaGVzU3RhdGVtZW50Tm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG1hdGNoZXNTdGF0ZW1lbnROb2RlO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtYXRjaGVzTWV0YXZhcmlhYmxlTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG1hdGNoZXNNZXRhdmFyaWFibGVOb2RlO1xuICB9XG5cbiAgdW5pZnlXaXRoRXF1aXZhbGVuY2VzKGVxdWl2YWxlbmNlcywgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qikge1xuICAgIGNvbnN0IHVuaWZpZWRXaXRoRXF1aXZhbGVuY2VzID0gZXF1aXZhbGVuY2VzLnNvbWUoKGVxdWl2YWxlbmNlKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25VbmlmaWVkV2l0aEVxdWl2YWxlbmNlID0gdGhpcy51bmlmeVdpdGhFcXVpdmFsZW5jZShlcXVpdmFsZW5jZSwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25VbmlmaWVkV2l0aEVxdWl2YWxlbmNlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVuaWZpZWRXaXRoRXF1aXZhbGVuY2VzO1xuICB9XG59XG4iXSwibmFtZXMiOlsiU3Vic3RpdHV0aW9uIiwibWF0Y2hUZXJtTm9kZSIsInRlcm1Ob2RlIiwibWF0Y2hlc1Rlcm1Ob2RlIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJtYXRjaGVzTWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJtYXRjaGVzU3RhdGVtZW50Tm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJ1bmlmeVdpdGhFcXVpdmFsZW5jZXMiLCJlcXVpdmFsZW5jZXMiLCJzdWJzdGl0dXRpb25zIiwibG9jYWxDb250ZXh0QSIsImxvY2FsQ29udGV4dEIiLCJ1bmlmaWVkV2l0aEVxdWl2YWxlbmNlcyIsInNvbWUiLCJlcXVpdmFsZW5jZSIsInN1YnN0aXR1dGlvblVuaWZpZWRXaXRoRXF1aXZhbGVuY2UiLCJ1bmlmeVdpdGhFcXVpdmFsZW5jZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFFcUJBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sSUFBQSxBQUFNQSw2QkFBTjthQUFNQTtnQ0FBQUE7O2tCQUFBQTs7WUFDbkJDLEtBQUFBO21CQUFBQSxTQUFBQSxjQUFjQyxRQUFRO2dCQUNwQixJQUFNQyxrQkFBa0I7Z0JBRXhCLE9BQU9BO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsa0JBQWtCQyxZQUFZO2dCQUM1QixJQUFNQywwQkFBMEI7Z0JBRWhDLE9BQU9BO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsbUJBQW1CQyxhQUFhO2dCQUM5QixJQUFNQyx1QkFBdUI7Z0JBRTdCLE9BQU9BO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsc0JBQXNCQyxnQkFBZ0I7Z0JBQ3BDLElBQU1MLDBCQUEwQjtnQkFFaEMsT0FBT0E7WUFDVDs7O1lBRUFNLEtBQUFBO21CQUFBQSxTQUFBQSxzQkFBc0JDLFlBQVksRUFBRUMsYUFBYSxFQUFFQyxhQUFhLEVBQUVDLGFBQWE7O2dCQUM3RSxJQUFNQywwQkFBMEJKLGFBQWFLLElBQUksQ0FBQyxTQUFDQztvQkFDakQsSUFBTUMscUNBQXFDLE1BQUtDLG9CQUFvQixDQUFDRixhQUFhTCxlQUFlQyxlQUFlQztvQkFFaEgsSUFBSUksb0NBQW9DO3dCQUN0QyxPQUFPO29CQUNUO2dCQUNGO2dCQUVBLE9BQU9IO1lBQ1Q7OztXQW5DbUJqQiJ9
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdWJzdGl0dXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YnN0aXR1dGlvbiB7XG4gIGlzU2ltcGxlKCkge1xuICAgIGNvbnN0IHNpbXBsZSA9IHRydWU7XG5cbiAgICByZXR1cm4gc2ltcGxlO1xuICB9XG5cbiAgaXNDb21wbGV4KCkge1xuICAgIGNvbnN0IHNpbXBsZSA9IHRoaXMuaXNTaW1wbGUoKSxcbiAgICAgICAgICBjb21wbGV4ID0gIXNpbXBsZTtcblxuICAgIHJldHVybiBjb21wbGV4O1xuICB9XG5cbiAgaXNSZXNvbHZlZCgpIHtcbiAgICBjb25zdCBzaW1wbGUgPSB0aGlzLmlzU2ltcGxlKCksXG4gICAgICAgICAgcmVzb2x2ZWQgPSBzaW1wbGU7IC8vL1xuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTm9kZSgpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gbnVsbDtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlO1xuICB9XG5cbiAgbWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIHJldHVybiB2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgdW5pZnlXaXRoRXF1aXZhbGVuY2UoZXF1aXZhbGVuY2UsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpIHtcbiAgICBsZXQgdW5pZmllZFdpdGhFcXVpdmFsZW5jZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHVuaWZpZWRXaXRoRXF1aXZhbGVuY2U7XG4gIH1cblxuICB1bmlmeVdpdGhFcXVpdmFsZW5jZXMoZXF1aXZhbGVuY2VzLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKSB7XG4gICAgY29uc3QgdW5pZmllZFdpdGhFcXVpdmFsZW5jZXMgPSBlcXVpdmFsZW5jZXMuc29tZSgoZXF1aXZhbGVuY2UpID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvblVuaWZpZWRXaXRoRXF1aXZhbGVuY2UgPSB0aGlzLnVuaWZ5V2l0aEVxdWl2YWxlbmNlKGVxdWl2YWxlbmNlLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvblVuaWZpZWRXaXRoRXF1aXZhbGVuY2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdW5pZmllZFdpdGhFcXVpdmFsZW5jZXM7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTdWJzdGl0dXRpb24iLCJpc1NpbXBsZSIsInNpbXBsZSIsImlzQ29tcGxleCIsImNvbXBsZXgiLCJpc1Jlc29sdmVkIiwicmVzb2x2ZWQiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoVGVybU5vZGUiLCJ0ZXJtTm9kZSIsInRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJtZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJ1bmlmeVdpdGhFcXVpdmFsZW5jZSIsImVxdWl2YWxlbmNlIiwic3Vic3RpdHV0aW9ucyIsImxvY2FsQ29udGV4dEEiLCJsb2NhbENvbnRleHRCIiwidW5pZmllZFdpdGhFcXVpdmFsZW5jZSIsInVuaWZ5V2l0aEVxdWl2YWxlbmNlcyIsImVxdWl2YWxlbmNlcyIsInVuaWZpZWRXaXRoRXF1aXZhbGVuY2VzIiwic29tZSIsInN1YnN0aXR1dGlvblVuaWZpZWRXaXRoRXF1aXZhbGVuY2UiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBRXFCQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFOLElBQUEsQUFBTUEsNkJBQU47YUFBTUE7Z0NBQUFBOztrQkFBQUE7O1lBQ25CQyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsU0FBUztnQkFFZixPQUFPQTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1ELFNBQVMsSUFBSSxDQUFDRCxRQUFRLElBQ3RCRyxVQUFVLENBQUNGO2dCQUVqQixPQUFPRTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1ILFNBQVMsSUFBSSxDQUFDRCxRQUFRLElBQ3RCSyxXQUFXSixRQUFRLEdBQUc7Z0JBRTVCLE9BQU9JO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsbUJBQW1CO2dCQUV6QixPQUFPQTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWNDLFFBQVE7Z0JBQ3BCLElBQU1DLGtCQUFrQjtnQkFFeEIsT0FBT0E7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxrQkFBa0JDLFlBQVk7Z0JBQzVCLElBQU1DLHNCQUFzQjtnQkFFNUIsT0FBT0E7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxtQkFBbUJDLGFBQWE7Z0JBQzlCLElBQU1DLHVCQUF1QjtnQkFFN0IsT0FBT0E7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxzQkFBc0JWLGdCQUFnQjtnQkFDcEMsSUFBTVcsMEJBQTBCO2dCQUVoQyxPQUFPQTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLHlDQUF5Q1osZ0JBQWdCLEVBQUVhLGdCQUFnQjtnQkFDekUsSUFBTUMsNkNBQTZDO2dCQUVuRCxPQUFPQTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLHFCQUFxQkMsV0FBVyxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsRUFBRUMsYUFBYTtnQkFDM0UsSUFBSUMseUJBQXlCO2dCQUU3QixPQUFPQTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLHNCQUFzQkMsWUFBWSxFQUFFTCxhQUFhLEVBQUVDLGFBQWEsRUFBRUMsYUFBYTs7Z0JBQzdFLElBQU1JLDBCQUEwQkQsYUFBYUUsSUFBSSxDQUFDLFNBQUNSO29CQUNqRCxJQUFNUyxxQ0FBcUMsTUFBS1Ysb0JBQW9CLENBQUNDLGFBQWFDLGVBQWVDLGVBQWVDO29CQUVoSCxJQUFJTSxvQ0FBb0M7d0JBQ3RDLE9BQU87b0JBQ1Q7Z0JBQ0Y7Z0JBRUEsT0FBT0Y7WUFDVDs7O1dBekVtQi9CIn0=
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "default", {
8
8
  return Substitutions;
9
9
  }
10
10
  });
11
+ var _constants = require("./constants");
11
12
  var _array = require("./utilities/array");
12
13
  function _array_like_to_array(arr, len) {
13
14
  if (len == null || len > arr.length) len = arr.length;
@@ -73,17 +74,40 @@ var Substitutions = /*#__PURE__*/ function() {
73
74
  }
74
75
  },
75
76
  {
76
- key: "hasChanged",
77
- value: function hasChanged() {
78
- var compares = (0, _array.compare)(this.array, this.savedArray), changed = !compares; ///
79
- return changed;
77
+ key: "getFirstSubstitution",
78
+ value: function getFirstSubstitution() {
79
+ var firstSubstitution = null;
80
+ var length = this.array.length;
81
+ if (length > 0) {
82
+ firstSubstitution = (0, _array.first)(this.array);
83
+ }
84
+ return firstSubstitution;
85
+ }
86
+ },
87
+ {
88
+ key: "getMetavariableNodes",
89
+ value: function getMetavariableNodes() {
90
+ var metavariableNodes = [];
91
+ this.forEachSubstitution(function(substitution) {
92
+ var metavariableNode = substitution.getMetavariableNode();
93
+ if (metavariableNode !== null) {
94
+ metavariableNodes.push(metavariableNode);
95
+ }
96
+ });
97
+ (0, _array.compress)(metavariableNodes, function(metavariableNodeA, metavariableNodeB) {
98
+ var metavariableNodeAMatchesMetavariableNodeB = metavariableNodeA.match(metavariableNodeB);
99
+ if (metavariableNodeAMatchesMetavariableNodeB) {
100
+ return true;
101
+ }
102
+ });
103
+ return metavariableNodes;
80
104
  }
81
105
  },
82
106
  {
83
107
  key: "findSubstitution",
84
108
  value: function findSubstitution(callback) {
85
- return this.array.find(callback);
86
- }
109
+ return this.array.find(callback) || null;
110
+ } ///
87
111
  },
88
112
  {
89
113
  key: "someSubstitution",
@@ -97,12 +121,116 @@ var Substitutions = /*#__PURE__*/ function() {
97
121
  return this.array.every(callback);
98
122
  }
99
123
  },
124
+ {
125
+ key: "forEachSubstitution",
126
+ value: function forEachSubstitution(callback) {
127
+ this.array.forEach(callback);
128
+ }
129
+ },
130
+ {
131
+ key: "findSubstitutions",
132
+ value: function findSubstitutions(callback) {
133
+ var array = (0, _array.find)(this.array, callback), substitutions = Substitutions.fromArray(array);
134
+ return substitutions;
135
+ }
136
+ },
137
+ {
138
+ key: "filterSubstitution",
139
+ value: function filterSubstitution(callback) {
140
+ var array = this.array.filter(callback), substitutions = Substitutions.fromArray(array);
141
+ return substitutions;
142
+ }
143
+ },
144
+ {
145
+ key: "findSimpleSubstitution",
146
+ value: function findSimpleSubstitution() {
147
+ var simpleSubstitution = this.findSubstitution(function(substitution) {
148
+ var substitutionSimple = substitution.isSimple();
149
+ if (substitutionSimple) {
150
+ return true;
151
+ }
152
+ });
153
+ return simpleSubstitution;
154
+ }
155
+ },
156
+ {
157
+ key: "findSubstitutionByVariableNode",
158
+ value: function findSubstitutionByVariableNode(variableNode) {
159
+ var substitution = this.findSubstitution(function(substitution) {
160
+ var substitutionMatchesVariableNode = substitution.matchVariableNode(variableNode);
161
+ if (substitutionMatchesVariableNode) {
162
+ return true;
163
+ }
164
+ });
165
+ return substitution;
166
+ }
167
+ },
168
+ {
169
+ key: "findSubstitutionsByMetavariableNode",
170
+ value: function findSubstitutionsByMetavariableNode(metavariableNode) {
171
+ var substitutions = this.findSubstitutions(function(substitution) {
172
+ var substitutionMatchesMetavariableNode = substitution.matchMetavariableNode(metavariableNode);
173
+ if (substitutionMatchesMetavariableNode) {
174
+ return true;
175
+ }
176
+ });
177
+ return substitutions;
178
+ }
179
+ },
180
+ {
181
+ key: "findSimpleSubstitutionByMetavariableNode",
182
+ value: function findSimpleSubstitutionByMetavariableNode(metavariableNode) {
183
+ var substitutions = this.findSubstitutionsByMetavariableNode(metavariableNode), simpleSubstitutions = substitutions.filterSubstitution(function(substitution) {
184
+ var substitutionSimple = substitution.isSimple();
185
+ if (substitutionSimple) {
186
+ return true;
187
+ }
188
+ }), firstSimpleSubstitution = simpleSubstitutions.getFirstSubstitution(), simpleSubstitution = firstSimpleSubstitution; ///
189
+ return simpleSubstitution;
190
+ }
191
+ },
192
+ {
193
+ key: "findComplexSubstitutionsByMetavariableNode",
194
+ value: function findComplexSubstitutionsByMetavariableNode(metavariableNode) {
195
+ var substitutions = this.findSubstitutionsByMetavariableNode(metavariableNode), complexSubstitutions = substitutions.filterSubstitution(function(substitution) {
196
+ var substitutionComplex = substitution.isComplex();
197
+ if (substitutionComplex) {
198
+ return true;
199
+ }
200
+ });
201
+ return complexSubstitutions;
202
+ }
203
+ },
204
+ {
205
+ key: "findSubstitutionsByMetavariableNodeAndSubstitutionNode",
206
+ value: function findSubstitutionsByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
207
+ var substitutions = this.findSubstitutions(function(substitution) {
208
+ var substitutionMatchesMetavariableNodeAndSubstitutionNode = substitution.matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode);
209
+ if (substitutionMatchesMetavariableNodeAndSubstitutionNode) {
210
+ return true;
211
+ }
212
+ });
213
+ return substitutions;
214
+ }
215
+ },
216
+ {
217
+ key: "findComplexSubstitutionByMetavariableNodeAndSubstitutionNode",
218
+ value: function findComplexSubstitutionByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
219
+ var substitutions = this.findSubstitutionsByMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode), complexSubstitutions = substitutions.filterSubstitution(function(substitution) {
220
+ var substitutionComplex = substitution.isComplex();
221
+ if (substitutionComplex) {
222
+ return true;
223
+ }
224
+ }), firstComplexSubstitution = complexSubstitutions.getFirstSubstitution(), complexSubstitution = firstComplexSubstitution; ///
225
+ return complexSubstitution;
226
+ }
227
+ },
100
228
  {
101
229
  key: "addSubstitution",
102
230
  value: function addSubstitution(substitution, localContextA, localContextB) {
103
231
  this.array.push(substitution);
104
232
  var substitutionNode = substitution.getNode(), substitutionString = substitution.asString(localContextA, localContextB);
105
- localContextB.trace("Added the '".concat(substitutionString, "' substitution."), substitutionNode);
233
+ localContextB.trace("Added the ".concat(substitutionString, " substitution."), substitutionNode);
106
234
  }
107
235
  },
108
236
  {
@@ -116,7 +244,7 @@ var Substitutions = /*#__PURE__*/ function() {
116
244
  }
117
245
  });
118
246
  var substitutionNode = substitution.getNode(), substitutionString = substitution.asString(localContextA, localContextB);
119
- localContextB.trace("Removed the '".concat(substitutionString, "' substitution."), substitutionNode);
247
+ localContextB.trace("Removed the ".concat(substitutionString, " substitution."), substitutionNode);
120
248
  }
121
249
  },
122
250
  {
@@ -132,6 +260,16 @@ var Substitutions = /*#__PURE__*/ function() {
132
260
  return unifiedWithEquivalences;
133
261
  }
134
262
  },
263
+ {
264
+ key: "areResolved",
265
+ value: function areResolved() {
266
+ var resolved = this.everySubstitution(function(substitution) {
267
+ var substitutionResolved = substitution.isResolved();
268
+ return substitutionResolved;
269
+ });
270
+ return resolved;
271
+ }
272
+ },
135
273
  {
136
274
  key: "snapshot",
137
275
  value: function snapshot() {
@@ -158,12 +296,27 @@ var Substitutions = /*#__PURE__*/ function() {
158
296
  }
159
297
  },
160
298
  {
161
- key: "transform",
162
- value: function transform() {
163
- ///
299
+ key: "asString",
300
+ value: function asString(localContextA, localContextB) {
301
+ var string = this.array.reduce(function(string, substitution) {
302
+ var substitutionString = substitution.asString(localContextA, localContextB);
303
+ string = string === null ? substitutionString : "".concat(string, ", ").concat(substitutionString);
304
+ return string;
305
+ }, _constants.EMPTY_STRING);
306
+ if (string !== _constants.EMPTY_STRING) {
307
+ string = " ".concat(string);
308
+ }
309
+ return string;
164
310
  }
165
311
  }
166
312
  ], [
313
+ {
314
+ key: "fromArray",
315
+ value: function fromArray(array) {
316
+ var savedArray = [], substitutions = new Substitutions(array, savedArray);
317
+ return substitutions;
318
+ }
319
+ },
167
320
  {
168
321
  key: "fromNothing",
169
322
  value: function fromNothing() {
@@ -175,4 +328,4 @@ var Substitutions = /*#__PURE__*/ function() {
175
328
  return Substitutions;
176
329
  }();
177
330
 
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdWJzdGl0dXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBwcnVuZSwgY29tcGFyZSwgcmlnaHREaWZmZXJlbmNlIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1YnN0aXR1dGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSwgc2F2ZWRBcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgICB0aGlzLnNhdmVkQXJyYXkgPSBzYXZlZEFycmF5O1xuICB9XG5cbiAgZ2V0QXJyYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXJyYXk7XG4gIH1cblxuICBnZXRTYXZlZEFycmF5KCkge1xuICAgIHJldHVybiB0aGlzLnNhdmVkQXJyYXk7XG4gIH1cblxuICBoYXNDaGFuZ2VkKCkge1xuICAgIGNvbnN0IGNvbXBhcmVzID0gY29tcGFyZSh0aGlzLmFycmF5LCB0aGlzLnNhdmVkQXJyYXkpLFxuICAgICAgICAgIGNoYW5nZWQgPSAhY29tcGFyZXM7ICAvLy9cblxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbihjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5hcnJheS5maW5kKGNhbGxiYWNrKTsgfVxuXG4gIHNvbWVTdWJzdGl0dXRpb24oY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuYXJyYXkuc29tZShjYWxsYmFjayk7IH1cblxuICBldmVyeVN1YnN0aXR1dGlvbihjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5hcnJheS5ldmVyeShjYWxsYmFjayk7IH1cblxuICBhZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKSB7XG4gICAgdGhpcy5hcnJheS5wdXNoKHN1YnN0aXR1dGlvbik7XG5cbiAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uYXNTdHJpbmcobG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qik7XG5cbiAgICBsb2NhbENvbnRleHRCLnRyYWNlKGBBZGRlZCB0aGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uLmAsIHN1YnN0aXR1dGlvbk5vZGUpO1xuICB9XG5cbiAgcmVtb3ZlU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbiwgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qikge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkEgPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgcHJ1bmUodGhpcy5hcnJheSwgKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uQiA9IHN1YnN0aXR1dGlvbjsgLy8vXG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25BICE9PSBzdWJzdGl0dXRpb25CKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZSA9IHN1YnN0aXR1dGlvbi5nZXROb2RlKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmFzU3RyaW5nKGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpO1xuXG4gICAgbG9jYWxDb250ZXh0Qi50cmFjZShgUmVtb3ZlZCB0aGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uLmAsIHN1YnN0aXR1dGlvbk5vZGUpO1xuICB9XG5cbiAgdW5pZnlXaXRoRXF1aXZhbGVuY2VzKGVxdWl2YWxlbmNlcywgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qikge1xuICAgIGNvbnN0IHVuaWZpZWRXaXRoRXF1aXZhbGVuY2VzID0gdGhpcy5ldmVyeVN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcywgLy8vXG4gICAgICAgICAgICBzdWJzdGl0dXRpb25VbmlmaWVkV2l0aEVxdWl2YWxlbmNlID0gc3Vic3RpdHV0aW9uLnVuaWZ5V2l0aEVxdWl2YWxlbmNlcyhlcXVpdmFsZW5jZXMsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uVW5pZmllZFdpdGhFcXVpdmFsZW5jZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB1bmlmaWVkV2l0aEVxdWl2YWxlbmNlcztcbiAgfVxuXG4gIHNuYXBzaG90KCkge1xuICAgIHRoaXMuc2F2ZWRBcnJheSA9IFtcbiAgICAgIC4uLnRoaXMuYXJyYXlcbiAgICBdO1xuICB9XG5cbiAgcm9sbGJhY2sobG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qikge1xuICAgIGNvbnN0IGFycmF5ID0gW1xuICAgICAgLi4udGhpcy5hcnJheVxuICAgIF07XG5cbiAgICByaWdodERpZmZlcmVuY2UodGhpcy5zYXZlZEFycmF5LCBhcnJheSk7XG5cbiAgICBhcnJheS5mb3JFYWNoKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIHRoaXMucmVtb3ZlU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbiwgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qik7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFycmF5ID0gW1xuICAgICAgLi4udGhpcy5zYXZlZEFycmF5XG4gICAgXTtcblxuICAgIHRoaXMuc2F2ZWRBcnJheSA9IG51bGw7XG4gIH1cblxuICBjb250aW51ZSgpIHtcbiAgICB0aGlzLnNhdmVkQXJyYXkgPSBudWxsO1xuICB9XG5cbiAgdHJhbnNmb3JtKCkge1xuICAgIC8vL1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGFycmF5ID0gW10sXG4gICAgICAgICAgc2F2ZWRBcnJheSA9IG51bGwsXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IG5ldyBTdWJzdGl0dXRpb25zKGFycmF5LCBzYXZlZEFycmF5KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG59XG4iXSwibmFtZXMiOlsiU3Vic3RpdHV0aW9ucyIsImFycmF5Iiwic2F2ZWRBcnJheSIsImdldEFycmF5IiwiZ2V0U2F2ZWRBcnJheSIsImhhc0NoYW5nZWQiLCJjb21wYXJlcyIsImNvbXBhcmUiLCJjaGFuZ2VkIiwiZmluZFN1YnN0aXR1dGlvbiIsImNhbGxiYWNrIiwiZmluZCIsInNvbWVTdWJzdGl0dXRpb24iLCJzb21lIiwiZXZlcnlTdWJzdGl0dXRpb24iLCJldmVyeSIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsImxvY2FsQ29udGV4dEEiLCJsb2NhbENvbnRleHRCIiwicHVzaCIsInN1YnN0aXR1dGlvbk5vZGUiLCJnZXROb2RlIiwic3Vic3RpdHV0aW9uU3RyaW5nIiwiYXNTdHJpbmciLCJ0cmFjZSIsInJlbW92ZVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbkEiLCJwcnVuZSIsInN1YnN0aXR1dGlvbkIiLCJ1bmlmeVdpdGhFcXVpdmFsZW5jZXMiLCJlcXVpdmFsZW5jZXMiLCJ1bmlmaWVkV2l0aEVxdWl2YWxlbmNlcyIsInN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25VbmlmaWVkV2l0aEVxdWl2YWxlbmNlIiwic25hcHNob3QiLCJyb2xsYmFjayIsInJpZ2h0RGlmZmVyZW5jZSIsImZvckVhY2giLCJjb250aW51ZSIsInRyYW5zZm9ybSIsImZyb21Ob3RoaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQUlxQkE7OztxQkFGMkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVqQyxJQUFBLEFBQU1BLDhCQUFOO2FBQU1BLGNBQ1BDLEtBQUssRUFBRUMsVUFBVTtnQ0FEVkY7UUFFakIsSUFBSSxD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
331
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zdWJzdGl0dXRpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGZpbmQsIGZpcnN0LCBwcnVuZSwgY29tcHJlc3MsIHJpZ2h0RGlmZmVyZW5jZSB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJzdGl0dXRpb25zIHtcbiAgY29uc3RydWN0b3IoYXJyYXksIHNhdmVkQXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gICAgdGhpcy5zYXZlZEFycmF5ID0gc2F2ZWRBcnJheTtcbiAgfVxuXG4gIGdldEFycmF5KCkge1xuICAgIHJldHVybiB0aGlzLmFycmF5O1xuICB9XG5cbiAgZ2V0U2F2ZWRBcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5zYXZlZEFycmF5O1xuICB9XG5cbiAgZ2V0Rmlyc3RTdWJzdGl0dXRpb24oKSB7XG4gICAgbGV0IGZpcnN0U3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGZpcnN0U3Vic3RpdHV0aW9uID0gZmlyc3QodGhpcy5hcnJheSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0U3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTm9kZXMoKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZXMgPSBbXTtcblxuICAgIHRoaXMuZm9yRWFjaFN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gc3Vic3RpdHV0aW9uLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMucHVzaChtZXRhdmFyaWFibGVOb2RlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbXByZXNzKG1ldGF2YXJpYWJsZU5vZGVzLCAobWV0YXZhcmlhYmxlTm9kZUEsIG1ldGF2YXJpYWJsZU5vZGVCKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlQU1hdGNoZXNNZXRhdmFyaWFibGVOb2RlQiA9IG1ldGF2YXJpYWJsZU5vZGVBLm1hdGNoKG1ldGF2YXJpYWJsZU5vZGVCKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVBTWF0Y2hlc01ldGF2YXJpYWJsZU5vZGVCKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGVzO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbihjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5hcnJheS5maW5kKGNhbGxiYWNrKSB8fCBudWxsOyB9ICAvLy9cblxuICBzb21lU3Vic3RpdHV0aW9uKGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLmFycmF5LnNvbWUoY2FsbGJhY2spOyB9XG5cbiAgZXZlcnlTdWJzdGl0dXRpb24oY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMuYXJyYXkuZXZlcnkoY2FsbGJhY2spOyB9XG5cbiAgZm9yRWFjaFN1YnN0aXR1dGlvbihjYWxsYmFjaykgeyB0aGlzLmFycmF5LmZvckVhY2goY2FsbGJhY2spOyB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbnMoY2FsbGJhY2spIHtcbiAgICBjb25zdCBhcnJheSA9IGZpbmQodGhpcy5hcnJheSwgY2FsbGJhY2spLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBTdWJzdGl0dXRpb25zLmZyb21BcnJheShhcnJheSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbHRlclN1YnN0aXR1dGlvbihjYWxsYmFjaykge1xuICAgIGNvbnN0IGFycmF5ID0gdGhpcy5hcnJheS5maWx0ZXIoY2FsbGJhY2spLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBTdWJzdGl0dXRpb25zLmZyb21BcnJheShhcnJheSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmRTaW1wbGVTdWJzdGl0dXRpb24oKSB7XG4gICAgY29uc3Qgc2ltcGxlU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU3Vic3RpdHV0aW9uKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvblNpbXBsZSA9IHN1YnN0aXR1dGlvbi5pc1NpbXBsZSgpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uU2ltcGxlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpbXBsZVN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb24oKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTWF0Y2hlc1ZhcmlhYmxlTm9kZSA9IHN1YnN0aXR1dGlvbi5tYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uTWF0Y2hlc1ZhcmlhYmxlTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZFN1YnN0aXR1dGlvbnMoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTWF0Y2hlc01ldGF2YXJpYWJsZU5vZGUgPSBzdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uTWF0Y2hlc01ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmRTaW1wbGVTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHNpbXBsZVN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zLmZpbHRlclN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25TaW1wbGUgPSBzdWJzdGl0dXRpb24uaXNTaW1wbGUoKTtcblxuICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvblNpbXBsZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBmaXJzdFNpbXBsZVN1YnN0aXR1dGlvbiA9IHNpbXBsZVN1YnN0aXR1dGlvbnMuZ2V0Rmlyc3RTdWJzdGl0dXRpb24oKSxcbiAgICAgICAgICBzaW1wbGVTdWJzdGl0dXRpb24gPSBmaXJzdFNpbXBsZVN1YnN0aXR1dGlvbjsgLy8vXG5cbiAgICByZXR1cm4gc2ltcGxlU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZENvbXBsZXhTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5maW5kU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBjb21wbGV4U3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnMuZmlsdGVyU3Vic3RpdHV0aW9uKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkNvbXBsZXggPSBzdWJzdGl0dXRpb24uaXNDb21wbGV4KCk7XG5cbiAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25Db21wbGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBsZXhTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5maW5kU3Vic3RpdHV0aW9ucygoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25NYXRjaGVzTWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUgPSBzdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbk1hdGNoZXNNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZmluZENvbXBsZXhTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5maW5kU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgY29tcGxleFN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zLmZpbHRlclN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Db21wbGV4ID0gc3Vic3RpdHV0aW9uLmlzQ29tcGxleCgpO1xuXG4gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uQ29tcGxleCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBmaXJzdENvbXBsZXhTdWJzdGl0dXRpb24gPSBjb21wbGV4U3Vic3RpdHV0aW9ucy5nZXRGaXJzdFN1YnN0aXR1dGlvbigpLFxuICAgICAgICAgIGNvbXBsZXhTdWJzdGl0dXRpb24gPSBmaXJzdENvbXBsZXhTdWJzdGl0dXRpb247IC8vL1xuXG4gICAgcmV0dXJuIGNvbXBsZXhTdWJzdGl0dXRpb247XG4gIH1cblxuICBhZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKSB7XG4gICAgdGhpcy5hcnJheS5wdXNoKHN1YnN0aXR1dGlvbik7XG5cbiAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uYXNTdHJpbmcobG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qik7XG5cbiAgICBsb2NhbENvbnRleHRCLnRyYWNlKGBBZGRlZCB0aGUgJHtzdWJzdGl0dXRpb25TdHJpbmd9IHN1YnN0aXR1dGlvbi5gLCBzdWJzdGl0dXRpb25Ob2RlKTtcbiAgfVxuXG4gIHJlbW92ZVN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25BID0gc3Vic3RpdHV0aW9uOyAvLy9cblxuICAgIHBydW5lKHRoaXMuYXJyYXksIChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uQSAhPT0gc3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGUgPSBzdWJzdGl0dXRpb24uZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvblN0cmluZyA9IHN1YnN0aXR1dGlvbi5hc1N0cmluZyhsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKTtcblxuICAgIGxvY2FsQ29udGV4dEIudHJhY2UoYFJlbW92ZWQgdGhlICR7c3Vic3RpdHV0aW9uU3RyaW5nfSBzdWJzdGl0dXRpb24uYCwgc3Vic3RpdHV0aW9uTm9kZSk7XG4gIH1cblxuICB1bmlmeVdpdGhFcXVpdmFsZW5jZXMoZXF1aXZhbGVuY2VzLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKSB7XG4gICAgY29uc3QgdW5pZmllZFdpdGhFcXVpdmFsZW5jZXMgPSB0aGlzLmV2ZXJ5U3Vic3RpdHV0aW9uKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgIHN1YnN0aXR1dGlvblVuaWZpZWRXaXRoRXF1aXZhbGVuY2UgPSBzdWJzdGl0dXRpb24udW5pZnlXaXRoRXF1aXZhbGVuY2VzKGVxdWl2YWxlbmNlcywgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25VbmlmaWVkV2l0aEVxdWl2YWxlbmNlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVuaWZpZWRXaXRoRXF1aXZhbGVuY2VzO1xuICB9XG5cbiAgYXJlUmVzb2x2ZWQoKSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLmV2ZXJ5U3Vic3RpdHV0aW9uKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvblJlc29sdmVkID0gc3Vic3RpdHV0aW9uLmlzUmVzb2x2ZWQoKTtcblxuICAgICAgcmV0dXJuIHN1YnN0aXR1dGlvblJlc29sdmVkO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgc25hcHNob3QoKSB7XG4gICAgdGhpcy5zYXZlZEFycmF5ID0gW1xuICAgICAgLi4udGhpcy5hcnJheVxuICAgIF07XG4gIH1cblxuICByb2xsYmFjayhsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKSB7XG4gICAgY29uc3QgYXJyYXkgPSBbXG4gICAgICAuLi50aGlzLmFycmF5XG4gICAgXTtcblxuICAgIHJpZ2h0RGlmZmVyZW5jZSh0aGlzLnNhdmVkQXJyYXksIGFycmF5KTtcblxuICAgIGFycmF5LmZvckVhY2goKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgdGhpcy5yZW1vdmVTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYXJyYXkgPSBbXG4gICAgICAuLi50aGlzLnNhdmVkQXJyYXlcbiAgICBdO1xuXG4gICAgdGhpcy5zYXZlZEFycmF5ID0gbnVsbDtcbiAgfVxuXG4gIGNvbnRpbnVlKCkge1xuICAgIHRoaXMuc2F2ZWRBcnJheSA9IG51bGw7XG4gIH1cblxuICBhc1N0cmluZyhsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKSB7XG4gICAgbGV0IHN0cmluZyA9IHRoaXMuYXJyYXkucmVkdWNlKChzdHJpbmcsIHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmFzU3RyaW5nKGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpO1xuXG4gICAgICBzdHJpbmcgPSAoc3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvblN0cmluZyA6XG4gICAgICAgICAgICAgICAgICAgYCR7c3RyaW5nfSwgJHtzdWJzdGl0dXRpb25TdHJpbmd9YDtcblxuICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgaWYgKHN0cmluZyAhPT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICBzdHJpbmcgPSBgICR7c3RyaW5nfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQXJyYXkoYXJyYXkpIHtcbiAgICBjb25zdCBzYXZlZEFycmF5ID0gW10sXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IG5ldyBTdWJzdGl0dXRpb25zKGFycmF5LCBzYXZlZEFycmF5KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGFycmF5ID0gW10sXG4gICAgICAgICAgc2F2ZWRBcnJheSA9IG51bGwsXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IG5ldyBTdWJzdGl0dXRpb25zKGFycmF5LCBzYXZlZEFycmF5KTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25zO1xuICB9XG59XG4iXSwibmFtZXMiOlsiU3Vic3RpdHV0aW9ucyIsImFycmF5Iiwic2F2ZWRBcnJheSIsImdldEFycmF5IiwiZ2V0U2F2ZWRBcnJheSIsImdldEZpcnN0U3Vic3RpdHV0aW9uIiwiZmlyc3RTdWJzdGl0dXRpb24iLCJsZW5ndGgiLCJmaXJzdCIsImdldE1ldGF2YXJpYWJsZU5vZGVzIiwibWV0YXZhcmlhYmxlTm9kZXMiLCJmb3JFYWNoU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJwdXNoIiwiY29tcHJlc3MiLCJtZXRhdmFyaWFibGVOb2RlQSIsIm1ldGF2YXJpYWJsZU5vZGVCIiwibWV0YXZhcmlhYmxlTm9kZUFNYXRjaGVzTWV0YXZhcmlhYmxlTm9kZUIiLCJtYXRjaCIsImZpbmRTdWJzdGl0dXRpb24iLCJjYWxsYmFjayIsImZpbmQiLCJzb21lU3Vic3RpdHV0aW9uIiwic29tZSIsImV2ZXJ5U3Vic3RpdHV0aW9uIiwiZXZlcnkiLCJmb3JFYWNoIiwiZmluZFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwiZnJvbUFycmF5IiwiZmlsdGVyU3Vic3RpdHV0aW9uIiwiZmlsdGVyIiwiZmluZFNpbXBsZVN1YnN0aXR1dGlvbiIsInNpbXBsZVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblNpbXBsZSIsImlzU2ltcGxlIiwiZmluZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwic3Vic3RpdHV0aW9uTWF0Y2hlc1ZhcmlhYmxlTm9kZSIsIm1hdGNoVmFyaWFibGVOb2RlIiwiZmluZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUiLCJzdWJzdGl0dXRpb25NYXRjaGVzTWV0YXZhcmlhYmxlTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImZpbmRTaW1wbGVTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJzaW1wbGVTdWJzdGl0dXRpb25zIiwiZmlyc3RTaW1wbGVTdWJzdGl0dXRpb24iLCJmaW5kQ29tcGxleFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4U3Vic3RpdHV0aW9ucyIsInN1YnN0aXR1dGlvbkNvbXBsZXgiLCJpc0NvbXBsZXgiLCJmaW5kU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTWF0Y2hlc01ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZpbmRDb21wbGV4U3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZpcnN0Q29tcGxleFN1YnN0aXR1dGlvbiIsImNvbXBsZXhTdWJzdGl0dXRpb24iLCJhZGRTdWJzdGl0dXRpb24iLCJsb2NhbENvbnRleHRBIiwibG9jYWxDb250ZXh0QiIsImdldE5vZGUiLCJzdWJzdGl0dXRpb25TdHJpbmciLCJhc1N0cmluZyIsInRyYWNlIiwicmVtb3ZlU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uQSIsInBydW5lIiwic3Vic3RpdHV0aW9uQiIsInVuaWZ5V2l0aEVxdWl2YWxlbmNlcyIsImVxdWl2YWxlbmNlcyIsInVuaWZpZWRXaXRoRXF1aXZhbGVuY2VzIiwic3Vic3RpdHV0aW9uVW5pZmllZFdpdGhFcXVpdmFsZW5jZSIsImFyZVJlc29sdmVkIiwicmVzb2x2ZWQiLCJzdWJzdGl0dXRpb25SZXNvbHZlZCIsImlzUmVzb2x2ZWQiLCJzbmFwc2hvdCIsInJvbGxiYWNrIiwicmlnaHREaWZmZXJlbmNlIiwiY29udGludWUiLCJzdHJpbmciLCJyZWR1Y2UiLCJFTVBUWV9TVFJJTkciLCJmcm9tTm90aGluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFLcUJBOzs7eUJBSFE7cUJBQ2lDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0MsSUFBQSxBQUFNQSw4QkFBTjthQUFNQSxjQUNQQyxLQUFLLEVBQUVDLFVBQVU7Z0NBRFZGO1FBRWpCLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElB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