occam-verify-cli 1.0.809 → 1.0.816

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 (91) hide show
  1. package/lib/context/bounded.js +6 -6
  2. package/lib/context/branching.js +3 -3
  3. package/lib/context/ephemeral.js +7 -3
  4. package/lib/context/file/nominal.js +16 -16
  5. package/lib/context/liminal.js +26 -30
  6. package/lib/context/synoptic.js +62 -2
  7. package/lib/context.js +66 -54
  8. package/lib/element/assertion/defined.js +12 -11
  9. package/lib/element/assertion/satisfies.js +15 -11
  10. package/lib/element/assertion.js +5 -5
  11. package/lib/element/assumption/metaLevel.js +3 -3
  12. package/lib/element/conclusion.js +11 -8
  13. package/lib/element/deduction.js +11 -8
  14. package/lib/element/frame.js +6 -14
  15. package/lib/element/label.js +5 -8
  16. package/lib/element/metavariable.js +17 -17
  17. package/lib/element/procedureCall.js +10 -6
  18. package/lib/element/proofAssertion/premise.js +27 -27
  19. package/lib/element/proofAssertion/step.js +25 -5
  20. package/lib/element/proofAssertion/supposition.js +27 -27
  21. package/lib/element/proofAssertion.js +10 -10
  22. package/lib/element/reference.js +9 -13
  23. package/lib/element/rule.js +41 -43
  24. package/lib/element/signature.js +8 -8
  25. package/lib/element/statement.js +35 -45
  26. package/lib/element/subproof.js +4 -4
  27. package/lib/element/substitution/frame.js +16 -11
  28. package/lib/element/substitution/reference.js +15 -10
  29. package/lib/element/substitution/statement.js +55 -51
  30. package/lib/element/substitution/term.js +17 -12
  31. package/lib/element/substitution.js +35 -29
  32. package/lib/element/term.js +18 -16
  33. package/lib/element/topLevelAssertion/axiom.js +5 -3
  34. package/lib/element/topLevelAssertion.js +36 -38
  35. package/lib/element/variable.js +7 -7
  36. package/lib/node/frame.js +1 -9
  37. package/lib/node/statement.js +1 -9
  38. package/lib/node/term.js +10 -19
  39. package/lib/process/assign.js +23 -31
  40. package/lib/utilities/element.js +33 -5
  41. package/lib/utilities/equivalence.js +4 -4
  42. package/lib/utilities/equivalences.js +30 -15
  43. package/lib/utilities/string.js +2 -2
  44. package/lib/utilities/substitutions.js +16 -15
  45. package/lib/utilities/unification.js +133 -124
  46. package/package.json +1 -1
  47. package/src/context/bounded.js +5 -5
  48. package/src/context/branching.js +2 -2
  49. package/src/context/ephemeral.js +10 -2
  50. package/src/context/file/nominal.js +15 -15
  51. package/src/context/liminal.js +29 -35
  52. package/src/context/synoptic.js +81 -1
  53. package/src/context.js +88 -69
  54. package/src/element/assertion/defined.js +17 -16
  55. package/src/element/assertion/satisfies.js +17 -10
  56. package/src/element/assertion.js +8 -8
  57. package/src/element/assumption/metaLevel.js +4 -2
  58. package/src/element/conclusion.js +12 -7
  59. package/src/element/deduction.js +12 -7
  60. package/src/element/frame.js +7 -20
  61. package/src/element/label.js +3 -5
  62. package/src/element/metavariable.js +27 -27
  63. package/src/element/procedureCall.js +14 -9
  64. package/src/element/proofAssertion/premise.js +41 -41
  65. package/src/element/proofAssertion/step.js +37 -7
  66. package/src/element/proofAssertion/supposition.js +41 -41
  67. package/src/element/proofAssertion.js +10 -9
  68. package/src/element/reference.js +9 -13
  69. package/src/element/rule.js +57 -61
  70. package/src/element/signature.js +7 -7
  71. package/src/element/statement.js +54 -68
  72. package/src/element/subproof.js +3 -3
  73. package/src/element/substitution/frame.js +18 -8
  74. package/src/element/substitution/reference.js +16 -7
  75. package/src/element/substitution/statement.js +78 -67
  76. package/src/element/substitution/term.js +19 -10
  77. package/src/element/substitution.js +45 -35
  78. package/src/element/term.js +28 -26
  79. package/src/element/topLevelAssertion/axiom.js +5 -2
  80. package/src/element/topLevelAssertion.js +49 -53
  81. package/src/element/variable.js +6 -6
  82. package/src/node/frame.js +0 -12
  83. package/src/node/statement.js +0 -12
  84. package/src/node/term.js +14 -28
  85. package/src/process/assign.js +35 -46
  86. package/src/utilities/element.js +32 -4
  87. package/src/utilities/equivalence.js +3 -4
  88. package/src/utilities/equivalences.js +31 -19
  89. package/src/utilities/string.js +2 -2
  90. package/src/utilities/substitutions.js +17 -15
  91. package/src/utilities/unification.js +145 -119
