occam-verify-cli 1.0.421 → 1.0.427

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 (272) hide show
  1. package/lib/action/verify.js +7 -3
  2. package/lib/context/file.js +8 -44
  3. package/lib/context/local.js +8 -26
  4. package/lib/context/nominal.js +64 -0
  5. package/lib/context/release.js +2 -2
  6. package/lib/context/temporary.js +6 -58
  7. package/lib/element/assertion/contained.js +303 -0
  8. package/lib/element/assertion/defined.js +318 -0
  9. package/lib/element/assertion/property.js +299 -0
  10. package/lib/element/assertion/satisfies.js +264 -0
  11. package/lib/element/assertion/subproof.js +178 -0
  12. package/lib/element/assertion/type.js +294 -0
  13. package/lib/{ontology → element}/assertion.js +9 -9
  14. package/lib/element/assumption.js +365 -0
  15. package/lib/element/axiom.js +332 -0
  16. package/lib/element/axiomLemmaTheoremConjecture.js +346 -0
  17. package/lib/element/conclusion.js +151 -0
  18. package/lib/{ontology → element}/conjecture.js +7 -14
  19. package/lib/element/declaration/combinator.js +161 -0
  20. package/lib/element/declaration/complexType.js +343 -0
  21. package/lib/element/declaration/constructor.js +193 -0
  22. package/lib/element/declaration/metavariable.js +193 -0
  23. package/lib/element/declaration/simpleType.js +240 -0
  24. package/lib/element/declaration/typePrefix.js +179 -0
  25. package/lib/element/declaration/variable.js +196 -0
  26. package/lib/{ontology → element}/declaration.js +9 -9
  27. package/lib/element/deduction.js +207 -0
  28. package/lib/element/derivation.js +96 -0
  29. package/lib/element/equality.js +275 -0
  30. package/lib/element/equivalence.js +316 -0
  31. package/lib/element/equivalences.js +264 -0
  32. package/lib/{ontology → element}/error.js +12 -12
  33. package/lib/element/frame.js +387 -0
  34. package/lib/element/hypothesis.js +195 -0
  35. package/lib/element/judgement.js +243 -0
  36. package/lib/element/label.js +198 -0
  37. package/lib/{ontology → element}/lemma.js +7 -7
  38. package/lib/{ontology → element}/metaLemma.js +8 -8
  39. package/lib/element/metaLemmaMetatheorem.js +234 -0
  40. package/lib/{ontology → element}/metaType.js +18 -11
  41. package/lib/{ontology → element}/metatheorem.js +8 -8
  42. package/lib/element/metavariable.js +459 -0
  43. package/lib/element/parameter.js +108 -0
  44. package/lib/element/premise.js +310 -0
  45. package/lib/element/procedureCall.js +243 -0
  46. package/lib/{ontology → element}/procedureReference.js +3 -3
  47. package/lib/{ontology → element}/proof.js +4 -4
  48. package/lib/element/property.js +128 -0
  49. package/lib/element/propertyRelation.js +195 -0
  50. package/lib/element/reference.js +304 -0
  51. package/lib/element/rule.js +373 -0
  52. package/lib/element/section.js +255 -0
  53. package/lib/element/signature.js +217 -0
  54. package/lib/element/statement/combinator/bracketed.js +166 -0
  55. package/lib/element/statement/combinator.js +105 -0
  56. package/lib/element/statement.js +386 -0
  57. package/lib/element/step.js +274 -0
  58. package/lib/element/subDerivation.js +137 -0
  59. package/lib/element/subproof.js +240 -0
  60. package/lib/element/substitution/frame.js +216 -0
  61. package/lib/{ontology → element}/substitution/reference.js +5 -4
  62. package/lib/{ontology → element}/substitution/statement.js +7 -6
  63. package/lib/element/substitution/term.js +265 -0
  64. package/lib/element/substitution.js +206 -0
  65. package/lib/element/substitutions.js +425 -0
  66. package/lib/element/supposition.js +323 -0
  67. package/lib/{ontology → element/term}/constructor/bracketed.js +11 -7
  68. package/lib/element/term/constructor.js +172 -0
  69. package/lib/element/term.js +322 -0
  70. package/lib/{ontology → element}/theorem.js +8 -8
  71. package/lib/element/type.js +490 -0
  72. package/lib/element/typePrefix.js +99 -0
  73. package/lib/element/variable.js +345 -0
  74. package/lib/elements.js +27 -0
  75. package/lib/mixins/statement/verify.js +14 -14
  76. package/lib/mixins/step/unify.js +12 -12
  77. package/lib/mixins/term/verify.js +4 -4
  78. package/lib/node/substitution/frame.js +15 -1
  79. package/lib/node/substitution/statement.js +37 -1
  80. package/lib/node/substitution/term.js +15 -1
  81. package/lib/preamble.js +63 -63
  82. package/lib/process/assign.js +58 -0
  83. package/lib/process/instantiate.js +68 -7
  84. package/lib/process/unify.js +26 -26
  85. package/lib/process/verify.js +21 -21
  86. package/lib/utilities/brackets.js +9 -18
  87. package/lib/utilities/customGrammar.js +1 -1
  88. package/lib/utilities/element.js +1128 -0
  89. package/lib/utilities/json.js +32 -32
  90. package/lib/utilities/node.js +49 -61
  91. package/lib/utilities/statement.js +83 -0
  92. package/lib/utilities/string.js +98 -56
  93. package/package.json +6 -6
  94. package/src/action/verify.js +8 -1
  95. package/src/context/file.js +9 -39
  96. package/src/context/local.js +5 -11
  97. package/src/context/nominal.js +30 -0
  98. package/src/context/release.js +1 -1
  99. package/src/context/temporary.js +6 -63
  100. package/src/{ontology → element}/assertion/contained.js +4 -25
  101. package/src/{ontology → element}/assertion/defined.js +7 -26
  102. package/src/{ontology → element}/assertion/property.js +7 -26
  103. package/src/{ontology → element}/assertion/satisfies.js +5 -53
  104. package/src/{ontology → element}/assertion/subproof.js +3 -32
  105. package/src/{ontology → element}/assertion/type.js +7 -26
  106. package/src/{ontology → element}/assertion.js +6 -6
  107. package/src/{ontology → element}/assumption.js +3 -27
  108. package/src/{ontology → element}/axiom.js +4 -11
  109. package/src/{ontology/topLevelAssertion.js → element/axiomLemmaTheoremConjecture.js} +9 -105
  110. package/src/{ontology → element}/conclusion.js +4 -19
  111. package/src/{ontology → element}/conjecture.js +4 -11
  112. package/src/{ontology → element}/declaration/combinator.js +3 -14
  113. package/src/{ontology → element}/declaration/complexType.js +3 -19
  114. package/src/{ontology → element}/declaration/constructor.js +3 -14
  115. package/src/{ontology → element}/declaration/metavariable.js +3 -39
  116. package/src/{ontology → element}/declaration/simpleType.js +3 -19
  117. package/src/{ontology → element}/declaration/typePrefix.js +3 -15
  118. package/src/{ontology → element}/declaration/variable.js +3 -14
  119. package/src/{ontology → element}/declaration.js +6 -6
  120. package/src/{ontology → element}/deduction.js +9 -22
  121. package/src/{ontology → element}/derivation.js +2 -32
  122. package/src/{ontology → element}/equality.js +18 -42
  123. package/src/{ontology → element}/equivalence.js +17 -2
  124. package/src/{ontology → element}/equivalences.js +1 -1
  125. package/src/{ontology → element}/error.js +8 -8
  126. package/src/{ontology → element}/frame.js +8 -56
  127. package/src/{ontology → element}/hypothesis.js +5 -5
  128. package/src/{ontology → element}/judgement.js +7 -7
  129. package/src/{ontology → element}/label.js +3 -3
  130. package/src/{ontology → element}/lemma.js +4 -4
  131. package/src/{ontology → element}/metaLemma.js +5 -5
  132. package/src/{ontology/topLevelMetaAssertion.js → element/metaLemmaMetatheorem.js} +11 -11
  133. package/src/{ontology → element}/metaType.js +11 -7
  134. package/src/{ontology → element}/metatheorem.js +5 -5
  135. package/src/{ontology → element}/metavariable.js +10 -60
  136. package/src/{ontology → element}/parameter.js +1 -1
  137. package/src/{ontology → element}/premise.js +14 -14
  138. package/src/{ontology → element}/procedureCall.js +4 -4
  139. package/src/{ontology → element}/procedureReference.js +1 -1
  140. package/src/{ontology → element}/proof.js +3 -3
  141. package/src/{ontology → element}/property.js +7 -15
  142. package/src/{ontology → element}/propertyRelation.js +5 -11
  143. package/src/{ontology → element}/reference.js +5 -19
  144. package/src/{ontology → element}/rule.js +13 -13
  145. package/src/{ontology → element}/section.js +10 -10
  146. package/src/{ontology → element}/signature.js +12 -15
  147. package/src/element/statement/combinator/bracketed.js +38 -0
  148. package/src/element/statement/combinator.js +59 -0
  149. package/src/{ontology → element}/statement.js +11 -27
  150. package/src/{ontology → element}/step.js +10 -44
  151. package/src/{ontology → element}/subDerivation.js +3 -24
  152. package/src/{ontology → element}/subproof.js +3 -43
  153. package/src/{ontology → element}/substitution/frame.js +4 -21
  154. package/src/{ontology → element}/substitution/reference.js +3 -3
  155. package/src/{ontology → element}/substitution/statement.js +6 -10
  156. package/src/{ontology → element}/substitution/term.js +7 -23
  157. package/src/{ontology → element}/substitutions.js +1 -1
  158. package/src/{ontology → element}/supposition.js +10 -10
  159. package/src/{ontology → element/term}/constructor/bracketed.js +12 -13
  160. package/src/element/term/constructor.js +82 -0
  161. package/src/{ontology → element}/term.js +6 -38
  162. package/src/{ontology → element}/theorem.js +5 -5
  163. package/src/{ontology → element}/type.js +17 -64
  164. package/src/{ontology → element}/typePrefix.js +8 -12
  165. package/src/{ontology → element}/variable.js +9 -20
  166. package/src/elements.js +13 -0
  167. package/src/mixins/statement/verify.js +4 -4
  168. package/src/mixins/step/unify.js +6 -6
  169. package/src/mixins/term/verify.js +3 -3
  170. package/src/node/substitution/frame.js +14 -0
  171. package/src/node/substitution/statement.js +40 -0
  172. package/src/node/substitution/term.js +15 -0
  173. package/src/preamble.js +62 -62
  174. package/src/process/assign.js +59 -0
  175. package/src/process/instantiate.js +67 -15
  176. package/src/process/unify.js +37 -39
  177. package/src/process/verify.js +20 -20
  178. package/src/utilities/brackets.js +12 -17
  179. package/src/utilities/customGrammar.js +3 -3
  180. package/src/utilities/element.js +1380 -0
  181. package/src/utilities/json.js +31 -31
  182. package/src/utilities/node.js +56 -64
  183. package/src/utilities/{context.js → statement.js} +10 -39
  184. package/src/utilities/string.js +120 -52
  185. package/lib/assignment/equality.js +0 -62
  186. package/lib/assignment/judgement.js +0 -62
  187. package/lib/assignment/variable.js +0 -64
  188. package/lib/context/bracketed/combinator.js +0 -121
  189. package/lib/context/bracketed/constructor.js +0 -121
  190. package/lib/context/bracketted.js +0 -86
  191. package/lib/context/partial/metavariable.js +0 -180
  192. package/lib/context/partial/statement.js +0 -180
  193. package/lib/context/partial/term.js +0 -192
  194. package/lib/context/partial/variable.js +0 -192
  195. package/lib/context/partial.js +0 -93
  196. package/lib/ontology/assertion/contained.js +0 -357
  197. package/lib/ontology/assertion/defined.js +0 -331
  198. package/lib/ontology/assertion/property.js +0 -313
  199. package/lib/ontology/assertion/satisfies.js +0 -302
  200. package/lib/ontology/assertion/subproof.js +0 -240
  201. package/lib/ontology/assertion/type.js +0 -308
  202. package/lib/ontology/assumption.js +0 -383
  203. package/lib/ontology/axiom.js +0 -339
  204. package/lib/ontology/combinator/bracketed.js +0 -202
  205. package/lib/ontology/combinator.js +0 -155
  206. package/lib/ontology/conclusion.js +0 -201
  207. package/lib/ontology/constructor.js +0 -185
  208. package/lib/ontology/declaration/combinator.js +0 -210
  209. package/lib/ontology/declaration/complexType.js +0 -393
  210. package/lib/ontology/declaration/constructor.js +0 -242
  211. package/lib/ontology/declaration/metavariable.js +0 -257
  212. package/lib/ontology/declaration/simpleType.js +0 -290
  213. package/lib/ontology/declaration/typePrefix.js +0 -228
  214. package/lib/ontology/declaration/variable.js +0 -245
  215. package/lib/ontology/deduction.js +0 -215
  216. package/lib/ontology/derivation.js +0 -155
  217. package/lib/ontology/equality.js +0 -288
  218. package/lib/ontology/equivalence.js +0 -295
  219. package/lib/ontology/equivalences.js +0 -264
  220. package/lib/ontology/frame.js +0 -419
  221. package/lib/ontology/hypothesis.js +0 -190
  222. package/lib/ontology/judgement.js +0 -248
  223. package/lib/ontology/label.js +0 -198
  224. package/lib/ontology/metavariable.js +0 -502
  225. package/lib/ontology/parameter.js +0 -108
  226. package/lib/ontology/premise.js +0 -310
  227. package/lib/ontology/procedureCall.js +0 -243
  228. package/lib/ontology/property.js +0 -166
  229. package/lib/ontology/propertyRelation.js +0 -202
  230. package/lib/ontology/reference.js +0 -315
  231. package/lib/ontology/rule.js +0 -373
  232. package/lib/ontology/section.js +0 -255
  233. package/lib/ontology/signature.js +0 -217
  234. package/lib/ontology/statement.js +0 -398
  235. package/lib/ontology/step.js +0 -295
  236. package/lib/ontology/subDerivation.js +0 -147
  237. package/lib/ontology/subproof.js +0 -265
  238. package/lib/ontology/substitution/frame.js +0 -261
  239. package/lib/ontology/substitution/term.js +0 -269
  240. package/lib/ontology/substitution.js +0 -206
  241. package/lib/ontology/substitutions.js +0 -425
  242. package/lib/ontology/supposition.js +0 -323
  243. package/lib/ontology/term.js +0 -351
  244. package/lib/ontology/topLevelAssertion.js +0 -431
  245. package/lib/ontology/topLevelMetaAssertion.js +0 -234
  246. package/lib/ontology/type.js +0 -556
  247. package/lib/ontology/typePrefix.js +0 -99
  248. package/lib/ontology/variable.js +0 -343
  249. package/lib/ontology.js +0 -27
  250. package/lib/utilities/assignments.js +0 -19
  251. package/lib/utilities/context.js +0 -101
  252. package/lib/utilities/subproof.js +0 -42
  253. package/lib/utilities/type.js +0 -40
  254. package/src/assignment/equality.js +0 -29
  255. package/src/assignment/judgement.js +0 -29
  256. package/src/assignment/variable.js +0 -34
  257. package/src/context/bracketed/combinator.js +0 -31
  258. package/src/context/bracketed/constructor.js +0 -31
  259. package/src/context/bracketted.js +0 -41
  260. package/src/context/partial/metavariable.js +0 -39
  261. package/src/context/partial/statement.js +0 -39
  262. package/src/context/partial/term.js +0 -49
  263. package/src/context/partial/variable.js +0 -49
  264. package/src/context/partial.js +0 -71
  265. package/src/ontology/combinator/bracketed.js +0 -38
  266. package/src/ontology/combinator.js +0 -72
  267. package/src/ontology/constructor.js +0 -105
  268. package/src/ontology.js +0 -13
  269. package/src/utilities/assignments.js +0 -11
  270. package/src/utilities/subproof.js +0 -56
  271. package/src/utilities/type.js +0 -35
  272. /package/src/{ontology → element}/substitution.js +0 -0
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get default () {
13
+ return assignAssignments;
14
+ },
15
+ get equalityAssignmentFromEquality () {
16
+ return equalityAssignmentFromEquality;
17
+ },
18
+ get judgementAssignmentFromJudgement () {
19
+ return judgementAssignmentFromJudgement;
20
+ },
21
+ get variableAssignmentFromVariable () {
22
+ return variableAssignmentFromVariable;
23
+ }
24
+ });
25
+ function judgementAssignmentFromJudgement(judgement) {
26
+ return function(context) {
27
+ var judgementString = judgement.getString(), judgementAdded = context.addJudgement(judgement), assigned = judgementAdded; ///
28
+ assigned ? context.trace("Assigned the '".concat(judgementString, "' judgement.")) : context.debug("Unable to assign the '".concat(judgementString, "' judgement."));
29
+ return assigned;
30
+ };
31
+ }
32
+ function equalityAssignmentFromEquality(equality) {
33
+ return function(context) {
34
+ var equalityString = equality.getString(), equalityAdded = context.addEquality(equality), assigned = equalityAdded; ///
35
+ assigned ? context.trace("Assigned the '".concat(equalityString, "' equality.")) : context.debug("Unable to assign the '".concat(equalityString, "' equality."));
36
+ return assigned;
37
+ };
38
+ }
39
+ function variableAssignmentFromVariable(variable) {
40
+ return function(context) {
41
+ var nested = false;
42
+ context.addVariable(variable, nested);
43
+ var variableTypeString = variable.getTypeString(), variableString = variable.getString(), assigned = true;
44
+ assigned ? context.trace("Assigned the '".concat(variableString, "' variable with type '").concat(variableTypeString, "'.")) : context.debug("Unable to assign the '".concat(variableString, "' variable with type '").concat(variableTypeString, "'."));
45
+ return assigned;
46
+ };
47
+ }
48
+ function assignAssignments(assignments, context) {
49
+ var assignmentsAssigned = assignments.every(function(assigment) {
50
+ var assigned = assigment(context);
51
+ if (assigned) {
52
+ return true;
53
+ }
54
+ });
55
+ return assignmentsAssigned;
56
+ }
57
+
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2Fzc2lnbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGp1ZGdlbWVudEFzc2lnbm1lbnRGcm9tSnVkZ2VtZW50KGp1ZGdlbWVudCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSBqdWRnZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAganVkZ2VtZW50QWRkZWQgPSBjb250ZXh0LmFkZEp1ZGdlbWVudChqdWRnZW1lbnQpLFxuICAgICAgICAgIGFzc2lnbmVkID0ganVkZ2VtZW50QWRkZWQ7IC8vL1xuXG4gICAgYXNzaWduZWQgP1xuICAgICAgY29udGV4dC50cmFjZShgQXNzaWduZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC5gKSA6XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFVuYWJsZSB0byBhc3NpZ24gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC5gKTtcblxuICAgIHJldHVybiBhc3NpZ25lZDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsaXR5QXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBjb25zdCBlcXVhbGl0eVN0cmluZyA9IGVxdWFsaXR5LmdldFN0cmluZygpLFxuICAgICAgICAgIGVxdWFsaXR5QWRkZWQgPSBjb250ZXh0LmFkZEVxdWFsaXR5KGVxdWFsaXR5KSxcbiAgICAgICAgICBhc3NpZ25lZCA9IGVxdWFsaXR5QWRkZWQ7IC8vL1xuXG4gICAgYXNzaWduZWQgP1xuICAgICAgY29udGV4dC50cmFjZShgQXNzaWduZWQgdGhlICcke2VxdWFsaXR5U3RyaW5nfScgZXF1YWxpdHkuYCkgOlxuICAgICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gYXNzaWduIHRoZSAnJHtlcXVhbGl0eVN0cmluZ30nIGVxdWFsaXR5LmApO1xuXG4gICAgcmV0dXJuIGFzc2lnbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIGNvbnN0IG5lc3RlZCA9IGZhbHNlO1xuXG4gICAgY29udGV4dC5hZGRWYXJpYWJsZSh2YXJpYWJsZSwgbmVzdGVkKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlVHlwZVN0cmluZyA9IHZhcmlhYmxlLmdldFR5cGVTdHJpbmcoKSxcbiAgICAgICAgICB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgIGFzc2lnbmVkID0gdHJ1ZTtcblxuICAgIGFzc2lnbmVkID9cbiAgICAgIGNvbnRleHQudHJhY2UoYEFzc2lnbmVkIHRoZSAnJHt2YXJpYWJsZVN0cmluZ30nIHZhcmlhYmxlIHdpdGggdHlwZSAnJHt2YXJpYWJsZVR5cGVTdHJpbmd9Jy5gKSA6XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFVuYWJsZSB0byBhc3NpZ24gdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgd2l0aCB0eXBlICcke3ZhcmlhYmxlVHlwZVN0cmluZ30nLmApO1xuXG4gICAgcmV0dXJuIGFzc2lnbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhc3NpZ25Bc3NpZ25tZW50cyhhc3NpZ25tZW50cywgY29udGV4dCkge1xuICBjb25zdCBhc3NpZ25tZW50c0Fzc2lnbmVkID0gYXNzaWdubWVudHMuZXZlcnkoKGFzc2lnbWVudCkgPT4ge1xuICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWdtZW50KGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2lnbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhc3NpZ25tZW50c0Fzc2lnbmVkO1xufVxuIl0sIm5hbWVzIjpbImFzc2lnbkFzc2lnbm1lbnRzIiwiZXF1YWxpdHlBc3NpZ25tZW50RnJvbUVxdWFsaXR5IiwianVkZ2VtZW50QXNzaWdubWVudEZyb21KdWRnZW1lbnQiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVmFyaWFibGUiLCJqdWRnZW1lbnQiLCJjb250ZXh0IiwianVkZ2VtZW50U3RyaW5nIiwiZ2V0U3RyaW5nIiwianVkZ2VtZW50QWRkZWQiLCJhZGRKdWRnZW1lbnQiLCJhc3NpZ25lZCIsInRyYWNlIiwiZGVidWciLCJlcXVhbGl0eSIsImVxdWFsaXR5U3RyaW5nIiwiZXF1YWxpdHlBZGRlZCIsImFkZEVxdWFsaXR5IiwidmFyaWFibGUiLCJuZXN0ZWQiLCJhZGRWYXJpYWJsZSIsInZhcmlhYmxlVHlwZVN0cmluZyIsImdldFR5cGVTdHJpbmciLCJ2YXJpYWJsZVN0cmluZyIsImFzc2lnbm1lbnRzIiwiYXNzaWdubWVudHNBc3NpZ25lZCIsImV2ZXJ5IiwiYXNzaWdtZW50Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFnREE7ZUFBd0JBOztRQWhDUkM7ZUFBQUE7O1FBZEFDO2VBQUFBOztRQTRCQUM7ZUFBQUE7OztBQTVCVCxTQUFTRCxpQ0FBaUNFLFNBQVM7SUFDeEQsT0FBTyxTQUFVQyxPQUFPO1FBQ3RCLElBQU1DLGtCQUFrQkYsVUFBVUcsU0FBUyxJQUNyQ0MsaUJBQWlCSCxRQUFRSSxZQUFZLENBQUNMLFlBQ3RDTSxXQUFXRixnQkFBZ0IsR0FBRztRQUVwQ0UsV0FDRUwsUUFBUU0sS0FBSyxDQUFDLEFBQUMsaUJBQWdDLE9BQWhCTCxpQkFBZ0IsbUJBQzdDRCxRQUFRTyxLQUFLLENBQUMsQUFBQyx5QkFBd0MsT0FBaEJOLGlCQUFnQjtRQUUzRCxPQUFPSTtJQUNUO0FBQ0Y7QUFFTyxTQUFTVCwrQkFBK0JZLFFBQVE7SUFDckQsT0FBTyxTQUFVUixPQUFPO1FBQ3RCLElBQU1TLGlCQUFpQkQsU0FBU04sU0FBUyxJQUNuQ1EsZ0JBQWdCVixRQUFRVyxXQUFXLENBQUNILFdBQ3BDSCxXQUFXSyxlQUFlLEdBQUc7UUFFbkNMLFdBQ0VMLFFBQVFNLEtBQUssQ0FBQyxBQUFDLGlCQUErQixPQUFmRyxnQkFBZSxrQkFDNUNULFFBQVFPLEtBQUssQ0FBQyxBQUFDLHlCQUF1QyxPQUFmRSxnQkFBZTtRQUUxRCxPQUFPSjtJQUNUO0FBQ0Y7QUFFTyxTQUFTUCwrQkFBK0JjLFFBQVE7SUFDckQsT0FBTyxTQUFVWixPQUFPO1FBQ3RCLElBQU1hLFNBQVM7UUFFZmIsUUFBUWMsV0FBVyxDQUFDRixVQUFVQztRQUU5QixJQUFNRSxxQkFBcUJILFNBQVNJLGFBQWEsSUFDM0NDLGlCQUFpQkwsU0FBU1YsU0FBUyxJQUNuQ0csV0FBVztRQUVqQkEsV0FDRUwsUUFBUU0sS0FBSyxDQUFDLEFBQUMsaUJBQXVEUyxPQUF2Q0UsZ0JBQWUsMEJBQTJDLE9BQW5CRixvQkFBbUIsU0FDdkZmLFFBQVFPLEtBQUssQ0FBQyxBQUFDLHlCQUErRFEsT0FBdkNFLGdCQUFlLDBCQUEyQyxPQUFuQkYsb0JBQW1CO1FBRXJHLE9BQU9WO0lBQ1Q7QUFDRjtBQUVlLFNBQVNWLGtCQUFrQnVCLFdBQVcsRUFBRWxCLE9BQU87SUFDNUQsSUFBTW1CLHNCQUFzQkQsWUFBWUUsS0FBSyxDQUFDLFNBQUNDO1FBQzdDLElBQU1oQixXQUFXZ0IsVUFBVXJCO1FBRTNCLElBQUlLLFVBQVU7WUFDWixPQUFPO1FBQ1Q7SUFDRjtJQUVBLE9BQU9jO0FBQ1QifQ==
@@ -9,36 +9,97 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
+ get bracketedCombinatorStatementString () {
13
+ return bracketedCombinatorStatementString;
14
+ },
15
+ get bracketedConstructorTermString () {
16
+ return bracketedConstructorTermString;
17
+ },
18
+ get instantiateBracketedCombinatorStatement () {
19
+ return instantiateBracketedCombinatorStatement;
20
+ },
21
+ get instantiateBracketedConstructorTerm () {
22
+ return instantiateBracketedConstructorTerm;
23
+ },
12
24
  get instantiateFrameSubstitution () {
13
25
  return instantiateFrameSubstitution;
14
26
  },
