occam-verify-cli 1.0.444 → 1.0.457

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 (173) hide show
  1. package/lib/constants.js +1 -5
  2. package/lib/context/file.js +54 -82
  3. package/lib/context/fragment.js +77 -0
  4. package/lib/context/release.js +5 -9
  5. package/lib/context/scoped.js +314 -0
  6. package/lib/context/transient.js +371 -0
  7. package/lib/element/assumption.js +71 -84
  8. package/lib/element/combinator/bracketed.js +1 -10
  9. package/lib/element/conclusion.js +11 -8
  10. package/lib/element/constructor/bracketed.js +1 -10
  11. package/lib/element/declaration/combinator.js +1 -2
  12. package/lib/element/declaration/metavariable.js +3 -3
  13. package/lib/element/declaration/variable.js +3 -3
  14. package/lib/element/deduction.js +18 -13
  15. package/lib/element/derivation.js +14 -14
  16. package/lib/element/frame.js +40 -46
  17. package/lib/element/hypothesis.js +14 -55
  18. package/lib/element/judgement.js +35 -56
  19. package/lib/element/metaType.js +5 -4
  20. package/lib/element/metavariable.js +14 -10
  21. package/lib/element/proof.js +10 -10
  22. package/lib/element/proofAssertion/premise.js +308 -0
  23. package/lib/element/proofAssertion/step.js +305 -0
  24. package/lib/element/proofAssertion/supposition.js +322 -0
  25. package/lib/element/proofAssertion.js +199 -0
  26. package/lib/element/reference.js +28 -25
  27. package/lib/element/rule.js +29 -29
  28. package/lib/element/section.js +4 -4
  29. package/lib/element/statement.js +9 -14
  30. package/lib/element/subDerivation.js +14 -14
  31. package/lib/element/subproof.js +14 -14
  32. package/lib/element/substitution/frame.js +7 -7
  33. package/lib/element/substitution/statement.js +15 -39
  34. package/lib/element/substitution.js +5 -5
  35. package/lib/element/term.js +12 -10
  36. package/lib/element/topLevelAssertion/axiom.js +329 -0
  37. package/lib/element/{conjecture.js → topLevelAssertion/conjecture.js} +7 -7
  38. package/lib/element/{lemma.js → topLevelAssertion/lemma.js} +6 -6
  39. package/lib/element/{theorem.js → topLevelAssertion/theorem.js} +7 -7
  40. package/lib/element/topLevelAssertion.js +427 -0
  41. package/lib/element/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +7 -7
  42. package/lib/element/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +7 -7
  43. package/lib/element/topLevelMetaAssertion.js +289 -0
  44. package/lib/element/type.js +4 -4
  45. package/lib/element/variable.js +20 -20
  46. package/lib/metaTypes.js +33 -19
  47. package/lib/node/proofAssertion/premise.js +116 -0
  48. package/lib/node/proofAssertion/step.js +152 -0
  49. package/lib/node/proofAssertion/supposition.js +116 -0
  50. package/lib/node/{premise.js → proofAssertion.js} +11 -18
  51. package/lib/node/statement.js +2 -2
  52. package/lib/node/subDerivation.js +1 -8
  53. package/lib/node/subproof.js +1 -8
  54. package/lib/node/substitution/statement.js +2 -2
  55. package/lib/node/{axiom.js → topLevelAssertion/axiom.js} +7 -7
  56. package/lib/node/{conjecture.js → topLevelAssertion/conjecture.js} +7 -7
  57. package/lib/node/{lemma.js → topLevelAssertion/lemma.js} +7 -7
  58. package/lib/node/{theorem.js → topLevelAssertion/theorem.js} +7 -7
  59. package/lib/node/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +9 -9
  60. package/lib/node/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +7 -7
  61. package/lib/node/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +7 -7
  62. package/lib/node/{metaLemmaMetaTheorem.js → topLevelMetaAssertion.js} +9 -9
  63. package/lib/nonTerminalNodeMap.js +13 -13
  64. package/lib/preamble.js +10 -10
  65. package/lib/process/instantiate.js +6 -9
  66. package/lib/process/unify.js +7 -6
  67. package/lib/types.js +3 -3
  68. package/lib/utilities/bnf.js +5 -5
  69. package/lib/utilities/brackets.js +6 -11
  70. package/lib/utilities/context.js +28 -0
  71. package/lib/utilities/element.js +101 -99
  72. package/lib/utilities/fragment.js +23 -0
  73. package/lib/utilities/instance.js +12 -21
  74. package/lib/utilities/json.js +3 -2
  75. package/lib/utilities/string.js +44 -23
  76. package/lib/utilities/unification.js +36 -36
  77. package/lib/utilities/validation.js +22 -25
  78. package/package.json +6 -6
  79. package/src/constants.js +0 -1
  80. package/src/context/file.js +51 -58
  81. package/src/context/fragment.js +38 -0
  82. package/src/context/release.js +6 -11
  83. package/src/context/{local.js → scoped.js} +35 -127
  84. package/src/context/{temporary.js → transient.js} +9 -131
  85. package/src/element/assumption.js +69 -85
  86. package/src/element/combinator/bracketed.js +0 -7
  87. package/src/element/conclusion.js +14 -10
  88. package/src/element/constructor/bracketed.js +0 -7
  89. package/src/element/declaration/combinator.js +0 -1
  90. package/src/element/declaration/metavariable.js +2 -2
  91. package/src/element/declaration/variable.js +5 -5
  92. package/src/element/deduction.js +22 -15
  93. package/src/element/derivation.js +12 -12
  94. package/src/element/frame.js +36 -48
  95. package/src/element/hypothesis.js +14 -16
  96. package/src/element/judgement.js +33 -58
  97. package/src/element/metaType.js +4 -4
  98. package/src/element/metavariable.js +17 -10
  99. package/src/element/proof.js +9 -9
  100. package/src/element/{premise.js → proofAssertion/premise.js} +107 -75
  101. package/src/element/{step.js → proofAssertion/step.js} +43 -89
  102. package/src/element/{supposition.js → proofAssertion/supposition.js} +89 -88
  103. package/src/element/proofAssertion.js +69 -0
  104. package/src/element/reference.js +27 -23
  105. package/src/element/rule.js +25 -25
  106. package/src/element/section.js +4 -4
  107. package/src/element/statement.js +8 -15
  108. package/src/element/subDerivation.js +12 -12
  109. package/src/element/subproof.js +10 -10
  110. package/src/element/substitution/frame.js +10 -13
  111. package/src/element/substitution/statement.js +20 -52
  112. package/src/element/substitution.js +3 -3
  113. package/src/element/term.js +10 -9
  114. package/src/element/{axiom.js → topLevelAssertion/axiom.js} +41 -41
  115. package/src/element/{conjecture.js → topLevelAssertion/conjecture.js} +4 -4
  116. package/src/element/{lemma.js → topLevelAssertion/lemma.js} +3 -3
  117. package/src/element/{theorem.js → topLevelAssertion/theorem.js} +4 -4
  118. package/src/element/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +30 -49
  119. package/src/element/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +4 -4
  120. package/src/element/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +4 -4
  121. package/src/element/{metaLemmaMetatheorem.js → topLevelMetaAssertion.js} +7 -72
  122. package/src/element/type.js +2 -4
  123. package/src/element/variable.js +17 -17
  124. package/src/metaTypes.js +42 -13
  125. package/src/node/proofAssertion/premise.js +16 -0
  126. package/src/node/{step.js → proofAssertion/step.js} +4 -18
  127. package/src/node/proofAssertion/supposition.js +16 -0
  128. package/src/node/proofAssertion.js +23 -0
  129. package/src/node/statement.js +1 -1
  130. package/src/node/subDerivation.js +0 -7
  131. package/src/node/subproof.js +0 -7
  132. package/src/node/substitution/statement.js +1 -1
  133. package/src/node/topLevelAssertion/axiom.js +13 -0
  134. package/src/node/topLevelAssertion/conjecture.js +13 -0
  135. package/src/node/topLevelAssertion/lemma.js +13 -0
  136. package/src/node/topLevelAssertion/theorem.js +13 -0
  137. package/src/node/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +1 -1
  138. package/src/node/topLevelMetaAssertion/metaLemma.js +13 -0
  139. package/src/node/topLevelMetaAssertion/metatheorem.js +13 -0
  140. package/src/node/{metaLemmaMetaTheorem.js → topLevelMetaAssertion.js} +1 -1
  141. package/src/nonTerminalNodeMap.js +12 -12
  142. package/src/preamble.js +9 -9
  143. package/src/process/instantiate.js +31 -32
  144. package/src/process/unify.js +6 -5
  145. package/src/types.js +4 -2
  146. package/src/utilities/bnf.js +3 -2
  147. package/src/utilities/brackets.js +5 -8
  148. package/src/utilities/context.js +20 -0
  149. package/src/utilities/element.js +169 -162
  150. package/src/utilities/fragment.js +11 -0
  151. package/src/utilities/instance.js +19 -24
  152. package/src/utilities/json.js +3 -1
  153. package/src/utilities/string.js +57 -32
  154. package/src/utilities/unification.js +39 -39
  155. package/src/utilities/validation.js +26 -35
  156. package/lib/context/local.js +0 -605
  157. package/lib/context/temporary.js +0 -752
  158. package/lib/element/axiom.js +0 -329
  159. package/lib/element/axiomLemmaTheoremConjecture.js +0 -434
  160. package/lib/element/metaLemmaMetatheorem.js +0 -322
  161. package/lib/element/premise.js +0 -380
  162. package/lib/element/step.js +0 -390
  163. package/lib/element/supposition.js +0 -410
  164. package/lib/node/step.js +0 -166
  165. package/lib/node/supposition.js +0 -130
  166. package/src/node/axiom.js +0 -13
  167. package/src/node/conjecture.js +0 -13
  168. package/src/node/lemma.js +0 -13
  169. package/src/node/metaLemma.js +0 -13
  170. package/src/node/metatheorem.js +0 -13
  171. package/src/node/premise.js +0 -30
  172. package/src/node/supposition.js +0 -30
  173. package/src/node/theorem.js +0 -13
