occam-verify-cli 1.0.388 → 1.0.404

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