27
+ get instantiateMetavariable () {
28
+ return instantiateMetavariable;
29
+ },
15
30
  get instantiateReferenceSubstitution () {
16
31
  return instantiateReferenceSubstitution;
17
32
  },
33
+ get instantiateStatement () {
34
+ return instantiateStatement;
35
+ },
18
36
  get instantiateStatementSubstitution () {
19
37
  return instantiateStatementSubstitution;
20
38
  },
39
+ get instantiateTerm () {
40
+ return instantiateTerm;
41
+ },
21
42
  get instantiateTermSubstitution () {
22
43
  return instantiateTermSubstitution;
44
+ },
45
+ get instantiateVariable () {
46
+ return instantiateVariable;
23
47
  }
24
48
  });
49
+ var _nominal = /*#__PURE__*/ _interop_require_default(require("../context/nominal"));
25
50
  var _bnf = require("../utilities/bnf");
26
- var termSubtitutionnPlaceholderBNF = " _ ::= termSubstitution... <END_OF_LINE> ; ", frameSubtitutionnPlaceholderBNF = " _ ::= frameSubstitution... <END_OF_LINE> ; ", statementSubtitutionnPlaceholderBNF = " _ ::= statementSubstitution... <END_OF_LINE> ; ", referenceSubtitutionnPlaceholderBNF = " _ ::= referenceSubstitution... <END_OF_LINE> ; ", termSubtitutionnPlaceholderRule = (0, _bnf.ruleFromBNF)(termSubtitutionnPlaceholderBNF), frameSubtitutionnPlaceholderRule = (0, _bnf.ruleFromBNF)(frameSubtitutionnPlaceholderBNF), statementSubtitutionnPlaceholderRule = (0, _bnf.ruleFromBNF)(statementSubtitutionnPlaceholderBNF), referenceSubtitutionnPlaceholderRule = (0, _bnf.ruleFromBNF)(referenceSubtitutionnPlaceholderBNF);
51
+ var _constants = require("../constants");
52
+ var _metaTypeNames = require("../metaTypeNames");
53
+ function _interop_require_default(obj) {
54
+ return obj && obj.__esModule ? obj : {
55
+ default: obj
56
+ };
57
+ }
58
+ var termPlaceholderBNF = " _ ::= term... <END_OF_LINE> ; ", variablePlaceholderBNF = " _ ::= variable... <END_OF_LINE> ; ", statementPlaceholderBNF = " _ ::= statement... <END_OF_LINE> ; ", metavariablePlaceholderBNF = " _ ::= metavariable... <END_OF_LINE> ; ", termSubstitutionPlaceholderBNF = " _ ::= termSubstitution... <END_OF_LINE> ; ", frameSubstitutionPlaceholderBNF = " _ ::= frameSubstitution... <END_OF_LINE> ; ", statementSubstitutionPlaceholderBNF = " _ ::= statementSubstitution... <END_OF_LINE> ; ", referenceSubstitutionPlaceholderBNF = " _ ::= referenceSubstitution... <END_OF_LINE> ; ", termPlaceholderRule = (0, _bnf.ruleFromBNF)(termPlaceholderBNF), variablePlaceholderRule = (0, _bnf.ruleFromBNF)(variablePlaceholderBNF), statementPlaceholderRule = (0, _bnf.ruleFromBNF)(statementPlaceholderBNF), metavariablePlaceholderRule = (0, _bnf.ruleFromBNF)(metavariablePlaceholderBNF), termSubstitutionPlaceholderRule = (0, _bnf.ruleFromBNF)(termSubstitutionPlaceholderBNF), frameSubstitutionPlaceholderRule = (0, _bnf.ruleFromBNF)(frameSubstitutionPlaceholderBNF), statementSubstitutionPlaceholderRule = (0, _bnf.ruleFromBNF)(statementSubstitutionPlaceholderBNF), referenceSubstitutionPlaceholderRule = (0, _bnf.ruleFromBNF)(referenceSubstitutionPlaceholderBNF);
59
+ var bracketedConstructorTermNode = null, bracketedCombinatorStatementNode = null;
60
+ var bracketedConstructorTermString = "(".concat(_constants.BASE_TYPE_SYMBOL, ")");
61
+ var bracketedCombinatorStatementString = "(".concat(_metaTypeNames.STATEMENT_META_TYPE_NAME, ")");
62
+ function instantiateTerm(string, context) {
63
+ return instantiate(termPlaceholderRule, string, context);
64
+ }
65
+ function instantiateVariable(string, context) {
66
+ return instantiate(variablePlaceholderRule, string, context);
67
+ }
68
+ function instantiateStatement(string, context) {
69
+ return instantiate(statementPlaceholderRule, string, context);
70
+ }
71
+ function instantiateMetavariable(string, context) {
72
+ return instantiate(metavariablePlaceholderRule, string, context);
73
+ }
27
74
  function instantiateTermSubstitution(string, context) {
28
- return instantiate(termSubtitutionnPlaceholderRule, string, context);
75
+ return instantiate(termSubstitutionPlaceholderRule, string, context);
29
76
  }