@@ -44,25 +44,11 @@ function judgementAssignmentFromJudgement(judgement, context) {
44
44
  return judgementAssignment;
45
45
  }
46
46
  function leftVariableAssignmentFromEquality(equality, context) {
47
- let leftVariableAssignment = (contxt)=>{
48
- ///
49
- };
50
- const type = equality.getType(), leftTermNode = equality.getLeftTermNode(), singularVariableNode = leftTermNode.getSingularVariableNode();
51
- if (singularVariableNode !== null) {
52
- const leftVariableNode = singularVariableNode; ///
53
- leftVariableAssignment = variableAssignmentFromVariableNodeAndType(leftVariableNode, type, context);
54
- }
47
+ const type = equality.getType(), leftTerm = equality.getLeftTerm(), leftVariableAssignment = variableAssignmentFromTermAndType(leftTerm, type, context);
55
48
  return leftVariableAssignment;
56
49
  }
57
50
  function rightVariableAssignmentFromEquality(equality, context) {
58
- let rightVariableAssignment = (context)=>{
59
- ///
60
- };
61
- const type = equality.getType(), rightTermNode = equality.getRightTermNode(), singularVariableNode = rightTermNode.getSingularVariableNode();
62
- if (singularVariableNode !== null) {
63
- const rightVariableNode = singularVariableNode; ///
64
- rightVariableAssignment = variableAssignmentFromVariableNodeAndType(rightVariableNode, type, context);
65
- }
51
+ const type = equality.getType(), rightTerm = equality.getRightTerm(), rightVariableAssignment = variableAssignmentFromTermAndType(rightTerm, type, context);
66
52
  return rightVariableAssignment;
67
53
  }
68
54
  function variableAssignmentFromTypeAssertion(typeAssertion, context) {
@@ -71,11 +57,8 @@ function variableAssignmentFromTypeAssertion(typeAssertion, context) {
71
57
  };
72
58
  const term = typeAssertion.getTerm(), termSingular = term.isSingular();
73
59
  if (termSingular) {
74
- const variableIdentifier = term.getVariableIdentifier(), variable = context.findVariableByVariableIdentifier(variableIdentifier);
75
- if (variable !== null) {
76
- const type = typeAssertion.getType(), variableNode = variable.getNode();
77
- variableAssignment = variableAssignmentFromVariableNodeAndType(variableNode, type, context);
78
- }
60
+ const type = typeAssertion.getType(), variableNode = term.getVariableNode();
61
+ variableAssignment = variableAssignmentFromTermAndType(variableNode, type, context);
79
62
  }
80
63
  return variableAssignment;
81
64
  }
@@ -97,17 +80,26 @@ function variableAssignmentFromPrepertyAssertion(propertyAssertion, context) {
97
80
  //
98
81
  // const variableAssignment = variableAssignmentFromVariable(variable),
99
82
  }
