occam-verify-cli 0.0.927 → 0.0.929

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.
@@ -15,41 +15,24 @@ export default function verifyConclusion(conclusionNode, conclusions, localConte
15
15
 
16
16
  localContext.trace(`Verifying the '${conclusionString}' conclusion...`, conclusionNode);
17
17
 
18
- const unqualifiedStatementNode = unqualifiedStatementNodeQuery(conclusionNode);
18
+ const derived = false,
19
+ assignments = [],
20
+ unqualifiedStatementNode = unqualifiedStatementNodeQuery(conclusionNode);
19
21
 
20
22
  if (unqualifiedStatementNode !== null) {
21
- const derived = false,
22
- assignments = [],
23
- unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
23
+ const unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
24
24
 
25
- conclusionVerified = unqualifiedStatementVerified; ///
26
- }
25
+ if (unqualifiedStatementVerified) {
26
+ const statementNode = statementNodeQuery(unqualifiedStatementNode),
27
+ conclusion = Conclusion.fromStatementNode(statementNode);
27
28
 
28
- if (unqualifiedStatementNode !== null) {
29
- const derived = false,
30
- assignments = [],
31
- unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
29
+ conclusions.push(conclusion);
32
30
 
33
- conclusionVerified = unqualifiedStatementVerified; ///
31
+ conclusionVerified = true;
32
+ }
34
33
  }
35
34
 
36
35
  if (conclusionVerified) {
37
- let conclusion;
38
-
39
- if (unqualifiedStatementNode !== null) {
40
- const statementNode = statementNodeQuery(unqualifiedStatementNode);
41
-
42
- conclusion = Conclusion.fromStatementNode(statementNode);
43
- }
44
-
45
- if (unqualifiedStatementNode !== null) {
46
- const statementNode = statementNodeQuery(unqualifiedStatementNode);
47
-
48
- conclusion = Conclusion.fromStatementNode(statementNode);
49
- }
50
-
51
- conclusions.push(conclusion);
52
-
53
36
  localContext.debug(`...verified the '${conclusionString}' conclusion.`, conclusionNode);
54
37
  }
55
38
 
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import Consequent from "../consequent";
4
- import verifyUnqualifiedStatement from "./statement/unqualified";
4
+ import verifyUnqualifiedStatement from "../verify/statement/unqualified";
5
5
 
6
6
  import { nodeQuery } from "../utilities/query";
7
7
 
@@ -17,19 +17,22 @@ export default function verifyConsequent(consequentNode, consequents, localConte
17
17
 
18
18
  const derived = false,
19
19
  assignments = [],
20
- unqualifiedStatementNode = unqualifiedStatementNodeQuery(consequentNode),
21
- unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
20
+ unqualifiedStatementNode = unqualifiedStatementNodeQuery(consequentNode);
22
21
 
23
- if (unqualifiedStatementVerified) {
24
- consequentVerified = true;
25
- }
22
+ if (unqualifiedStatementNode !== null) {
23
+ const unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
26
24
 
27
- if (consequentVerified) {
28
- const statementNode = statementNodeQuery(unqualifiedStatementNode),
29
- consequent = Consequent.fromStatementNode(statementNode);
25
+ if (unqualifiedStatementVerified) {
26
+ const statementNode = statementNodeQuery(unqualifiedStatementNode),
27
+ consequent = Consequent.fromStatementNode(statementNode);
30
28
 
31
- consequents.push(consequent);
29
+ consequents.push(consequent);
32
30
 
31
+ consequentVerified = true;
32
+ }
33
+ }
34
+
35
+ if (consequentVerified) {
33
36
  localContext.debug(`...verified the '${consequentString}' consequent.`, consequentNode);
34
37
  }
35
38
 
@@ -7,8 +7,8 @@ import EqualityAssignment from "../assignment/equality";
7
7
  import { nodeQuery } from "../utilities/query";
8
8
  import { first, second } from "../utilities/array";
9
9
 
10
- const leftTermNodeQuery = nodeQuery("/equality/argument[0]/term!"),
11
- rightTermNodeQuery = nodeQuery("/equality/argument[1]/term!");
10
+ const leftTermNodeQuery = nodeQuery("/equality/term[0]"),
11
+ rightTermNodeQuery = nodeQuery("/equality/term[1]");
12
12
 
13
13
  export default function verifyEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
14
14
  let equalityVerified;
@@ -35,9 +35,9 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
35
35
  if (qualifiedStatementVerified) {
36
36
  const derived = false,
37
37
  statementNode = statementNodeQuery(qualifiedStatementNode),
38
- statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
38
+ statedStatementVerified = verifyStatedStatement(statementNode, assignments, derived, localContext);
39
39
 
40
- qualifiedStatementVerified = statementVerified; ///
40
+ qualifiedStatementVerified = statedStatementVerified; ///
41
41
  }
42
42
 
43
43
  if (qualifiedStatementVerified) {
@@ -196,12 +196,12 @@ function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, subst
196
196
  return qualifiedStatementVerifiedAgainstReference;
197
197
  }
198
198
 
199
- function verifyStatement(statementNode, assignments, derived, localContext) {
200
- let statementVerified;
199
+ function verifyStatedStatement(statementNode, assignments, derived, localContext) {
200
+ let statedStatementVerified;
201
201
 
202
202
  const statementString = localContext.nodeAsString(statementNode);
203
203
 
204
- localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
204
+ localContext.trace(`Verifying the '${statementString}' stated statement...`, statementNode);
205
205
 
206
206
  const verifyStatementFunctions = [
207
207
  verifyStatementAsEquality,
@@ -209,18 +209,18 @@ function verifyStatement(statementNode, assignments, derived, localContext) {
209
209
  ];
210
210
 
211
211
  verifyStatementFunctions.some((verifyStatementFunction) => {
212
- const statementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext);
212
+ const statedStatementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext);
213
213
 
214
- if (statementVerified) {
214
+ if (statedStatementVerified) {
215
215
  return true;
216
216
  }
217
217
  });
218
218
 
219
- statementVerified = true; ///
219
+ statedStatementVerified = true; ///
220
220
 
221
- if (statementVerified) {
222
- localContext.debug(`...verified the '${statementString}' statement.`, statementNode);
221
+ if (statedStatementVerified) {
222
+ localContext.debug(`...verified the '${statementString}' stated statement.`, statementNode);
223
223
  }
224
224
 
225
- return statementVerified;
225
+ return statedStatementVerified;
226
226
  }
@@ -3,6 +3,7 @@
3
3
  import verifyStatement from "../../verify/statement";
4
4
 
5
5
  import { nodeQuery } from "../../utilities/query";
6
+ import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../../verify/statement";
6
7
 
7
8
  const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
8
9
 
@@ -44,7 +45,14 @@ function verifyDerivedUnqualifiedStatement(unqualifiedStatementNode, assignments
44
45
 
45
46
  const matchesStatementNode = localContext.matchStatementNode(statementNode);
46
47
 
47
- derivedUnqualifiedStatementVerified = matchesStatementNode; ///
48
+ if (matchesStatementNode) {
49
+ derivedUnqualifiedStatementVerified = true;
50
+ } else {
51
+ const statementNode = statementNodeQuery(unqualifiedStatementNode),
52
+ derivedStatementVerified = verifyDerivedStatement(statementNode, assignments, derived, localContext);
53
+
54
+ derivedUnqualifiedStatementVerified = derivedStatementVerified; ///
55
+ }
48
56
 
49
57
  if (derivedUnqualifiedStatementVerified) {
50
58
  localContext.debug(`...verified the '${unqualifiedStatementString}' derived unqualified statement.`, unqualifiedStatementNode);
@@ -74,3 +82,32 @@ function verifyStatedUnqualifiedStatement(unqualifiedStatementNode, assignments,
74
82
 
75
83
  return statedUnqualifiedStatementVerified;
76
84
  }
85
+
86
+ function verifyDerivedStatement(statementNode, assignments, derived, localContext) {
87
+ let derivedStatementVerified;
88
+
89
+ const statementString = localContext.nodeAsString(statementNode);
90
+
91
+ localContext.trace(`Verifying the '${statementString}' derived statement...`, statementNode);
92
+
93
+ const verifyStatementFunctions = [
94
+ verifyStatementAsEquality,
95
+ verifyStatementAsTypeAssertion
96
+ ];
97
+
98
+ verifyStatementFunctions.some((verifyStatementFunction) => {
99
+ const derivedStatementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext);
100
+
101
+ if (derivedStatementVerified) {
102
+ return true;
103
+ }
104
+ });
105
+
106
+ derivedStatementVerified = true; ///
107
+
108
+ if (derivedStatementVerified) {
109
+ localContext.debug(`...verified the '${statementString}' derived statement.`, statementNode);
110
+ }
111
+
112
+ return derivedStatementVerified;
113
+ }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ import metaLevelNodesVerifier from "../verifier/nodes/metaLevel";
3
4
  import TermForVariableSubstitution from "../substitution/termForVariable";
4
- import intrinsicLevelNodesVerifier from "../verifier/nodes/intrinsicLevel";
5
5
 
6
6
  import { push } from "../utilities/array";
7
7
 
@@ -21,7 +21,7 @@ export default function verifyStatementAgainstStatement(statementNodeA, statemen
21
21
 
22
22
  const nonTerminalNodeA = statementNodeA, ///
23
23
  nonTerminalNodeB = statementNodeB, ///
24
- nonTerminalNodeVerified = intrinsicLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutionsA, localContextA, localContextB, () => {
24
+ nonTerminalNodeVerified = metaLevelNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutionsA, localContextA, localContextB, () => {
25
25
  const verifiedAhead = true;
26
26
 
27
27
  return verifiedAhead;
@@ -1,171 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return _default;
9
- }
10
- });
11
- var _nodes = /*#__PURE__*/ _interop_require_default(require("../../verifier/nodes"));
12
- var _variableAgainstTerm = /*#__PURE__*/ _interop_require_default(require("../../verify/variableAgainstTerm"));
13
- var _query = require("../../utilities/query");
14
- var _verifier = require("../../utilities/verifier");
15
- function _assert_this_initialized(self) {
16
- if (self === void 0) {
17
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
18
- }
19
- return self;
20
- }
21
- function _call_super(_this, derived, args) {
22
- derived = _get_prototype_of(derived);
23
- return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
24
- }
25
- function _class_call_check(instance, Constructor) {
26
- if (!(instance instanceof Constructor)) {
27
- throw new TypeError("Cannot call a class as a function");
28
- }
29
- }
30
- function _defineProperties(target, props) {
31
- for(var i = 0; i < props.length; i++){
32
- var descriptor = props[i];
33
- descriptor.enumerable = descriptor.enumerable || false;
34
- descriptor.configurable = true;
35
- if ("value" in descriptor) descriptor.writable = true;
36
- Object.defineProperty(target, descriptor.key, descriptor);
37
- }
38
- }
39
- function _create_class(Constructor, protoProps, staticProps) {
40
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
41
- if (staticProps) _defineProperties(Constructor, staticProps);
42
- return Constructor;
43
- }
44
- function _get(target, property, receiver) {
45
- if (typeof Reflect !== "undefined" && Reflect.get) {
46
- _get = Reflect.get;
47
- } else {
48
- _get = function get(target, property, receiver) {
49
- var base = _super_prop_base(target, property);
50
- if (!base) return;
51
- var desc = Object.getOwnPropertyDescriptor(base, property);
52
- if (desc.get) {
53
- return desc.get.call(receiver || target);
54
- }
55
- return desc.value;
56
- };
57
- }
58
- return _get(target, property, receiver || target);
59
- }
60
- function _get_prototype_of(o) {
61
- _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
62
- return o.__proto__ || Object.getPrototypeOf(o);
63
- };
64
- return _get_prototype_of(o);
65
- }
66
- function _inherits(subClass, superClass) {
67
- if (typeof superClass !== "function" && superClass !== null) {
68
- throw new TypeError("Super expression must either be null or a function");
69
- }
70
- subClass.prototype = Object.create(superClass && superClass.prototype, {
71
- constructor: {
72
- value: subClass,
73
- writable: true,
74
- configurable: true
75
- }
76
- });
77
- if (superClass) _set_prototype_of(subClass, superClass);
78
- }
79
- function _interop_require_default(obj) {
80
- return obj && obj.__esModule ? obj : {
81
- default: obj
82
- };
83
- }
84
- function _possible_constructor_return(self, call) {
85
- if (call && (_type_of(call) === "object" || typeof call === "function")) {
86
- return call;
87
- }
88
- return _assert_this_initialized(self);
89
- }
90
- function _set_prototype_of(o, p) {
91
- _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
92
- o.__proto__ = p;
93
- return o;
94
- };
95
- return _set_prototype_of(o, p);
96
- }
97
- function _super_prop_base(object, property) {
98
- while(!Object.prototype.hasOwnProperty.call(object, property)){
99
- object = _get_prototype_of(object);
100
- if (object === null) break;
101
- }
102
- return object;
103
- }
104
- function _type_of(obj) {
105
- "@swc/helpers - typeof";
106
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
107
- }
108
- function _is_native_reflect_construct() {
109
- try {
110
- var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
111
- } catch (_) {}
112
- return (_is_native_reflect_construct = function() {
113
- return !!result;
114
- })();
115
- }
116
- var termNodeQuery = (0, _query.nodeQuery)("/term!"), nonTerminalNodeQuery = (0, _query.nodeQuery)("/*"), termVariableNodeQuery = (0, _query.nodeQuery)("/term/variable!");
117
- var IntrinsicLevelNodesVerifier = /*#__PURE__*/ function(NodesVerifier) {
118
- _inherits(IntrinsicLevelNodesVerifier, NodesVerifier);
119
- function IntrinsicLevelNodesVerifier() {
120
- _class_call_check(this, IntrinsicLevelNodesVerifier);
121
- return _call_super(this, IntrinsicLevelNodesVerifier, arguments);
122
- }
123
- _create_class(IntrinsicLevelNodesVerifier, [
124
- {
125
- key: "verifyNonTerminalNode",
126
- value: function verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
127
- var _this = this;
128
- var nonTerminalNodeVerified;
129
- var nodeQueryMaps = [
130
- {
131
- nodeQueryA: termVariableNodeQuery,
132
- nodeQueryB: termNodeQuery,
133
- verifyNodes: function(nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) {
134
- var nonTerminalNodeVerified;
135
- var termNodeB = nodeB, termVariableNodeA = nodeA, termVariableNodeVerifiedAgainstTermNode = _this.verifyTermVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
136
- nonTerminalNodeVerified = termVariableNodeVerifiedAgainstTermNode; ///
137
- return nonTerminalNodeVerified;
138
- }
139
- },
140
- {
141
- nodeQueryA: nonTerminalNodeQuery,
142
- nodeQueryB: nonTerminalNodeQuery,
143
- verifyNodes: function(nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) {
144
- var nonTerminalNodeVerified;
145
- var _$nonTerminalNodeA = nodeA, _$nonTerminalNodeB = nodeB; ///
146
- nonTerminalNodeVerified = _get(_get_prototype_of(IntrinsicLevelNodesVerifier.prototype), "verifyNonTerminalNode", _this).call(_this, _$nonTerminalNodeA, _$nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
147
- return nonTerminalNodeVerified;
148
- }
149
- }
150
- ];
151
- var nodesVerified = (0, _verifier.verifyNodes)(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
152
- nonTerminalNodeVerified = nodesVerified; ///
153
- return nonTerminalNodeVerified;
154
- }
155
- },
156
- {
157
- key: "verifyTermVariableNodeAgainstTermNode",
158
- value: function verifyTermVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
159
- var termVariableNodeVerifiedAgainstTermNode;
160
- var variableNodeA = termVariableNodeA, termVerifiedAgainstVariable = (0, _variableAgainstTerm.default)(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
161
- termVariableNodeVerifiedAgainstTermNode = termVerifiedAgainstVariable; ///
162
- return termVariableNodeVerifiedAgainstTermNode;
163
- }
164
- }
165
- ]);
166
- return IntrinsicLevelNodesVerifier;
167
- }(_nodes.default);
168
- var intrinsicLevelNodesVerifier = new IntrinsicLevelNodesVerifier();
169
- var _default = intrinsicLevelNodesVerifier;
170
-
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZmllci9ub2Rlcy9pbnRyaW5zaWNMZXZlbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vZGVzVmVyaWZpZXIgZnJvbSBcIi4uLy4uL3ZlcmlmaWVyL25vZGVzXCI7XG5pbXBvcnQgdmVyaWZ5VmFyaWFibGVBZ2FpbnN0VGVybSBmcm9tIFwiLi4vLi4vdmVyaWZ5L3ZhcmlhYmxlQWdhaW5zdFRlcm1cIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgdmVyaWZ5Tm9kZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3ZlcmlmaWVyXCI7XG5cbmNvbnN0IHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGVybSFcIiksXG4gICAgICBub25UZXJtaW5hbE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi8qXCIpLFxuICAgICAgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpO1xuXG5jbGFzcyBJbnRyaW5zaWNMZXZlbE5vZGVzVmVyaWZpZXIgZXh0ZW5kcyBOb2Rlc1ZlcmlmaWVyIHtcbiAgdmVyaWZ5Tm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZUEsIG5vblRlcm1pbmFsTm9kZUIsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIsIHZlcmlmeUFoZWFkKSB7XG4gICAgbGV0IG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkO1xuXG4gICAgY29uc3Qgbm9kZVF1ZXJ5TWFwcyA9IFtcbiAgICAgIHtcbiAgICAgICAgbm9kZVF1ZXJ5QTogdGVybVZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgICBub2RlUXVlcnlCOiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgICB2ZXJpZnlOb2RlczogKG5vZGVBLCBub2RlQiwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0QiwgdmVyaWZ5QWhlYWQpID0+IHtcbiAgICAgICAgICBsZXQgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQ7XG5cbiAgICAgICAgICBjb25zdCB0ZXJtTm9kZUIgPSBub2RlQiwgIC8vL1xuICAgICAgICAgICAgICAgIHRlcm1WYXJpYWJsZU5vZGVBID0gbm9kZUEsICAvLy9cbiAgICAgICAgICAgICAgICB0ZXJtVmFyaWFibGVOb2RlVmVyaWZpZWRBZ2FpbnN0VGVybU5vZGUgPVxuXG4gICAgICAgICAgICAgICAgICB0aGlzLnZlcmlmeVRlcm1WYXJpYWJsZU5vZGVBZ2FpbnN0VGVybU5vZGUodGVybVZhcmlhYmxlTm9kZUEsIHRlcm1Ob2RlQiwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0QiwgdmVyaWZ5QWhlYWQpO1xuXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSB0ZXJtVmFyaWFibGVOb2RlVmVyaWZpZWRBZ2FpbnN0VGVybU5vZGU7ICAvLy9cblxuICAgICAgICAgIHJldHVybiBub25UZXJtaW5hbE5vZGVWZXJpZmllZDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbm9kZVF1ZXJ5QTogbm9uVGVybWluYWxOb2RlUXVlcnksXG4gICAgICAgIG5vZGVRdWVyeUI6IG5vblRlcm1pbmFsTm9kZVF1ZXJ5LFxuICAgICAgICB2ZXJpZnlOb2RlczogKG5vZGVBLCBub2RlQiwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0QiwgdmVyaWZ5QWhlYWQpID0+IHtcbiAgICAgICAgICBsZXQgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQ7XG5cbiAgICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGVBID0gbm9kZUEsIC8vL1xuICAgICAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZUIgPSBub2RlQjsgLy8vXG5cbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVWZXJpZmllZCA9XG5cbiAgICAgICAgICAgIHN1cGVyLnZlcmlmeU5vblRlcm1pbmFsTm9kZShub25UZXJtaW5hbE5vZGVBLCBub25UZXJtaW5hbE5vZGVCLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCLCB2ZXJpZnlBaGVhZCk7XG5cbiAgICAgICAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlVmVyaWZpZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuXG4gICAgY29uc3Qgbm9kZXNWZXJpZmllZCA9IHZlcmlmeU5vZGVzKG5vZGVRdWVyeU1hcHMsIG5vblRlcm1pbmFsTm9kZUEsIG5vblRlcm1pbmFsTm9kZUIsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIsIHZlcmlmeUFoZWFkKTtcblxuICAgIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gbm9kZXNWZXJpZmllZDsgIC8vL1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5VGVybVZhcmlhYmxlTm9kZUFnYWluc3RUZXJtTm9kZSh0ZXJtVmFyaWFibGVOb2RlQSwgdGVybU5vZGVCLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCLCB2ZXJpZnlBaGVhZCkge1xuICAgIGxldCB0ZXJtVmFyaWFibGVOb2RlVmVyaWZpZWRBZ2FpbnN0VGVybU5vZGU7XG5cbiAgICBjb25zdCB2YXJpYWJsZU5vZGVBID0gdGVybVZhcmlhYmxlTm9kZUEsIC8vL1xuICAgICAgICAgIHRlcm1WZXJpZmllZEFnYWluc3RWYXJpYWJsZSA9IHZlcmlmeVZhcmlhYmxlQWdhaW5zdFRlcm0odmFyaWFibGVOb2RlQSwgdGVybU5vZGVCLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCLCB2ZXJpZnlBaGVhZCk7XG5cbiAgICB0ZXJtVmFyaWFibGVOb2RlVmVyaWZpZWRBZ2FpbnN0VGVybU5vZGUgPSB0ZXJtVmVyaWZpZWRBZ2FpbnN0VmFyaWFibGU7ICAvLy9cblxuICAgIHJldHVybiB0ZXJtVmFyaWFibGVOb2RlVmVyaWZpZWRBZ2FpbnN0VGVybU5vZGU7XG4gIH1cbn1cblxuY29uc3QgaW50cmluc2ljTGV2ZWxOb2Rlc1ZlcmlmaWVyID0gbmV3IEludHJpbnNpY0xldmVsTm9kZXNWZXJpZmllcigpO1xuXG5leHBvcnQgZGVmYXVsdCBpbnRyaW5zaWNMZXZlbE5vZGVzVmVyaWZpZXI7XG4iXSwibmFtZXMiOlsidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsIm5vblRlcm1pbmFsTm9kZVF1ZXJ5IiwidGVybVZhcmlhYmxlTm9kZVF1ZXJ5IiwiSW50cmluc2ljTGV2ZWxOb2Rlc1ZlcmlmaWVyIiwidmVyaWZ5Tm9uVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlQSIsIm5vblRlcm1pbmFsTm9kZUIiLCJzdWJzdGl0dXRpb25zIiwibG9jYWxDb250ZXh0QSIsImxvY2FsQ29udGV4dEIiLCJ2ZXJpZnlBaGVhZCIsIm5vblRlcm1pbmFsTm9kZVZlcmlmaWVkIiwibm9kZVF1ZXJ5TWFwcyIsIm5vZGVRdWVyeUEiLCJub2RlUXVlcnlCIiwidmVyaWZ5Tm9kZXMiLCJub2RlQSIsIm5vZGVCIiwidGVybU5vZGVCIiwidGVybVZhcmlhYmxlTm9kZUEiLCJ0ZXJtVmFyaWFibGVOb2RlVmVyaWZpZWRBZ2FpbnN0VGVybU5vZGUiLCJ2ZXJpZnlUZXJtVmFyaWFibGVOb2RlQWdhaW5zdFRlcm1Ob2RlIiwibm9kZXNWZXJpZmllZCIsInZhcmlhYmxlTm9kZUEiLCJ0ZXJtVmVyaWZpZWRBZ2FpbnN0VmFyaWFibGUiLCJ2ZXJpZnlWYXJpYWJsZUFnYWluc3RUZXJtIiwiTm9kZXNWZXJpZmllciIsImludHJpbnNpY0xldmVsTm9kZXNWZXJpZmllciJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBeUVBOzs7ZUFBQTs7OzREQXZFMEI7MEVBQ1k7cUJBRVo7d0JBQ0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU1QixJQUFNQSxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsV0FDMUJDLHVCQUF1QkQsSUFBQUEsZ0JBQVMsRUFBQyxPQUNqQ0Usd0JBQXdCRixJQUFBQSxnQkFBUyxFQUFDO0FBRXhDLElBQUEsQUFBTUcsNENBQUQsQUFBTDtjQUFNQTthQUFBQTtnQ0FBQUE7aUNBQUFBOztrQkFBQUE7O1lBQ0pDLEtBQUFBO21CQUFBQSxTQUFBQSxzQkFBc0JDLGdCQUFnQixFQUFFQyxnQkFBZ0IsRUFBRUMsYUFBYSxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsRUFBRUMsV0FBVzs7Z0JBQ2hILElBQUlDO2dCQUVKLElBQU1DLGdCQUFnQjtvQkFDcEI7d0JBQ0VDLFlBQVlYO3dCQUNaWSxZQUFZZjt3QkFDWmdCLGFBQWEsU0FBQ0MsT0FBT0MsT0FBT1YsZUFBZUMsZUFBZUMsZUFBZUM7NEJBQ3ZFLElBQUlDOzRCQUVKLElBQU1PLFlBQVlELE9BQ1pFLG9CQUFvQkgsT0FDcEJJLDBDQUVFLE1BQUtDLHFDQUFxQyxDQUFDRixtQkFBbUJELFdBQVdYLGVBQWVDLGVBQWVDLGVBQWVDOzRCQUU5SEMsMEJBQTBCUyx5Q0FBMEMsR0FBRzs0QkFFdkUsT0FBT1Q7d0JBQ1Q7b0JBQ0Y7b0JBQ0E7d0JBQ0VFLFlBQVlaO3dCQUNaYSxZQUFZYjt3QkFDWmMsYUFBYSxTQUFDQyxPQUFPQyxPQUFPVixlQUFlQyxlQUFlQyxlQUFlQzs0QkFDdkUsSUFBSUM7NEJBRUosSUFBTU4scUJBQW1CVyxPQUNuQlYscUJBQW1CVyxPQUFPLEdBQUc7NEJBRW5DTiwwQkFFRSx1QkFqQ05SLHdDQWlDWUMsNENBQXNCQyxvQkFBa0JDLG9CQUFrQkMsZUFBZUMsZUFBZUMsZUFBZUM7NEJBRS9HLE9BQU9DO3dCQUNUO29CQUNGO2lCQUNEO2dCQUVELElBQU1XLGdCQUFnQlAsSUFBQUEscUJBQVcsRUFBQ0gsZUFBZVAsa0JBQWtCQyxrQkFBa0JDLGVBQWVDLGVBQWVDLGVBQWVDO2dCQUVsSUMsMEJBQTBCVyxlQUFnQixHQUFHO2dCQUU3QyxPQUFPWDtZQUNUOzs7WUFFQVUsS0FBQUE7bUJBQUFBLFNBQUFBLHNDQUFzQ0YsaUJBQWlCLEVBQUVELFNBQVMsRUFBRVgsYUFBYSxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsRUFBRUMsV0FBVztnQkFDMUgsSUFBSVU7Z0JBRUosSUFBTUcsZ0JBQWdCSixtQkFDaEJLLDhCQUE4QkMsSUFBQUEsNEJBQXlCLEVBQUNGLGVBQWVMLFdBQVdYLGVBQWVDLGVBQWVDLGVBQWVDO2dCQUVySVUsMENBQTBDSSw2QkFBOEIsR0FBRztnQkFFM0UsT0FBT0o7WUFDVDs7O1dBeERJakI7RUFBb0N1QixjQUFhO0FBMkR2RCxJQUFNQyw4QkFBOEIsSUFBSXhCO0lBRXhDLFdBQWV3QiJ9