30
77
  function instantiateFrameSubstitution(string, context) {
31
- return instantiate(frameSubtitutionnPlaceholderRule, string, context);
78
+ return instantiate(frameSubstitutionPlaceholderRule, string, context);
32
79
  }
33
80
  function instantiateStatementSubstitution(string, context) {
34
- return instantiate(statementSubtitutionnPlaceholderRule, string, context);
81
+ return instantiate(statementSubstitutionPlaceholderRule, string, context);
35
82
  }
36
83
  function instantiateReferenceSubstitution(string, context) {
37
- return instantiate(referenceSubtitutionnPlaceholderRule, string, context);
84
+ return instantiate(referenceSubstitutionPlaceholderRule, string, context);
85
+ }
86
+ function instantiateBracketedConstructorTerm() {
87
+ if (bracketedConstructorTermNode === null) {
88
+ var placeholderRule = termPlaceholderRule, string = bracketedConstructorTermString, context = _nominal.default, node = instantiate(placeholderRule, string, context);
89
+ bracketedConstructorTermNode = node; ///
90
+ }
91
+ return bracketedConstructorTermNode;
92
+ }
93
+ function instantiateBracketedCombinatorStatement() {
94
+ if (bracketedCombinatorStatementNode === null) {
95
+ var placeholderRule = statementPlaceholderRule, string = bracketedCombinatorStatementString, context = _nominal.default, node = instantiate(placeholderRule, string, context);
96
+ bracketedCombinatorStatementNode = node; ///
97
+ }
98
+ return bracketedCombinatorStatementNode;
38
99
  }
