occam-verify-cli 1.0.747 → 1.0.757

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 (123) hide show
  1. package/lib/context/branching.js +56 -0
  2. package/lib/context/ephemeral.js +10 -1
  3. package/lib/context/file/nominal.js +5 -10
  4. package/lib/context/scoped.js +6 -5
  5. package/lib/context/synthetic.js +7 -3
  6. package/lib/context.js +9 -1
  7. package/lib/element/assertion/contained.js +7 -7
  8. package/lib/element/assertion/defined.js +7 -7
  9. package/lib/element/assertion/property.js +3 -3
  10. package/lib/element/assertion/satisfies.js +2 -2
  11. package/lib/element/assertion/subproof.js +111 -14
  12. package/lib/element/assertion/type.js +7 -7
  13. package/lib/element/assumption.js +21 -33
  14. package/lib/element/combinator.js +4 -4
  15. package/lib/element/conclusion.js +3 -7
  16. package/lib/element/constructor/bracketed.js +9 -8
  17. package/lib/element/constructor.js +9 -5
  18. package/lib/element/deduction.js +17 -20
  19. package/lib/element/derivation.js +4 -4
  20. package/lib/element/equality.js +12 -11
  21. package/lib/element/equivalence.js +3 -3
  22. package/lib/element/frame.js +2 -2
  23. package/lib/element/hypothesis.js +2 -2
  24. package/lib/element/judgement.js +2 -2
  25. package/lib/element/label.js +4 -4
  26. package/lib/element/metavariable.js +65 -25
  27. package/lib/element/parameter.js +2 -2
  28. package/lib/element/procedureCall.js +2 -2
  29. package/lib/element/procedureReference.js +2 -2
  30. package/lib/element/proof.js +7 -7
  31. package/lib/element/proofAssertion/premise.js +12 -18
  32. package/lib/element/proofAssertion/step.js +3 -3
  33. package/lib/element/proofAssertion/supposition.js +13 -19
  34. package/lib/element/property.js +2 -2
  35. package/lib/element/propertyRelation.js +3 -3
  36. package/lib/element/reference.js +11 -9
  37. package/lib/element/rule.js +2 -2
  38. package/lib/element/signature.js +3 -3
  39. package/lib/element/statement.js +100 -59
  40. package/lib/element/subDerivation.js +4 -4
  41. package/lib/element/subproof.js +7 -7
  42. package/lib/element/substitution/frame.js +8 -8
  43. package/lib/element/substitution/metaLevel.js +7 -7
  44. package/lib/element/substitution/reference.js +7 -7
  45. package/lib/element/substitution/statement.js +73 -60
  46. package/lib/element/substitution/term.js +10 -10
  47. package/lib/element/term.js +17 -14
  48. package/lib/element/topLevelAssertion/axiom.js +15 -13
  49. package/lib/element/topLevelAssertion.js +2 -5
  50. package/lib/element/topLevelMetaAssertion.js +27 -3
  51. package/lib/element/type.js +2 -2
  52. package/lib/element/typePrefix.js +2 -2
  53. package/lib/element/variable.js +6 -3
  54. package/lib/process/unify.js +51 -9
  55. package/lib/process/validate.js +5 -5
  56. package/lib/utilities/context.js +28 -20
  57. package/lib/utilities/element.js +2 -2
  58. package/lib/utilities/instance.js +3 -3
  59. package/lib/utilities/releaseContext.js +3 -3
  60. package/lib/utilities/string.js +2 -2
  61. package/lib/utilities/validation.js +13 -5
  62. package/package.json +3 -3
  63. package/src/context/branching.js +59 -0
  64. package/src/context/ephemeral.js +12 -0
  65. package/src/context/file/nominal.js +4 -12
  66. package/src/context/scoped.js +6 -4
  67. package/src/context/synthetic.js +9 -2
  68. package/src/context.js +14 -0
  69. package/src/element/assertion/contained.js +8 -8
  70. package/src/element/assertion/defined.js +7 -7
  71. package/src/element/assertion/property.js +4 -4
  72. package/src/element/assertion/satisfies.js +2 -2
  73. package/src/element/assertion/subproof.js +191 -18
  74. package/src/element/assertion/type.js +7 -7
  75. package/src/element/assumption.js +21 -52
  76. package/src/element/combinator.js +4 -4
  77. package/src/element/conclusion.js +3 -10
  78. package/src/element/constructor/bracketed.js +9 -7
  79. package/src/element/constructor.js +11 -5
  80. package/src/element/deduction.js +17 -23
  81. package/src/element/derivation.js +4 -3
  82. package/src/element/equality.js +16 -14
  83. package/src/element/equivalence.js +3 -3
  84. package/src/element/frame.js +2 -2
  85. package/src/element/hypothesis.js +2 -2
  86. package/src/element/judgement.js +2 -2
  87. package/src/element/label.js +4 -4
  88. package/src/element/metavariable.js +96 -32
  89. package/src/element/parameter.js +2 -2
  90. package/src/element/procedureCall.js +2 -2
  91. package/src/element/procedureReference.js +2 -2
  92. package/src/element/proof.js +8 -8
  93. package/src/element/proofAssertion/premise.js +22 -32
  94. package/src/element/proofAssertion/step.js +3 -3
  95. package/src/element/proofAssertion/supposition.js +27 -36
  96. package/src/element/property.js +2 -2
  97. package/src/element/propertyRelation.js +3 -3
  98. package/src/element/reference.js +11 -9
  99. package/src/element/rule.js +2 -2
  100. package/src/element/signature.js +3 -3
  101. package/src/element/statement.js +154 -88
  102. package/src/element/subDerivation.js +4 -3
  103. package/src/element/subproof.js +6 -6
  104. package/src/element/substitution/frame.js +8 -8
  105. package/src/element/substitution/metaLevel.js +7 -7
  106. package/src/element/substitution/reference.js +7 -7
  107. package/src/element/substitution/statement.js +99 -76
  108. package/src/element/substitution/term.js +10 -10
  109. package/src/element/term.js +22 -16
  110. package/src/element/topLevelAssertion/axiom.js +20 -16
  111. package/src/element/topLevelAssertion.js +2 -4
  112. package/src/element/topLevelMetaAssertion.js +42 -3
  113. package/src/element/type.js +3 -2
  114. package/src/element/typePrefix.js +2 -2
  115. package/src/element/variable.js +12 -3
  116. package/src/process/unify.js +78 -9
  117. package/src/process/validate.js +4 -4
  118. package/src/utilities/context.js +20 -12
  119. package/src/utilities/element.js +2 -2
  120. package/src/utilities/instance.js +3 -3
  121. package/src/utilities/releaseContext.js +1 -1
  122. package/src/utilities/string.js +3 -3
  123. package/src/utilities/validation.js +16 -4
