occam-verify-cli 0.0.837 → 0.0.839

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 (50) hide show
  1. package/lib/constants.js +5 -1
  2. package/lib/context/file.js +24 -9
  3. package/lib/context/local.js +77 -39
  4. package/lib/context/localMeta.js +3 -3
  5. package/lib/context/release.js +4 -5
  6. package/lib/equality.js +2 -2
  7. package/lib/equivalence.js +244 -0
  8. package/lib/log.js +3 -3
  9. package/lib/term.js +40 -1
  10. package/lib/utilities/array.js +5 -5
  11. package/lib/utilities/equivalences.js +169 -0
  12. package/lib/verifier/node/metastatement.js +12 -31
  13. package/lib/verifier/node/statementAsCombinator.js +4 -4
  14. package/lib/verifier/node/termAsConstructor.js +7 -27
  15. package/lib/verifier/nodes/equality.js +8 -8
  16. package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +22 -6
  17. package/lib/verify/containment.js +22 -12
  18. package/lib/verify/defining.js +38 -0
  19. package/lib/verify/metavariable.js +26 -4
  20. package/lib/verify/statement.js +62 -45
  21. package/lib/verify/term.js +6 -6
  22. package/lib/verify/type.js +7 -7
  23. package/lib/verify/variable.js +26 -4
  24. package/package.json +1 -1
  25. package/src/constants.js +1 -0
  26. package/src/context/file.js +35 -8
  27. package/src/context/local.js +113 -44
  28. package/src/context/localMeta.js +3 -3
  29. package/src/context/release.js +6 -9
  30. package/src/equality.js +2 -2
  31. package/src/{collection.js → equivalence.js} +84 -28
  32. package/src/log.js +2 -2
  33. package/src/term.js +48 -0
  34. package/src/utilities/array.js +1 -1
  35. package/src/utilities/equivalences.js +152 -0
  36. package/src/verifier/node/metastatement.js +23 -51
  37. package/src/verifier/node/statementAsCombinator.js +9 -6
  38. package/src/verifier/node/termAsConstructor.js +13 -44
  39. package/src/verifier/nodes/equality.js +7 -7
  40. package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +38 -12
  41. package/src/verify/containment.js +31 -20
  42. package/src/verify/defining.js +43 -0
  43. package/src/verify/metavariable.js +22 -0
  44. package/src/verify/statement.js +88 -54
  45. package/src/verify/term.js +4 -5
  46. package/src/verify/type.js +6 -7
  47. package/src/verify/variable.js +22 -0
  48. package/lib/collection.js +0 -192
  49. package/lib/utilities/collection.js +0 -121
  50. package/src/utilities/collection.js +0 -103
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import verifyEquality from "../verify/equality";
4
+ import verifyDefining from "../verify/defining";
4
5
  import verifyContainment from "../verify/containment";
5
6
  import bracketedCombinator from "../ocmbinator/bracketed";
6
7
  import verifyTypeAssertion from "../verify/typeAssertion";
@@ -9,8 +10,11 @@ import statementNodesVerifier from "../verifier/nodes/statement";
9
10
  import { nodeQuery } from "../utilities/query";
10
11
 
11
12
  const equalityNodeQuery = nodeQuery("/statement/equality!"),
12
- statementNodeQuery = nodeQuery("/statement/metaArgument/statement!"),
13
+ argumentNodeQuery = nodeQuery("/statement/argument!"),
14
+ definingNodeQuery = nodeQuery("/statement/defining!"),
15
+ statementNodeQuery = nodeQuery("/metaArgument/statement!"),
13
16
  containmentNodeQuery = nodeQuery("/statement/containment!"),
17
+ metaArgumentNodeQuery = nodeQuery("/statement/metaArgument!"),
14
18
  typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
15
19
 