39
100
  function instantiate(placeholderRule, string, context) {
40
101
  var node;
41
- var lexer = context.getLexer(), parser = context.getParser(), content = "".concat(string, "\n"), startRule = placeholderRule, tokens = lexer.tokenise(content);
102
+ var lexer = context.getLexer(), parser = context.getParser(), content = "".concat(string, "\n"), tokens = lexer.tokenise(content), startRule = placeholderRule; ///
42
103
  node = parser.parse(tokens, startRule);
43
104
  var nonTerminalNode = node; ///
44
105
  nonTerminalNode.someChildNode(function(childNode) {
@@ -48,4 +109,4 @@ function instantiate(placeholderRule, string, context) {
48
109
  return node;
49
110
  }
50
111
 
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2luc3RhbnRpYXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBydWxlRnJvbUJORiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYm5mXCI7XG5cbmNvbnN0IHRlcm1TdWJ0aXR1dGlvbm5QbGFjZWhvbGRlckJORiA9IGAgXyA6Oj0gdGVybVN1YnN0aXR1dGlvbi4uLiA8RU5EX09GX0xJTkU+IDsgYCxcbiAgICAgIGZyYW1lU3VidGl0dXRpb25uUGxhY2Vob2xkZXJCTkYgPSBgIF8gOjo9IGZyYW1lU3Vic3RpdHV0aW9uLi4uIDxFTkRfT0ZfTElORT4gOyBgLFxuICAgICAgc3RhdGVtZW50U3VidGl0dXRpb25uUGxhY2Vob2xkZXJCTkYgPSBgIF8gOjo9IHN0YXRlbWVudFN1YnN0aXR1dGlvbi4uLiA8RU5EX09GX0xJTkU+IDsgYCxcbiAgICAgIHJlZmVyZW5jZVN1YnRpdHV0aW9ublBsYWNlaG9sZGVyQk5GID0gYCBfIDo6PSByZWZlcmVuY2VTdWJzdGl0dXRpb24uLi4gPEVORF9PRl9MSU5FPiA7IGAsXG4gICAgICB0ZXJtU3VidGl0dXRpb25uUGxhY2Vob2xkZXJSdWxlID0gcnVsZUZyb21CTkYodGVybVN1YnRpdHV0aW9ublBsYWNlaG9sZGVyQk5GKSxcbiAgICAgIGZyYW1lU3VidGl0dXRpb25uUGxhY2Vob2xkZXJSdWxlID0gcnVsZUZyb21CTkYoZnJhbWVTdWJ0aXR1dGlvbm5QbGFjZWhvbGRlckJORiksXG4gICAgICBzdGF0ZW1lbnRTdWJ0aXR1dGlvbm5QbGFjZWhvbGRlclJ1bGUgPSBydWxlRnJvbUJORihzdGF0ZW1lbnRTdWJ0aXR1dGlvbm5QbGFjZWhvbGRlckJORiksXG4gICAgICByZWZlcmVuY2VTdWJ0aXR1dGlvbm5QbGFjZWhvbGRlclJ1bGUgPSBydWxlRnJvbUJORihyZWZlcmVuY2VTdWJ0aXR1dGlvbm5QbGFjZWhvbGRlckJORik7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW50aWF0ZVRlcm1TdWJzdGl0dXRpb24oc3RyaW5nLCBjb250ZXh0KSB7IHJldHVybiBpbnN0YW50aWF0ZSh0ZXJtU3VidGl0dXRpb25uUGxhY2Vob2xkZXJSdWxlLCBzdHJpbmcsIGNvbnRleHQpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW50aWF0ZUZyYW1lU3Vic3RpdHV0aW9uKHN0cmluZywgY29udGV4dCkgeyByZXR1cm4gaW5zdGFudGlhdGUoZnJhbWVTdWJ0aXR1dGlvbm5QbGFjZWhvbGRlclJ1bGUsIHN0cmluZywgY29udGV4dCk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbnRpYXRlU3RhdGVtZW50U3Vic3RpdHV0aW9uKHN0cmluZywgY29udGV4dCkgeyByZXR1cm4gaW5zdGFudGlhdGUoc3RhdGVtZW50U3VidGl0dXRpb25uUGxhY2Vob2xkZXJSdWxlLCBzdHJpbmcsIGNvbnRleHQpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW50aWF0ZVJlZmVyZW5jZVN1YnN0aXR1dGlvbihzdHJpbmcsIGNvbnRleHQpIHsgcmV0dXJuIGluc3RhbnRpYXRlKHJlZmVyZW5jZVN1YnRpdHV0aW9ublBsYWNlaG9sZGVyUnVsZSwgc3RyaW5nLCBjb250ZXh0KTsgfVxuXG5mdW5jdGlvbiBpbnN0YW50aWF0ZShwbGFjZWhvbGRlclJ1bGUsIHN0cmluZywgY29udGV4dCkge1xuICBsZXQgbm9kZTtcblxuICBjb25zdCBsZXhlciA9IGNvbnRleHQuZ2V0TGV4ZXIoKSxcbiAgICAgICAgcGFyc2VyID0gY29udGV4dC5nZXRQYXJzZXIoKSxcbiAgICAgICAgY29udGVudCA9IGAke3N0cmluZ31cbmAsXG4gICAgICAgIHN0YXJ0UnVsZSA9IHBsYWNlaG9sZGVyUnVsZSwgLy8vXG4gICAgICAgIHRva2VucyA9IGxleGVyLnRva2VuaXNlKGNvbnRlbnQpO1xuXG4gIG5vZGUgPSBwYXJzZXIucGFyc2UodG9rZW5zLCBzdGFydFJ1bGUpO1xuXG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGU7IC8vL1xuXG4gIG5vblRlcm1pbmFsTm9kZS5zb21lQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICBub2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgIHJldHVybiB0cnVlO1xuICB9KVxuXG4gIHJldHVybiBub2RlO1xufVxuIl0sIm5hbWVzIjpbImluc3RhbnRpYXRlRnJhbWVTdWJzdGl0dXRpb24iLCJpbnN0YW50aWF0ZVJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsImluc3RhbnRpYXRlU3RhdGVtZW50U3Vic3RpdHV0aW9uIiwiaW5zdGFudGlhdGVUZXJtU3Vic3RpdHV0aW9uIiwidGVybVN1YnRpdHV0aW9ublBsYWNlaG9sZGVyQk5GIiwiZnJhbWVTdWJ0aXR1dGlvbm5QbGFjZWhvbGRlckJORiIsInN0YXRlbWVudFN1YnRpdHV0aW9ublBsYWNlaG9sZGVyQk5GIiwicmVmZXJlbmNlU3VidGl0dXRpb25uUGxhY2Vob2xkZXJCTkYiLCJ0ZXJtU3VidGl0dXRpb25uUGxhY2Vob2xkZXJSdWxlIiwicnVsZUZyb21CTkYiLCJmcmFtZVN1YnRpdHV0aW9ublBsYWNlaG9sZGVyUnVsZSIsInN0YXRlbWVudFN1YnRpdHV0aW9ublBsYWNlaG9sZGVyUnVsZSIsInJlZmVyZW5jZVN1YnRpdHV0aW9ublBsYWNlaG9sZGVyUnVsZSIsInN0cmluZyIsImNvbnRleHQiLCJpbnN0YW50aWF0ZSIsInBsYWNlaG9sZGVyUnVsZSIsIm5vZGUiLCJsZXhlciIsImdldExleGVyIiwicGFyc2VyIiwiZ2V0UGFyc2VyIiwiY29udGVudCIsInN0YXJ0UnVsZSIsInRva2VucyIsInRva2VuaXNlIiwicGFyc2UiLCJub25UZXJtaW5hbE5vZGUiLCJzb21lQ2hpbGROb2RlIiwiY2hpbGROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFlZ0JBO2VBQUFBOztRQUlBQztlQUFBQTs7UUFGQUM7ZUFBQUE7O1FBSkFDO2VBQUFBOzs7bUJBWFk7QUFFNUIsSUFBTUMsaUNBQWlDLCtDQUNqQ0Msa0NBQWtDLGdEQUNsQ0Msc0NBQXNDLG9EQUN0Q0Msc0NBQXNDLG9EQUN0Q0Msa0NBQWtDQyxJQUFBQSxnQkFBVyxFQUFDTCxpQ0FDOUNNLG1DQUFtQ0QsSUFBQUEsZ0JBQVcsRUFBQ0osa0NBQy9DTSx1Q0FBdUNGLElBQUFBLGdCQUFXLEVBQUNILHNDQUNuRE0sdUNBQXVDSCxJQUFBQSxnQkFBVyxFQUFDRjtBQUVsRCxTQUFTSiw0QkFBNEJVLE1BQU0sRUFBRUMsT0FBTztJQUFJLE9BQU9DLFlBQVlQLGlDQUFpQ0ssUUFBUUM7QUFBVTtBQUU5SCxTQUFTZCw2QkFBNkJhLE1BQU0sRUFBRUMsT0FBTztJQUFJLE9BQU9DLFlBQVlMLGtDQUFrQ0csUUFBUUM7QUFBVTtBQUVoSSxTQUFTWixpQ0FBaUNXLE1BQU0sRUFBRUMsT0FBTztJQUFJLE9BQU9DLFlBQVlKLHNDQUFzQ0UsUUFBUUM7QUFBVTtBQUV4SSxTQUFTYixpQ0FBaUNZLE1BQU0sRUFBRUMsT0FBTztJQUFJLE9BQU9DLFlBQVlILHNDQUFzQ0MsUUFBUUM7QUFBVTtBQUUvSSxTQUFTQyxZQUFZQyxlQUFlLEVBQUVILE1BQU0sRUFBRUMsT0FBTztJQUNuRCxJQUFJRztJQUVKLElBQU1DLFFBQVFKLFFBQVFLLFFBQVEsSUFDeEJDLFNBQVNOLFFBQVFPLFNBQVMsSUFDMUJDLFVBQVUsQUFBQyxHQUFTLE9BQVBULFFBQU8sT0FFcEJVLFlBQVlQLGlCQUNaUSxTQUFTTixNQUFNTyxRQUFRLENBQUNIO0lBRTlCTCxPQUFPRyxPQUFPTSxLQUFLLENBQUNGLFFBQVFEO0lBRTVCLElBQU1JLGtCQUFrQlYsTUFBTSxHQUFHO0lBRWpDVSxnQkFBZ0JDLGFBQWEsQ0FBQyxTQUFDQztRQUM3QlosT0FBT1ksV0FBVyxHQUFHO1FBRXJCLE9BQU87SUFDVDtJQUVBLE9BQU9aO0FBQ1QifQ==
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2luc3RhbnRpYXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgbm9taW5hbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbm9taW5hbFwiO1xuXG5pbXBvcnQgeyBydWxlRnJvbUJORiB9IGZyb20gXCIuLi91dGlsaXRpZXMvYm5mXCI7XG5pbXBvcnQgeyBCQVNFX1RZUEVfU1lNQk9MIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgU1RBVEVNRU5UX01FVEFfVFlQRV9OQU1FIH0gZnJvbSBcIi4uL21ldGFUeXBlTmFtZXNcIjtcblxuY29uc3QgdGVybVBsYWNlaG9sZGVyQk5GID0gYCBfIDo6PSB0ZXJtLi4uIDxFTkRfT0ZfTElORT4gOyBgLFxuICAgICAgdmFyaWFibGVQbGFjZWhvbGRlckJORiA9IGAgXyA6Oj0gdmFyaWFibGUuLi4gPEVORF9PRl9MSU5FPiA7IGAsXG4gICAgICBzdGF0ZW1lbnRQbGFjZWhvbGRlckJORiA9IGAgXyA6Oj0gc3RhdGVtZW50Li4uIDxFTkRfT0ZfTElORT4gOyBgLFxuICAgICAgbWV0YXZhcmlhYmxlUGxhY2Vob2xkZXJCTkYgPSBgIF8gOjo9IG1ldGF2YXJpYWJsZS4uLiA8RU5EX09GX0xJTkU+IDsgYCxcbiAgICAgIHRlcm1TdWJzdGl0dXRpb25QbGFjZWhvbGRlckJORiA9IGAgXyA6Oj0gdGVybVN1YnN0aXR1dGlvbi4uLiA8RU5EX09GX0xJTkU+IDsgYCxcbiAgICAgIGZyYW1lU3Vic3RpdHV0aW9uUGxhY2Vob2xkZXJCTkYgPSBgIF8gOjo9IGZyYW1lU3Vic3RpdHV0aW9uLi4uIDxFTkRfT0ZfTElORT4gOyBgLFxuICAgICAgc3RhdGVtZW50U3Vic3RpdHV0aW9uUGxhY2Vob2xkZXJCTkYgPSBgIF8gOjo9IHN0YXRlbWVudFN1YnN0aXR1dGlvbi4uLiA8RU5EX09GX0xJTkU+IDsgYCxcbiAgICAgIHJlZmVyZW5jZVN1YnN0aXR1dGlvblBsYWNlaG9sZGVyQk5GID0gYCBfIDo6PSByZWZlcmVuY2VTdWJzdGl0dXRpb24uLi4gPEVORF9PRl9MSU5FPiA7IGAsXG4gICAgICB0ZXJtUGxhY2Vob2xkZXJSdWxlID0gcnVsZUZyb21CTkYodGVybVBsYWNlaG9sZGVyQk5GKSxcbiAgICAgIHZhcmlhYmxlUGxhY2Vob2xkZXJSdWxlID0gcnVsZUZyb21CTkYodmFyaWFibGVQbGFjZWhvbGRlckJORiksXG4gICAgICBzdGF0ZW1lbnRQbGFjZWhvbGRlclJ1bGUgPSBydWxlRnJvbUJORihzdGF0ZW1lbnRQbGFjZWhvbGRlckJORiksXG4gICAgICBtZXRhdmFyaWFibGVQbGFjZWhvbGRlclJ1bGUgPSBydWxlRnJvbUJORihtZXRhdmFyaWFibGVQbGFjZWhvbGRlckJORiksXG4gICAgICB0ZXJtU3Vic3RpdHV0aW9uUGxhY2Vob2xkZXJSdWxlID0gcnVsZUZyb21CTkYodGVybVN1YnN0aXR1dGlvblBsYWNlaG9sZGVyQk5GKSxcbiAgICAgIGZyYW1lU3Vic3RpdHV0aW9uUGxhY2Vob2xkZXJSdWxlID0gcnVsZUZyb21CTkYoZnJhbWVTdWJzdGl0dXRpb25QbGFjZWhvbGRlckJORiksXG4gICAgICBzdGF0ZW1lbnRTdWJzdGl0dXRpb25QbGFjZWhvbGRlclJ1bGUgPSBydWxlRnJvbUJORihzdGF0ZW1lbnRTdWJzdGl0dXRpb25QbGFjZWhvbGRlckJORiksXG4gICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb25QbGFjZWhvbGRlclJ1bGUgPSBydWxlRnJvbUJORihyZWZlcmVuY2VTdWJzdGl0dXRpb25QbGFjZWhvbGRlckJORik7XG5cbmxldCBicmFja2V0ZWRDb25zdHJ1Y3RvclRlcm1Ob2RlID0gbnVsbCxcbiAgICBicmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50Tm9kZSA9IG51bGw7XG5cbmV4cG9ydCBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvclRlcm1TdHJpbmcgPSBgKCR7QkFTRV9UWVBFX1NZTUJPTH0pYDtcbmV4cG9ydCBjb25zdCBicmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50U3RyaW5nID0gYCgke1NUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRX0pYDtcblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbnRpYXRlVGVybShzdHJpbmcsIGNvbnRleHQpIHsgcmV0dXJuIGluc3RhbnRpYXRlKHRlcm1QbGFjZWhvbGRlclJ1bGUsIHN0cmluZywgY29udGV4dCk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbnRpYXRlVmFyaWFibGUoc3RyaW5nLCBjb250ZXh0KSB7IHJldHVybiBpbnN0YW50aWF0ZSh2YXJpYWJsZVBsYWNlaG9sZGVyUnVsZSwgc3RyaW5nLCBjb250ZXh0KTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFudGlhdGVTdGF0ZW1lbnQoc3RyaW5nLCBjb250ZXh0KSB7IHJldHVybiBpbnN0YW50aWF0ZShzdGF0ZW1lbnRQbGFjZWhvbGRlclJ1bGUsIHN0cmluZywgY29udGV4dCk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbnRpYXRlTWV0YXZhcmlhYmxlKHN0cmluZywgY29udGV4dCkgeyByZXR1cm4gaW5zdGFudGlhdGUobWV0YXZhcmlhYmxlUGxhY2Vob2xkZXJSdWxlLCBzdHJpbmcsIGNvbnRleHQpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW50aWF0ZVRlcm1TdWJzdGl0dXRpb24oc3RyaW5nLCBjb250ZXh0KSB7IHJldHVybiBpbnN0YW50aWF0ZSh0ZXJtU3Vic3RpdHV0aW9uUGxhY2Vob2xkZXJSdWxlLCBzdHJpbmcsIGNvbnRleHQpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW50aWF0ZUZyYW1lU3Vic3RpdHV0aW9uKHN0cmluZywgY29udGV4dCkgeyByZXR1cm4gaW5zdGFudGlhdGUoZnJhbWVTdWJzdGl0dXRpb25QbGFjZWhvbGRlclJ1bGUsIHN0cmluZywgY29udGV4dCk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbnRpYXRlU3RhdGVtZW50U3Vic3RpdHV0aW9uKHN0cmluZywgY29udGV4dCkgeyByZXR1cm4gaW5zdGFudGlhdGUoc3RhdGVtZW50U3Vic3RpdHV0aW9uUGxhY2Vob2xkZXJSdWxlLCBzdHJpbmcsIGNvbnRleHQpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW50aWF0ZVJlZmVyZW5jZVN1YnN0aXR1dGlvbihzdHJpbmcsIGNvbnRleHQpIHsgcmV0dXJuIGluc3RhbnRpYXRlKHJlZmVyZW5jZVN1YnN0aXR1dGlvblBsYWNlaG9sZGVyUnVsZSwgc3RyaW5nLCBjb250ZXh0KTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFudGlhdGVCcmFja2V0ZWRDb25zdHJ1Y3RvclRlcm0oKSB7XG4gIGlmIChicmFja2V0ZWRDb25zdHJ1Y3RvclRlcm1Ob2RlID09PSBudWxsKSB7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJSdWxlID0gdGVybVBsYWNlaG9sZGVyUnVsZSwgLy8vXG4gICAgICAgICAgc3RyaW5nID0gYnJhY2tldGVkQ29uc3RydWN0b3JUZXJtU3RyaW5nLFxuICAgICAgICAgIGNvbnRleHQgPSBub21pbmFsQ29udGV4dCwgLy8vXG4gICAgICAgICAgbm9kZSA9IGluc3RhbnRpYXRlKHBsYWNlaG9sZGVyUnVsZSwgc3RyaW5nLCBjb250ZXh0KTtcblxuICAgIGJyYWNrZXRlZENvbnN0cnVjdG9yVGVybU5vZGUgPSBub2RlOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYnJhY2tldGVkQ29uc3RydWN0b3JUZXJtTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbnRpYXRlQnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudCgpIHtcbiAgaWYgKGJyYWNrZXRlZENvbWJpbmF0b3JTdGF0ZW1lbnROb2RlID09PSBudWxsKSB7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJSdWxlID0gc3RhdGVtZW50UGxhY2Vob2xkZXJSdWxlLCAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBicmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50U3RyaW5nLCAgLy8vXG4gICAgICAgICAgY29udGV4dCA9IG5vbWluYWxDb250ZXh0LCAvLy9cbiAgICAgICAgICBub2RlID0gaW5zdGFudGlhdGUocGxhY2Vob2xkZXJSdWxlLCBzdHJpbmcsIGNvbnRleHQpO1xuXG4gICAgYnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudE5vZGUgPSBub2RlOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYnJhY2tldGVkQ29tYmluYXRvclN0YXRlbWVudE5vZGU7XG59XG5cbmZ1bmN0aW9uIGluc3RhbnRpYXRlKHBsYWNlaG9sZGVyUnVsZSwgc3RyaW5nLCBjb250ZXh0KSB7XG4gIGxldCBub2RlO1xuXG4gIGNvbnN0IGxleGVyID0gY29udGV4dC5nZXRMZXhlcigpLFxuICAgICAgICBwYXJzZXIgPSBjb250ZXh0LmdldFBhcnNlcigpLFxuICAgICAgICBjb250ZW50ID0gYCR7c3RyaW5nfVxuYCxcbiAgICAgICAgdG9rZW5zID0gbGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgIHN0YXJ0UnVsZSA9IHBsYWNlaG9sZGVyUnVsZTsgIC8vL1xuXG4gIG5vZGUgPSBwYXJzZXIucGFyc2UodG9rZW5zLCBzdGFydFJ1bGUpO1xuXG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGU7IC8vL1xuXG4gIG5vblRlcm1pbmFsTm9kZS5zb21lQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICBub2RlID0gY2hpbGROb2RlOyAvLy9cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gbm9kZTtcbn1cbiJdLCJuYW1lcyI6WyJicmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50U3RyaW5nIiwiYnJhY2tldGVkQ29uc3RydWN0b3JUZXJtU3RyaW5nIiwiaW5zdGFudGlhdGVCcmFja2V0ZWRDb21iaW5hdG9yU3RhdGVtZW50IiwiaW5zdGFudGlhdGVCcmFja2V0ZWRDb25zdHJ1Y3RvclRlcm0iLCJpbnN0YW50aWF0ZUZyYW1lU3Vic3RpdHV0aW9uIiwiaW5zdGFudGlhdGVNZXRhdmFyaWFibGUiLCJpbnN0YW50aWF0ZVJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsImluc3RhbnRpYXRlU3RhdGVtZW50IiwiaW5zdGFudGlhdGVTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJpbnN0YW50aWF0ZVRlcm0iLCJpbnN0YW50aWF0ZVRlcm1TdWJzdGl0dXRpb24iLCJpbnN0YW50aWF0ZVZhcmlhYmxlIiwidGVybVBsYWNlaG9sZGVyQk5GIiwidmFyaWFibGVQbGFjZWhvbGRlckJORiIsInN0YXRlbWVudFBsYWNlaG9sZGVyQk5GIiwibWV0YXZhcmlhYmxlUGxhY2Vob2xkZXJCTkYiLCJ0ZXJtU3Vic3RpdHV0aW9uUGxhY2Vob2xkZXJCTkYiLCJmcmFtZVN1YnN0aXR1dGlvblBsYWNlaG9sZGVyQk5GIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uUGxhY2Vob2xkZXJCTkYiLCJyZWZlcmVuY2VTdWJzdGl0dXRpb25QbGFjZWhvbGRlckJORiIsInRlcm1QbGFjZWhvbGRlclJ1bGUiLCJydWxlRnJvbUJORiIsInZhcmlhYmxlUGxhY2Vob2xkZXJSdWxlIiwic3RhdGVtZW50UGxhY2Vob2xkZXJSdWxlIiwibWV0YXZhcmlhYmxlUGxhY2Vob2xkZXJSdWxlIiwidGVybVN1YnN0aXR1dGlvblBsYWNlaG9sZGVyUnVsZSIsImZyYW1lU3Vic3RpdHV0aW9uUGxhY2Vob2xkZXJSdWxlIiwic3RhdGVtZW50U3Vic3RpdHV0aW9uUGxhY2Vob2xkZXJSdWxlIiwicmVmZXJlbmNlU3Vic3RpdHV0aW9uUGxhY2Vob2xkZXJSdWxlIiwiYnJhY2tldGVkQ29uc3RydWN0b3JUZXJtTm9kZSIsImJyYWNrZXRlZENvbWJpbmF0b3JTdGF0ZW1lbnROb2RlIiwiQkFTRV9UWVBFX1NZTUJPTCIsIlNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSIsInN0cmluZyIsImNvbnRleHQiLCJpbnN0YW50aWF0ZSIsInBsYWNlaG9sZGVyUnVsZSIsIm5vbWluYWxDb250ZXh0Iiwibm9kZSIsImxleGVyIiwiZ2V0TGV4ZXIiLCJwYXJzZXIiLCJnZXRQYXJzZXIiLCJjb250ZW50IiwidG9rZW5zIiwidG9rZW5pc2UiLCJzdGFydFJ1bGUiLCJwYXJzZSIsIm5vblRlcm1pbmFsTm9kZSIsInNvbWVDaGlsZE5vZGUiLCJjaGlsZE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTZCYUE7ZUFBQUE7O1FBREFDO2VBQUFBOztRQWdDR0M7ZUFBQUE7O1FBYkFDO2VBQUFBOztRQU5BQztlQUFBQTs7UUFKQUM7ZUFBQUE7O1FBUUFDO2VBQUFBOztRQVZBQztlQUFBQTs7UUFRQUM7ZUFBQUE7O1FBWkFDO2VBQUFBOztRQVFBQztlQUFBQTs7UUFOQUM7ZUFBQUE7Ozs4REEvQlc7bUJBRUM7eUJBQ0s7NkJBQ1E7Ozs7OztBQUV6QyxJQUFNQyxxQkFBcUIsbUNBQ3JCQyx5QkFBeUIsdUNBQ3pCQywwQkFBMEIsd0NBQzFCQyw2QkFBNkIsMkNBQzdCQyxpQ0FBaUMsK0NBQ2pDQyxrQ0FBa0MsZ0RBQ2xDQyxzQ0FBc0Msb0RBQ3RDQyxzQ0FBc0Msb0RBQ3RDQyxzQkFBc0JDLElBQUFBLGdCQUFXLEVBQUNULHFCQUNsQ1UsMEJBQTBCRCxJQUFBQSxnQkFBVyxFQUFDUix5QkFDdENVLDJCQUEyQkYsSUFBQUEsZ0JBQVcsRUFBQ1AsMEJBQ3ZDVSw4QkFBOEJILElBQUFBLGdCQUFXLEVBQUNOLDZCQUMxQ1Usa0NBQWtDSixJQUFBQSxnQkFBVyxFQUFDTCxpQ0FDOUNVLG1DQUFtQ0wsSUFBQUEsZ0JBQVcsRUFBQ0osa0NBQy9DVSx1Q0FBdUNOLElBQUFBLGdCQUFXLEVBQUNILHNDQUNuRFUsdUNBQXVDUCxJQUFBQSxnQkFBVyxFQUFDRjtBQUV6RCxJQUFJVSwrQkFBK0IsTUFDL0JDLG1DQUFtQztBQUVoQyxJQUFNN0IsaUNBQWlDLEFBQUMsSUFBb0IsT0FBakI4QiwyQkFBZ0IsRUFBQztBQUM1RCxJQUFNL0IscUNBQXFDLEFBQUMsSUFBNEIsT0FBekJnQyx1Q0FBd0IsRUFBQztBQUV4RSxTQUFTdkIsZ0JBQWdCd0IsTUFBTSxFQUFFQyxPQUFPO0lBQUksT0FBT0MsWUFBWWYscUJBQXFCYSxRQUFRQztBQUFVO0FBRXRHLFNBQVN2QixvQkFBb0JzQixNQUFNLEVBQUVDLE9BQU87SUFBSSxPQUFPQyxZQUFZYix5QkFBeUJXLFFBQVFDO0FBQVU7QUFFOUcsU0FBUzNCLHFCQUFxQjBCLE1BQU0sRUFBRUMsT0FBTztJQUFJLE9BQU9DLFlBQVlaLDBCQUEwQlUsUUFBUUM7QUFBVTtBQUVoSCxTQUFTN0Isd0JBQXdCNEIsTUFBTSxFQUFFQyxPQUFPO0lBQUksT0FBT0MsWUFBWVgsNkJBQTZCUyxRQUFRQztBQUFVO0FBRXRILFNBQVN4Qiw0QkFBNEJ1QixNQUFNLEVBQUVDLE9BQU87SUFBSSxPQUFPQyxZQUFZVixpQ0FBaUNRLFFBQVFDO0FBQVU7QUFFOUgsU0FBUzlCLDZCQUE2QjZCLE1BQU0sRUFBRUMsT0FBTztJQUFJLE9BQU9DLFlBQVlULGtDQUFrQ08sUUFBUUM7QUFBVTtBQUVoSSxTQUFTMUIsaUNBQWlDeUIsTUFBTSxFQUFFQyxPQUFPO0lBQUksT0FBT0MsWUFBWVIsc0NBQXNDTSxRQUFRQztBQUFVO0FBRXhJLFNBQVM1QixpQ0FBaUMyQixNQUFNLEVBQUVDLE9BQU87SUFBSSxPQUFPQyxZQUFZUCxzQ0FBc0NLLFFBQVFDO0FBQVU7QUFFeEksU0FBUy9CO0lBQ2QsSUFBSTBCLGlDQUFpQyxNQUFNO1FBQ3pDLElBQU1PLGtCQUFrQmhCLHFCQUNsQmEsU0FBU2hDLGdDQUNUaUMsVUFBVUcsZ0JBQWMsRUFDeEJDLE9BQU9ILFlBQVlDLGlCQUFpQkgsUUFBUUM7UUFFbERMLCtCQUErQlMsTUFBTyxHQUFHO0lBQzNDO0lBRUEsT0FBT1Q7QUFDVDtBQUVPLFNBQVMzQjtJQUNkLElBQUk0QixxQ0FBcUMsTUFBTTtRQUM3QyxJQUFNTSxrQkFBa0JiLDBCQUNsQlUsU0FBU2pDLG9DQUNUa0MsVUFBVUcsZ0JBQWMsRUFDeEJDLE9BQU9ILFlBQVlDLGlCQUFpQkgsUUFBUUM7UUFFbERKLG1DQUFtQ1EsTUFBTyxHQUFHO0lBQy9DO0lBRUEsT0FBT1I7QUFDVDtBQUVBLFNBQVNLLFlBQVlDLGVBQWUsRUFBRUgsTUFBTSxFQUFFQyxPQUFPO0lBQ25ELElBQUlJO0lBRUosSUFBTUMsUUFBUUwsUUFBUU0sUUFBUSxJQUN4QkMsU0FBU1AsUUFBUVEsU0FBUyxJQUMxQkMsVUFBVSxBQUFDLEdBQVMsT0FBUFYsUUFBTyxPQUVwQlcsU0FBU0wsTUFBTU0sUUFBUSxDQUFDRixVQUN4QkcsWUFBWVYsaUJBQWtCLEdBQUc7SUFFdkNFLE9BQU9HLE9BQU9NLEtBQUssQ0FBQ0gsUUFBUUU7SUFFNUIsSUFBTUUsa0JBQWtCVixNQUFNLEdBQUc7SUFFakNVLGdCQUFnQkMsYUFBYSxDQUFDLFNBQUNDO1FBQzdCWixPQUFPWSxXQUFXLEdBQUc7UUFFckIsT0FBTztJQUNUO0lBRUEsT0FBT1o7QUFDVCJ9
@@ -21,17 +21,17 @@ _export(exports, {
21
21
  get unifyStatementIntrinsically () {
22
22
  return unifyStatementIntrinsically;
23
23
  },
24
- get unifyStatementWithCombinator () {
25
- return unifyStatementWithCombinator;
24
+ get unifyStatementWithCombinatorStatement () {
25
+ return unifyStatementWithCombinatorStatement;
26
26
  },
27
27
  get unifySubstitution () {
28
28
  return unifySubstitution;
29
29
  },
30
- get unifyTermWithConstructor () {
31
- return unifyTermWithConstructor;
30
+ get unifyTermWithConstructorTerm () {
31
+ return unifyTermWithConstructorTerm;
32
32
  }
33
33
  });
34
- var _ontology = /*#__PURE__*/ _interop_require_default(require("../ontology"));
34
+ var _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
35
35
  var _query = require("../utilities/query");
36
36
  var _pass = require("../utilities/pass");
37
37
  function _array_like_to_array(arr, len) {
@@ -440,7 +440,7 @@ _define_property(CombinatorPass, "maps", [
440
440
  context = generalContext; ///
441
441
  var metaTypeName = metaTypeNode.getMetaTypeName(), metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
442
442
  context = specificContext; ///
443
- var Statement = _ontology.default.Statement, statement = Statement.fromStatementNode(statementNode, context), statementVerifiesGivenType = statement.verifyGivenMetaType(metaType, assignments, stated, context);
443
+ var Statement = _elements.default.Statement, statement = Statement.fromStatementNode(statementNode, context), statementVerifiesGivenType = statement.verifyGivenMetaType(metaType, assignments, stated, context);
444
444
  if (statementVerifiesGivenType) {
445
445
  success = true;
446
446
  }
@@ -457,7 +457,7 @@ _define_property(CombinatorPass, "maps", [
457
457
  context = generalContext; ///
458
458
  var metaTypeName = metaTypeNode.getMetaTypeName(), metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
459
459
  context = specificContext; ///
460
- var Frame = _ontology.default.Frame, frame = Frame.fromFrameNode(frameNode, context), frameVerifiesGivenType = frame.verifyGivenMetaType(metaType, assignments, stated, context);
460
+ var Frame = _elements.default.Frame, frame = Frame.fromFrameNode(frameNode, context), frameVerifiesGivenType = frame.verifyGivenMetaType(metaType, assignments, stated, context);
461
461
  if (frameVerifiesGivenType) {
462
462
  success = true;
463
463
  }
@@ -475,7 +475,7 @@ _define_property(CombinatorPass, "maps", [
475
475
  var type = context.findTypeByNominalTypeName(nominalTypeName);
476
476
  if (type !== null) {
477
477
  context = specificContext; ///
478
- var Term = _ontology.default.Term, term = Term.fromTermNode(termNode, context), termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
478
+ var Term = _elements.default.Term, term = Term.fromTermNode(termNode, context), termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
479
479
  if (termVerifiesGivenType) {
480
480
  success = true;
481
481
  }
@@ -504,7 +504,7 @@ _define_property(ConstructorPass, "maps", [
504
504
  var type = context.findTypeByNominalTypeName(nominalTypeName);
505
505
  if (type !== null) {
506
506
  context = specificContext; ///
507
- var Term = _ontology.default.Term, term = Term.fromTermNode(termNode, context), termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
507
+ var Term = _elements.default.Term, term = Term.fromTermNode(termNode, context), termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
508
508
  if (termVerifiesGivenType) {
509
509
  success = true;
510
510
  }
@@ -587,14 +587,6 @@ function unifyMetavariable(generalMetavariable, specificMetavariable, generalCon
587
587
  }
588
588
  return metavariableUnifies;
589
589
  }
590
- function unifyTermWithConstructor(term, constructor, context) {
591
- var termUnifiesWithConstructor = false;
592
- var termNode = term.getNode(), generalContext = context, specificContext = context, constructorTerm = constructor.getTerm(), constructorTermNode = constructorTerm.getNode(), success = constructorPass.run(constructorTermNode, termNode, generalContext, specificContext);
593
- if (success) {
594
- termUnifiesWithConstructor = true;
595
- }
596
- return termUnifiesWithConstructor;
597
- }
598
590
  function unifyStatementIntrinsically(generalStatement, specificStatement, substitutions, generalContext, specificContext) {
599
591
  var statementUnifiesIntrinsically = false;
600
592
  var generalStatementNode = generalStatement.getNode(), specificStatementNode = specificStatement.getNode(), generalNode = generalStatementNode, specificNode = specificStatementNode, success = intrinsicLevelPass.run(generalNode, specificNode, substitutions, generalContext, specificContext);
@@ -603,14 +595,6 @@ function unifyStatementIntrinsically(generalStatement, specificStatement, substi
603
595
  }
604
596
  return statementUnifiesIntrinsically;
605
597
  }
606
- function unifyStatementWithCombinator(statement, combinator, assignments, stated, context) {
607
- var statementUnifiesWithCombinator = false;
608
- var statementNode = statement.getNode(), generalContext = context, specificContext = context, combinatorStatement = combinator.getStatement(), combinatorStatementNode = combinatorStatement.getNode(), success = combinatorPass.run(combinatorStatementNode, statementNode, assignments, stated, generalContext, specificContext);
609
- if (success) {
610
- statementUnifiesWithCombinator = true;
611
- }
612
- return statementUnifiesWithCombinator;
613
- }
614
598
  function unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, substitutions, generalContext, specificContext) {
615
599
  var metavariableUnifiesIntrinsically = false;
616
600
  var generalMetavariableNode = generalMetavariable.getNode(), specificMetavariableNode = specificMetavariable.getNode(), generalNode = generalMetavariableNode, specificNode = specificMetavariableNode, success = intrinsicLevelPass.run(generalNode, specificNode, substitutions, generalContext, specificContext);
@@ -619,5 +603,21 @@ function unifyMetavariableIntrinsically(generalMetavariable, specificMetavariabl
619
603
  }
620
604
  return metavariableUnifiesIntrinsically;
621
605
  }
606
+ function unifyTermWithConstructorTerm(term, constructorTerm, context) {
607
+ var termUnifiesWithConstructor = false;
608
+ var termNode = term.getNode(), generalContext = context, specificContext = context, constructorTermNode = constructorTerm.getNode(), success = constructorPass.run(constructorTermNode, termNode, generalContext, specificContext);
609
+ if (success) {
610
+ termUnifiesWithConstructor = true;
611
+ }
612
+ return termUnifiesWithConstructor;
613
+ }
614
+ function unifyStatementWithCombinatorStatement(statement, combinatorStatement, assignments, stated, context) {
615
+ var statementUnifiesWithCombinator = false;
616
+ var statementNode = statement.getNode(), generalContext = context, specificContext = context, combinatorStatementNode = combinatorStatement.getNode(), success = combinatorPass.run(combinatorStatementNode, statementNode, assignments, stated, generalContext, specificContext);
617
+ if (success) {
618
+ statementUnifiesWithCombinator = true;
619
+ }
620
+ return statementUnifiesWithCombinator;
621
+ }
622
622
 
623
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgb250b2xvZ3kgZnJvbSBcIi4uL29udG9sb2d5XCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IHRlcm1pbmFsTm9kZU1hcEZyb21Ob2RlcywgYXJlVGVybWluYWxOb2RlTWFwc0VxdWFsLCBpc0xhc3RSZW1haW5pbmdBcmd1bWVudEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXNzXCI7XG5cbmNvbnN0IG5vblRlcm1pbmFsTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiLypcIik7XG5cbmNvbnN0IHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdHlwZVwiKSxcbiAgICAgIHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGVybVwiKSxcbiAgICAgIGZyYW1lTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2ZyYW1lXCIpLFxuICAgICAgbWV0YVR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YVR5cGVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpLFxuICAgICAgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgc3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9tZXRhdmFyaWFibGUhXCIpLFxuICAgICAgYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hc3N1bXB0aW9uL21ldGF2YXJpYWJsZSFcIiksXG4gICAgICBmcmFtZUFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvYXNzdW1wdGlvbiEvbWV0YXZhcmlhYmxlIVwiKTtcblxuY2xhc3MgUGFzcyB7XG4gIHJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgc3VjY2VzcztcblxuICAgIGNvbnN0IHZpc2l0ZWQgPSB0aGlzLnZpc2l0Tm9kZShnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgc3VjY2VzcyA9IHZpc2l0ZWQ7ICAvLy9cblxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgZGVzY2VuZChnZW5lcmFsQ2hpbGROb2Rlcywgc3BlY2lmaWNDaGlsZE5vZGVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgZGVzY2VuZGVkQWhlYWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGdlbmVyYWxDaGlsZE5vZGVzTGVuZ3RoID0gZ2VuZXJhbENoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIHNwZWNpZmljQ2hpbGROb2Rlc0xlbmd0aCA9IHNwZWNpZmljQ2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAoZ2VuZXJhbENoaWxkTm9kZXNMZW5ndGggPT09IHNwZWNpZmljQ2hpbGROb2Rlc0xlbmd0aCkge1xuICAgICAgY29uc3Qgc3BlY2lmaWNUZXJtaW5hbE5vZGVNYXAgPSB0ZXJtaW5hbE5vZGVNYXBGcm9tTm9kZXMoc3BlY2lmaWNDaGlsZE5vZGVzKSxcbiAgICAgICAgICAgIGdlbmVyYWxUZXJtaW5hbE5vZGVNYXAgPSB0ZXJtaW5hbE5vZGVNYXBGcm9tTm9kZXMoZ2VuZXJhbENoaWxkTm9kZXMpLFxuICAgICAgICAgICAgdGVybWluYWxOb2RlTWFwc0VxdWFsID0gYXJlVGVybWluYWxOb2RlTWFwc0VxdWFsKGdlbmVyYWxUZXJtaW5hbE5vZGVNYXAsIHNwZWNpZmljVGVybWluYWxOb2RlTWFwKTtcblxuICAgICAgaWYgKHRlcm1pbmFsTm9kZU1hcHNFcXVhbCkge1xuICAgICAgICBjb25zdCBsYXN0UmVtYWluaW5nQXJndW1lbnRGdW5jdGlvbiA9IGlzTGFzdFJlbWFpbmluZ0FyZ3VtZW50RnVuY3Rpb24ocmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgICAgICBpZiAobGFzdFJlbWFpbmluZ0FyZ3VtZW50RnVuY3Rpb24pIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICAgICAgICBkZXNjZW5kZWRBaGVhZCA9IHRoaXMuZGVzY2VuZEFoZWFkKGluZGV4LCBnZW5lcmFsQ2hpbGROb2Rlcywgc3BlY2lmaWNDaGlsZE5vZGVzLC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdmlzaXRlZCA9IGdlbmVyYWxDaGlsZE5vZGVzLmV2ZXJ5KChnZW5lcmFsQ2hpbGROb2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDaGlsZE5vZGUgPSBzcGVjaWZpY0NoaWxkTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNDaGlsZE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsQ2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHZpc2l0ZWQgPSB0aGlzLnZpc2l0Tm9kZShnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgICAgICAgICBpZiAodmlzaXRlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh2aXNpdGVkKSB7XG4gICAgICAgICAgICBkZXNjZW5kZWRBaGVhZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2NlbmRlZEFoZWFkO1xuICB9XG5cbiAgZGVzY2VuZEFoZWFkKGluZGV4LCBnZW5lcmFsQ2hpbGROb2Rlcywgc3BlY2lmaWNDaGlsZE5vZGVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgZGVzY2VuZGVkQWhlYWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGRlc2NlbmRBaGVhZCA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENoaWxkTm9kZXNMZW5ndGggPSBnZW5lcmFsQ2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAoaW5kZXggPT09IGdlbmVyYWxDaGlsZE5vZGVzTGVuZ3RoKSB7XG4gICAgICBkZXNjZW5kZWRBaGVhZCA9IGRlc2NlbmRBaGVhZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBnZW5lcmFsQ2hpbGROb2RlID0gZ2VuZXJhbENoaWxkTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgc3BlY2lmaWNDaGlsZE5vZGUgPSBzcGVjaWZpY0NoaWxkTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsQ2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgIHNwZWNpZmljTm9kZSA9IHNwZWNpZmljQ2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgIHZpc2l0ZWQgPSB0aGlzLnZpc2l0Tm9kZShnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzLnB1c2goZGVzY2VuZEFoZWFkKTsgLy8vXG5cbiAgICAgICAgICAgICAgY29uc3QgYWhlYWRJbmRleCA9IGluZGV4ICsgMSxcbiAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGVkQWhlYWQgPSB0aGlzLmRlc2NlbmRBaGVhZChhaGVhZEluZGV4LCBnZW5lcmFsQ2hpbGROb2Rlcywgc3BlY2lmaWNDaGlsZE5vZGVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBkZXNjZW5kZWRBaGVhZDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICBpZiAodmlzaXRlZCkge1xuICAgICAgICBkZXNjZW5kZWRBaGVhZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2NlbmRlZEFoZWFkO1xuICB9XG5cbiAgdmlzaXROb2RlKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB2aXNpdGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBnZW5lcmFsTm9kZVRlcm1pbmFsTm9kZSA9IGdlbmVyYWxOb2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgICAgc3BlY2lmaWNOb2RlVGVybWluYWxOb2RlID0gc3BlY2lmaWNOb2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgICAgZ2VuZXJhbE5vZGVOb25UZXJtaW5hbE5vZGUgPSBnZW5lcmFsTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIHNwZWNpZmljTm9kZU5vblRlcm1pbmFsTm9kZSA9IHNwZWNpZmljTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKGdlbmVyYWxOb2RlVGVybWluYWxOb2RlICYmIHNwZWNpZmljTm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgZ2VuZXJhbFRlcm1pbmFsTm9kZSA9IGdlbmVyYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICBzcGVjaWZpY1Rlcm1pbmFsTm9kZSA9IHNwZWNpZmljTm9kZTsgIC8vL1xuXG4gICAgICB2aXNpdGVkID0gdGhpcy52aXNpdFRlcm1pbmFsTm9kZShnZW5lcmFsVGVybWluYWxOb2RlLCBzcGVjaWZpY1Rlcm1pbmFsTm9kZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICB9IGVsc2UgaWYgKGdlbmVyYWxOb2RlTm9uVGVybWluYWxOb2RlICYmIHNwZWNpZmljTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgZ2VuZXJhbE5vblRlcm1pbmFsTm9kZSA9IGdlbmVyYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICBzcGVjaWZpY05vblRlcm1pbmFsTm9kZSA9IHNwZWNpZmljTm9kZTsgLy8vXG5cbiAgICAgIHZpc2l0ZWQgPSB0aGlzLnZpc2l0Tm9uVGVybWluYWxOb2RlKGdlbmVyYWxOb25UZXJtaW5hbE5vZGUsIHNwZWNpZmljTm9uVGVybWluYWxOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB2aXNpdGVkO1xuICB9XG5cbiAgdmlzaXRUZXJtaW5hbE5vZGUoZ2VuZXJhbFRlcm1pbmFsTm9kZSwgc3BlY2lmaWNUZXJtaW5hbE5vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykgeyAvLy9cbiAgICBsZXQgdmlzaXRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGFzdFJlbWFpbmluZ0FyZ3VtZW50RnVuY3Rpb24gPSBpc0xhc3RSZW1haW5pbmdBcmd1bWVudEZ1bmN0aW9uKHJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBpZiAobGFzdFJlbWFpbmluZ0FyZ3VtZW50RnVuY3Rpb24pIHtcbiAgICAgIGNvbnN0IGRlc2NlbmRBaGVhZCA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgICAgIGRlc2NlbmRlZEFoZWFkID0gZGVzY2VuZEFoZWFkKCk7XG5cbiAgICAgIGlmIChkZXNjZW5kQWhlYWQpIHtcbiAgICAgICAgdmlzaXRlZCA9IGRlc2NlbmRlZEFoZWFkOyAgLy8vXG4gICAgICB9XG5cbiAgICAgIHJlbWFpbmluZ0FyZ3VtZW50cy5wdXNoKGRlc2NlbmRBaGVhZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZpc2l0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB2aXNpdGVkO1xuICB9XG5cbiAgdmlzaXROb25UZXJtaW5hbE5vZGUoZ2VuZXJhbE5vblRlcm1pbmFsTm9kZSwgc3BlY2lmaWNOb25UZXJtaW5hbE5vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB2aXNpdGVkID0gZmFsc2U7XG5cbiAgICBsZXQgeyBtYXBzIH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgbWFwcyA9IFsgLy8vXG4gICAgICAuLi5tYXBzLFxuICAgICAge1xuICAgICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBub25UZXJtaW5hbE5vZGVRdWVyeSxcbiAgICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IG5vblRlcm1pbmFsTm9kZVF1ZXJ5LFxuICAgICAgICBydW46IChnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpID0+IHtcbiAgICAgICAgICBsZXQgdmlzaXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgY29uc3QgZ2VuZXJhbE5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID0gZ2VuZXJhbE5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLCAvLy9cbiAgICAgICAgICAgICAgICBzcGVjaWZpY05vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID0gc3BlY2lmaWNOb25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTsgLy8vXG5cbiAgICAgICAgICBpZiAoZ2VuZXJhbE5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID09PSBzcGVjaWZpY05vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmFsTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IGdlbmVyYWxOb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gc3BlY2lmaWNOb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgICAgZ2VuZXJhbENoaWxkTm9kZXMgPSBnZW5lcmFsTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0NoaWxkTm9kZXMgPSBzcGVjaWZpY05vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVzY2VuZGVkID0gdGhpcy5kZXNjZW5kKGdlbmVyYWxDaGlsZE5vZGVzLCBzcGVjaWZpY0NoaWxkTm9kZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIGlmIChkZXNjZW5kZWQpIHtcbiAgICAgICAgICAgICAgdmlzaXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZpc2l0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG5cbiAgICBtYXBzLnNvbWUoKG1hcCkgPT4ge1xuICAgICAgY29uc3QgeyBnZW5lcmFsTm9kZVF1ZXJ5LCBzcGVjaWZpY05vZGVRdWVyeSwgcnVuIH0gPSBtYXA7XG5cbiAgICAgIGNvbnN0IGdlbmVyYWxOb2RlID0gZ2VuZXJhbE5vZGVRdWVyeShnZW5lcmFsTm9uVGVybWluYWxOb2RlKSwgIC8vL1xuICAgICAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNOb2RlUXVlcnkoc3BlY2lmaWNOb25UZXJtaW5hbE5vZGUpOyAgLy8vXG5cbiAgICAgIGlmICgoZ2VuZXJhbE5vZGUgIT09IG51bGwpICYmIChzcGVjaWZpY05vZGUgIT09IG51bGwpKSB7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgID0gcnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICAgICAgdmlzaXRlZCA9IHN1Y2Nlc3M7ICAvLy9cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB2aXNpdGVkO1xuICB9XG59XG5cbmNsYXNzIE1ldGFMZXZlbFBhc3MgZXh0ZW5kcyBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0Fzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGNvbnRleHQsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlO1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgIC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgICByZWZlcmVuY2VVbmlmaWVzID0gbWV0YXZhcmlhYmxlLnVuaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogc3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHN0YXRlbWVudE5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxTdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgY29udGV4dCxcbiAgICAgICAgICAgIHN0YXRlbWVudE5vZGU7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRQYXJlbnROb2RlKCk7XG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlOyAvLy9cblxuICAgICAgICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSgpLFxuICAgICAgICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUoKSxcbiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IChmcmFtZVN1YnN0aXR1dGlvbk5vZGUgfHwgdGVybVN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgICAgICBzdWJzdGl0dXRpb24gPSAoc3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7IC8vL1xuXG4gICAgICAgIHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7ICAvLy9cblxuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXMgPSBtZXRhdmFyaWFibGUudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb24sIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IGZyYW1lQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBmcmFtZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxGcmFtZUFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0ZyYW1lTm9kZSwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxGcmFtZUFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgICAgIGZyYW1lVW5pZmllcyA9IG1ldGF2YXJpYWJsZS51bmlmeUZyYW1lKGZyYW1lLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAoZnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVW5pZmllcyA9IHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgQ29tYmluYXRvclBhc3MgZXh0ZW5kcyBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogbWV0YVR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7IC8vL1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgbWV0YVR5cGVOYW1lID0gbWV0YVR5cGVOb2RlLmdldE1ldGFUeXBlTmFtZSgpLFxuICAgICAgICAgICAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IG9udG9sb2d5LFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBTdGF0ZW1lbnQuZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHN0YXRlbWVudFZlcmlmaWVzR2l2ZW5UeXBlID0gc3RhdGVtZW50LnZlcmlmeUdpdmVuTWV0YVR5cGUobWV0YVR5cGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllc0dpdmVuVHlwZSkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBtZXRhVHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBmcmFtZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxNZXRhVHlwZU5vZGUsIHNwZWNpZmljRnJhbWVOb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlOyAvLy9cblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHsgRnJhbWUgfSA9IG9udG9sb2d5LFxuICAgICAgICAgICAgICBmcmFtZSA9IEZyYW1lLmZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgZnJhbWVWZXJpZmllc0dpdmVuVHlwZSA9IGZyYW1lLnZlcmlmeUdpdmVuTWV0YVR5cGUobWV0YVR5cGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChmcmFtZVZlcmlmaWVzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb25zdCB7IFRlcm0gfSA9IG9udG9sb2d5LFxuICAgICAgICAgICAgICAgIHRlcm0gPSBUZXJtLmZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgICAgdGVybVZlcmlmaWVzR2l2ZW5UeXBlID0gdGVybS52ZXJpZnlHaXZlblR5cGUodHlwZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgICBpZiAodGVybVZlcmlmaWVzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIENvbnN0cnVjdG9yUGFzcyBleHRlbmRzIFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVHlwZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29uc3QgeyBUZXJtIH0gPSBvbnRvbG9neSxcbiAgICAgICAgICAgICAgICB0ZXJtID0gVGVybS5mcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICAgIHRlcm1WZXJpZmllc0dpdmVuVHlwZSA9IHRlcm0udmVyaWZ5R2l2ZW5UeXBlKHR5cGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHRlcm1WZXJpZmllc0dpdmVuVHlwZSkge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBNZXRhdmFyaWFibGVQYXNzIGV4dGVuZHMgUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIHR5cGUgPSBnZW5lcmFsQ29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICAgICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVmVyaWZpZXNHaXZlblR5cGUgPSB0ZXJtLnZlcmlmeUdpdmVuVHlwZSh0eXBlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAodGVybVZlcmlmaWVzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIEludHJpbnNpY0xldmVsUGFzcyBleHRlbmRzIFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0ZXJtVmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgICAgICAgICAgdGVybVVuaWZpZXMgPSB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNvbnN0IG1ldGFMZXZlbFBhc3MgPSBuZXcgTWV0YUxldmVsUGFzcygpLFxuICAgICAgY29tYmluYXRvclBhc3MgPSBuZXcgQ29tYmluYXRvclBhc3MoKSxcbiAgICAgIGNvbnN0cnVjdG9yUGFzcyA9IG5ldyBDb25zdHJ1Y3RvclBhc3MoKSxcbiAgICAgIG1ldGF2YXJpYWJsZVBhc3MgPSBuZXcgTWV0YXZhcmlhYmxlUGFzcygpLFxuICAgICAgaW50cmluc2ljTGV2ZWxQYXNzID0gbmV3IEludHJpbnNpY0xldmVsUGFzcygpO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnQoZ2VuZXJhbFN0YXRlbWVudCwgc3BlY2lmaWNTdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXMgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsU3RhdGVtZW50Tm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1N0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3VjY2VzcyA9IG1ldGFMZXZlbFBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgc3RhdGVtZW50VW5pZmllcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3Vic3RpdHV0aW9uKGdlbmVyYWxTdWJzdGl0dXRpb24sIHNwZWNpZmljU3Vic3RpdHV0aW9uLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCBzdWJzdGl0dXRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbk5vZGUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25Ob2RlID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGdlbmVyYWxTdWJzdGl0dXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN1Y2Nlc3MgPSBtZXRhTGV2ZWxQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHN1YnN0aXR1dGlvblVuaWZpZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvblVuaWZpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeU1ldGF2YXJpYWJsZShnZW5lcmFsTWV0YXZhcmlhYmxlLCBzcGVjaWZpY01ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlVW5pZmllcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIHNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZSA9IHNwZWNpZmljTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgc3VjY2VzcyA9IG1ldGF2YXJpYWJsZVBhc3MucnVuKGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgbWV0YXZhcmlhYmxlVW5pZmllcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlVW5pZmllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3Rvcih0ZXJtLCBjb25zdHJ1Y3RvciwgY29udGV4dCkge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IgPSBmYWxzZTtcblxuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQsIC8vL1xuICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgIGNvbnN0cnVjdG9yVGVybSA9IGNvbnN0cnVjdG9yLmdldFRlcm0oKSxcbiAgICAgICAgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yVGVybS5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSBjb25zdHJ1Y3RvclBhc3MucnVuKGNvbnN0cnVjdG9yVGVybU5vZGUsIHRlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50SW50cmluc2ljYWxseShnZW5lcmFsU3RhdGVtZW50LCBzcGVjaWZpY1N0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0ludHJpbnNpY2FsbHkgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsU3RhdGVtZW50Tm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1N0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdWNjZXNzID0gaW50cmluc2ljTGV2ZWxQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHN0YXRlbWVudFVuaWZpZXNJbnRyaW5zaWNhbGx5ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzSW50cmluc2ljYWxseTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb21iaW5hdG9yLCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IgPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICBjb21iaW5hdG9yU3RhdGVtZW50ID0gY29tYmluYXRvci5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yU3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgc3VjY2VzcyA9IGNvbWJpbmF0b3JQYXNzLnJ1bihjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSwgc3RhdGVtZW50Tm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseShnZW5lcmFsTWV0YXZhcmlhYmxlLCBzcGVjaWZpY01ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICBzdWNjZXNzID0gaW50cmluc2ljTGV2ZWxQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIG1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseTtcbn1cbiJdLCJuYW1lcyI6WyJ1bmlmeU1ldGF2YXJpYWJsZSIsInVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseSIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRJbnRyaW5zaWNhbGx5IiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvciIsInVuaWZ5U3Vic3RpdHV0aW9uIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwibm9uVGVybWluYWxOb2RlUXVlcnkiLCJub2RlUXVlcnkiLCJ0eXBlTm9kZVF1ZXJ5IiwidGVybU5vZGVRdWVyeSIsImZyYW1lTm9kZVF1ZXJ5IiwibWV0YVR5cGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlUXVlcnkiLCJ0ZXJtVmFyaWFibGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiZnJhbWVBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiUGFzcyIsInJ1biIsImdlbmVyYWxOb2RlIiwic3BlY2lmaWNOb2RlIiwicmVtYWluaW5nQXJndW1lbnRzIiwic3VjY2VzcyIsInZpc2l0ZWQiLCJ2aXNpdE5vZGUiLCJkZXNjZW5kIiwiZ2VuZXJhbENoaWxkTm9kZXMiLCJzcGVjaWZpY0NoaWxkTm9kZXMiLCJkZXNjZW5kZWRBaGVhZCIsImdlbmVyYWxDaGlsZE5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwic3BlY2lmaWNDaGlsZE5vZGVzTGVuZ3RoIiwic3BlY2lmaWNUZXJtaW5hbE5vZGVNYXAiLCJ0ZXJtaW5hbE5vZGVNYXBGcm9tTm9kZXMiLCJnZW5lcmFsVGVybWluYWxOb2RlTWFwIiwidGVybWluYWxOb2RlTWFwc0VxdWFsIiwiYXJlVGVybWluYWxOb2RlTWFwc0VxdWFsIiwibGFzdFJlbWFpbmluZ0FyZ3VtZW50RnVuY3Rpb24iLCJpc0xhc3RSZW1haW5pbmdBcmd1bWVudEZ1bmN0aW9uIiwiaW5kZXgiLCJkZXNjZW5kQWhlYWQiLCJldmVyeSIsImdlbmVyYWxDaGlsZE5vZGUiLCJzcGVjaWZpY0NoaWxkTm9kZSIsInBvcCIsInB1c2giLCJhaGVhZEluZGV4IiwiZ2VuZXJhbE5vZGVUZXJtaW5hbE5vZGUiLCJpc1Rlcm1pbmFsTm9kZSIsInNwZWNpZmljTm9kZVRlcm1pbmFsTm9kZSIsImdlbmVyYWxOb2RlTm9uVGVybWluYWxOb2RlIiwiaXNOb25UZXJtaW5hbE5vZGUiLCJzcGVjaWZpY05vZGVOb25UZXJtaW5hbE5vZGUiLCJnZW5lcmFsVGVybWluYWxOb2RlIiwic3BlY2lmaWNUZXJtaW5hbE5vZGUiLCJ2aXNpdFRlcm1pbmFsTm9kZSIsImdlbmVyYWxOb25UZXJtaW5hbE5vZGUiLCJzcGVjaWZpY05vblRlcm1pbmFsTm9kZSIsInZpc2l0Tm9uVGVybWluYWxOb2RlIiwibWFwcyIsImdlbmVyYWxOb2RlUXVlcnkiLCJzcGVjaWZpY05vZGVRdWVyeSIsImdlbmVyYWxOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSIsImdldFJ1bGVOYW1lIiwic3BlY2lmaWNOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSIsImdlbmVyYWxOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzIiwiZ2V0Q2hpbGROb2RlcyIsInNwZWNpZmljTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyIsImRlc2NlbmRlZCIsInNvbWUiLCJtYXAiLCJNZXRhTGV2ZWxQYXNzIiwiZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSIsInN1YnN0aXR1dGlvbnMiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImNvbnRleHQiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwicmVmZXJlbmNlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZVVuaWZpZXMiLCJ1bmlmeVJlZmVyZW5jZSIsImdlbmVyYWxTdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudCIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRVbmlmaWVzIiwiZ2VuZXJhbEZyYW1lQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY0ZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZVVuaWZpZXMiLCJ1bmlmeUZyYW1lIiwiZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUiLCJzcGVjaWZpY1Rlcm1Ob2RlIiwidGVybU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidGVybSIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1VbmlmaWVzIiwidW5pZnlUZXJtIiwiQ29tYmluYXRvclBhc3MiLCJnZW5lcmFsTWV0YVR5cGVOb2RlIiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJtZXRhVHlwZU5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwiU3RhdGVtZW50Iiwib250b2xvZ3kiLCJmcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFZlcmlmaWVzR2l2ZW5UeXBlIiwidmVyaWZ5R2l2ZW5NZXRhVHlwZSIsIkZyYW1lIiwiZnJvbUZyYW1lTm9kZSIsImZyYW1lVmVyaWZpZXNHaXZlblR5cGUiLCJnZW5lcmFsVHlwZU5vZGUiLCJ0eXBlTm9kZSIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsInR5cGUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwiVGVybSIsImZyb21UZXJtTm9kZSIsInRlcm1WZXJpZmllc0dpdmVuVHlwZSIsInZlcmlmeUdpdmVuVHlwZSIsIkNvbnN0cnVjdG9yUGFzcyIsIk1ldGF2YXJpYWJsZVBhc3MiLCJJbnRyaW5zaWNMZXZlbFBhc3MiLCJtZXRhTGV2ZWxQYXNzIiwiY29tYmluYXRvclBhc3MiLCJjb25zdHJ1Y3RvclBhc3MiLCJtZXRhdmFyaWFibGVQYXNzIiwiaW50cmluc2ljTGV2ZWxQYXNzIiwiZ2VuZXJhbFN0YXRlbWVudCIsInNwZWNpZmljU3RhdGVtZW50IiwiZ2VuZXJhbFN0YXRlbWVudE5vZGUiLCJnZXROb2RlIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbiIsInNwZWNpZmljU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uVW5pZmllcyIsImdlbmVyYWxTdWJzdGl0dXRpb25Ob2RlIiwic3BlY2lmaWNTdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhbE1ldGF2YXJpYWJsZSIsInNwZWNpZmljTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlVW5pZmllcyIsImdlbmVyYWxNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlIiwiY29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yVGVybSIsImdldFRlcm0iLCJjb25zdHJ1Y3RvclRlcm1Ob2RlIiwic3RhdGVtZW50VW5pZmllc0ludHJpbnNpY2FsbHkiLCJjb21iaW5hdG9yIiwic3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9yIiwiY29tYmluYXRvclN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlIiwibWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTJpQmdCQTtlQUFBQTs7UUFnRUFDO2VBQUFBOztRQWhHQUM7ZUFBQUE7O1FBK0RBQztlQUFBQTs7UUFnQkFDO2VBQUFBOztRQS9EQUM7ZUFBQUE7O1FBOEJBQztlQUFBQTs7OytEQXZqQks7cUJBRUs7b0JBQzBFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFcEcsSUFBTUMsdUJBQXVCQyxJQUFBQSxnQkFBUyxFQUFDO0FBRXZDLElBQU1DLGdCQUFnQkQsSUFBQUEsZ0JBQVMsRUFBQyxVQUMxQkUsZ0JBQWdCRixJQUFBQSxnQkFBUyxFQUFDLFVBQzFCRyxpQkFBaUJILElBQUFBLGdCQUFTLEVBQUMsV0FDM0JJLG9CQUFvQkosSUFBQUEsZ0JBQVMsRUFBQyxjQUM5QksscUJBQXFCTCxJQUFBQSxnQkFBUyxFQUFDLGVBQy9CTSx3QkFBd0JOLElBQUFB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
623
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IHRlcm1pbmFsTm9kZU1hcEZyb21Ob2RlcywgYXJlVGVybWluYWxOb2RlTWFwc0VxdWFsLCBpc0xhc3RSZW1haW5pbmdBcmd1bWVudEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9wYXNzXCI7XG5cbmNvbnN0IG5vblRlcm1pbmFsTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiLypcIik7XG5cbmNvbnN0IHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdHlwZVwiKSxcbiAgICAgIHRlcm1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGVybVwiKSxcbiAgICAgIGZyYW1lTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2ZyYW1lXCIpLFxuICAgICAgbWV0YVR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YVR5cGVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpLFxuICAgICAgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgc3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9tZXRhdmFyaWFibGUhXCIpLFxuICAgICAgYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hc3N1bXB0aW9uL21ldGF2YXJpYWJsZSFcIiksXG4gICAgICBmcmFtZUFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvYXNzdW1wdGlvbiEvbWV0YXZhcmlhYmxlIVwiKTtcblxuY2xhc3MgUGFzcyB7XG4gIHJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgc3VjY2VzcztcblxuICAgIGNvbnN0IHZpc2l0ZWQgPSB0aGlzLnZpc2l0Tm9kZShnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgc3VjY2VzcyA9IHZpc2l0ZWQ7ICAvLy9cblxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgZGVzY2VuZChnZW5lcmFsQ2hpbGROb2Rlcywgc3BlY2lmaWNDaGlsZE5vZGVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgZGVzY2VuZGVkQWhlYWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGdlbmVyYWxDaGlsZE5vZGVzTGVuZ3RoID0gZ2VuZXJhbENoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIHNwZWNpZmljQ2hpbGROb2Rlc0xlbmd0aCA9IHNwZWNpZmljQ2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAoZ2VuZXJhbENoaWxkTm9kZXNMZW5ndGggPT09IHNwZWNpZmljQ2hpbGROb2Rlc0xlbmd0aCkge1xuICAgICAgY29uc3Qgc3BlY2lmaWNUZXJtaW5hbE5vZGVNYXAgPSB0ZXJtaW5hbE5vZGVNYXBGcm9tTm9kZXMoc3BlY2lmaWNDaGlsZE5vZGVzKSxcbiAgICAgICAgICAgIGdlbmVyYWxUZXJtaW5hbE5vZGVNYXAgPSB0ZXJtaW5hbE5vZGVNYXBGcm9tTm9kZXMoZ2VuZXJhbENoaWxkTm9kZXMpLFxuICAgICAgICAgICAgdGVybWluYWxOb2RlTWFwc0VxdWFsID0gYXJlVGVybWluYWxOb2RlTWFwc0VxdWFsKGdlbmVyYWxUZXJtaW5hbE5vZGVNYXAsIHNwZWNpZmljVGVybWluYWxOb2RlTWFwKTtcblxuICAgICAgaWYgKHRlcm1pbmFsTm9kZU1hcHNFcXVhbCkge1xuICAgICAgICBjb25zdCBsYXN0UmVtYWluaW5nQXJndW1lbnRGdW5jdGlvbiA9IGlzTGFzdFJlbWFpbmluZ0FyZ3VtZW50RnVuY3Rpb24ocmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgICAgICBpZiAobGFzdFJlbWFpbmluZ0FyZ3VtZW50RnVuY3Rpb24pIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IDA7XG5cbiAgICAgICAgICBkZXNjZW5kZWRBaGVhZCA9IHRoaXMuZGVzY2VuZEFoZWFkKGluZGV4LCBnZW5lcmFsQ2hpbGROb2Rlcywgc3BlY2lmaWNDaGlsZE5vZGVzLC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdmlzaXRlZCA9IGdlbmVyYWxDaGlsZE5vZGVzLmV2ZXJ5KChnZW5lcmFsQ2hpbGROb2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWNDaGlsZE5vZGUgPSBzcGVjaWZpY0NoaWxkTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNDaGlsZE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsQ2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHZpc2l0ZWQgPSB0aGlzLnZpc2l0Tm9kZShnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgICAgICAgICBpZiAodmlzaXRlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh2aXNpdGVkKSB7XG4gICAgICAgICAgICBkZXNjZW5kZWRBaGVhZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2NlbmRlZEFoZWFkO1xuICB9XG5cbiAgZGVzY2VuZEFoZWFkKGluZGV4LCBnZW5lcmFsQ2hpbGROb2Rlcywgc3BlY2lmaWNDaGlsZE5vZGVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBsZXQgZGVzY2VuZGVkQWhlYWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGRlc2NlbmRBaGVhZCA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENoaWxkTm9kZXNMZW5ndGggPSBnZW5lcmFsQ2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAoaW5kZXggPT09IGdlbmVyYWxDaGlsZE5vZGVzTGVuZ3RoKSB7XG4gICAgICBkZXNjZW5kZWRBaGVhZCA9IGRlc2NlbmRBaGVhZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBnZW5lcmFsQ2hpbGROb2RlID0gZ2VuZXJhbENoaWxkTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgc3BlY2lmaWNDaGlsZE5vZGUgPSBzcGVjaWZpY0NoaWxkTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsQ2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgIHNwZWNpZmljTm9kZSA9IHNwZWNpZmljQ2hpbGROb2RlLCAvLy9cbiAgICAgICAgICAgIHZpc2l0ZWQgPSB0aGlzLnZpc2l0Tm9kZShnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVtYWluaW5nQXJndW1lbnRzLnB1c2goZGVzY2VuZEFoZWFkKTsgLy8vXG5cbiAgICAgICAgICAgICAgY29uc3QgYWhlYWRJbmRleCA9IGluZGV4ICsgMSxcbiAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGVkQWhlYWQgPSB0aGlzLmRlc2NlbmRBaGVhZChhaGVhZEluZGV4LCBnZW5lcmFsQ2hpbGROb2Rlcywgc3BlY2lmaWNDaGlsZE5vZGVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBkZXNjZW5kZWRBaGVhZDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICBpZiAodmlzaXRlZCkge1xuICAgICAgICBkZXNjZW5kZWRBaGVhZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2NlbmRlZEFoZWFkO1xuICB9XG5cbiAgdmlzaXROb2RlKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB2aXNpdGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBnZW5lcmFsTm9kZVRlcm1pbmFsTm9kZSA9IGdlbmVyYWxOb2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgICAgc3BlY2lmaWNOb2RlVGVybWluYWxOb2RlID0gc3BlY2lmaWNOb2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgICAgZ2VuZXJhbE5vZGVOb25UZXJtaW5hbE5vZGUgPSBnZW5lcmFsTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIHNwZWNpZmljTm9kZU5vblRlcm1pbmFsTm9kZSA9IHNwZWNpZmljTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKGdlbmVyYWxOb2RlVGVybWluYWxOb2RlICYmIHNwZWNpZmljTm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgZ2VuZXJhbFRlcm1pbmFsTm9kZSA9IGdlbmVyYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICBzcGVjaWZpY1Rlcm1pbmFsTm9kZSA9IHNwZWNpZmljTm9kZTsgIC8vL1xuXG4gICAgICB2aXNpdGVkID0gdGhpcy52aXNpdFRlcm1pbmFsTm9kZShnZW5lcmFsVGVybWluYWxOb2RlLCBzcGVjaWZpY1Rlcm1pbmFsTm9kZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICB9IGVsc2UgaWYgKGdlbmVyYWxOb2RlTm9uVGVybWluYWxOb2RlICYmIHNwZWNpZmljTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgZ2VuZXJhbE5vblRlcm1pbmFsTm9kZSA9IGdlbmVyYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICBzcGVjaWZpY05vblRlcm1pbmFsTm9kZSA9IHNwZWNpZmljTm9kZTsgLy8vXG5cbiAgICAgIHZpc2l0ZWQgPSB0aGlzLnZpc2l0Tm9uVGVybWluYWxOb2RlKGdlbmVyYWxOb25UZXJtaW5hbE5vZGUsIHNwZWNpZmljTm9uVGVybWluYWxOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB2aXNpdGVkO1xuICB9XG5cbiAgdmlzaXRUZXJtaW5hbE5vZGUoZ2VuZXJhbFRlcm1pbmFsTm9kZSwgc3BlY2lmaWNUZXJtaW5hbE5vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykgeyAvLy9cbiAgICBsZXQgdmlzaXRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGFzdFJlbWFpbmluZ0FyZ3VtZW50RnVuY3Rpb24gPSBpc0xhc3RSZW1haW5pbmdBcmd1bWVudEZ1bmN0aW9uKHJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICBpZiAobGFzdFJlbWFpbmluZ0FyZ3VtZW50RnVuY3Rpb24pIHtcbiAgICAgIGNvbnN0IGRlc2NlbmRBaGVhZCA9IHJlbWFpbmluZ0FyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgICAgIGRlc2NlbmRlZEFoZWFkID0gZGVzY2VuZEFoZWFkKCk7XG5cbiAgICAgIGlmIChkZXNjZW5kQWhlYWQpIHtcbiAgICAgICAgdmlzaXRlZCA9IGRlc2NlbmRlZEFoZWFkOyAgLy8vXG4gICAgICB9XG5cbiAgICAgIHJlbWFpbmluZ0FyZ3VtZW50cy5wdXNoKGRlc2NlbmRBaGVhZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZpc2l0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB2aXNpdGVkO1xuICB9XG5cbiAgdmlzaXROb25UZXJtaW5hbE5vZGUoZ2VuZXJhbE5vblRlcm1pbmFsTm9kZSwgc3BlY2lmaWNOb25UZXJtaW5hbE5vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGxldCB2aXNpdGVkID0gZmFsc2U7XG5cbiAgICBsZXQgeyBtYXBzIH0gPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgbWFwcyA9IFsgLy8vXG4gICAgICAuLi5tYXBzLFxuICAgICAge1xuICAgICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBub25UZXJtaW5hbE5vZGVRdWVyeSxcbiAgICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IG5vblRlcm1pbmFsTm9kZVF1ZXJ5LFxuICAgICAgICBydW46IChnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpID0+IHtcbiAgICAgICAgICBsZXQgdmlzaXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgY29uc3QgZ2VuZXJhbE5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID0gZ2VuZXJhbE5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLCAvLy9cbiAgICAgICAgICAgICAgICBzcGVjaWZpY05vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID0gc3BlY2lmaWNOb25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTsgLy8vXG5cbiAgICAgICAgICBpZiAoZ2VuZXJhbE5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID09PSBzcGVjaWZpY05vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmFsTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IGdlbmVyYWxOb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgICAgc3BlY2lmaWNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gc3BlY2lmaWNOb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgICAgZ2VuZXJhbENoaWxkTm9kZXMgPSBnZW5lcmFsTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY0NoaWxkTm9kZXMgPSBzcGVjaWZpY05vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVzY2VuZGVkID0gdGhpcy5kZXNjZW5kKGdlbmVyYWxDaGlsZE5vZGVzLCBzcGVjaWZpY0NoaWxkTm9kZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIGlmIChkZXNjZW5kZWQpIHtcbiAgICAgICAgICAgICAgdmlzaXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZpc2l0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG5cbiAgICBtYXBzLnNvbWUoKG1hcCkgPT4ge1xuICAgICAgY29uc3QgeyBnZW5lcmFsTm9kZVF1ZXJ5LCBzcGVjaWZpY05vZGVRdWVyeSwgcnVuIH0gPSBtYXA7XG5cbiAgICAgIGNvbnN0IGdlbmVyYWxOb2RlID0gZ2VuZXJhbE5vZGVRdWVyeShnZW5lcmFsTm9uVGVybWluYWxOb2RlKSwgIC8vL1xuICAgICAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNOb2RlUXVlcnkoc3BlY2lmaWNOb25UZXJtaW5hbE5vZGUpOyAgLy8vXG5cbiAgICAgIGlmICgoZ2VuZXJhbE5vZGUgIT09IG51bGwpICYmIChzcGVjaWZpY05vZGUgIT09IG51bGwpKSB7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgID0gcnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICAgICAgdmlzaXRlZCA9IHN1Y2Nlc3M7ICAvLy9cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB2aXNpdGVkO1xuICB9XG59XG5cbmNsYXNzIE1ldGFMZXZlbFBhc3MgZXh0ZW5kcyBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0Fzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGNvbnRleHQsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlO1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgIC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgICByZWZlcmVuY2VVbmlmaWVzID0gbWV0YXZhcmlhYmxlLnVuaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogc3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHN0YXRlbWVudE5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxTdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgY29udGV4dCxcbiAgICAgICAgICAgIHN0YXRlbWVudE5vZGU7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRQYXJlbnROb2RlKCk7XG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlOyAvLy9cblxuICAgICAgICBjb25zdCBmcmFtZVN1YnN0aXR1dGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSgpLFxuICAgICAgICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUoKSxcbiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IChmcmFtZVN1YnN0aXR1dGlvbk5vZGUgfHwgdGVybVN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgICAgICBzdWJzdGl0dXRpb24gPSAoc3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7IC8vL1xuXG4gICAgICAgIHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7ICAvLy9cblxuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXMgPSBtZXRhdmFyaWFibGUudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb24sIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IGZyYW1lQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBmcmFtZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxGcmFtZUFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY0ZyYW1lTm9kZSwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxGcmFtZUFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgICAgIGZyYW1lVW5pZmllcyA9IG1ldGF2YXJpYWJsZS51bmlmeUZyYW1lKGZyYW1lLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAoZnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVW5pZmllcyA9IHZhcmlhYmxlLnVuaWZ5VGVybSh0ZXJtLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgQ29tYmluYXRvclBhc3MgZXh0ZW5kcyBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogbWV0YVR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7IC8vL1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgbWV0YVR5cGVOYW1lID0gbWV0YVR5cGVOb2RlLmdldE1ldGFUeXBlTmFtZSgpLFxuICAgICAgICAgICAgICBtZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBTdGF0ZW1lbnQuZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHN0YXRlbWVudFZlcmlmaWVzR2l2ZW5UeXBlID0gc3RhdGVtZW50LnZlcmlmeUdpdmVuTWV0YVR5cGUobWV0YVR5cGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllc0dpdmVuVHlwZSkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBtZXRhVHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBmcmFtZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxNZXRhVHlwZU5vZGUsIHNwZWNpZmljRnJhbWVOb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlOyAvLy9cblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGUgPSBjb250ZXh0LmZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lKG1ldGFUeXBlTmFtZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHsgRnJhbWUgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICBmcmFtZSA9IEZyYW1lLmZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgZnJhbWVWZXJpZmllc0dpdmVuVHlwZSA9IGZyYW1lLnZlcmlmeUdpdmVuTWV0YVR5cGUobWV0YVR5cGUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChmcmFtZVZlcmlmaWVzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgICBjb25zdCB7IFRlcm0gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIHRlcm0gPSBUZXJtLmZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgICAgdGVybVZlcmlmaWVzR2l2ZW5UeXBlID0gdGVybS52ZXJpZnlHaXZlblR5cGUodHlwZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgICBpZiAodGVybVZlcmlmaWVzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIENvbnN0cnVjdG9yUGFzcyBleHRlbmRzIFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVHlwZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29uc3QgeyBUZXJtIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgICAgICB0ZXJtID0gVGVybS5mcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICAgIHRlcm1WZXJpZmllc0dpdmVuVHlwZSA9IHRlcm0udmVyaWZ5R2l2ZW5UeXBlKHR5cGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHRlcm1WZXJpZmllc0dpdmVuVHlwZSkge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBNZXRhdmFyaWFibGVQYXNzIGV4dGVuZHMgUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIHR5cGUgPSBnZW5lcmFsQ29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSksXG4gICAgICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICAgICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVmVyaWZpZXNHaXZlblR5cGUgPSB0ZXJtLnZlcmlmeUdpdmVuVHlwZSh0eXBlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAodGVybVZlcmlmaWVzR2l2ZW5UeXBlKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIEludHJpbnNpY0xldmVsUGFzcyBleHRlbmRzIFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0ZXJtVmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZU5vZGUuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgICAgICAgICAgdGVybVVuaWZpZXMgPSB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNvbnN0IG1ldGFMZXZlbFBhc3MgPSBuZXcgTWV0YUxldmVsUGFzcygpLFxuICAgICAgY29tYmluYXRvclBhc3MgPSBuZXcgQ29tYmluYXRvclBhc3MoKSxcbiAgICAgIGNvbnN0cnVjdG9yUGFzcyA9IG5ldyBDb25zdHJ1Y3RvclBhc3MoKSxcbiAgICAgIG1ldGF2YXJpYWJsZVBhc3MgPSBuZXcgTWV0YXZhcmlhYmxlUGFzcygpLFxuICAgICAgaW50cmluc2ljTGV2ZWxQYXNzID0gbmV3IEludHJpbnNpY0xldmVsUGFzcygpO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnQoZ2VuZXJhbFN0YXRlbWVudCwgc3BlY2lmaWNTdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXMgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsU3RhdGVtZW50Tm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1N0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgc3VjY2VzcyA9IG1ldGFMZXZlbFBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgc3RhdGVtZW50VW5pZmllcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3Vic3RpdHV0aW9uKGdlbmVyYWxTdWJzdGl0dXRpb24sIHNwZWNpZmljU3Vic3RpdHV0aW9uLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gIGxldCBzdWJzdGl0dXRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgY29uc3QgZ2VuZXJhbFN1YnN0aXR1dGlvbk5vZGUgPSBnZW5lcmFsU3Vic3RpdHV0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNTdWJzdGl0dXRpb25Ob2RlID0gc3BlY2lmaWNTdWJzdGl0dXRpb24uZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGdlbmVyYWxTdWJzdGl0dXRpb25Ob2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNTdWJzdGl0dXRpb25Ob2RlLCAgLy8vXG4gICAgICAgIHN1Y2Nlc3MgPSBtZXRhTGV2ZWxQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHN1YnN0aXR1dGlvblVuaWZpZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN1YnN0aXR1dGlvblVuaWZpZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeU1ldGF2YXJpYWJsZShnZW5lcmFsTWV0YXZhcmlhYmxlLCBzcGVjaWZpY01ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlVW5pZmllcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIHNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZSA9IHNwZWNpZmljTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgc3VjY2VzcyA9IG1ldGF2YXJpYWJsZVBhc3MucnVuKGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlLCBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgbWV0YXZhcmlhYmxlVW5pZmllcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gbWV0YXZhcmlhYmxlVW5pZmllcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50SW50cmluc2ljYWxseShnZW5lcmFsU3RhdGVtZW50LCBzcGVjaWZpY1N0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0ludHJpbnNpY2FsbHkgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsU3RhdGVtZW50Tm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1N0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdWNjZXNzID0gaW50cmluc2ljTGV2ZWxQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHN0YXRlbWVudFVuaWZpZXNJbnRyaW5zaWNhbGx5ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzSW50cmluc2ljYWxseTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlSW50cmluc2ljYWxseShnZW5lcmFsTWV0YXZhcmlhYmxlLCBzcGVjaWZpY01ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICBsZXQgbWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkgPSBmYWxzZTtcblxuICBjb25zdCBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICBzdWNjZXNzID0gaW50cmluc2ljTGV2ZWxQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIG1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5ID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvclRlcm0odGVybSwgY29uc3RydWN0b3JUZXJtLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQsICAvLy9cbiAgICAgICAgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yVGVybS5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSBjb25zdHJ1Y3RvclBhc3MucnVuKGNvbnN0cnVjdG9yVGVybU5vZGUsIHRlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb21iaW5hdG9yU3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IgPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0LCAvLy9cbiAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dCwgIC8vL1xuICAgICAgICBjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSA9IGNvbWJpbmF0b3JTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzdWNjZXNzID0gY29tYmluYXRvclBhc3MucnVuKGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnROb2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvciA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9yO1xufVxuIl0sIm5hbWVzIjpbInVuaWZ5TWV0YXZhcmlhYmxlIiwidW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5IiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudEludHJpbnNpY2FsbHkiLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yU3RhdGVtZW50IiwidW5pZnlTdWJzdGl0dXRpb24iLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JUZXJtIiwibm9uVGVybWluYWxOb2RlUXVlcnkiLCJub2RlUXVlcnkiLCJ0eXBlTm9kZVF1ZXJ5IiwidGVybU5vZGVRdWVyeSIsImZyYW1lTm9kZVF1ZXJ5IiwibWV0YVR5cGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlUXVlcnkiLCJ0ZXJtVmFyaWFibGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiZnJhbWVBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiUGFzcyIsInJ1biIsImdlbmVyYWxOb2RlIiwic3BlY2lmaWNOb2RlIiwicmVtYWluaW5nQXJndW1lbnRzIiwic3VjY2VzcyIsInZpc2l0ZWQiLCJ2aXNpdE5vZGUiLCJkZXNjZW5kIiwiZ2VuZXJhbENoaWxkTm9kZXMiLCJzcGVjaWZpY0NoaWxkTm9kZXMiLCJkZXNjZW5kZWRBaGVhZCIsImdlbmVyYWxDaGlsZE5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwic3BlY2lmaWNDaGlsZE5vZGVzTGVuZ3RoIiwic3BlY2lmaWNUZXJtaW5hbE5vZGVNYXAiLCJ0ZXJtaW5hbE5vZGVNYXBGcm9tTm9kZXMiLCJnZW5lcmFsVGVybWluYWxOb2RlTWFwIiwidGVybWluYWxOb2RlTWFwc0VxdWFsIiwiYXJlVGVybWluYWxOb2RlTWFwc0VxdWFsIiwibGFzdFJlbWFpbmluZ0FyZ3VtZW50RnVuY3Rpb24iLCJpc0xhc3RSZW1haW5pbmdBcmd1bWVudEZ1bmN0aW9uIiwiaW5kZXgiLCJkZXNjZW5kQWhlYWQiLCJldmVyeSIsImdlbmVyYWxDaGlsZE5vZGUiLCJzcGVjaWZpY0NoaWxkTm9kZSIsInBvcCIsInB1c2giLCJhaGVhZEluZGV4IiwiZ2VuZXJhbE5vZGVUZXJtaW5hbE5vZGUiLCJpc1Rlcm1pbmFsTm9kZSIsInNwZWNpZmljTm9kZVRlcm1pbmFsTm9kZSIsImdlbmVyYWxOb2RlTm9uVGVybWluYWxOb2RlIiwiaXNOb25UZXJtaW5hbE5vZGUiLCJzcGVjaWZpY05vZGVOb25UZXJtaW5hbE5vZGUiLCJnZW5lcmFsVGVybWluYWxOb2RlIiwic3BlY2lmaWNUZXJtaW5hbE5vZGUiLCJ2aXNpdFRlcm1pbmFsTm9kZSIsImdlbmVyYWxOb25UZXJtaW5hbE5vZGUiLCJzcGVjaWZpY05vblRlcm1pbmFsTm9kZSIsInZpc2l0Tm9uVGVybWluYWxOb2RlIiwibWFwcyIsImdlbmVyYWxOb2RlUXVlcnkiLCJzcGVjaWZpY05vZGVRdWVyeSIsImdlbmVyYWxOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSIsImdldFJ1bGVOYW1lIiwic3BlY2lmaWNOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSIsImdlbmVyYWxOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzIiwiZ2V0Q2hpbGROb2RlcyIsInNwZWNpZmljTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyIsImRlc2NlbmRlZCIsInNvbWUiLCJtYXAiLCJNZXRhTGV2ZWxQYXNzIiwiZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSIsInN1YnN0aXR1dGlvbnMiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImNvbnRleHQiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwicmVmZXJlbmNlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZVVuaWZpZXMiLCJ1bmlmeVJlZmVyZW5jZSIsImdlbmVyYWxTdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsImZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsImdldEZyYW1lU3Vic3RpdHV0aW9uTm9kZSIsInRlcm1TdWJzdGl0dXRpb25Ob2RlIiwiZ2V0VGVybVN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudCIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRVbmlmaWVzIiwiZ2VuZXJhbEZyYW1lQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY0ZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZVVuaWZpZXMiLCJ1bmlmeUZyYW1lIiwiZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUiLCJzcGVjaWZpY1Rlcm1Ob2RlIiwidGVybU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidGVybSIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1VbmlmaWVzIiwidW5pZnlUZXJtIiwiQ29tYmluYXRvclBhc3MiLCJnZW5lcmFsTWV0YVR5cGVOb2RlIiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJtZXRhVHlwZU5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwiU3RhdGVtZW50IiwiZWxlbWVudHMiLCJmcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFZlcmlmaWVzR2l2ZW5UeXBlIiwidmVyaWZ5R2l2ZW5NZXRhVHlwZSIsIkZyYW1lIiwiZnJvbUZyYW1lTm9kZSIsImZyYW1lVmVyaWZpZXNHaXZlblR5cGUiLCJnZW5lcmFsVHlwZU5vZGUiLCJ0eXBlTm9kZSIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsInR5cGUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwiVGVybSIsImZyb21UZXJtTm9kZSIsInRlcm1WZXJpZmllc0dpdmVuVHlwZSIsInZlcmlmeUdpdmVuVHlwZSIsIkNvbnN0cnVjdG9yUGFzcyIsIk1ldGF2YXJpYWJsZVBhc3MiLCJJbnRyaW5zaWNMZXZlbFBhc3MiLCJtZXRhTGV2ZWxQYXNzIiwiY29tYmluYXRvclBhc3MiLCJjb25zdHJ1Y3RvclBhc3MiLCJtZXRhdmFyaWFibGVQYXNzIiwiaW50cmluc2ljTGV2ZWxQYXNzIiwiZ2VuZXJhbFN0YXRlbWVudCIsInNwZWNpZmljU3RhdGVtZW50IiwiZ2VuZXJhbFN0YXRlbWVudE5vZGUiLCJnZXROb2RlIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbiIsInNwZWNpZmljU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uVW5pZmllcyIsImdlbmVyYWxTdWJzdGl0dXRpb25Ob2RlIiwic3BlY2lmaWNTdWJzdGl0dXRpb25Ob2RlIiwiZ2VuZXJhbE1ldGF2YXJpYWJsZSIsInNwZWNpZmljTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlVW5pZmllcyIsImdlbmVyYWxNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlIiwic3RhdGVtZW50VW5pZmllc0ludHJpbnNpY2FsbHkiLCJtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseSIsImNvbnN0cnVjdG9yVGVybSIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JUZXJtTm9kZSIsImNvbWJpbmF0b3JTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3IiLCJjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBMmlCZ0JBO2VBQUFBOztRQThCQUM7ZUFBQUE7O1FBOURBQztlQUFBQTs7UUE4Q0FDO2VBQUFBOztRQWdEQUM7ZUFBQUE7O1FBOUVBQztlQUFBQTs7UUE4REFDO2VBQUFBOzs7K0RBdmxCSztxQkFFSztvQkFDMEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVwRyxJQUFNQyx1QkFBdUJDLElBQUFBLGdCQUFTLEVBQUM7QUFFdkMsSUFBTUMsZ0JBQWdCRCxJQUFBQSxnQkFBUyxFQUFDLFVBQzFCRSxnQkFBZ0JGLElBQUFBLGdCQUFTLEVBQUMsVUFDMUJHLGlCQUFpQkgsSUFBQUEsZ0JBQVMsRUFBQyxXQUMzQkksb0JBQW9CSixJQUFBQSxnQkFBUyxFQUFDLGNBQzlCSyxxQkFBcUJMLElBQUFBLGdCQUFTLEVBQUMsZUFDL0JNLHdCQUF3Qk4sSUFBQUEsZ0JBQVMsRUFBQyxvQkFDbENPLGlDQUFpQ1AsSUFBQUEsZ0JBQVMsRUFBQyw2QkFDM0NRLGtDQUFrQ1IsSUFBQUEsZ0JBQVMsRUFBQyw4QkFDNUNTLHVDQUF1Q1QsSUFBQUEsZ0JBQVMsRUFBQztBQUV2RCxJQUFB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