100
- function variableAssignmentFromVariableNodeAndType(variableNode, type, context) {
101
- const variable = (0, _element.variableFromVariableNode)(variableNode, context);
102
- variable.setType(type);
103
- const variableAssignment = (context)=>{
104
- const declaredVariable = variable; ///
105
- context.addDeclaredVariable(declaredVariable);
106
- const declaredVariableTypeString = declaredVariable.getTypeString(), declaredVariableString = declaredVariable.getString(), assigned = true; ///
107
- assigned ? context.trace(`Assigned the '${declaredVariableString}' declared variable with type '${declaredVariableTypeString}'.`) : context.debug(`Unable to assign the '${declaredVariableString}' declared variable with type '${declaredVariableTypeString}'.`);
108
- return assigned;
83
+ function variableAssignmentFromTermAndType(term, type, context) {
84
+ let variableAssignment = (context)=>{
85
+ ///
109
86
  };
87
+ const termSingular = term.isSingular();
88
+ if (termSingular) {
89
+ const termType = term.getType(), termTypeEqualToType = termType.isEqualTo(type);
90
+ if (!termTypeEqualToType) {
91
+ const variableNode = term.getVariableNode(), variable = (0, _element.variableFromVariableNode)(variableNode, context);
92
+ variable.setType(type);
93
+ variableAssignment = (context)=>{
94
+ const declaredVariable = variable; ///
95
+ context.addDeclaredVariable(declaredVariable);
96
+ const declaredVariableTypeString = declaredVariable.getTypeString(), declaredVariableString = declaredVariable.getString(), assigned = true; ///
97
+ assigned ? context.trace(`Assigned the '${declaredVariableString}' declared variable with type '${declaredVariableTypeString}'.`) : context.debug(`Unable to assign the '${declaredVariableString}' declared variable with type '${declaredVariableTypeString}'.`);
98
+ return assigned;
99
+ };
100
+ }
101
+ }
110
102
  return variableAssignment;
111
103
  }
112
104
 
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2Fzc2lnbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpIHtcbiAgY29uc3QgZXF1YWxpdHlBc3NpZ25tZW50ID0gKGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlcXVhbGl0eUFkZGVkID0gY29udGV4dC5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHlBZGRlZDtcbiAgfTtcblxuICByZXR1cm4gZXF1YWxpdHlBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50QXNzaWdubWVudEZyb21KdWRnZW1lbnQoanVkZ2VtZW50LCBjb250ZXh0KSB7XG4gIGNvbnN0IGp1ZGdlbWVudEFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGRlY2xhcmVkSnVkZ2VtZW50ID0ganVkZ2VtZW50LCAgLy8vXG4gICAgICAgICAgZGVjbGFyZWRKdWRnZW1lbnRBZGRlZCA9IGNvbnRleHQuYWRkRGVjbGFyZWRKdWRnZW1lbnQoZGVjbGFyZWRKdWRnZW1lbnQpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkSnVkZ2VtZW50QWRkZWQ7XG4gIH07XG5cbiAgcmV0dXJuIGp1ZGdlbWVudEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSB7XG4gIGxldCBsZWZ0VmFyaWFibGVBc3NpZ25tZW50ID0gKGNvbnR4dCkgPT4ge1xuICAgIC8vL1xuICB9O1xuXG4gIGNvbnN0IHR5cGUgPSBlcXVhbGl0eS5nZXRUeXBlKCksXG4gICAgICAgIGxlZnRUZXJtTm9kZSA9IGVxdWFsaXR5LmdldExlZnRUZXJtTm9kZSgpLFxuICAgICAgICBzaW5ndWxhclZhcmlhYmxlTm9kZSA9IGxlZnRUZXJtTm9kZS5nZXRTaW5ndWxhclZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChzaW5ndWxhclZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGxlZnRWYXJpYWJsZU5vZGUgPSBzaW5ndWxhclZhcmlhYmxlTm9kZTsgIC8vL1xuXG4gICAgbGVmdFZhcmlhYmxlQXNzaWdubWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21WYXJpYWJsZU5vZGVBbmRUeXBlKGxlZnRWYXJpYWJsZU5vZGUsIHR5cGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGxlZnRWYXJpYWJsZUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCkge1xuICBsZXQgcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgIC8vL1xuICB9O1xuXG4gIGNvbnN0IHR5cGUgPSBlcXVhbGl0eS5nZXRUeXBlKCksXG4gICAgICAgIHJpZ2h0VGVybU5vZGUgPSBlcXVhbGl0eS5nZXRSaWdodFRlcm1Ob2RlKCksXG4gICAgICAgIHNpbmd1bGFyVmFyaWFibGVOb2RlID0gcmlnaHRUZXJtTm9kZS5nZXRTaW5ndWxhclZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChzaW5ndWxhclZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHJpZ2h0VmFyaWFibGVOb2RlID0gc2luZ3VsYXJWYXJpYWJsZU5vZGU7ICAvLy9cblxuICAgIHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVZhcmlhYmxlTm9kZUFuZFR5cGUocmlnaHRWYXJpYWJsZU5vZGUsIHR5cGUsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHJpZ2h0VmFyaWFibGVBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50ID0gKGNvbnRleHQpID0+IHtcbiAgICAvLy9cbiAgfTtcblxuICBjb25zdCB0ZXJtID0gdHlwZUFzc2VydGlvbi5nZXRUZXJtKCksXG4gICAgICAgIHRlcm1TaW5ndWxhciA9IHRlcm0uaXNTaW5ndWxhcigpO1xuXG4gIGlmICh0ZXJtU2luZ3VsYXIpIHtcbiAgICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB0ZXJtLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgICAgICAgIHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZUFzc2VydGlvbi5nZXRUeXBlKCksXG4gICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSB2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICAgIHZhcmlhYmxlQXNzaWdubWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21WYXJpYWJsZU5vZGVBbmRUeXBlKHZhcmlhYmxlTm9kZSwgdHlwZSwgY29udGV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudEZyb21QcmVwZXJ0eUFzc2VydGlvbihwcm9wZXJ0eUFzc2VydGlvbiwgY29udGV4dCkge1xuXG4gIGRlYnVnZ2VyXG5cbiAgLy8gbGV0IHZhcmlhYmxlO1xuICAvL1xuICAvLyBjb25zdCB7IFZhcmlhYmxlIH0gPSBlbGVtZW50cyxcbiAgLy8gICB0ZXJtTm9kZSA9IHRoaXMudGVybS5nZXROb2RlKCk7XG4gIC8vXG4gIC8vIHZhcmlhYmxlID0gVmFyaWFibGUuZnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcbiAgLy9cbiAgLy8gaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gIC8vICAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGUuZ2V0SWRlbnRpZmllcigpO1xuICAvL1xuICAvLyAgIHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuICAvL1xuICAvLyAgIHZhcmlhYmxlID0gVmFyaWFibGUuZnJvbVZhcmlhYmxlQW5kUHJvcGVydHlSZWxhdGlvbih2YXJpYWJsZSwgdGhpcy5wcm9wZXJ0eVJlbGF0aW9uKTtcbiAgLy9cbiAgLy8gICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVmFyaWFibGUodmFyaWFibGUpLFxuXG4gIH1cblxuZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVZhcmlhYmxlTm9kZUFuZFR5cGUodmFyaWFibGVOb2RlLCB0eXBlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZhcmlhYmxlID0gdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSwgY29udGV4dCk7XG5cbiAgdmFyaWFibGUuc2V0VHlwZSh0eXBlKTtcblxuICBjb25zdCB2YXJpYWJsZUFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGUgPSB2YXJpYWJsZTsgIC8vL1xuXG4gICAgY29udGV4dC5hZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpO1xuXG4gICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZVR5cGVTdHJpbmcgPSBkZWNsYXJlZFZhcmlhYmxlLmdldFR5cGVTdHJpbmcoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlU3RyaW5nID0gZGVjbGFyZWRWYXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7ICAvLy9cblxuICAgIGFzc2lnbmVkID9cbiAgICAgIGNvbnRleHQudHJhY2UoYEFzc2lnbmVkIHRoZSAnJHtkZWNsYXJlZFZhcmlhYmxlU3RyaW5nfScgZGVjbGFyZWQgdmFyaWFibGUgd2l0aCB0eXBlICcke2RlY2xhcmVkVmFyaWFibGVUeXBlU3RyaW5nfScuYCkgOlxuICAgICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gYXNzaWduIHRoZSAnJHtkZWNsYXJlZFZhcmlhYmxlU3RyaW5nfScgZGVjbGFyZWQgdmFyaWFibGUgd2l0aCB0eXBlICcke2RlY2xhcmVkVmFyaWFibGVUeXBlU3RyaW5nfScuYCk7XG5cbiAgICByZXR1cm4gYXNzaWduZWQ7XG4gIH07XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbn1cbiJdLCJuYW1lcyI6WyJlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJqdWRnZW1lbnRBc3NpZ25tZW50RnJvbUp1ZGdlbWVudCIsImxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJyaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSIsInZhcmlhYmxlQXNzaWdubWVudEZyb21QcmVwZXJ0eUFzc2VydGlvbiIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQXNzZXJ0aW9uIiwiZXF1YWxpdHkiLCJjb250ZXh0IiwiZXF1YWxpdHlBc3NpZ25tZW50IiwiZXF1YWxpdHlBZGRlZCIsImFkZEVxdWFsaXR5IiwianVkZ2VtZW50IiwianVkZ2VtZW50QXNzaWdubWVudCIsImRlY2xhcmVkSnVkZ2VtZW50IiwiZGVjbGFyZWRKdWRnZW1lbnRBZGRlZCIsImFkZERlY2xhcmVkSnVkZ2VtZW50IiwibGVmdFZhcmlhYmxlQXNzaWdubWVudCIsImNvbnR4dCIsInR5cGUiLCJnZXRUeXBlIiwibGVmdFRlcm1Ob2RlIiwiZ2V0TGVmdFRlcm1Ob2RlIiwic2luZ3VsYXJWYXJpYWJsZU5vZGUiLCJnZXRTaW5ndWxhclZhcmlhYmxlTm9kZSIsImxlZnRWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVmFyaWFibGVOb2RlQW5kVHlwZSIsInJpZ2h0VmFyaWFibGVBc3NpZ25tZW50IiwicmlnaHRUZXJtTm9kZSIsImdldFJpZ2h0VGVybU5vZGUiLCJyaWdodFZhcmlhYmxlTm9kZSIsInR5cGVBc3NlcnRpb24iLCJ2YXJpYWJsZUFzc2lnbm1lbnQiLCJ0ZXJtIiwiZ2V0VGVybSIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVOb2RlIiwiZ2V0Tm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uIiwidmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIiwic2V0VHlwZSIsImRlY2xhcmVkVmFyaWFibGUiLCJhZGREZWNsYXJlZFZhcmlhYmxlIiwiZGVjbGFyZWRWYXJpYWJsZVR5cGVTdHJpbmciLCJnZXRUeXBlU3RyaW5nIiwiZGVjbGFyZWRWYXJpYWJsZVN0cmluZyIsImdldFN0cmluZyIsImFzc2lnbmVkIiwidHJhY2UiLCJkZWJ1ZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBSWdCQTtlQUFBQTs7UUFVQUM7ZUFBQUE7O1FBV0FDO2VBQUFBOztRQWtCQUM7ZUFBQUE7O1FBeUNBQztlQUFBQTs7UUF2QkFDO2VBQUFBOzs7eUJBM0R5QjtBQUVsQyxTQUFTTCwrQkFBK0JNLFFBQVEsRUFBRUMsT0FBTztJQUM5RCxNQUFNQyxxQkFBcUIsQ0FBQ0Q7UUFDMUIsTUFBTUUsZ0JBQWdCRixRQUFRRyxXQUFXLENBQUNKO1FBRTFDLE9BQU9HO0lBQ1Q7SUFFQSxPQUFPRDtBQUNUO0FBRU8sU0FBU1AsaUNBQWlDVSxTQUFTLEVBQUVKLE9BQU87SUFDakUsTUFB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
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2Fzc2lnbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdmFyaWFibGVGcm9tVmFyaWFibGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkoZXF1YWxpdHksIGNvbnRleHQpIHtcbiAgY29uc3QgZXF1YWxpdHlBc3NpZ25tZW50ID0gKGNvbnRleHQpID0+IHtcbiAgICBjb25zdCBlcXVhbGl0eUFkZGVkID0gY29udGV4dC5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG5cbiAgICByZXR1cm4gZXF1YWxpdHlBZGRlZDtcbiAgfTtcblxuICByZXR1cm4gZXF1YWxpdHlBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ganVkZ2VtZW50QXNzaWdubWVudEZyb21KdWRnZW1lbnQoanVkZ2VtZW50LCBjb250ZXh0KSB7XG4gIGNvbnN0IGp1ZGdlbWVudEFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGRlY2xhcmVkSnVkZ2VtZW50ID0ganVkZ2VtZW50LCAgLy8vXG4gICAgICAgICAgZGVjbGFyZWRKdWRnZW1lbnRBZGRlZCA9IGNvbnRleHQuYWRkRGVjbGFyZWRKdWRnZW1lbnQoZGVjbGFyZWRKdWRnZW1lbnQpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmVkSnVkZ2VtZW50QWRkZWQ7XG4gIH07XG5cbiAgcmV0dXJuIGp1ZGdlbWVudEFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWZ0VmFyaWFibGVBc3NpZ25tZW50RnJvbUVxdWFsaXR5KGVxdWFsaXR5LCBjb250ZXh0KSB7XG4gIGNvbnN0IHR5cGUgPSBlcXVhbGl0eS5nZXRUeXBlKCksXG4gICAgICAgIGxlZnRUZXJtID0gZXF1YWxpdHkuZ2V0TGVmdFRlcm0oKSxcbiAgICAgICAgbGVmdFZhcmlhYmxlQXNzaWdubWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21UZXJtQW5kVHlwZShsZWZ0VGVybSwgdHlwZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGxlZnRWYXJpYWJsZUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eShlcXVhbGl0eSwgY29udGV4dCkge1xuICBjb25zdCB0eXBlID0gZXF1YWxpdHkuZ2V0VHlwZSgpLFxuICAgICAgICByaWdodFRlcm0gPSBlcXVhbGl0eS5nZXRSaWdodFRlcm0oKSxcbiAgICAgICAgcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVGVybUFuZFR5cGUocmlnaHRUZXJtLCB0eXBlLCBjb250ZXh0KTtcblxuICByZXR1cm4gcmlnaHRWYXJpYWJsZUFzc2lnbm1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCB2YXJpYWJsZUFzc2lnbm1lbnQgPSAoY29udGV4dCkgPT4ge1xuICAgIC8vL1xuICB9O1xuXG4gIGNvbnN0IHRlcm0gPSB0eXBlQXNzZXJ0aW9uLmdldFRlcm0oKSxcbiAgICAgICAgdGVybVNpbmd1bGFyID0gdGVybS5pc1Npbmd1bGFyKCk7XG5cbiAgaWYgKHRlcm1TaW5ndWxhcikge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlQXNzZXJ0aW9uLmdldFR5cGUoKSxcbiAgICAgICAgICB2YXJpYWJsZU5vZGUgPSB0ZXJtLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gICAgdmFyaWFibGVBc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVRlcm1BbmRUeXBlKHZhcmlhYmxlTm9kZSwgdHlwZSwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50RnJvbVByZXBlcnR5QXNzZXJ0aW9uKHByb3BlcnR5QXNzZXJ0aW9uLCBjb250ZXh0KSB7XG5cbiAgZGVidWdnZXJcblxuICAvLyBsZXQgdmFyaWFibGU7XG4gIC8vXG4gIC8vIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAvLyAgIHRlcm1Ob2RlID0gdGhpcy50ZXJtLmdldE5vZGUoKTtcbiAgLy9cbiAgLy8gdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuICAvL1xuICAvLyBpZiAodmFyaWFibGUgIT09IG51bGwpIHtcbiAgLy8gICBjb25zdCB2YXJpYWJsZUlkZW50aWZpZXIgPSB2YXJpYWJsZS5nZXRJZGVudGlmaWVyKCk7XG4gIC8vXG4gIC8vICAgdmFyaWFibGUgPSBjb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG4gIC8vXG4gIC8vICAgdmFyaWFibGUgPSBWYXJpYWJsZS5mcm9tVmFyaWFibGVBbmRQcm9wZXJ0eVJlbGF0aW9uKHZhcmlhYmxlLCB0aGlzLnByb3BlcnR5UmVsYXRpb24pO1xuICAvL1xuICAvLyAgIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21WYXJpYWJsZSh2YXJpYWJsZSksXG5cbiAgfVxuXG5mdW5jdGlvbiB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tVGVybUFuZFR5cGUodGVybSwgdHlwZSwgY29udGV4dCkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50ID0gKGNvbnRleHQpID0+IHtcbiAgICAvLy9cbiAgfTtcblxuICBjb25zdCB0ZXJtU2luZ3VsYXIgPSB0ZXJtLmlzU2luZ3VsYXIoKTtcblxuICBpZiAodGVybVNpbmd1bGFyKSB7XG4gICAgY29uc3QgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9UeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvKHR5cGUpO1xuXG4gICAgaWYgKCF0ZXJtVHlwZUVxdWFsVG9UeXBlKSB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGUgPSB0ZXJtLmdldFZhcmlhYmxlTm9kZSgpLFxuICAgICAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgdmFyaWFibGUuc2V0VHlwZSh0eXBlKTtcblxuICAgICAgdmFyaWFibGVBc3NpZ25tZW50ID0gKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgZGVjbGFyZWRWYXJpYWJsZSA9IHZhcmlhYmxlOyAgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpO1xuXG4gICAgICAgIGNvbnN0IGRlY2xhcmVkVmFyaWFibGVUeXBlU3RyaW5nID0gZGVjbGFyZWRWYXJpYWJsZS5nZXRUeXBlU3RyaW5nKCksXG4gICAgICAgICAgICAgIGRlY2xhcmVkVmFyaWFibGVTdHJpbmcgPSBkZWNsYXJlZFZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICAgICAgICBhc3NpZ25lZCA9IHRydWU7ICAvLy9cblxuICAgICAgICBhc3NpZ25lZCA/XG4gICAgICAgICAgY29udGV4dC50cmFjZShgQXNzaWduZWQgdGhlICcke2RlY2xhcmVkVmFyaWFibGVTdHJpbmd9JyBkZWNsYXJlZCB2YXJpYWJsZSB3aXRoIHR5cGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVR5cGVTdHJpbmd9Jy5gKSA6XG4gICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgVW5hYmxlIHRvIGFzc2lnbiB0aGUgJyR7ZGVjbGFyZWRWYXJpYWJsZVN0cmluZ30nIGRlY2xhcmVkIHZhcmlhYmxlIHdpdGggdHlwZSAnJHtkZWNsYXJlZFZhcmlhYmxlVHlwZVN0cmluZ30nLmApO1xuXG4gICAgICAgIHJldHVybiBhc3NpZ25lZDtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudDtcbn1cbiJdLCJuYW1lcyI6WyJlcXVhbGl0eUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJqdWRnZW1lbnRBc3NpZ25tZW50RnJvbUp1ZGdlbWVudCIsImxlZnRWYXJpYWJsZUFzc2lnbm1lbnRGcm9tRXF1YWxpdHkiLCJyaWdodFZhcmlhYmxlQXNzaWdubWVudEZyb21FcXVhbGl0eSIsInZhcmlhYmxlQXNzaWdubWVudEZyb21QcmVwZXJ0eUFzc2VydGlvbiIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQXNzZXJ0aW9uIiwiZXF1YWxpdHkiLCJjb250ZXh0IiwiZXF1YWxpdHlBc3NpZ25tZW50IiwiZXF1YWxpdHlBZGRlZCIsImFkZEVxdWFsaXR5IiwianVkZ2VtZW50IiwianVkZ2VtZW50QXNzaWdubWVudCIsImRlY2xhcmVkSnVkZ2VtZW50IiwiZGVjbGFyZWRKdWRnZW1lbnRBZGRlZCIsImFkZERlY2xhcmVkSnVkZ2VtZW50IiwidHlwZSIsImdldFR5cGUiLCJsZWZ0VGVybSIsImdldExlZnRUZXJtIiwibGVmdFZhcmlhYmxlQXNzaWdubWVudCIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UZXJtQW5kVHlwZSIsInJpZ2h0VGVybSIsImdldFJpZ2h0VGVybSIsInJpZ2h0VmFyaWFibGVBc3NpZ25tZW50IiwidHlwZUFzc2VydGlvbiIsInZhcmlhYmxlQXNzaWdubWVudCIsInRlcm0iLCJnZXRUZXJtIiwidGVybVNpbmd1bGFyIiwiaXNTaW5ndWxhciIsInZhcmlhYmxlTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uIiwidGVybVR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9UeXBlIiwiaXNFcXVhbFRvIiwidmFyaWFibGUiLCJ2YXJpYWJsZUZyb21WYXJpYWJsZU5vZGUiLCJzZXRUeXBlIiwiZGVjbGFyZWRWYXJpYWJsZSIsImFkZERlY2xhcmVkVmFyaWFibGUiLCJkZWNsYXJlZFZhcmlhYmxlVHlwZVN0cmluZyIsImdldFR5cGVTdHJpbmciLCJkZWNsYXJlZFZhcmlhYmxlU3RyaW5nIiwiZ2V0U3RyaW5nIiwiYXNzaWduZWQiLCJ0cmFjZSIsImRlYnVnIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFJZ0JBO2VBQUFBOztRQVVBQztlQUFBQTs7UUFXQUM7ZUFBQUE7O1FBUUFDO2VBQUFBOztRQTBCQUM7ZUFBQUE7O1FBbEJBQztlQUFBQTs7O3lCQXZDeUI7QUFFbEMsU0FBU0wsK0JBQStCTSxRQUFRLEVBQUVDLE9BQU87SUFDOUQsTUFBTUMscUJBQXFCLENBQUNEO1FBQzFCLE1BQU1FLGdCQUFnQkYsUUFBUUcsV0FBVyxDQUFDSjtRQUUxQyxPQUFPRztJQUNUO0lBRUEsT0FBT0Q7QUFDVDtBQUVPLFNBQVNQLGlDQUFpQ1UsU0FBUyxFQUFFSixPQUFPO0lBQ2pFLE1BQU1LLHNCQUFzQixDQUFDTDtRQUMzQixNQUFNTSxvQkFBb0JGLFdBQ3BCRyx5QkFBeUJQLFFBQVFRLG9CQUFvQixDQUFDRjtRQUU1RCxPQUFPQztJQUNUO0lBRUEsT0FBT0Y7QUFDVDtBQUVPLFNBQVNWLG1DQUFtQ0ksUUFBUSxFQUFFQyxPQUFPO0lBQ2xFLE1BQU1TLE9BQU9WLFNBQVNXLE9BQU8sSUFDdkJDLFdBQVdaLFNBQVNhLFdBQVcsSUFDL0JDLHlCQUF5QkMsa0NBQWtDSCxVQUFVRixNQUFNVDtJQUVqRixPQUFPYTtBQUNUO0FBRU8sU0FBU2pCLG9DQUFvQ0csUUFBUSxFQUFFQyxPQUFPO0lBQ25FLE1BQU1TLE9BQU9WLFNBQVNXLE9BQU8sSUFDdkJLLFlBQVloQixTQUFTaUIsWUFBWSxJQUNqQ0MsMEJBQTBCSCxrQ0FBa0NDLFdBQVdOLE1BQU1UO0lBRW5GLE9BQU9pQjtBQUNUO0FBRU8sU0FBU25CLG9DQUFvQ29CLGFBQWEsRUFBRWxCLE9BQU87SUFDeEUsSUFBSW1CLHFCQUFxQixDQUFDbkI7SUFDeEIsR0FBRztJQUNMO0lBRUEsTUFBTW9CLE9BQU9GLGNBQWNHLE9BQU8sSUFDNUJDLGVBQWVGLEtBQUtHLFVBQVU7SUFFcEMsSUFBSUQsY0FBYztRQUNoQixNQUFNYixPQUFPUyxjQUFjUixPQUFPLElBQzVCYyxlQUFlSixLQUFLSyxlQUFlO1FBRXpDTixxQkFBcUJMLGtDQUFrQ1UsY0FBY2YsTUFBTVQ7SUFDN0U7SUFFQSxPQUFPbUI7QUFDVDtBQUVPLFNBQVN0Qix3Q0FBd0M2QixpQkFBaUIsRUFBRTFCLE9BQU87SUFFaEYsUUFBUTtBQUVSLGdCQUFnQjtBQUNoQixFQUFFO0FBQ0YsaUNBQWlDO0FBQ2pDLG9DQUFvQztBQUNwQyxFQUFFO0FBQ0YsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiwyQkFBMkI7QUFDM0IseURBQXlEO0FBQ3pELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsRUFBRTtBQUNGLDBGQUEwRjtBQUMxRixFQUFFO0FBQ0YseUVBQXlFO0FBRXpFO0FBRUYsU0FBU2Msa0NBQWtDTSxJQUFJLEVBQUVYLElBQUksRUFBRVQsT0FBTztJQUM1RCxJQUFJbUIscUJBQXFCLENBQUNuQjtJQUN4QixHQUFHO0lBQ0w7SUFFQSxNQUFNc0IsZUFBZUYsS0FBS0csVUFBVTtJQUVwQyxJQUFJRCxjQUFjO1FBQ2hCLE1BQU1LLFdBQVdQLEtBQUtWLE9BQU8sSUFDdkJrQixzQkFBc0JELFNBQVNFLFNBQVMsQ0FBQ3BCO1FBRS9DLElBQUksQ0FBQ21CLHFCQUFxQjtZQUN4QixNQUFNSixlQUFlSixLQUFLSyxlQUFlLElBQ25DSyxXQUFXQyxJQUFBQSxpQ0FBd0IsRUFBQ1AsY0FBY3hCO1lBRXhEOEIsU0FBU0UsT0FBTyxDQUFDdkI7WUFFakJVLHFCQUFxQixDQUFDbkI7Z0JBQ3BCLE1BQU1pQyxtQkFBbUJILFVBQVcsR0FBRztnQkFFdkM5QixRQUFRa0MsbUJBQW1CLENBQUNEO2dCQUU1QixNQUFNRSw2QkFBNkJGLGlCQUFpQkcsYUFBYSxJQUMzREMseUJBQXlCSixpQkFBaUJLLFNBQVMsSUFDbkRDLFdBQVcsTUFBTyxHQUFHO2dCQUUzQkEsV0FDRXZDLFFBQVF3QyxLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUVILHVCQUF1QiwrQkFBK0IsRUFBRUYsMkJBQTJCLEVBQUUsQ0FBQyxJQUNsSG5DLFFBQVF5QyxLQUFLLENBQUMsQ0FBQyxzQkFBc0IsRUFBRUosdUJBQXVCLCtCQUErQixFQUFFRiwyQkFBMkIsRUFBRSxDQUFDO2dCQUVsSSxPQUFPSTtZQUNUO1FBQ0Y7SUFDRjtJQUVBLE9BQU9wQjtBQUNUIn0=