16
20
  function verifyStatement(statementNode, assignments, derived, context, verifyAhead) {
@@ -22,8 +26,9 @@ function verifyStatement(statementNode, assignments, derived, context, verifyAhe
22
26
 
23
27
  const verifyStatementFunctions = [
24
28
  verifyStatementAsEquality,
29
+ verifyStatementAboutDefining,
25
30
  verifyStatementAsTypeAssertion,
26
- verifyStatementWithContainment,
31
+ verifyStatementAboutContainment,
27
32
  verifyStatementAgainstCombinators
28
33
  ];
29
34
 
@@ -42,22 +47,21 @@ function verifyStatement(statementNode, assignments, derived, context, verifyAhe
42
47
  return statementVerified;
43
48
  }
44
49
 
45
- export function verifyStandaloneStatement(statementNode, fileContext, verifyAhead) {
50
+ export function verifyStandaloneStatement(statementNode, context, verifyAhead) {
46
51
  let standaloneStatementVerified;
47
52
 
48
- const statementString = fileContext.nodeAsString(statementNode);
53
+ const statementString = context.nodeAsString(statementNode);
49
54
 
50
- fileContext.trace(`Verifying the '${statementString}' standalone statement...`, statementNode);
55
+ context.trace(`Verifying the '${statementString}' standalone statement...`, statementNode);
51
56
 
52
- const context = fileContext, ///
53
- derived = false,
57
+ const derived = false,
54
58
  assignments = [],
55
59
  statementVerified = verifyStatement(statementNode, assignments, derived, context, verifyAhead);
56
60
 
57
61
  standaloneStatementVerified = statementVerified; ///
58
62
 
59
63
  if (standaloneStatementVerified) {
60
- fileContext.debug(`...verified the '${statementString}' standalone statement.`, statementNode);
64
+ context.debug(`...verified the '${statementString}' standalone statement.`, statementNode);
61
65
  }
62
66
 
63
67
  return standaloneStatementVerified;
@@ -91,6 +95,29 @@ function verifyStatementAsEquality(statementNode, assignments, derived, context,
91
95
  return statementVerifiedAsEquality;
92
96
  }
93
97
 
98
+ function verifyStatementAboutDefining(statementNode, assignments, derived, context, verifyAhead) {
99
+ let statementVerifiedAboutDefining = false;
100
+
101
+ const definingNode = definingNodeQuery(statementNode);
102
+
103
+ if (definingNode !== null) {
104
+ const statementString = context.nodeAsString(statementNode);
105
+
106
+ context.trace(`Verifying the '${statementString}' statement about defining...`, statementNode);
107
+
108
+ const argumentNode = argumentNodeQuery(statementNode),
109
+ definingVerified = verifyDefining(argumentNode, definingNode, context);
110
+
111
+ statementVerifiedAboutDefining = definingVerified; ///
112
+
113
+ if (statementVerifiedAboutDefining) {
114
+ context.debug(`...verified the '${statementString}' statement about defining.`, statementNode);
115
+ }
116
+ }
117
+
118
+ return statementVerifiedAboutDefining;
119
+ }
120
+
94
121
  function verifyStatementAsTypeAssertion(statementNode, assignments, derived, context, verifyAhead) {
95
122
  let statementVerifiedAsTypeAssertion = false;
96
123
 
@@ -113,68 +140,47 @@ function verifyStatementAsTypeAssertion(statementNode, assignments, derived, con
113
140
  return statementVerifiedAsTypeAssertion;
114
141
  }
115
142
 
116
- function verifyStatementWithContainment(statementNode, assignments, derived, context, verifyAhead) {
117
- let statementVerifiedWithContainment = false;
143
+ function verifyStatementAboutContainment(statementNode, assignments, derived, context, verifyAhead) {
144
+ let statementVerifiedAboutContainment = false;
118
145
 
119
146
  const containmentNode = containmentNodeQuery(statementNode);
120
147
 
121
148
  if (containmentNode !== null) {
122
149
  const statementString = context.nodeAsString(statementNode);
123
150
 
124
- statementNode = statementNodeQuery(statementNode); ///
151
+ context.trace(`Verifying the '${statementString}' statement about containment...`, statementNode);
125
152
 
126
- if (statementNode !== null) {
127
- context.trace(`Verifying the '${statementString}' statement with containment...`, statementNode);
153
+ const argumentNode = argumentNodeQuery(statementNode),
154
+ metaArgumentNode = metaArgumentNodeQuery(statementNode),
155
+ containmentVerified = verifyContainment(argumentNode, containmentNode, metaArgumentNode, context);
128
156
 
129
- const containmentVerified = verifyContainment(containmentNode, statementNode);
157
+ if (containmentVerified) {
158
+ statementNode = statementNodeQuery(metaArgumentNode); ///
130
159
 
131
- if (containmentVerified) {
132
- const verifyStatementFunctions = [
133
- verifyStatementAsEquality,
134
- verifyStatementAgainstCombinators
135
- ];
160
+ const verifyStatementFunctions = [
161
+ verifyStatementAsEquality,
162
+ verifyStatementAgainstCombinators
163
+ ];
136
164
 
137
- const statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
138
- const derived = false,
139
- assignments = [],
140
- statementVerified = verifyStatementFunction(statementNode, assignments, derived, context, verifyAhead);
165
+ const statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
166
+ const derived = false,
167
+ assignments = [],
168
+ statementVerified = verifyStatementFunction(statementNode, assignments, derived, context, verifyAhead);
141
169
 
142
- if (statementVerified) {
143
- return true;
144
- }
145
- });
170
+ if (statementVerified) {
171
+ return true;
172
+ }
173
+ });
146
174
 
147
- statementVerifiedWithContainment = statementVerified; ///
148
- }
149
-
150
- if (statementVerifiedWithContainment) {
151
- context.debug(`...verified the '${statementString}' statement with containment.`, statementNode);
152
- }
175
+ statementVerifiedAboutContainment = statementVerified; ///
153
176
  }
154
- }
155
-
156
- return statementVerifiedWithContainment;
157
- }
158
-
159
- function verifyStatementAgainstCombinators(statementNode, assignments, derived, context, verifyAhead) {
160
- let statementVerifiedAgainstCombinators;
161
177
 
162
- let combinators = context.getCombinators();
163
-
164
- combinators = [ ///
165
- bracketedCombinator,
166
- ...combinators
167
- ];
168
-
169
- statementVerifiedAgainstCombinators = combinators.some((combinator) => {
170
- const statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, context, verifyAhead);
171
-
172
- if (statementVerifiedAgainstCombinator) {
173
- return true;
178
+ if (statementVerifiedAboutContainment) {
179
+ context.debug(`...verified the '${statementString}' statement about containment.`, statementNode);
174
180
  }
175
- });
181
+ }
176
182
 
177
- return statementVerifiedAgainstCombinators;
183
+ return statementVerifiedAboutContainment;
178
184
  }
179
185
 
180
186
  function verifyStatementAgainstCombinator(statementNode, combinator, context, verifyAhead) {
@@ -198,3 +204,31 @@ function verifyStatementAgainstCombinator(statementNode, combinator, context, ve
198
204
 
199
205
  return statementVerifiedAgainstCombinator;
200
206
  }
207
+
208
+ function verifyStatementAgainstCombinators(statementNode, assignments, derived, context, verifyAhead) {
209
+ let statementVerifiedAgainstCombinators = false;
210
+
211
+ const equalityNode = equalityNodeQuery(statementNode),
212
+ definingNode = definingNodeQuery(statementNode),
213
+ containmentNode = containmentNodeQuery(statementNode),
214
+ typeAssertionNode = typeAssertionNodeQuery(statementNode);
215
+
216
+ if ((equalityNode === null) && (definingNode === null) && (containmentNode === null) && (typeAssertionNode === null)) {
217
+ let combinators = context.getCombinators();
218
+
219
+ combinators = [ ///
220
+ bracketedCombinator,
221
+ ...combinators
222
+ ];
223
+
224
+ statementVerifiedAgainstCombinators = combinators.some((combinator) => {
225
+ const statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, context, verifyAhead);
226
+
227
+ if (statementVerifiedAgainstCombinator) {
228
+ return true;
229
+ }
230
+ });
231
+ }
232
+
233
+ return statementVerifiedAgainstCombinators;
234
+ }
@@ -39,21 +39,20 @@ function verifyTerm(termNode, terms, context, verifyAhead) {
39
39
  return termVerified;
40
40
  }
41
41
 
42
- export function verifyStandaloneTerm(termNode, fileContext, verifyAhead) {
42
+ export function verifyStandaloneTerm(termNode, context, verifyAhead) {
43
43
  let standaloneTermVerified;
44
44
 
45
- const termString = fileContext.nodeAsString(termNode);
45
+ const termString = context.nodeAsString(termNode);
46
46
 
47
- fileContext.trace(`Verifying the '${termString}' standalone term...`, termNode);
47
+ context.trace(`Verifying the '${termString}' standalone term...`, termNode);
48
48
 
49
49
  const terms = [],
50
- context = fileContext, ///
51
50
  termVerified = verifyTerm(termNode, terms, context, verifyAhead);
52
51
 
53
52
  standaloneTermVerified = termVerified; ///
54
53
 
55
54
  if (standaloneTermVerified) {
56
- fileContext.debug(`...verified the '${termString}' standalone term.`, termNode);
55
+ context.debug(`...verified the '${termString}' standalone term.`, termNode);
57
56
  }
58
57
 
59
58
  return standaloneTermVerified;
@@ -47,27 +47,26 @@ export default function verifyType(typeNode, superTypeNode, fileContext) {
47
47
  return typeVerified;
48
48
  }
49
49
 
50
- export function verifyStandaloneType(typeNode, fileContext, verifyAhead) {
50
+ export function verifyStandaloneType(typeNode, context, verifyAhead) {
51
51
  let standaloneTypeVerified = false;
52
52
 
53
- const typeString = fileContext.nodeAsString(typeNode);
53
+ const typeString = context.nodeAsString(typeNode);
54
54
 
55
- fileContext.trace(`Verifying the '${typeString}' standalone type...`, typeNode);
55
+ context.trace(`Verifying the '${typeString}' standalone type...`, typeNode);
56
56
 
57
57
  const typeName = typeNameFromTypeNode(typeNode),
58
- typePresent = fileContext.isTypePresentByTypeName(typeName);
58
+ typePresent = context.isTypePresentByTypeName(typeName);
59
59
 
60
60
  if (!typePresent) {
61
- fileContext.debug(`The type '${typeName}' is not present.`, typeNode);
61
+ context.debug(`The type '${typeName}' is not present.`, typeNode);
62
62
  } else {
63
63
  const verifiedAhead = verifyAhead();
64
64
 
65
65
  standaloneTypeVerified = verifiedAhead; ///
66
-
67
66
  }
68
67
 
69
68
  if (standaloneTypeVerified) {
70
- fileContext.debug(`...verified the '${typeString}' standalone type.`, typeNode);
69
+ context.debug(`...verified the '${typeString}' standalone type.`, typeNode);
71
70
  }
72
71
 
73
72
  return standaloneTypeVerified;
@@ -52,3 +52,25 @@ export default function verifyVariable(variableNode, typeNode, fileContext) {
52
52
 
53
53
  return variableVerified;
54
54
  }
55
+
56
+ export function verifyStandaloneVariable(variableNode, context, verifyAhead) {
57
+ let standaloneVariableVerified = false;
58
+
59
+ const variableString = context.nodeAsString(variableNode);
60
+
61
+ context.trace(`Verifying the '${variableString}' standalone variable...`, variableNode);
62
+
63
+ const variablePresent = context.isVariablePresentByVariableNode(variableNode);
64
+
65
+ if (variablePresent) {
66
+ const verifiedAhead = verifyAhead();
67
+
68
+ standaloneVariableVerified = verifiedAhead; ///
69
+ }
70
+
71
+ if (standaloneVariableVerified) {
72
+ context.debug(`...verified the '${variableString}' standalone variable.`, variableNode);
73
+ }
74
+
75
+ return standaloneVariableVerified;
76
+ }
package/lib/collection.js DELETED
@@ -1,192 +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 Collection;
9
- }
10
- });
11
- var _query = require("./utilities/query");
12
- function _array_like_to_array(arr, len) {
13
- if (len == null || len > arr.length) len = arr.length;
14
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
15
- return arr2;
16
- }
17
- function _array_without_holes(arr) {
18
- if (Array.isArray(arr)) return _array_like_to_array(arr);
19
- }
20
- function _class_call_check(instance, Constructor) {
21
- if (!(instance instanceof Constructor)) {
22
- throw new TypeError("Cannot call a class as a function");
23
- }
24
- }
25
- function _defineProperties(target, props) {
26
- for(var i = 0; i < props.length; i++){
27
- var descriptor = props[i];
28
- descriptor.enumerable = descriptor.enumerable || false;
29
- descriptor.configurable = true;
30
- if ("value" in descriptor) descriptor.writable = true;
31
- Object.defineProperty(target, descriptor.key, descriptor);
32
- }
33
- }
34
- function _create_class(Constructor, protoProps, staticProps) {
35
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
36
- if (staticProps) _defineProperties(Constructor, staticProps);
37
- return Constructor;
38
- }
39
- function _iterable_to_array(iter) {
40
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
41
- }
42
- function _non_iterable_spread() {
43
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
44
- }
45
- function _to_consumable_array(arr) {
46
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
47
- }
48
- function _unsupported_iterable_to_array(o, minLen) {
49
- if (!o) return;
50
- if (typeof o === "string") return _array_like_to_array(o, minLen);
51
- var n = Object.prototype.toString.call(o).slice(8, -1);
52
- if (n === "Object" && o.constructor) n = o.constructor.name;
53
- if (n === "Map" || n === "Set") return Array.from(n);
54
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
55
- }
56
- var variableNodeQuery = (0, _query.nodeQuery)("/term/variable!");
57
- var Collection = /*#__PURE__*/ function() {
58
- function Collection(terms) {
59
- _class_call_check(this, Collection);
60
- this.terms = terms;
61
- }
62
- _create_class(Collection, [
63
- {
64
- key: "getTerms",
65
- value: function getTerms() {
66
- return this.terms;
67
- }
68
- },
69
- {
70
- key: "setTerms",
71
- value: function setTerms(terms) {
72
- this.terms = terms;
73
- }
74
- },
75
- {
76
- key: "addTerm",
77
- value: function addTerm(term) {
78
- this.terms.push(term);
79
- }
80
- },
81
- {
82
- key: "getType",
83
- value: function getType(context) {
84
- var type = this.terms.reduce(function(type, term) {
85
- var termType = termTypeFromTerm(term, context);
86
- if (type === null) {
87
- type = termType; ///
88
- } else {
89
- var termTypeSubTypeOfType = termType.isSubTypeOf(type);
90
- if (termTypeSubTypeOfType) {
91
- type = termType; ///
92
- }
93
- }
94
- return type;
95
- }, null);
96
- return type;
97
- }
98
- },
99
- {
100
- key: "matchType",
101
- value: function matchType(type, context) {
102
- var typeA = type; ///
103
- type = this.getType(context);
104
- var typeB = type; ///
105
- var typeAEqualToTypeB = typeA.isEqualTo(typeB), typeMatches = typeAEqualToTypeB; ///
106
- return typeMatches;
107
- }
108
- },
109
- {
110
- key: "matchTerm",
111
- value: function matchTerm(term) {
112
- var termA = term, termMatches = this.terms.some(function(term) {
113
- var termB = term, termAMatchesTermB = termA.match(termB);
114
- if (termAMatchesTermB) {
115
- return true;
116
- }
117
- });
118
- return termMatches;
119
- }
120
- },
121
- {
122
- key: "matchTermNode",
123
- value: function matchTermNode(termNode) {
124
- var termNodeA = termNode, termNodeMatches = this.terms.some(function(term) {
125
- var _$termNode = term.getNode(), termNodeB = _$termNode, termNodeAMatchesTermB = termNodeA.match(termNodeB);
126
- if (termNodeAMatchesTermB) {
127
- return true;
128
- }
129
- });
130
- return termNodeMatches;
131
- }
132
- },
133
- {
134
- key: "matchTerms",
135
- value: function matchTerms(terms) {
136
- var _this = this;
137
- var termsMatch = terms.every(function(term) {
138
- var termMatches = _this.matchTerm(term);
139
- if (termMatches) {
140
- return true;
141
- }
142
- });
143
- return termsMatch;
144
- }
145
- },
146
- {
147
- key: "matchTermNodes",
148
- value: function matchTermNodes(termNodes) {
149
- var _this = this;
150
- var termNodesMatch = termNodes.every(function(termNode) {
151
- var termNodeMatches = _this.matchTermNode(termNode);
152
- if (termNodeMatches) {
153
- return true;
154
- }
155
- });
156
- return termNodesMatch;
157
- }
158
- }
159
- ], [
160
- {
161
- key: "fromEquality",
162
- value: function fromEquality(equality) {
163
- var leftTerm = equality.getLeftTerm(), rightTerm = equality.getRightTerm(), terms = [
164
- leftTerm,
165
- rightTerm
166
- ], collection = new Collection(terms);
167
- return collection;
168
- }
169
- },
170
- {
171
- key: "fromCollections",
172
- value: function fromCollections(collectionA, collectionB) {
173
- var collectionATerms = collectionA.getTerms(), collectionBTerms = collectionB.getTerms(), terms = _to_consumable_array(collectionATerms).concat(_to_consumable_array(collectionBTerms)), collection = new Collection(terms);
174
- return collection;
175
- }
176
- }
177
- ]);
178
- return Collection;
179
- }();
180
- function termTypeFromTerm(term, context) {
181
- var termType;
182
- var termNode = term.getNode(), variableNode = variableNodeQuery(termNode);
183
- if (variableNode !== null) {
184
- var variable = context.findVariableByVariableNode(variableNode), variableType = variable.getType();
185
- termType = variableType; ///
186
- } else {
187
- termType = term.getType();
188
- }
189
- return termType;
190
- }
191
-
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3QgdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGVybS92YXJpYWJsZSFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbGxlY3Rpb24ge1xuICBjb25zdHJ1Y3Rvcih0ZXJtcykge1xuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgfVxuXG4gIGdldFRlcm1zKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm1zO1xuICB9XG5cbiAgc2V0VGVybXModGVybXMpIHtcbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICB0aGlzLnRlcm1zLnB1c2godGVybSk7XG4gIH1cblxuICBnZXRUeXBlKGNvbnRleHQpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy50ZXJtcy5yZWR1Y2UoKHR5cGUsIHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybVR5cGVGcm9tVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgdHlwZSA9IHRlcm1UeXBlOyAgLy8vXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0ZXJtVHlwZVN1YlR5cGVPZlR5cGUgPSB0ZXJtVHlwZS5pc1N1YlR5cGVPZih0eXBlKTtcblxuICAgICAgICBpZiAodGVybVR5cGVTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgICAgdHlwZSA9IHRlcm1UeXBlOyAgLy8vXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSwgbnVsbCk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIG1hdGNoVHlwZSh0eXBlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdHlwZUEgPSB0eXBlOyAvLy9cblxuICAgIHR5cGUgPSB0aGlzLmdldFR5cGUoY29udGV4dCk7XG5cbiAgICBjb25zdCB0eXBlQiA9IHR5cGU7IC8vL1xuXG4gICAgY29uc3QgdHlwZUFFcXVhbFRvVHlwZUIgPSB0eXBlQS5pc0VxdWFsVG8odHlwZUIpLFxuICAgICAgICAgIHR5cGVNYXRjaGVzID0gdHlwZUFFcXVhbFRvVHlwZUI7ICAvLy9cblxuICAgIHJldHVybiB0eXBlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgdGVybUEgPSB0ZXJtLCAvLy9cbiAgICAgICAgICB0ZXJtTWF0Y2hlcyA9IHRoaXMudGVybXMuc29tZSgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybUIgPSB0ZXJtLCAvLy9cbiAgICAgICAgICAgICAgICAgIHRlcm1BTWF0Y2hlc1Rlcm1CID0gdGVybUEubWF0Y2godGVybUIpO1xuXG4gICAgICAgICAgICBpZiAodGVybUFNYXRjaGVzVGVybUIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gdGVybU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3QgdGVybU5vZGVBID0gdGVybU5vZGUsIC8vL1xuICAgICAgICAgIHRlcm1Ob2RlTWF0Y2hlcyA9IHRoaXMudGVybXMuc29tZSgodGVybSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICAgIHRlcm1Ob2RlQiA9IHRlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHRlcm1Ob2RlQU1hdGNoZXNUZXJtQiA9IHRlcm1Ob2RlQS5tYXRjaCh0ZXJtTm9kZUIpO1xuXG4gICAgICAgICAgICBpZiAodGVybU5vZGVBTWF0Y2hlc1Rlcm1CKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlcm1Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoVGVybXModGVybXMpIHtcbiAgICBjb25zdCB0ZXJtc01hdGNoID0gdGVybXMuZXZlcnkoKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1NYXRjaGVzID0gdGhpcy5tYXRjaFRlcm0odGVybSk7XG5cbiAgICAgIGlmICh0ZXJtTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHRlcm1zTWF0Y2g7XG4gIH1cblxuICBtYXRjaFRlcm1Ob2Rlcyh0ZXJtTm9kZXMpIHtcbiAgICBjb25zdCB0ZXJtTm9kZXNNYXRjaCA9IHRlcm1Ob2Rlcy5ldmVyeSgodGVybU5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgIGlmICh0ZXJtTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiB0ZXJtTm9kZXNNYXRjaDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBsZWZ0VGVybSA9IGVxdWFsaXR5LmdldExlZnRUZXJtKCksXG4gICAgICAgICAgcmlnaHRUZXJtID0gZXF1YWxpdHkuZ2V0UmlnaHRUZXJtKCksXG4gICAgICAgICAgdGVybXMgPSBbXG4gICAgICAgICAgICBsZWZ0VGVybSxcbiAgICAgICAgICAgIHJpZ2h0VGVybVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKHRlcm1zKTtcblxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db2xsZWN0aW9ucyhjb2xsZWN0aW9uQSwgY29sbGVjdGlvbkIpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uQVRlcm1zID0gY29sbGVjdGlvbkEuZ2V0VGVybXMoKSxcbiAgICAgICAgICBjb2xsZWN0aW9uQlRlcm1zID0gY29sbGVjdGlvbkIuZ2V0VGVybXMoKSxcbiAgICAgICAgICB0ZXJtcyA9IFtcbiAgICAgICAgICAgIC4uLmNvbGxlY3Rpb25BVGVybXMsXG4gICAgICAgICAgICAuLi5jb2xsZWN0aW9uQlRlcm1zXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24odGVybXMpO1xuXG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVybVR5cGVGcm9tVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtVHlwZTtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZU5vZGVRdWVyeSh0ZXJtTm9kZSk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHZhcmlhYmxlVHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICAgIHRlcm1UeXBlID0gdmFyaWFibGVUeXBlOyAgLy8vXG4gIH0gZWxzZSB7XG4gICAgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtVHlwZTtcbn0iXSwibmFtZXMiOlsiQ29sbGVjdGlvbiIsInZhcmlhYmxlTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidGVybXMiLCJnZXRUZXJtcyIsInNldFRlcm1zIiwiYWRkVGVybSIsInRlcm0iLCJwdXNoIiwiZ2V0VHlwZSIsImNvbnRleHQiLCJ0eXBlIiwicmVkdWNlIiwidGVybVR5cGUiLCJ0ZXJtVHlwZUZyb21UZXJtIiwidGVybVR5cGVTdWJUeXBlT2ZUeXBlIiwiaXNTdWJUeXBlT2YiLCJtYXRjaFR5cGUiLCJ0eXBlQSIsInR5cGVCIiwidHlwZUFFcXVhbFRvVHlwZUIiLCJpc0VxdWFsVG8iLCJ0eXBlTWF0Y2hlcyIsIm1hdGNoVGVybSIsInRlcm1BIiwidGVybU1hdGNoZXMiLCJzb21lIiwidGVybUIiLCJ0ZXJtQU1hdGNoZXNUZXJtQiIsIm1hdGNoIiwibWF0Y2hUZXJtTm9kZSIsInRlcm1Ob2RlIiwidGVybU5vZGVBIiwidGVybU5vZGVNYXRjaGVzIiwiZ2V0Tm9kZSIsInRlcm1Ob2RlQiIsInRlcm1Ob2RlQU1hdGNoZXNUZXJtQiIsIm1hdGNoVGVybXMiLCJ0ZXJtc01hdGNoIiwiZXZlcnkiLCJtYXRjaFRlcm1Ob2RlcyIsInRlcm1Ob2RlcyIsInRlcm1Ob2Rlc01hdGNoIiwiZnJvbUVxdWFsaXR5IiwiZXF1YWxpdHkiLCJsZWZ0VGVybSIsImdldExlZnRUZXJtIiwicmlnaHRUZXJtIiwiZ2V0UmlnaHRUZXJtIiwiY29sbGVjdGlvbiIsImZyb21Db2xsZWN0aW9ucyIsImNvbGxlY3Rpb25BIiwiY29sbGVjdGlvbkIiLCJjb2xsZWN0aW9uQVRlcm1zIiwiY29sbGVjdGlvbkJUZXJtcyIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZVR5cGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBTXFCQTs7O3FCQUpLOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFMUIsSUFBTUMsb0JBQW9CQyxJQUFBQSxnQkFBUyxFQUFDO0FBRXJCLElBQUEsQUFBTUYsMkJBQUQsQUFBTDthQUFNQSxXQUNQRyxLQUFLO2dDQURFSDtRQUVqQixJQUFJLENBQUNHLEtBQUssR0FBR0E7O2tCQUZJSDs7WUFLbkJJLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0QsS0FBSztZQUNuQjs7O1lBRUFF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
@@ -1,121 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- areTermNodesEqual: function() {
13
- return areTermNodesEqual;
14
- },
15
- findCollectionByTerm: function() {
16
- return findCollectionByTerm;
17
- },
18
- findCollectionByType: function() {
19
- return findCollectionByType;
20
- },
21
- mergeCollections: function() {
22
- return mergeCollections;
23
- }
24
- });
25
- var _array = require("../utilities/array");
26
- function _array_like_to_array(arr, len) {
27
- if (len == null || len > arr.length) len = arr.length;
28
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
29
- return arr2;
30
- }
31
- function _array_without_holes(arr) {
32
- if (Array.isArray(arr)) return _array_like_to_array(arr);
33
- }
34
- function _iterable_to_array(iter) {
35
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
36
- }
37
- function _non_iterable_spread() {
38
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
39
- }
40
- function _to_consumable_array(arr) {
41
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
42
- }
43
- function _unsupported_iterable_to_array(o, minLen) {
44
- if (!o) return;
45
- if (typeof o === "string") return _array_like_to_array(o, minLen);
46
- var n = Object.prototype.toString.call(o).slice(8, -1);
47
- if (n === "Object" && o.constructor) n = o.constructor.name;
48
- if (n === "Map" || n === "Set") return Array.from(n);
49
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
50
- }
51
- function areTermNodesEqual(leftTermNode, rightTermNode, collections) {
52
- var termNodesEqual;
53
- var leftTermNodeMatchesRightTermNode = leftTermNode.match(rightTermNode);
54
- if (leftTermNodeMatchesRightTermNode) {
55
- termNodesEqual = true;
56
- } else {
57
- var termNodes = [
58
- leftTermNode,
59
- rightTermNode
60
- ], collection = findCollectionByTermNodes(collections, termNodes);
61
- termNodesEqual = collection !== null;
62
- }
63
- return termNodesEqual;
64
- }
65
- function mergeCollections(collectionsA, collectionsB, localContext) {
66
- var typesA = typesFromCollections(collectionsA, localContext), typesB = typesFromCollections(collectionsB, localContext), types = _to_consumable_array(typesA).concat(_to_consumable_array(typesB));
67
- (0, _array.compress)(types, function(typeA, typeB) {
68
- if (typeA === typeB) {
69
- return true;
70
- }
71
- });
72
- var collections = types.map(function(type) {
73
- var collection;
74
- var collectionA = findCollectionByType(collectionsA, type, localContext), collectionB = findCollectionByType(collectionsB, type, localContext);
75
- if (collectionA !== null && collectionB !== null) {
76
- collection = Collection.fromCollections(collectionA, collectionB);
77
- } else if (collectionA !== null) {
78
- collection = collectionA; ///
79
- } else if (collectionB !== null) {
80
- collection = collectionB; ///
81
- }
82
- return collection;
83
- });
84
- return collections;
85
- }
86
- function findCollectionByType(collections, type, localContext) {
87
- var collection = collections.find(function(collection) {
88
- var collectionMatchesType = collection.matchType(type, localContext);
89
- if (collectionMatchesType) {
90
- return true;
91
- }
92
- }) || null;
93
- return collection;
94
- }
95
- function findCollectionByTerm(collections, term) {
96
- var collection = collections.find(function(collection) {
97
- var collectionMatchesTerm = collection.matchTerm(term);
98
- if (collectionMatchesTerm) {
99
- return true;
100
- }
101
- }) || null;
102
- return collection;
103
- }
104
- function findCollectionByTermNodes(collections, termNodes) {
105
- var collection = collections.find(function(collection) {
106
- var collectionMatchesTerms = collection.matchTermNodes(termNodes);
107
- if (collectionMatchesTerms) {
108
- return true;
109
- }
110
- }) || null;
111
- return collection;
112
- }
113
- function typesFromCollections(collections, localContext) {
114
- var types = collections.map(function(collection) {
115
- var type = collection.getType(localContext);
116
- return type;
117
- });
118
- return types;
119
- }
120
-
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29sbGVjdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY29tcHJlc3MgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhcmVUZXJtTm9kZXNFcXVhbChsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUsIGNvbGxlY3Rpb25zKSB7XG4gIGxldCB0ZXJtTm9kZXNFcXVhbDtcblxuICBjb25zdCBsZWZ0VGVybU5vZGVNYXRjaGVzUmlnaHRUZXJtTm9kZSA9IGxlZnRUZXJtTm9kZS5tYXRjaChyaWdodFRlcm1Ob2RlKTtcblxuICBpZiAobGVmdFRlcm1Ob2RlTWF0Y2hlc1JpZ2h0VGVybU5vZGUpIHtcbiAgICB0ZXJtTm9kZXNFcXVhbCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdGVybU5vZGVzID0gW1xuICAgICAgICAgICAgbGVmdFRlcm1Ob2RlLFxuICAgICAgICAgICAgcmlnaHRUZXJtTm9kZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29sbGVjdGlvbiA9IGZpbmRDb2xsZWN0aW9uQnlUZXJtTm9kZXMoY29sbGVjdGlvbnMsIHRlcm1Ob2Rlcyk7XG5cbiAgICB0ZXJtTm9kZXNFcXVhbCA9IChjb2xsZWN0aW9uICE9PSBudWxsKTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtTm9kZXNFcXVhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ29sbGVjdGlvbnMoY29sbGVjdGlvbnNBLCBjb2xsZWN0aW9uc0IsIGxvY2FsQ29udGV4dCkge1xuICBjb25zdCB0eXBlc0EgPSB0eXBlc0Zyb21Db2xsZWN0aW9ucyhjb2xsZWN0aW9uc0EsIGxvY2FsQ29udGV4dCksXG4gICAgICAgIHR5cGVzQiA9IHR5cGVzRnJvbUNvbGxlY3Rpb25zKGNvbGxlY3Rpb25zQiwgbG9jYWxDb250ZXh0KSxcbiAgICAgICAgdHlwZXMgPSBbXG4gICAgICAgICAgLi4udHlwZXNBLFxuICAgICAgICAgIC4uLnR5cGVzQlxuICAgICAgICBdO1xuXG4gIGNvbXByZXNzKHR5cGVzLCAodHlwZUEsIHR5cGVCKSA9PiB7XG4gICAgaWYgKHR5cGVBID09PSB0eXBlQikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBjb2xsZWN0aW9ucyA9IHR5cGVzLm1hcCgodHlwZSkgPT4ge1xuICAgIGxldCBjb2xsZWN0aW9uO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbkEgPSBmaW5kQ29sbGVjdGlvbkJ5VHlwZShjb2xsZWN0aW9uc0EsIHR5cGUsIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgY29sbGVjdGlvbkIgPSBmaW5kQ29sbGVjdGlvbkJ5VHlwZShjb2xsZWN0aW9uc0IsIHR5cGUsIGxvY2FsQ29udGV4dCk7XG5cbiAgICBpZiAoKGNvbGxlY3Rpb25BICE9PSBudWxsKSAmJiAoY29sbGVjdGlvbkIgIT09IG51bGwpKSB7XG4gICAgICBjb2xsZWN0aW9uID0gQ29sbGVjdGlvbi5mcm9tQ29sbGVjdGlvbnMoY29sbGVjdGlvbkEsIGNvbGxlY3Rpb25CKTtcbiAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25BICE9PSBudWxsKSB7XG4gICAgICBjb2xsZWN0aW9uID0gY29sbGVjdGlvbkE7IC8vL1xuICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbkIgIT09IG51bGwpIHtcbiAgICAgIGNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uQjsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH0pO1xuXG4gIHJldHVybiBjb2xsZWN0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb2xsZWN0aW9uQnlUeXBlKGNvbGxlY3Rpb25zLCB0eXBlLCBsb2NhbENvbnRleHQpIHtcbiAgY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb25zLmZpbmQoKGNvbGxlY3Rpb24pID0+IHtcbiAgICBjb25zdCBjb2xsZWN0aW9uTWF0Y2hlc1R5cGUgPSBjb2xsZWN0aW9uLm1hdGNoVHlwZSh0eXBlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgaWYgKGNvbGxlY3Rpb25NYXRjaGVzVHlwZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KSB8fCBudWxsO1xuXG4gIHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZENvbGxlY3Rpb25CeVRlcm0oY29sbGVjdGlvbnMsIHRlcm0pIHtcbiAgY29uc3QgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb25zLmZpbmQoKGNvbGxlY3Rpb24pID0+IHtcbiAgICBjb25zdCBjb2xsZWN0aW9uTWF0Y2hlc1Rlcm0gPSBjb2xsZWN0aW9uLm1hdGNoVGVybSh0ZXJtKTtcblxuICAgIGlmIChjb2xsZWN0aW9uTWF0Y2hlc1Rlcm0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSkgfHwgbnVsbDtcblxuICByZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gZmluZENvbGxlY3Rpb25CeVRlcm1Ob2Rlcyhjb2xsZWN0aW9ucywgdGVybU5vZGVzKSB7XG4gIGNvbnN0IGNvbGxlY3Rpb24gPSBjb2xsZWN0aW9ucy5maW5kKChjb2xsZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgY29sbGVjdGlvbk1hdGNoZXNUZXJtcyA9IGNvbGxlY3Rpb24ubWF0Y2hUZXJtTm9kZXModGVybU5vZGVzKTtcblxuICAgIGlmIChjb2xsZWN0aW9uTWF0Y2hlc1Rlcm1zKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pIHx8IG51bGw7XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHR5cGVzRnJvbUNvbGxlY3Rpb25zKGNvbGxlY3Rpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgY29uc3QgdHlwZXMgPSBjb2xsZWN0aW9ucy5tYXAoKGNvbGxlY3Rpb24pID0+IHtcbiAgICBjb25zdCB0eXBlID0gY29sbGVjdGlvbi5nZXRUeXBlKGxvY2FsQ29udGV4dCk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuIl0sIm5hbWVzIjpbImFyZVRlcm1Ob2Rlc0VxdWFsIiwiZmluZENvbGxlY3Rpb25CeVRlcm0iLCJmaW5kQ29sbGVjdGlvbkJ5VHlwZSIsIm1lcmdlQ29sbGVjdGlvbnMiLCJsZWZ0VGVybU5vZGUiLCJyaWdodFRlcm1Ob2RlIiwiY29sbGVjdGlvbnMiLCJ0ZXJtTm9kZXNFcXVhbCIsImxlZnRUZXJtTm9kZU1hdGNoZXNSaWdodFRlcm1Ob2RlIiwibWF0Y2giLCJ0ZXJtTm9kZXMiLCJjb2xsZWN0aW9uIiwiZmluZENvbGxlY3Rpb25CeVRlcm1Ob2RlcyIsImNvbGxlY3Rpb25zQSIsImNvbGxlY3Rpb25zQiIsImxvY2FsQ29udGV4dCIsInR5cGVzQSIsInR5cGVzRnJvbUNvbGxlY3Rpb25zIiwidHlwZXNCIiwidHlwZXMiLCJjb21wcmVzcyIsInR5cGVBIiwidHlwZUIiLCJtYXAiLCJ0eXBlIiwiY29sbGVjdGlvbkEiLCJjb2xsZWN0aW9uQiIsIkNvbGxlY3Rpb24iLCJmcm9tQ29sbGVjdGlvbnMiLCJmaW5kIiwiY29sbGVjdGlvbk1hdGNoZXNUeXBlIiwibWF0Y2hUeXBlIiwidGVybSIsImNvbGxlY3Rpb25NYXRjaGVzVGVybSIsIm1hdGNoVGVybSIsImNvbGxlY3Rpb25NYXRjaGVzVGVybXMiLCJtYXRjaFRlcm1Ob2RlcyIsImdldFR5cGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQUlnQkEsaUJBQWlCO2VBQWpCQTs7SUFrRUFDLG9CQUFvQjtlQUFwQkE7O0lBWkFDLG9CQUFvQjtlQUFwQkE7O0lBbENBQyxnQkFBZ0I7ZUFBaEJBOzs7cUJBdEJTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsQixTQUFTSCxrQkFBa0JJLFlBQVksRUFBRUMsYUFBYSxFQUFFQyxXQUFXO0lBQ3hFLElBQUlDO0lBRUosSUFBTUMsbUNBQW1DSixhQUFhSyxLQUFLLENBQUNKO0lBRTVELElBQUlHLGtDQUFrQztRQUNwQ0QsaUJBQWlCO0lBQ25CLE9BQU87UUFDTCxJQUFNRyxZQUFZO1lBQ1ZOO1lBQ0FDO1NBQ0QsRUFDRE0sYUFBYUMsMEJBQTBCTixhQUFhSTtRQUUxREgsaUJBQWtCSSxlQUFlO0lBQ25DO0lBRUEsT0FBT0o7QUFDVDtBQUVPLFNBQVNKLGlCQUFpQlUsWUFBWSxFQUFFQyxZQUFZLEVBQUVDLFlBQVk7SUFDdkUsSUFBTUMsU0FBU0MscUJBQXFCSixjQUFjRSxlQUM1Q0csU0FBU0QscUJBQXFCSCxjQUFjQyxlQUM1Q0ksUUFBUSxBQUNOLHFCQUFHSCxlQUNILHFCQUFHRTtJQUdYRSxJQUFBQSxlQUFRLEVBQUNELE9BQU8sU0FBQ0UsT0FBT0M7UUFDdEIsSUFBSUQsVUFBVUMsT0FBTztZQUNuQixPQUFPO1FBQ1Q7SUFDRjtJQUVBLElBQU1oQixjQUFjYSxNQUFNSSxHQUFHLENBQUMsU0FBQ0M7UUFDN0IsSUFBSWI7UUFFSixJQUFNYyxjQUFjdkIscUJBQXFCVyxjQUFjVyxNQUFNVCxlQUN2RFcsY0FBY3hCLHFCQUFxQlksY0FBY1UsTUFBTVQ7UUFFN0QsSUFBSSxBQUFDVSxnQkFBZ0IsUUFBVUMsZ0JBQWdCLE1BQU87WUFDcERmLGFBQWFnQixXQUFXQyxlQUFlLENBQUNILGFBQWFDO1FBQ3ZELE9BQU8sSUFBSUQsZ0JBQWdCLE1BQU07WUFDL0JkLGFBQWFjLGFBQWEsR0FBRztRQUMvQixPQUFPLElBQUlDLGdCQUFnQixNQUFNO1lBQy9CZixhQUFhZSxhQUFhLEdBQUc7UUFDL0I7UUFFQSxPQUFPZjtJQUNUO0lBRUEsT0FBT0w7QUFDVDtBQUVPLFNBQVNKLHFCQUFxQkksV0FBVyxFQUFFa0IsSUFBSSxFQUFFVCxZQUFZO0lBQ2xFLElBQU1KLGFBQWFMLFlBQVl1QixJQUFJLENBQUMsU0FBQ2xCO1FBQ25DLElBQU1tQix3QkFBd0JuQixXQUFXb0IsU0FBUyxDQUFDUCxNQUFNVDtRQUV6RCxJQUFJZSx1QkFBdUI7WUFDekIsT0FBTztRQUNUO0lBQ0YsTUFBTTtJQUVOLE9BQU9uQjtBQUNUO0FBRU8sU0FBU1YscUJBQXFCSyxXQUFXLEVBQUUwQixJQUFJO0lBQ3BELElBQU1yQixhQUFhTCxZQUFZdUIsSUFBSSxDQUFDLFNBQUNsQjtRQUNuQyxJQUFNc0Isd0JBQXdCdEIsV0FBV3VCLFNBQVMsQ0FBQ0Y7UUFFbkQsSUFBSUMsdUJBQXVCO1lBQ3pCLE9BQU87UUFDVDtJQUNGLE1BQU07SUFFTixPQUFPdEI7QUFDVDtBQUVBLFNBQVNDLDBCQUEwQk4sV0FBVyxFQUFFSSxTQUFTO0lBQ3ZELElBQU1DLGFBQWFMLFlBQVl1QixJQUFJLENBQUMsU0FBQ2xCO1FBQ25DLElBQU13Qix5QkFBeUJ4QixXQUFXeUIsY0FBYyxDQUFDMUI7UUFFekQsSUFBSXlCLHdCQUF3QjtZQUMxQixPQUFPO1FBQ1Q7SUFDRixNQUFNO0lBRU4sT0FBT3hCO0FBQ1Q7QUFFQSxTQUFTTSxxQkFBcUJYLFdBQVcsRUFBRVMsWUFBWTtJQUNyRCxJQUFNSSxRQUFRYixZQUFZaUIsR0FBRyxDQUFDLFNBQUNaO1FBQzdCLElBQU1hLE9BQU9iLFdBQVcwQixPQUFPLENBQUN0QjtRQUVoQyxPQUFPUztJQUNUO0lBRUEsT0FBT0w7QUFDVCJ9