@@ -9,23 +9,26 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- get asyncLiminally () {
13
- return asyncLiminally;
12
+ get asyncReconcile () {
13
+ return asyncReconcile;
14
14
  },
15
- get asyncScope () {
16
- return asyncScope;
15
+ get asyncRestrict () {
16
+ return asyncRestrict;
17
17
  },
18
18
  get attempt () {
19
19
  return attempt;
20
20
  },
21
- get liminally () {
22
- return liminally;
21
+ get choose () {
22
+ return choose;
23
23
  },
24
- get literally () {
25
- return literally;
24
+ get instantiate () {
25
+ return instantiate;
26
26
  },
27
- get synthetically () {
28
- return synthetically;
27
+ get join () {
28
+ return join;
29
+ },
30
+ get reconcile () {
31
+ return reconcile;
29
32
  }
30
33
  });
31
34
  const _scoped = /*#__PURE__*/ _interop_require_default(require("../context/scoped"));
@@ -33,32 +36,37 @@ const _liminal = /*#__PURE__*/ _interop_require_default(require("../context/limi
33
36
  const _literal = /*#__PURE__*/ _interop_require_default(require("../context/literal"));
34
37
  const _ephemeral = /*#__PURE__*/ _interop_require_default(require("../context/ephemeral"));
35
38
  const _synthetic = /*#__PURE__*/ _interop_require_default(require("../context/synthetic"));
39
+ const _branching = /*#__PURE__*/ _interop_require_default(require("../context/branching"));
36
40
  function _interop_require_default(obj) {
37
41
  return obj && obj.__esModule ? obj : {
38
42
  default: obj
39
43
  };
40
44
  }
45
+ function join(innerFunction, ...contexts) {
46
+ const syntheticContext = _synthetic.default.fromContexts(...contexts), context = syntheticContext; ///
47
+ return innerFunction(context);
48
+ }
49
+ function choose(innerFunction, context) {
50
+ const branchingContext = _branching.default.fromNothing(context);
51
+ context = branchingContext; ///
52
+ return innerFunction(context);
53
+ }
41
54
  function attempt(innerFunction, context) {
42
55
  const ephemeralContext = _ephemeral.default.fromNothing(context);
43
56
  context = ephemeralContext; ///
44
57
  return innerFunction(context);
45
58
  }
46
- function liminally(innerFunction, context) {
59
+ function reconcile(innerFunction, context) {
47
60
  const liminalContext = _liminal.default.fromNothing(context);
48
61
  context = liminalContext; ///
49
62
  return innerFunction(context);
50
63
  }
51
- function literally(innerFunction, context) {
64
+ function instantiate(innerFunction, context) {
52
65
  const literalContext = _literal.default.fromNothing(context);
53
66
  context = literalContext; ///
54
67
  return innerFunction(context);
55
68
  }
56
- function synthetically(innerFunction, contexts, context) {
57
- const syntheticContext = _synthetic.default.fromContexts(contexts, context);
58
- context = syntheticContext; ///
59
- return innerFunction(context);
60
- }
61
- async function asyncScope(innerFunction, metaLevelSubstitutions, context) {
69
+ async function asyncRestrict(innerFunction, metaLevelSubstitutions, context) {
62
70
  if (context === undefined) {
63
71
  context = metaLevelSubstitutions; ///
64
72
  metaLevelSubstitutions = null;
@@ -67,10 +75,10 @@ async function asyncScope(innerFunction, metaLevelSubstitutions, context) {
67
75
  context = scopedContext; ///
68
76
  return await innerFunction(context);
69
77
  }
70
- async function asyncLiminally(innerFunction, context) {
78
+ async function asyncReconcile(innerFunction, context) {
71
79
  const liminalContext = _liminal.default.fromNothing(context);
72
80
  context = liminalContext; ///
73
81
  return await innerFunction(context);
74
82
  }
75
83
 
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNjb3BlZENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvc2NvcGVkXCI7XG5pbXBvcnQgTGltaW5hbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbGltaW5hbFwiO1xuaW1wb3J0IExpdGVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2xpdGVyYWxcIjtcbmltcG9ydCBFcGhlbWVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2VwaGVtZXJhbFwiO1xuaW1wb3J0IFN5bnRoZXRpY0NvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvc3ludGhldGljXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRlbXB0KGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgZXBoZW1lcmFsQ29udGV4dCA9IEVwaGVtZXJhbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGVwaGVtZXJhbENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbWluYWxseShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbWluYWxDb250ZXh0ID0gTGltaW5hbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGxpbWluYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXRlcmFsbHkoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBsaXRlcmFsQ29udGV4dCA9IExpdGVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBsaXRlcmFsQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ludGhldGljYWxseShpbm5lckZ1bmN0aW9uLCBjb250ZXh0cywgY29udGV4dCkge1xuICBjb25zdCBzeW50aGV0aWNDb250ZXh0ID0gU3ludGhldGljQ29udGV4dC5mcm9tQ29udGV4dHMoY29udGV4dHMsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBzeW50aGV0aWNDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY1Njb3BlKGlubmVyRnVuY3Rpb24sIG1ldGFMZXZlbFN1YnN0aXR1dGlvbnMsIGNvbnRleHQpIHtcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnRleHQgPSBtZXRhTGV2ZWxTdWJzdGl0dXRpb25zOyAgLy8vXG5cbiAgICBtZXRhTGV2ZWxTdWJzdGl0dXRpb25zID0gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNjb3BlZENvbnRleHQgPSBTY29wZWRDb250ZXh0LmZyb21NZXRhTGV2ZWxTdWJzdGl0dXRpb25zKG1ldGFMZXZlbFN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBzY29wZWRDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGF3YWl0IGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0xpbWluYWxseShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbWluYWxDb250ZXh0ID0gTGltaW5hbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGxpbWluYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGF3YWl0IGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG4iXSwibmFtZXMiOlsiYXN5bmNMaW1pbmFsbHkiLCJhc3luY1Njb3BlIiwiYXR0ZW1wdCIsImxpbWluYWxseSIsImxpdGVyYWxseSIsInN5bnRoZXRpY2FsbHkiLCJpbm5lckZ1bmN0aW9uIiwiY29udGV4dCIsImVwaGVtZXJhbENvbnRleHQiLCJFcGhlbWVyYWxDb250ZXh0IiwiZnJvbU5vdGhpbmciLCJsaW1pbmFsQ29udGV4dCIsIkxpbWluYWxDb250ZXh0IiwibGl0ZXJhbENvbnRleHQiLCJMaXRlcmFsQ29udGV4dCIsImNvbnRleHRzIiwic3ludGhldGljQ29udGV4dCIsIlN5bnRoZXRpY0NvbnRleHQiLCJmcm9tQ29udGV4dHMiLCJtZXRhTGV2ZWxTdWJzdGl0dXRpb25zIiwidW5kZWZpbmVkIiwic2NvcGVkQ29udGV4dCIsIlNjb3BlZENvbnRleHQiLCJmcm9tTWV0YUxldmVsU3Vic3RpdHV0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBc0RzQkE7ZUFBQUE7O1FBZEFDO2VBQUFBOztRQWhDTkM7ZUFBQUE7O1FBUUFDO2VBQUFBOztRQVFBQztlQUFBQTs7UUFRQUM7ZUFBQUE7OzsrREE5QlU7Z0VBQ0M7Z0VBQ0E7a0VBQ0U7a0VBQ0E7Ozs7OztBQUV0QixTQUFTSCxRQUFRSSxhQUFhLEVBQUVDLE9BQU87SUFDNUMsTUFBTUMsbUJBQW1CQyxrQkFBZ0IsQ0FBQ0MsV0FBVyxDQUFDSDtJQUV0REEsVUFBVUMsa0JBQW1CLEdBQUc7SUFFaEMsT0FBT0YsY0FBY0M7QUFDdkI7QUFFTyxTQUFTSixVQUFVRyxhQUFhLEVBQUVDLE9BQU87SUFDOUMsTUFBTUksaUJBQWlCQyxnQkFBYyxDQUFDRixXQUFXLENBQUNIO0lBRWxEQSxVQUFVSSxnQkFBaUIsR0FBRztJQUU5QixPQUFPTCxjQUFjQztBQUN2QjtBQUVPLFNBQVNILFVBQVVFLGFBQWEsRUFBRUMsT0FBTztJQUM5QyxNQUFNTSxpQkFBaUJDLGdCQUFjLENBQUNKLFdBQVcsQ0FBQ0g7SUFFbERBLFVBQVVNLGdCQUFpQixHQUFHO0lBRTlCLE9BQU9QLGNBQWNDO0FBQ3ZCO0FBRU8sU0FBU0YsY0FBY0MsYUFBYSxFQUFFUyxRQUFRLEVBQUVSLE9BQU87SUFDNUQsTUFBTVMsbUJBQW1CQyxrQkFBZ0IsQ0FBQ0MsWUFBWSxDQUFDSCxVQUFVUjtJQUVqRUEsVUFBVVMsa0JBQW1CLEdBQUc7SUFFaEMsT0FBT1YsY0FBY0M7QUFDdkI7QUFFTyxlQUFlTixXQUFXSyxhQUFhLEVBQUVhLHNCQUFzQixFQUFFWixPQUFPO0lBQzdFLElBQUlBLFlBQVlhLFdBQVc7UUFDekJiLFVBQVVZLHdCQUF5QixHQUFHO1FBRXRDQSx5QkFBeUI7SUFDM0I7SUFFQSxNQUFNRSxnQkFBZ0JDLGVBQWEsQ0FBQ0MsMEJBQTBCLENBQUNKLHdCQUF3Qlo7SUFFdkZBLFVBQVVjLGVBQWdCLEdBQUc7SUFFN0IsT0FBTyxNQUFNZixjQUFjQztBQUM3QjtBQUVPLGVBQWVQLGVBQWVNLGFBQWEsRUFBRUMsT0FBTztJQUN6RCxNQUFNSSxpQkFBaUJDLGdCQUFjLENBQUNGLFdBQVcsQ0FBQ0g7SUFFbERBLFVBQVVJLGdCQUFpQixHQUFHO0lBRTlCLE9BQU8sTUFBTUwsY0FBY0M7QUFDN0IifQ==
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNjb3BlZENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvc2NvcGVkXCI7XG5pbXBvcnQgTGltaW5hbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbGltaW5hbFwiO1xuaW1wb3J0IExpdGVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2xpdGVyYWxcIjtcbmltcG9ydCBFcGhlbWVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2VwaGVtZXJhbFwiO1xuaW1wb3J0IFN5bnRoZXRpY0NvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvc3ludGhldGljXCI7XG5pbXBvcnQgQnJhbmNoaW5nQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dC9icmFuY2hpbmdcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW4oaW5uZXJGdW5jdGlvbiwgLi4uY29udGV4dHMpIHtcbiAgY29uc3Qgc3ludGhldGljQ29udGV4dCA9IFN5bnRoZXRpY0NvbnRleHQuZnJvbUNvbnRleHRzKC4uLmNvbnRleHRzKSxcbiAgICAgICAgY29udGV4dCA9IHN5bnRoZXRpY0NvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNob29zZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGJyYW5jaGluZ0NvbnRleHQgPSBCcmFuY2hpbmdDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBicmFuY2hpbmdDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRlbXB0KGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgZXBoZW1lcmFsQ29udGV4dCA9IEVwaGVtZXJhbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGVwaGVtZXJhbENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY29uY2lsZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbWluYWxDb250ZXh0ID0gTGltaW5hbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGxpbWluYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YW50aWF0ZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpdGVyYWxDb250ZXh0ID0gTGl0ZXJhbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGxpdGVyYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY1Jlc3RyaWN0KGlubmVyRnVuY3Rpb24sIG1ldGFMZXZlbFN1YnN0aXR1dGlvbnMsIGNvbnRleHQpIHtcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnRleHQgPSBtZXRhTGV2ZWxTdWJzdGl0dXRpb25zOyAgLy8vXG5cbiAgICBtZXRhTGV2ZWxTdWJzdGl0dXRpb25zID0gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNjb3BlZENvbnRleHQgPSBTY29wZWRDb250ZXh0LmZyb21NZXRhTGV2ZWxTdWJzdGl0dXRpb25zKG1ldGFMZXZlbFN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBzY29wZWRDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGF3YWl0IGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY1JlY29uY2lsZShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbWluYWxDb250ZXh0ID0gTGltaW5hbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGxpbWluYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGF3YWl0IGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG4iXSwibmFtZXMiOlsiYXN5bmNSZWNvbmNpbGUiLCJhc3luY1Jlc3RyaWN0IiwiYXR0ZW1wdCIsImNob29zZSIsImluc3RhbnRpYXRlIiwiam9pbiIsInJlY29uY2lsZSIsImlubmVyRnVuY3Rpb24iLCJjb250ZXh0cyIsInN5bnRoZXRpY0NvbnRleHQiLCJTeW50aGV0aWNDb250ZXh0IiwiZnJvbUNvbnRleHRzIiwiY29udGV4dCIsImJyYW5jaGluZ0NvbnRleHQiLCJCcmFuY2hpbmdDb250ZXh0IiwiZnJvbU5vdGhpbmciLCJlcGhlbWVyYWxDb250ZXh0IiwiRXBoZW1lcmFsQ29udGV4dCIsImxpbWluYWxDb250ZXh0IiwiTGltaW5hbENvbnRleHQiLCJsaXRlcmFsQ29udGV4dCIsIkxpdGVyYWxDb250ZXh0IiwibWV0YUxldmVsU3Vic3RpdHV0aW9ucyIsInVuZGVmaW5lZCIsInNjb3BlZENvbnRleHQiLCJTY29wZWRDb250ZXh0IiwiZnJvbU1ldGFMZXZlbFN1YnN0aXR1dGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQThEc0JBO2VBQUFBOztRQWRBQztlQUFBQTs7UUF4Qk5DO2VBQUFBOztRQVJBQztlQUFBQTs7UUF3QkFDO2VBQUFBOztRQS9CQUM7ZUFBQUE7O1FBdUJBQztlQUFBQTs7OytEQTlCVTtnRUFDQztnRUFDQTtrRUFDRTtrRUFDQTtrRUFDQTs7Ozs7O0FBRXRCLFNBQVNELEtBQUtFLGFBQWEsRUFBRSxHQUFHQyxRQUFRO0lBQzdDLE1BQU1DLG1CQUFtQkMsa0JBQWdCLENBQUNDLFlBQVksSUFBSUgsV0FDcERJLFVBQVVILGtCQUFtQixHQUFHO0lBRXRDLE9BQU9GLGNBQWNLO0FBQ3ZCO0FBRU8sU0FBU1QsT0FBT0ksYUFBYSxFQUFFSyxPQUFPO0lBQzNDLE1BQU1DLG1CQUFtQkMsa0JBQWdCLENBQUNDLFdBQVcsQ0FBQ0g7SUFFdERBLFVBQVVDLGtCQUFtQixHQUFHO0lBRWhDLE9BQU9OLGNBQWNLO0FBQ3ZCO0FBRU8sU0FBU1YsUUFBUUssYUFBYSxFQUFFSyxPQUFPO0lBQzVDLE1BQU1JLG1CQUFtQkMsa0JBQWdCLENBQUNGLFdBQVcsQ0FBQ0g7SUFFdERBLFVBQVVJLGtCQUFtQixHQUFHO0lBRWhDLE9BQU9ULGNBQWNLO0FBQ3ZCO0FBRU8sU0FBU04sVUFBVUMsYUFBYSxFQUFFSyxPQUFPO0lBQzlDLE1BQU1NLGlCQUFpQkMsZ0JBQWMsQ0FBQ0osV0FBVyxDQUFDSDtJQUVsREEsVUFBVU0sZ0JBQWlCLEdBQUc7SUFFOUIsT0FBT1gsY0FBY0s7QUFDdkI7QUFFTyxTQUFTUixZQUFZRyxhQUFhLEVBQUVLLE9BQU87SUFDaEQsTUFBTVEsaUJBQWlCQyxnQkFBYyxDQUFDTixXQUFXLENBQUNIO0lBRWxEQSxVQUFVUSxnQkFBaUIsR0FBRztJQUU5QixPQUFPYixjQUFjSztBQUN2QjtBQUVPLGVBQWVYLGNBQWNNLGFBQWEsRUFBRWUsc0JBQXNCLEVBQUVWLE9BQU87SUFDaEYsSUFBSUEsWUFBWVcsV0FBVztRQUN6QlgsVUFBVVUsd0JBQXlCLEdBQUc7UUFFdENBLHlCQUF5QjtJQUMzQjtJQUVBLE1BQU1FLGdCQUFnQkMsZUFBYSxDQUFDQywwQkFBMEIsQ0FBQ0osd0JBQXdCVjtJQUV2RkEsVUFBVVksZUFBZ0IsR0FBRztJQUU3QixPQUFPLE1BQU1qQixjQUFjSztBQUM3QjtBQUVPLGVBQWVaLGVBQWVPLGFBQWEsRUFBRUssT0FBTztJQUN6RCxNQUFNTSxpQkFBaUJDLGdCQUFjLENBQUNKLFdBQVcsQ0FBQ0g7SUFFbERBLFVBQVVNLGdCQUFpQixHQUFHO0lBRTlCLE9BQU8sTUFBTVgsY0FBY0s7QUFDN0IifQ==