@@ -1,752 +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 TemporaryContext;
9
- }
10
- });
11
- var _necessary = require("necessary");
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 extract = _necessary.arrayUtilities.extract, compress = _necessary.arrayUtilities.compress;
57
- var TemporaryContext = /*#__PURE__*/ function() {
58
- function TemporaryContext(context, terms, frames, statements, assertions, references, substitutions) {
59
- _class_call_check(this, TemporaryContext);
60
- this.context = context;
61
- this.terms = terms;
62
- this.frames = frames;
63
- this.statements = statements;
64
- this.assertions = assertions;
65
- this.references = references;
66
- this.substitutions = substitutions;
67
- }
68
- _create_class(TemporaryContext, [
69
- {
70
- key: "getContext",
71
- value: function getContext() {
72
- return this.context;
73
- }
74
- },
75
- {
76
- key: "getTerms",
77
- value: function getTerms() {
78
- return this.terms;
79
- }
80
- },
81
- {
82
- key: "getFrames",
83
- value: function getFrames() {
84
- return this.frames;
85
- }
86
- },
87
- {
88
- key: "getStatements",
89
- value: function getStatements() {
90
- return this.statements;
91
- }
92
- },
93
- {
94
- key: "getAssertions",
95
- value: function getAssertions() {
96
- return this.assertions;
97
- }
98
- },
99
- {
100
- key: "getReferences",
101
- value: function getReferences() {
102
- return this.references;
103
- }
104
- },
105
- {
106
- key: "getSubstitutions",
107
- value: function getSubstitutions() {
108
- return this.substitutions;
109
- }
110
- },
111
- {
112
- key: "addTerm",
113
- value: function addTerm(term) {
114
- var termA = term, context = this, termString = term.getString();
115
- extract(this.terms, function(term) {
116
- var termB = term, termAEqualToTermB = termA.isEqualTo(termB);
117
- if (termAEqualToTermB) {
118
- return true;
119
- }
120
- });
121
- context.trace("ADded the '".concat(termString, "' term to the context."));
122
- this.terms.push(term);
123
- }
124
- },
125
- {
126
- key: "addFrame",
127
- value: function addFrame(frame) {
128
- var frameA = frame, context = this, frameString = frame.getString();
129
- extract(this.frames, function(frame) {
130
- var frameB = frame, frameAEqualToFrameB = frameA.isEqualTo(frameB);
131
- if (frameAEqualToFrameB) {
132
- return true;
133
- }
134
- });
135
- context.trace("Added the '".concat(frameString, "' frame to the context."));
136
- this.frames.push(frame);
137
- }
138
- },
139
- {
140
- key: "addStatement",
141
- value: function addStatement(statement) {
142
- var context = this, statementA = statement, statementString = statement.getString();
143
- extract(this.statements, function(statement) {
144
- var statementB = statement, statementAEqualToFrameB = statementA.isEqualTo(statementB);
145
- if (statementAEqualToFrameB) {
146
- return true;
147
- }
148
- });
149
- context.trace("Added the '".concat(statementString, "' statement to the context."));
150
- this.statements.push(statement);
151
- }
152
- },
153
- {
154
- key: "addAssertion",
155
- value: function addAssertion(assertion) {
156
- var context = this, assertionA = assertion, assertionString = assertion.getString();
157
- extract(this.assertions, function(assertion) {
158
- var assertionB = assertion, assertionAEqualToAssertionB = assertionA.isEqualTo(assertionB);
159
- if (assertionAEqualToAssertionB) {
160
- return true;
161
- }
162
- });
163
- context.trace("Added the '".concat(assertionString, "' assertion to the context."));
164
- this.assertions.push(assertion);
165
- }
166
- },
167
- {
168
- key: "addReference",
169
- value: function addReference(reference) {
170
- var context = this, referenceA = reference, referenceString = reference.getString();
171
- extract(this.references, function(reference) {
172
- var referenceB = reference, referenceAEqualToReferenceB = referenceA.isEqualTo(referenceB);
173
- if (referenceAEqualToReferenceB) {
174
- return true;
175
- }
176
- });
177
- context.trace("Added the '".concat(referenceString, "' reference to the context."));
178
- this.references.push(reference);
179
- }
180
- },
181
- {
182
- key: "addSubstitution",
183
- value: function addSubstitution(substitution) {
184
- var context = this, substitutionA = substitution, substitutionString = substitution.getString();
185
- extract(this.substitutions, function(substitution) {
186
- var substitutionB = substitution, substituionAEqualToSubstitutionB = substitutionA.isEqualTo(substitutionB);
187
- if (substituionAEqualToSubstitutionB) {
188
- return true;
189
- }
190
- });
191
- context.trace("Added the '".concat(substitutionString, "' substitution to the context."));
192
- this.substitutions.push(substitution);
193
- }
194
- },
195
- {
196
- key: "findTermByTermNode",
197
- value: function findTermByTermNode(termNode) {
198
- var term = this.terms.find(function(term) {
199
- var termNodeMatches = term.matchNode(termNode);
200
- if (termNodeMatches) {
201
- return true;
202
- }
203
- }) || null;
204
- return term;
205
- }
206
- },
207
- {
208
- key: "findFrameByFrameNode",
209
- value: function findFrameByFrameNode(frameNode) {
210
- var frame = this.frames.find(function(frame) {
211
- var frameNodeMatches = frame.matchNode(frameNode);
212
- if (frameNodeMatches) {
213
- return true;
214
- }
215
- }) || null;
216
- return frame;
217
- }
218
- },
219
- {
220
- key: "findStatementByStatementNode",
221
- value: function findStatementByStatementNode(statementNode) {
222
- var statement = this.statements.find(function(statement) {
223
- var statementNodeMatches = statement.matchNode(statementNode);
224
- if (statementNodeMatches) {
225
- return true;
226
- }
227
- }) || null;
228
- return statement;
229
- }
230
- },
231
- {
232
- key: "findAssertionByAssertionNode",
233
- value: function findAssertionByAssertionNode(assertionNode) {
234
- var assertion = this.assertions.find(function(assertion) {
235
- var assertionNodeMatches = assertion.matchNode(assertionNode);
236
- if (assertionNodeMatches) {
237
- return true;
238
- }
239
- }) || null;
240
- return assertion;
241
- }
242
- },
243
- {
244
- key: "findReferenceByMetavariableNode",
245
- value: function findReferenceByMetavariableNode(metavariableNode) {
246
- var reference = this.references.find(function(reference) {
247
- var referenceMatcheMetavariableNode = reference.matchMetavariableNode(metavariableNode);
248
- if (referenceMatcheMetavariableNode) {
249
- return true;
250
- }
251
- }) || null;
252
- return reference;
253
- }
254
- },
255
- {
256
- key: "findSubstitutionBySubstitutionNode",
257
- value: function findSubstitutionBySubstitutionNode(substitutionNode) {
258
- var substitution = this.substitutions.find(function(substitution) {
259
- var substitutionNodeMatches = substitution.matchNode(substitutionNode);
260
- if (substitutionNodeMatches) {
261
- return true;
262
- }
263
- }) || null;
264
- return substitution;
265
- }
266
- },
267
- {
268
- key: "getVariables",
269
- value: function getVariables() {
270
- var nested = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
271
- return this.context.getVariables(nested);
272
- }
273
- },
274
- {
275
- key: "getJudgements",
276
- value: function getJudgements() {
277
- return this.context.getJudgements();
278
- }
279
- },
280
- {
281
- key: "getEquivalences",
282
- value: function getEquivalences() {
283
- return this.context.getEquivalences();
284
- }
285
- },
286
- {
287
- key: "getSteps",
288
- value: function getSteps() {
289
- return this.context.getSteps();
290
- }
291
- },
292
- {
293
- key: "getLastStep",
294
- value: function getLastStep() {
295
- return this.context.getLastStep();
296
- }
297
- },
298
- {
299
- key: "getStepsOrSubproofs",
300
- value: function getStepsOrSubproofs() {
301
- return this.context.getStepsOrSubproofs();
302
- }
303
- },
304
- {
305
- key: "getFilePath",
306
- value: function getFilePath() {
307
- return this.context.getFilePath();
308
- }
309
- },
310
- {
311
- key: "getLexer",
312
- value: function getLexer() {
313
- return this.context.getLexer();
314
- }
315
- },
316
- {
317
- key: "getParser",
318
- value: function getParser() {
319
- return this.context.getParser();
320
- }
321
- },
322
- {
323
- key: "getAxioms",
324
- value: function getAxioms() {
325
- return this.context.getAxioms();
326
- }
327
- },
328
- {
329
- key: "getLemmas",
330
- value: function getLemmas() {
331
- return this.context.getLemmas();
332
- }
333
- },
334
- {
335
- key: "getTheorems",
336
- value: function getTheorems() {
337
- return this.context.getTheorems();
338
- }
339
- },
340
- {
341
- key: "getConjectures",
342
- value: function getConjectures() {
343
- return this.context.getConjectures();
344
- }
345
- },
346
- {
347
- key: "getCombinators",
348
- value: function getCombinators() {
349
- return this.context.getCombinators();
350
- }
351
- },
352
- {
353
- key: "getConstructors",
354
- value: function getConstructors() {
355
- return this.context.getConstructors();
356
- }
357
- },
358
- {
359
- key: "getTypePrefix",
360
- value: function getTypePrefix() {
361
- return this.context.getTypePrefix();
362
- }
363
- },
364
- {
365
- key: "addAxiom",
366
- value: function addAxiom(axiom) {
367
- this.context.addAxiom(axiom);
368
- }
369
- },
370
- {
371
- key: "addLemma",
372
- value: function addLemma(lemma) {
373
- this.context.addLemma(lemma);
374
- }
375
- },
376
- {
377
- key: "addTheorem",
378
- value: function addTheorem(theorem) {
379
- this.context.addTheorem(theorem);
380
- }
381
- },
382
- {
383
- key: "addEquality",
384
- value: function addEquality(equality) {
385
- return this.context.addEquality(equality);
386
- }
387
- },
388
- {
389
- key: "addVariable",
390
- value: function addVariable(variable) {
391
- var nested = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
392
- return this.context.addVariable(variable, nested);
393
- }
394
- },
395
- {
396
- key: "addJudgement",
397
- value: function addJudgement(judgement) {
398
- return this.context.addJudgement(judgement);
399
- }
400
- },
401
- {
402
- key: "addStepOrSubproof",
403
- value: function addStepOrSubproof(stepOrSubproof) {
404
- this.context.addStepOrSubproof(stepOrSubproof);
405
- }
406
- },
407
- {
408
- key: "findProcedureByName",
409
- value: function findProcedureByName(name) {
410
- return this.context.findProcedureByName(name);
411
- }
412
- },
413
- {
414
- key: "findLabelByReference",
415
- value: function findLabelByReference(reference, context) {
416
- return this.context.findLabelByReference(reference, context);
417
- }
418
- },
419
- {
420
- key: "findRuleByReference",
421
- value: function findRuleByReference(reference) {
422
- return this.context.findRuleByReference(reference);
423
- }
424
- },
425
- {
426
- key: "findAxiomByReference",
427
- value: function findAxiomByReference(reference) {
428
- return this.context.findAxiomByReference(reference);
429
- }
430
- },
431
- {
432
- key: "findLemmaByReference",
433
- value: function findLemmaByReference(reference) {
434
- return this.context.findLemmaByReference(reference);
435
- }
436
- },
437
- {
438
- key: "findTheoremByReference",
439
- value: function findTheoremByReference(reference) {
440
- return this.context.findTheoremByReference(reference);
441
- }
442
- },
443
- {
444
- key: "findConjectureByReference",
445
- value: function findConjectureByReference(reference) {
446
- return this.context.findConjectureByReference(reference);
447
- }
448
- },
449
- {
450
- key: "findMetaLemmasByReference",
451
- value: function findMetaLemmasByReference(reference) {
452
- return this.context.findMetaLemmasByReference(reference);
453
- }
454
- },
455
- {
456
- key: "findMetatheoremsByReference",
457
- value: function findMetatheoremsByReference(reference) {
458
- return this.context.findMetatheoremsByReference(reference);
459
- }
460
- },
461
- {
462
- key: "findMetaLemmaMetatheoremByReference",
463
- value: function findMetaLemmaMetatheoremByReference(reference) {
464
- return this.context.findMetaLemmaMetatheoremByReference(reference);
465
- }
466
- },
467
- {
468
- key: "findMetaLemmaMetatheoremsByReference",
469
- value: function findMetaLemmaMetatheoremsByReference(reference) {
470
- return this.context.findMetaLemmaMetatheoremsByReference(reference);
471
- }
472
- },
473
- {
474
- key: "findVariableByVariableIdentifier",
475
- value: function findVariableByVariableIdentifier(variableIdentifier) {
476
- var nested = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
477
- return this.context.findVariableByVariableIdentifier(variableIdentifier, nested);
478
- }
479
- },
480
- {
481
- key: "findJudgementByMetavariable",
482
- value: function findJudgementByMetavariable(metavariable) {
483
- return this.context.findJudgementByMetavariable(metavariable);
484
- }
485
- },
486
- {
487
- key: "findEquivalenceByTerm",
488
- value: function findEquivalenceByTerm(term) {
489
- return this.context.findEquivalenceByTerm(term);
490
- }
491
- },
492
- {
493
- key: "findMetavariable",
494
- value: function findMetavariable(metavariable) {
495
- return this.context.findMetavariable(metavariable);
496
- }
497
- },
498
- {
499
- key: "findLabelByMetavariable",
500
- value: function findLabelByMetavariable(metavariable) {
501
- return this.context.findLabelByMetavariable(metavariable);
502
- }
503
- },
504
- {
505
- key: "findTypeByNominalTypeName",
506
- value: function findTypeByNominalTypeName(nominalTypeName) {
507
- return this.context.findTypeByNominalTypeName(nominalTypeName);
508
- }
509
- },
510
- {
511
- key: "findMetaTypeByMetaTypeName",
512
- value: function findMetaTypeByMetaTypeName(metaTypeName) {
513
- return this.context.findMetaTypeByMetaTypeName(metaTypeName);
514
- }
515
- },
516
- {
517
- key: "findMetavariableByMetavariableName",
518
- value: function findMetavariableByMetavariableName(metavariableName) {
519
- return this.context.findMetavariableByMetavariableName(metavariableName);
520
- }
521
- },
522
- {
523
- key: "isProcedurePresentByName",
524
- value: function isProcedurePresentByName(name) {
525
- return this.context.isProcedurePresentByName(name);
526
- }
527
- },
528
- {
529
- key: "isLabelPresentByReference",
530
- value: function isLabelPresentByReference(reference) {
531
- return this.context.isLabelPresentByReference(reference);
532
- }
533
- },
534
- {
535
- key: "isMetavariablePresentByReference",
536
- value: function isMetavariablePresentByReference(reference) {
537
- return this.context.isMetavariablePresentByReference(reference);
538
- }
539
- },
540
- {
541
- key: "isMetaLemmaMetatheoremPresentByReference",
542
- value: function isMetaLemmaMetatheoremPresentByReference(reference) {
543
- return this.context.isMetaLemmaMetatheoremPresentByReference(reference);
544
- }
545
- },
546
- {
547
- key: "findAxiomLemmaTheoremOrConjectureByReference",
548
- value: function findAxiomLemmaTheoremOrConjectureByReference(reference) {
549
- return this.context.findAxiomLemmaTheoremOrConjectureByReference(reference);
550
- }
551
- },
552
- {
553
- key: "isMetavariablePresent",
554
- value: function isMetavariablePresent(metavariable) {
555
- return this.context.isMetavariablePresent(metavariable);
556
- }
557
- },
558
- {
559
- key: "isTypePresentByTypeName",
560
- value: function isTypePresentByTypeName(typeName) {
561
- var includeRelease = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true, includeDependencies = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true;
562
- return this.context.isTypePresentByTypeName(typeName, includeRelease, includeDependencies);
563
- }
564
- },
565
- {
566
- key: "isTypePresentByNominalTypeName",
567
- value: function isTypePresentByNominalTypeName(nominalTypeName) {
568
- return this.context.isTypePresentByNominalTypeName(nominalTypeName);
569
- }
570
- },
571
- {
572
- key: "isTypePresentByPrefixedTypeName",
573
- value: function isTypePresentByPrefixedTypeName(prefixedTypeName) {
574
- return this.context.isTypePresentByPrefixedTypeName(prefixedTypeName);
575
- }
576
- },
577
- {
578
- key: "isTypePrefixPresentByTypePrefixName",
579
- value: function isTypePrefixPresentByTypePrefixName(typePrefixName) {
580
- return this.context.isTypePrefixPresentByTypePrefixName(typePrefixName);
581
- }
582
- },
583
- {
584
- key: "isVariablePresentByVariableIdentifier",
585
- value: function isVariablePresentByVariableIdentifier(variableIdentifier) {
586
- var nested = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
587
- return this.context.findVariableByVariableIdentifier(variableIdentifier, nested);
588
- }
589
- },
590
- {
591
- key: "isLabelPresentByMetavariableName",
592
- value: function isLabelPresentByMetavariableName(metavariableName) {
593
- return this.context.isLabelPresentByMetavariableName(metavariableName);
594
- }
595
- },
596
- {
597
- key: "isLabelPresentByMetavariable",
598
- value: function isLabelPresentByMetavariable(metavariable) {
599
- return this.context.isLabelPresentByMetavariable(metavariable);
600
- }
601
- },
602
- {
603
- key: "isMetavariablePresentByMetavariableName",
604
- value: function isMetavariablePresentByMetavariableName(metavariableNode) {
605
- return this.context.isMetavariablePresentByMetavariableName(metavariableNode);
606
- }
607
- },
608
- {
609
- key: "isJudgementPresentByMetavariable",
610
- value: function isJudgementPresentByMetavariable(metavariable) {
611
- return this.context.isJudgementPresentByMetavariable(metavariable);
612
- }
613
- },
614
- {
615
- key: "isTermGrounded",
616
- value: function isTermGrounded(term) {
617
- return this.context.isTermGrounded(term);
618
- }
619
- },
620
- {
621
- key: "isVariableDefined",
622
- value: function isVariableDefined(variable) {
623
- return this.context.isVariableDefined(variable);
624
- }
625
- },
626
- {
627
- key: "isMetavariableDefined",
628
- value: function isMetavariableDefined(metavariable) {
629
- return this.context.isMetavariableDefined(metavariable);
630
- }
631
- },
632
- {
633
- key: "compareTermAndPropertyRelation",
634
- value: function compareTermAndPropertyRelation(term, propertyRelation) {
635
- return this.context.compareTermAndPropertyRelation(term, propertyRelation);
636
- }
637
- },
638
- {
639
- key: "nodeAsString",
640
- value: function nodeAsString(node) {
641
- return this.context.nodeAsString(node);
642
- }
643
- },
644
- {
645
- key: "nodesAsString",
646
- value: function nodesAsString(node) {
647
- return this.context.nodesAsString(node);
648
- }
649
- },
650
- {
651
- key: "trace",
652
- value: function trace(message) {
653
- var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
654
- this.context.trace(message, node);
655
- }
656
- },
657
- {
658
- key: "debug",
659
- value: function debug(message) {
660
- var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
661
- this.context.debug(message, node);
662
- }
663
- },
664
- {
665
- key: "info",
666
- value: function info(message) {
667
- var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
668
- this.context.info(message, node);
669
- }
670
- },
671
- {
672
- key: "warning",
673
- value: function warning(message) {
674
- var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
675
- this.context.warning(message, node);
676
- }
677
- },
678
- {
679
- key: "error",
680
- value: function error(message) {
681
- var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
682
- this.context.error(message, node);
683
- }
684
- },
685
- {
686
- key: "merge",
687
- value: function merge(context) {
688
- var terms = context.getTerms(), frames = context.getFrames(), statements = context.getStatements(), assertions = context.getAssertions(), references = context.getReferences(), substitutions = context.getSubstitutions();
689
- this.terms = _to_consumable_array(this.terms).concat(_to_consumable_array(terms));
690
- this.frames = _to_consumable_array(this.frames).concat(_to_consumable_array(frames));
691
- this.statements = _to_consumable_array(this.statements).concat(_to_consumable_array(statements));
692
- this.assertions = _to_consumable_array(this.assertions).concat(_to_consumable_array(assertions));
693
- this.references = _to_consumable_array(this.references).concat(_to_consumable_array(references));
694
- this.substitutions = _to_consumable_array(this.substitutions).concat(_to_consumable_array(substitutions));
695
- compress(this.terms, function(termA, termB) {
696
- var termAEqualToTermB = termA.isEqualTo(termB);
697
- if (!termAEqualToTermB) {
698
- return true;
699
- }
700
- });
701
- compress(this.frames, function(frameA, frameB) {
702
- var frameAEqualToFrameB = frameA.isEqualTo(frameB);
703
- if (!frameAEqualToFrameB) {
704
- return true;
705
- }
706
- });
707
- compress(this.statements, function(statementA, statementB) {
708
- var statementAEqualToStatementB = statementA.isEqualTo(statementB);
709
- if (!statementAEqualToStatementB) {
710
- return true;
711
- }
712
- });
713
- compress(this.assertions, function(assertionA, assertionB) {
714
- var assertionAEqualToAssertionB = assertionA.isEqualTo(assertionB);
715
- if (!assertionAEqualToAssertionB) {
716
- return true;
717
- }
718
- });
719
- compress(this.references, function(referenceA, referenceB) {
720
- var referenceAEqualToReferenceB = referenceA.isEqualTo(referenceB);
721
- if (!referenceAEqualToReferenceB) {
722
- return true;
723
- }
724
- });
725
- compress(this.substitutions, function(substitutionA, substitutionB) {
726
- var substitutionAEqualToSubstitutionB = substitutionA.isEqualTo(substitutionB);
727
- if (!substitutionAEqualToSubstitutionB) {
728
- return true;
729
- }
730
- });
731
- }
732
- }
733
- ], [
734
- {
735
- key: "fromNothing",
736
- value: function fromNothing(context) {
737
- var terms = [], frames = [], statements = [], assertions = [], references = [], substitutions = [], temporaryContext = new TemporaryContext(context, terms, frames, statements, assertions, references, substitutions);
738
- return temporaryContext;
739
- }
740
- },
741
- {
742
- key: "fromTermsAndFrames",
743
- value: function fromTermsAndFrames(terms, frames, context) {
744
- var statements = [], assertions = [], references = [], substitutions = [], temporaryContext = new TemporaryContext(context, terms, frames, statements, assertions, references, substitutions);
745
- return temporaryContext;
746
- }
747
- }
748
- ]);
749
- return TemporaryContext;
750
- }();
751
-
752
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L3RlbXBvcmFyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgZXh0cmFjdCwgY29tcHJlc3MgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wb3JhcnlDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgdGVybXMsIGZyYW1lcywgc3RhdGVtZW50cywgYXNzZXJ0aW9ucywgcmVmZXJlbmNlcywgc3Vic3RpdHV0aW9ucykge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICAgIHRoaXMuZnJhbWVzID0gZnJhbWVzO1xuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gICAgdGhpcy5hc3NlcnRpb25zID0gYXNzZXJ0aW9ucztcbiAgICB0aGlzLnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXRDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICBnZXRUZXJtcygpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtcztcbiAgfVxuXG4gIGdldEZyYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZXM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRBc3NlcnRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICBjb25zdCB0ZXJtQSA9IHRlcm0sIC8vL1xuICAgICAgICAgIGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGV4dHJhY3QodGhpcy50ZXJtcywgKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1CID0gdGVybSwgLy8vXG4gICAgICAgICAgICB0ZXJtQUVxdWFsVG9UZXJtQiA9IHRlcm1BLmlzRXF1YWxUbyh0ZXJtQik7XG5cbiAgICAgIGlmICh0ZXJtQUVxdWFsVG9UZXJtQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFEZGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB0byB0aGUgY29udGV4dC5gKTtcblxuICAgIHRoaXMudGVybXMucHVzaCh0ZXJtKTtcbiAgfVxuXG4gIGFkZEZyYW1lKGZyYW1lKSB7XG4gICAgY29uc3QgZnJhbWVBID0gZnJhbWUsIC8vL1xuICAgICAgICAgIGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBmcmFtZVN0cmluZyA9IGZyYW1lLmdldFN0cmluZygpO1xuXG4gICAgZXh0cmFjdCh0aGlzLmZyYW1lcywgKGZyYW1lKSA9PiB7XG4gICAgICBjb25zdCBmcmFtZUIgPSBmcmFtZSwgLy8vXG4gICAgICAgICAgICBmcmFtZUFFcXVhbFRvRnJhbWVCID0gZnJhbWVBLmlzRXF1YWxUbyhmcmFtZUIpO1xuXG4gICAgICBpZiAoZnJhbWVBRXF1YWxUb0ZyYW1lQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIHRvIHRoZSBjb250ZXh0LmApO1xuXG4gICAgdGhpcy5mcmFtZXMucHVzaChmcmFtZSk7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnQoc3RhdGVtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudEEgPSBzdGF0ZW1lbnQsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGV4dHJhY3QodGhpcy5zdGF0ZW1lbnRzLCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRCID0gc3RhdGVtZW50LCAvLy9cbiAgICAgICAgICAgIHN0YXRlbWVudEFFcXVhbFRvRnJhbWVCID0gc3RhdGVtZW50QS5pc0VxdWFsVG8oc3RhdGVtZW50Qik7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRBRXF1YWxUb0ZyYW1lQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlIGNvbnRleHQuYCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9uKGFzc2VydGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBhc3NlcnRpb25BID0gYXNzZXJ0aW9uLCAvLy9cbiAgICAgICAgICBhc3NlcnRpb25TdHJpbmcgPSBhc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBleHRyYWN0KHRoaXMuYXNzZXJ0aW9ucywgKGFzc2VydGlvbikgPT4ge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uQiA9IGFzc2VydGlvbiwgLy8vXG4gICAgICAgICAgICBhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIgPSBhc3NlcnRpb25BLmlzRXF1YWxUbyhhc3NlcnRpb25CKTtcblxuICAgICAgaWYgKGFzc2VydGlvbkFFcXVhbFRvQXNzZXJ0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGVkIHRoZSAnJHthc3NlcnRpb25TdHJpbmd9JyBhc3NlcnRpb24gdG8gdGhlIGNvbnRleHQuYCk7XG5cbiAgICB0aGlzLmFzc2VydGlvbnMucHVzaChhc3NlcnRpb24pO1xuICB9XG5cbiAgYWRkUmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VBID0gcmVmZXJlbmNlLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICBleHRyYWN0KHRoaXMucmVmZXJlbmNlcywgKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgY29uc3QgcmVmZXJlbmNlQiA9IHJlZmVyZW5jZSwgLy8vXG4gICAgICAgICAgICByZWZlcmVuY2VBRXF1YWxUb1JlZmVyZW5jZUIgPSByZWZlcmVuY2VBLmlzRXF1YWxUbyhyZWZlcmVuY2VCKTtcblxuICAgICAgaWYgKHJlZmVyZW5jZUFFcXVhbFRvUmVmZXJlbmNlQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGVkIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UgdG8gdGhlIGNvbnRleHQuYCk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZXMucHVzaChyZWZlcmVuY2UpO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb25BID0gc3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBleHRyYWN0KHRoaXMuc3Vic3RpdHV0aW9ucywgKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uQiA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICBzdWJzdGl0dWlvbkFFcXVhbFRvU3Vic3RpdHV0aW9uQiA9IHN1YnN0aXR1dGlvbkEuaXNFcXVhbFRvKHN1YnN0aXR1dGlvbkIpO1xuXG4gICAgICBpZiAoc3Vic3RpdHVpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRlZCB0aGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIHRvIHRoZSBjb250ZXh0LmApO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IHRlcm0gPSB0aGlzLnRlcm1zLmZpbmQoKHRlcm0pID0+IHtcbiAgICAgIGNvbnN0IHRlcm1Ob2RlTWF0Y2hlcyA9IHRlcm0ubWF0Y2hOb2RlKHRlcm1Ob2RlKTtcblxuICAgICAgaWYgKHRlcm1Ob2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZSA9IHRoaXMuZnJhbWVzLmZpbmQoKGZyYW1lKSA9PiB7XG4gICAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gZnJhbWUubWF0Y2hOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICAgIGlmIChmcmFtZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLnN0YXRlbWVudHMuZmluZCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHN0YXRlbWVudC5tYXRjaE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgfVxuXG4gIGZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUoYXNzZXJ0aW9uTm9kZSkge1xuICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXMuYXNzZXJ0aW9ucy5maW5kKChhc3NlcnRpb24pID0+IHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbk5vZGVNYXRjaGVzID0gYXNzZXJ0aW9uLm1hdGNoTm9kZShhc3NlcnRpb25Ob2RlKTtcblxuICAgICAgaWYgKGFzc2VydGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gYXNzZXJ0aW9uO1xuICB9XG5cbiAgZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VzLmZpbmQoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgY29uc3QgcmVmZXJlbmNlTWF0Y2hlTWV0YXZhcmlhYmxlTm9kZSA9IHJlZmVyZW5jZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmIChyZWZlcmVuY2VNYXRjaGVNZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlO1xuICB9XG5cbiAgZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uID0gdGhpcy5zdWJzdGl0dXRpb25zLmZpbmQoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hOb2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRWYXJpYWJsZXMobmVzdGVkID0gdHJ1ZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldFZhcmlhYmxlcyhuZXN0ZWQpOyB9XG5cbiAgZ2V0SnVkZ2VtZW50cygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRKdWRnZW1lbnRzKCk7IH1cblxuICBnZXRFcXVpdmFsZW5jZXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0RXF1aXZhbGVuY2VzKCk7IH1cblxuICBnZXRTdGVwcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRTdGVwcygpOyB9XG5cbiAgZ2V0TGFzdFN0ZXAoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0TGFzdFN0ZXAoKTsgfVxuXG4gIGdldFN0ZXBzT3JTdWJwcm9vZnMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0U3RlcHNPclN1YnByb29mcygpOyB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0RmlsZVBhdGgoKTsgfVxuXG4gIGdldExleGVyKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldExleGVyKCk7IH1cblxuICBnZXRQYXJzZXIoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0UGFyc2VyKCk7IH1cblxuICBnZXRBeGlvbXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0QXhpb21zKCk7IH1cblxuICBnZXRMZW1tYXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0TGVtbWFzKCk7IH1cblxuICBnZXRUaGVvcmVtcygpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5nZXRUaGVvcmVtcygpOyB9XG5cbiAgZ2V0Q29uamVjdHVyZXMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0Q29uamVjdHVyZXMoKTsgfVxuXG4gIGdldENvbWJpbmF0b3JzKCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldENvbWJpbmF0b3JzKCk7IH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7IH1cblxuICBnZXRUeXBlUHJlZml4KCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldFR5cGVQcmVmaXgoKTsgfVxuXG4gIGFkZEF4aW9tKGF4aW9tKSB7IHRoaXMuY29udGV4dC5hZGRBeGlvbShheGlvbSk7IH1cblxuICBhZGRMZW1tYShsZW1tYSkgeyB0aGlzLmNvbnRleHQuYWRkTGVtbWEobGVtbWEpOyB9XG5cbiAgYWRkVGhlb3JlbSh0aGVvcmVtKSB7IHRoaXMuY29udGV4dC5hZGRUaGVvcmVtKHRoZW9yZW0pOyB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5hZGRFcXVhbGl0eShlcXVhbGl0eSk7IH1cblxuICBhZGRWYXJpYWJsZSh2YXJpYWJsZSwgbmVzdGVkID0gdHJ1ZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmFkZFZhcmlhYmxlKHZhcmlhYmxlLCBuZXN0ZWQpOyB9XG5cbiAgYWRkSnVkZ2VtZW50KGp1ZGdlbWVudCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmFkZEp1ZGdlbWVudChqdWRnZW1lbnQpOyB9XG5cbiAgYWRkU3RlcE9yU3VicHJvb2Yoc3RlcE9yU3VicHJvb2YpIHsgdGhpcy5jb250ZXh0LmFkZFN0ZXBPclN1YnByb29mKHN0ZXBPclN1YnByb29mKTsgfVxuXG4gIGZpbmRQcm9jZWR1cmVCeU5hbWUobmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRQcm9jZWR1cmVCeU5hbWUobmFtZSk7IH1cblxuICBmaW5kTGFiZWxCeVJlZmVyZW5jZShyZWZlcmVuY2UsIGNvbnRleHQpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kTGFiZWxCeVJlZmVyZW5jZShyZWZlcmVuY2UsIGNvbnRleHQpOyB9XG5cbiAgZmluZFJ1bGVCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBmaW5kQXhpb21CeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgZmluZExlbW1hQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZExlbW1hQnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGZpbmRUaGVvcmVtQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFRoZW9yZW1CeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgZmluZENvbmplY3R1cmVCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kQ29uamVjdHVyZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBmaW5kTWV0YUxlbW1hc0J5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRNZXRhTGVtbWFzQnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGZpbmRNZXRhdGhlb3JlbXNCeVJlZmVyZW5jZShyZWZlcmVuY2UpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kTWV0YXRoZW9yZW1zQnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGZpbmRNZXRhTGVtbWFNZXRhdGhlb3JlbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRNZXRhTGVtbWFNZXRhdGhlb3JlbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBmaW5kTWV0YUxlbW1hTWV0YXRoZW9yZW1zQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZE1ldGFMZW1tYU1ldGF0aGVvcmVtc0J5UmVmZXJlbmNlKHJlZmVyZW5jZSk7IH1cblxuICBmaW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIsIG5lc3RlZCA9IHRydWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIsIG5lc3RlZCk7IH1cblxuICBmaW5kSnVkZ2VtZW50QnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZEp1ZGdlbWVudEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7IH1cblxuICBmaW5kRXF1aXZhbGVuY2VCeVRlcm0odGVybSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRFcXVpdmFsZW5jZUJ5VGVybSh0ZXJtKTsgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZE1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpOyB9XG5cbiAgZmluZExhYmVsQnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZExhYmVsQnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTsgfVxuXG4gIGZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpOyB9XG5cbiAgZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTsgfVxuXG4gIGZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7IH1cblxuICBpc1Byb2NlZHVyZVByZXNlbnRCeU5hbWUobmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzUHJvY2VkdXJlUHJlc2VudEJ5TmFtZShuYW1lKTsgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNMYWJlbFByZXNlbnRCeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNNZXRhdmFyaWFibGVQcmVzZW50QnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGlzTWV0YUxlbW1hTWV0YXRoZW9yZW1QcmVzZW50QnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNNZXRhTGVtbWFNZXRhdGhlb3JlbVByZXNlbnRCeVJlZmVyZW5jZShyZWZlcmVuY2UpOyB9XG5cbiAgZmluZEF4aW9tTGVtbWFUaGVvcmVtT3JDb25qZWN0dXJlQnlSZWZlcmVuY2UocmVmZXJlbmNlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZEF4aW9tTGVtbWFUaGVvcmVtT3JDb25qZWN0dXJlQnlSZWZlcmVuY2UocmVmZXJlbmNlKTsgfVxuXG4gIGlzTWV0YXZhcmlhYmxlUHJlc2VudChtZXRhdmFyaWFibGUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc01ldGF2YXJpYWJsZVByZXNlbnQobWV0YXZhcmlhYmxlKTsgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSA9IHRydWUsIGluY2x1ZGVEZXBlbmRlbmNpZXMgPSB0cnVlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUsIGluY2x1ZGVSZWxlYXNlLCBpbmNsdWRlRGVwZW5kZW5jaWVzKTsgfVxuXG4gIGlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTsgfVxuXG4gIGlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSk7IH1cblxuICBpc1R5cGVQcmVmaXhQcmVzZW50QnlUeXBlUHJlZml4TmFtZSh0eXBlUHJlZml4TmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzVHlwZVByZWZpeFByZXNlbnRCeVR5cGVQcmVmaXhOYW1lKHR5cGVQcmVmaXhOYW1lKTsgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyLCBuZXN0ZWQgPSB0cnVlKSB7IHJldHVybiB0aGlzLmNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyLCBuZXN0ZWQpOyB9XG5cbiAgaXNMYWJlbFByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzTGFiZWxQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpOyB9XG5cbiAgaXNMYWJlbFByZXNlbnRCeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc0xhYmVsUHJlc2VudEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7IH1cblxuICBpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTm9kZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOb2RlKTsgfVxuXG4gIGlzSnVkZ2VtZW50UHJlc2VudEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzSnVkZ2VtZW50UHJlc2VudEJ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7IH1cblxuICBpc1Rlcm1Hcm91bmRlZCh0ZXJtKSB7IHJldHVybiB0aGlzLmNvbnRleHQuaXNUZXJtR3JvdW5kZWQodGVybSk7IH1cblxuICBpc1ZhcmlhYmxlRGVmaW5lZCh2YXJpYWJsZSkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmlzVmFyaWFibGVEZWZpbmVkKHZhcmlhYmxlKTsgfVxuXG4gIGlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5pc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlKTsgfVxuXG4gIGNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uKSB7IHJldHVybiB0aGlzLmNvbnRleHQuY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKHRlcm0sIHByb3BlcnR5UmVsYXRpb24pOyB9XG5cbiAgbm9kZUFzU3RyaW5nKG5vZGUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSk7IH1cblxuICBub2Rlc0FzU3RyaW5nKG5vZGUpIHsgcmV0dXJuIHRoaXMuY29udGV4dC5ub2Rlc0FzU3RyaW5nKG5vZGUpOyB9XG5cbiAgdHJhY2UobWVzc2FnZSwgbm9kZSA9IG51bGwpIHsgdGhpcy5jb250ZXh0LnRyYWNlKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgZGVidWcobWVzc2FnZSwgbm9kZSA9IG51bGwpIHsgdGhpcy5jb250ZXh0LmRlYnVnKG1lc3NhZ2UsIG5vZGUpOyB9XG5cbiAgaW5mbyhtZXNzYWdlLCBub2RlID0gbnVsbCkgeyB0aGlzLmNvbnRleHQuaW5mbyhtZXNzYWdlLCBub2RlKTsgfVxuXG4gIHdhcm5pbmcobWVzc2FnZSwgbm9kZSA9IG51bGwpIHsgdGhpcy5jb250ZXh0Lndhcm5pbmcobWVzc2FnZSwgbm9kZSk7IH1cblxuICBlcnJvcihtZXNzYWdlLCBub2RlID0gbnVsbCkgeyB0aGlzLmNvbnRleHQuZXJyb3IobWVzc2FnZSwgbm9kZSk7IH1cblxuICBtZXJnZShjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybXMgPSBjb250ZXh0LmdldFRlcm1zKCksXG4gICAgICAgICAgZnJhbWVzID0gY29udGV4dC5nZXRGcmFtZXMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRzID0gY29udGV4dC5nZXRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgYXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0QXNzZXJ0aW9ucygpLFxuICAgICAgICAgIHJlZmVyZW5jZXMgPSBjb250ZXh0LmdldFJlZmVyZW5jZXMoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICB0aGlzLnRlcm1zID0gW1xuICAgICAgLi4udGhpcy50ZXJtcyxcbiAgICAgIC4uLnRlcm1zXG4gICAgXTtcblxuICAgIHRoaXMuZnJhbWVzID0gW1xuICAgICAgLi4udGhpcy5mcmFtZXMsXG4gICAgICAuLi5mcmFtZXNcbiAgICBdO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnRzID0gW1xuICAgICAgLi4udGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgLi4uc3RhdGVtZW50c1xuICAgIF07XG5cbiAgICB0aGlzLmFzc2VydGlvbnMgPSBbXG4gICAgICAuLi50aGlzLmFzc2VydGlvbnMsXG4gICAgICAuLi5hc3NlcnRpb25zXG4gICAgXTtcblxuICAgIHRoaXMucmVmZXJlbmNlcyA9IFtcbiAgICAgIC4uLnRoaXMucmVmZXJlbmNlcyxcbiAgICAgIC4uLnJlZmVyZW5jZXNcbiAgICBdO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gW1xuICAgICAgLi4udGhpcy5zdWJzdGl0dXRpb25zLFxuICAgICAgLi4uc3Vic3RpdHV0aW9uc1xuICAgIF07XG5cbiAgICBjb21wcmVzcyh0aGlzLnRlcm1zLCAodGVybUEsIHRlcm1CKSA9PiB7XG4gICAgICBjb25zdCB0ZXJtQUVxdWFsVG9UZXJtQiA9IHRlcm1BLmlzRXF1YWxUbyh0ZXJtQik7XG5cbiAgICAgIGlmICghdGVybUFFcXVhbFRvVGVybUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyh0aGlzLmZyYW1lcywgKGZyYW1lQSwgZnJhbWVCKSA9PiB7XG4gICAgICBjb25zdCBmcmFtZUFFcXVhbFRvRnJhbWVCID0gZnJhbWVBLmlzRXF1YWxUbyhmcmFtZUIpO1xuXG4gICAgICBpZiAoIWZyYW1lQUVxdWFsVG9GcmFtZUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyh0aGlzLnN0YXRlbWVudHMsIChzdGF0ZW1lbnRBLCBzdGF0ZW1lbnRCKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIgPSBzdGF0ZW1lbnRBLmlzRXF1YWxUbyhzdGF0ZW1lbnRCKTtcblxuICAgICAgaWYgKCFzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyh0aGlzLmFzc2VydGlvbnMsIChhc3NlcnRpb25BLCBhc3NlcnRpb25CKSA9PiB7XG4gICAgICBjb25zdCBhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIgPSBhc3NlcnRpb25BLmlzRXF1YWxUbyhhc3NlcnRpb25CKTtcblxuICAgICAgaWYgKCFhc3NlcnRpb25BRXF1YWxUb0Fzc2VydGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyh0aGlzLnJlZmVyZW5jZXMsIChyZWZlcmVuY2VBLCByZWZlcmVuY2VCKSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2VBRXF1YWxUb1JlZmVyZW5jZUIgPSByZWZlcmVuY2VBLmlzRXF1YWxUbyhyZWZlcmVuY2VCKTtcblxuICAgICAgaWYgKCFyZWZlcmVuY2VBRXF1YWxUb1JlZmVyZW5jZUIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb21wcmVzcyh0aGlzLnN1YnN0aXR1dGlvbnMsIChzdWJzdGl0dXRpb25BLCBzdWJzdGl0dXRpb25CKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhzdWJzdGl0dXRpb25CKTtcblxuICAgICAgaWYgKCFzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgZnJhbWVzID0gW10sXG4gICAgICAgICAgc3RhdGVtZW50cyA9IFtdLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICByZWZlcmVuY2VzID0gW10sXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIHRlbXBvcmFyeUNvbnRleHQgPSBuZXcgVGVtcG9yYXJ5Q29udGV4dChjb250ZXh0LCB0ZXJtcywgZnJhbWVzLCBzdGF0ZW1lbnRzLCBhc3NlcnRpb25zLCByZWZlcmVuY2VzLCBzdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiB0ZW1wb3JhcnlDb250ZXh0O1xuICB9XG5cbiAgc3RhdGljIGZyb21UZXJtc0FuZEZyYW1lcyh0ZXJtcywgZnJhbWVzLCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IFtdLFxuICAgICAgICAgIGFzc2VydGlvbnMgPSBbXSxcbiAgICAgICAgICByZWZlcmVuY2VzID0gW10sXG4gICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIHRlbXBvcmFyeUNvbnRleHQgPSBuZXcgVGVtcG9yYXJ5Q29udGV4dChjb250ZXh0LCB0ZXJtcywgZnJhbWVzLCBzdGF0ZW1lbnRzLCBhc3NlcnRpb25zLCByZWZlcmVuY2VzLCBzdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiB0ZW1wb3JhcnlDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiVGVtcG9yYXJ5Q29udGV4dCIsImV4dHJhY3QiLCJhcnJheVV0aWxpdGllcyIsImNvbXByZXNzIiwiY29udGV4dCIsInRlcm1zIiwiZnJhbWVzIiwic3RhdGVtZW50cyIsImFzc2VydGlvbnMiLCJyZWZlcmVuY2VzIiwic3Vic3RpdHV0aW9ucyIsImdldENvbnRleHQiLCJnZXRUZXJtcyIsImdldEZyYW1lcyIsImdldFN0YXRlbWVudHMiLCJnZXRBc3NlcnRpb25zIiwiZ2V0UmVmZXJlbmNlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJhZGRUZXJtIiwidGVybSIsInRlcm1BIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRlcm1CIiwidGVybUFFcXVhbFRvVGVybUIiLCJpc0VxdWFsVG8iLCJ0cmFjZSIsInB1c2giLCJhZGRGcmFtZSIsImZyYW1lIiwiZnJhbWVBIiwiZnJhbWVTdHJpbmciLCJmcmFtZUIiLCJmcmFtZUFFcXVhbFRvRnJhbWVCIiwiYWRkU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50QSIsInN0YXRlbWVudFN0cmluZyIsInN0YXRlbWVudEIiLCJzdGF0ZW1lbnRBRXF1YWxUb0ZyYW1lQiIsImFkZEFzc2VydGlvbiIsImFzc2VydGlvbiIsImFzc2VydGlvbkEiLCJhc3NlcnRpb25TdHJpbmciLCJhc3NlcnRpb25CIiwiYXNzZXJ0aW9uQUVxdWFsVG9Bc3NlcnRpb25CIiwiYWRkUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicmVmZXJlbmNlQSIsInJlZmVyZW5jZVN0cmluZyIsInJlZmVyZW5jZUIiLCJyZWZlcmVuY2VBRXF1YWxUb1JlZmVyZW5jZUIiLCJhZGRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25BIiwic3Vic3RpdHV0aW9uU3RyaW5nIiwic3Vic3RpdHV0aW9uQiIsInN1YnN0aXR1aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJmaW5kIiwidGVybU5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZU5vZGVNYXRjaGVzIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZU1hdGNoZXMiLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZU1hdGNoZU1ldGF2YXJpYWJsZU5vZGUiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwiZ2V0VmFyaWFibGVzIiwibmVzdGVkIiwiZ2V0SnVkZ2VtZW50cyIsImdldEVxdWl2YWxlbmNlcyIsImdldFN0ZXBzIiwiZ2V0TGFzdFN0ZXAiLCJnZXRTdGVwc09yU3VicHJvb2ZzIiwiZ2V0RmlsZVBhdGgiLCJnZXRMZXhlciIsImdldFBhcnNlciIsImdldEF4aW9tcyIsImdldExlbW1hcyIsImdldFRoZW9yZW1zIiwiZ2V0Q29uamVjdHVyZXMiLCJnZXRDb21iaW5hdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImdldFR5cGVQcmVmaXgiLCJhZGRBeGlvbSIsImF4aW9tIiwiYWRkTGVtbWEiLCJsZW1tYSIsImFkZFRoZW9yZW0iLCJ0aGVvcmVtIiwiYWRkRXF1YWxpdHkiLCJlcXVhbGl0eSIsImFkZFZhcmlhYmxlIiwidmFyaWFibGUiLCJhZGRKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJhZGRTdGVwT3JTdWJwcm9vZiIsInN0ZXBPclN1YnByb29mIiwiZmluZFByb2NlZHVyZUJ5TmFtZSIsIm5hbWUiLCJmaW5kTGFiZWxCeVJlZmVyZW5jZSIsImZpbmRSdWxlQnlSZWZlcmVuY2UiLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsImZpbmRMZW1tYUJ5UmVmZXJlbmNlIiwiZmluZFRoZW9yZW1CeVJlZmVyZW5jZSIsImZpbmRDb25qZWN0dXJlQnlSZWZlcmVuY2UiLCJmaW5kTWV0YUxlbW1hc0J5UmVmZXJlbmNlIiwiZmluZE1ldGF0aGVvcmVtc0J5UmVmZXJlbmNlIiwiZmluZE1ldGFMZW1tYU1ldGF0aGVvcmVtQnlSZWZlcmVuY2UiLCJmaW5kTWV0YUxlbW1hTWV0YXRoZW9yZW1zQnlSZWZlcmVuY2UiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImZpbmRKdWRnZW1lbnRCeU1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsImZpbmRFcXVpdmFsZW5jZUJ5VGVybSIsImZpbmRNZXRhdmFyaWFibGUiLCJmaW5kTGFiZWxCeU1ldGF2YXJpYWJsZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJub21pbmFsVHlwZU5hbWUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiaXNQcm9jZWR1cmVQcmVzZW50QnlOYW1lIiwiaXNMYWJlbFByZXNlbnRCeVJlZmVyZW5jZSIsImlzTWV0YXZhcmlhYmxlUHJlc2VudEJ5UmVmZXJlbmNlIiwiaXNNZXRhTGVtbWFNZXRhdGhlb3JlbVByZXNlbnRCeVJlZmVyZW5jZSIsImZpbmRBeGlvbUxlbW1hVGhlb3JlbU9yQ29uamVjdHVyZUJ5UmVmZXJlbmNlIiwiaXNNZXRhdmFyaWFibGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsImluY2x1ZGVSZWxlYXNlIiwiaW5jbHVkZURlcGVuZGVuY2llcyIsImlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZSIsImlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUiLCJwcmVmaXhlZFR5cGVOYW1lIiwiaXNUeXBlUHJlZml4UHJlc2VudEJ5VHlwZVByZWZpeE5hbWUiLCJ0eXBlUHJlZml4TmFtZSIsImlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZUlkZW50aWZpZXIiLCJpc0xhYmVsUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZSIsImlzTGFiZWxQcmVzZW50QnlNZXRhdmFyaWFibGUiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJpc0p1ZGdlbWVudFByZXNlbnRCeU1ldGF2YXJpYWJsZSIsImlzVGVybUdyb3VuZGVkIiwiaXNWYXJpYWJsZURlZmluZWQiLCJpc01ldGF2YXJpYWJsZURlZmluZWQiLCJjb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uIiwibm9kZUFzU3RyaW5nIiwibm9kZSIsIm5vZGVzQXNTdHJpbmciLCJtZXNzYWdlIiwiZGVidWciLCJpbmZvIiwid2FybmluZyIsImVycm9yIiwibWVyZ2UiLCJzdGF0ZW1lbnRBRXF1YWxUb1N0YXRlbWVudEIiLCJzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIiLCJmcm9tTm90aGluZyIsInRlbXBvcmFyeUNvbnRleHQiLCJmcm9tVGVybXNBbmRGcmFtZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBTXFCQTs7O3lCQUpVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0IsSUFBUUMsVUFBc0JDLHlCQUFjLENBQXBDRCxTQUFTRSxXQUFhRCx5QkFBYyxDQUEzQkM7QUFFRixJQUFBLEFBQU1ILGlDQUFOO2FBQU1BLGlCQUNQSSxPQUFPLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxFQUFFQyxhQUFhO2dDQURsRVY7UUFFakIsSUFBSSxDQUFDSSxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFBSSxDQUFDQyxhQUFhLEdBQUdBOztrQkFSSlY7O1lBV25CVyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNQLE9BQU87WUFDckI7OztZQUVBUSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNQLEtBQUs7WUFDbkI7OztZQUVBUSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNQLE1BQU07WUFDcEI7OztZQUVBUSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0Us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