occam-nominal 1.0.506 → 1.0.508

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 (53) hide show
  1. package/lib/element/assertion/contained.js +3 -3
  2. package/lib/element/assertion/schema.js +20 -12
  3. package/lib/element/assertion/signature.js +47 -46
  4. package/lib/element/assumption/implicit.js +3 -2
  5. package/lib/element/claim.js +2 -2
  6. package/lib/element/combinator.js +3 -2
  7. package/lib/element/constraint.js +14 -2
  8. package/lib/element/constructor.js +3 -2
  9. package/lib/element/fact/premise.js +2 -1
  10. package/lib/element/fact/step.js +71 -62
  11. package/lib/element/fact/supposition.js +5 -4
  12. package/lib/element/fact.js +1 -13
  13. package/lib/element/generator.js +3 -2
  14. package/lib/element/hypothesis.js +2 -1
  15. package/lib/element/label.js +7 -23
  16. package/lib/element/link.js +7 -15
  17. package/lib/element/property.js +8 -6
  18. package/lib/element/reference.js +15 -19
  19. package/lib/element/resolution/conclusion.js +2 -1
  20. package/lib/element/resolution/deduction.js +2 -1
  21. package/lib/element/rule.js +2 -2
  22. package/lib/element/schema.js +2 -2
  23. package/lib/element/signature.js +3 -2
  24. package/lib/element/substitution/frame.js +3 -2
  25. package/lib/element/substitution/statement.js +3 -2
  26. package/lib/element/substitution/term.js +3 -2
  27. package/package.json +3 -3
  28. package/src/element/assertion/contained.js +2 -2
  29. package/src/element/assertion/schema.js +26 -13
  30. package/src/element/assertion/signature.js +50 -48
  31. package/src/element/assumption/implicit.js +3 -1
  32. package/src/element/claim.js +1 -1
  33. package/src/element/combinator.js +3 -1
  34. package/src/element/constraint.js +19 -2
  35. package/src/element/constructor.js +3 -1
  36. package/src/element/fact/premise.js +2 -0
  37. package/src/element/fact/step.js +87 -76
  38. package/src/element/fact/supposition.js +6 -4
  39. package/src/element/fact.js +0 -18
  40. package/src/element/generator.js +3 -1
  41. package/src/element/hypothesis.js +2 -0
  42. package/src/element/label.js +8 -32
  43. package/src/element/link.js +10 -20
  44. package/src/element/property.js +11 -6
  45. package/src/element/reference.js +21 -28
  46. package/src/element/resolution/conclusion.js +2 -0
  47. package/src/element/resolution/deduction.js +2 -0
  48. package/src/element/rule.js +1 -1
  49. package/src/element/schema.js +1 -1
  50. package/src/element/signature.js +3 -1
  51. package/src/element/substitution/frame.js +3 -1
  52. package/src/element/substitution/statement.js +3 -1
  53. package/src/element/substitution/term.js +3 -1
@@ -55,12 +55,12 @@ const _default = (0, _elements.define)(class ContainedAssertion extends _asserti
55
55
  }
56
56
  assertion = this; ///
57
57
  const validateTerm = this.validateTerm.bind(this), validateStatement = this.validateStatement.bind(this);
58
- all([
58
+ return all([
59
59
  validateTerm,
60
60
  validateStatement
61
61
  ], state, context, (state, context, back)=>{
62
62
  const validateWhenDeclared = this.validateWhenDeclared.bind(this), validateWhenDerived = this.validateWhenDerived.bind(this);
63
- exists([
63
+ return exists([
64
64
  validateWhenDeclared,
65
65
  validateWhenDerived
66
66
  ], state, context, (state, context, back)=>{
@@ -167,4 +167,4 @@ function validateWhenDerived(term, statement, negated, context, forward, back) {
167
167
  return forward(context, back);
168
168
  }
169
169
 
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9jb250YWluZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaXNEZXJpdmVkLCBpc0RlY2xhcmVkIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb250YWluZWRBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucywgc3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcbmltcG9ydCB7IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSxcbiAgICAgICAgIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSxcbiAgICAgICAgIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlLFxuICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCBzdGF0ZSBmcm9tIFwiZWFzeS9saWIvbWl4aW5zL3N0YXRlXCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBhbGwsIGV4aXN0cywgaXNvbGF0ZSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQ29udGFpbmVkQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBuZWdhdGVkLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgaXNOZWdhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0ZWQ7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBjb250YWluZWRBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250YWluZWRBc3NlcnRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVUZXJtID0gdGhpcy52YWxpZGF0ZVRlcm0uYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIGFsbChbXG4gICAgICB2YWxpZGF0ZVRlcm0sXG4gICAgICB2YWxpZGF0ZVN0YXRlbWVudFxuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlV2hlbkRlY2xhcmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZWNsYXJlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVyaXZlZC5iaW5kKHRoaXMpO1xuXG4gICAgICBleGlzdHMoW1xuICAgICAgICB2YWxpZGF0ZVdoZW5EZWNsYXJlZCxcbiAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZFxuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRhaW5lZEFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgICB9LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24ncyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtU2luZ3VsYXIgPSB0aGlzLnRlcm0uaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKCF0ZXJtU2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0aGlzLnRlcm0uZ2V0U3RyaW5nKCkgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBpcyBub3Qgc2luZ3VsYXIuYCk7XG5cbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVybS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMudGVybSAgPSB0ZXJtO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24ncyB0ZXJtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24ncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudFNpbmd1bGFyID0gdGhpcy5zdGF0ZW1lbnQuaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKCFzdGF0ZW1lbnRTaW5ndWxhcikge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5zdGF0ZW1lbnQuZ2V0U3RyaW5nKCkgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgaXMgbm90IHNpbmd1bGFyLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbidzIHN0YXRlbWVudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVjbGFyZWQoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBkZWNsYXJlZCA9IGlzRGVjbGFyZWQoc3RhdGUpO1xuXG4gICAgaWYgKCFkZWNsYXJlZCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGRlY2xhcmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVjbGFyZWQgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKTtcblxuICAgIGlmICghZGVyaXZlZCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlV2hlbkRlcml2ZWQodGhpcy50ZXJtLCB0aGlzLnN0YXRlbWVudCwgdGhpcy5uZWdhdGVkLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnModGhpcy50ZXJtLCBjb250ZXh0KSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50QW5kU3Vic3RpdHV0aW9ucyh0aGlzLnN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCBzdGF0ZW1lbnQsIHRoaXMubmVnYXRlZCwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQ29udGFpbmVkQXNzZXJ0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbjtcblxuICAgIGlmICh0aGlzLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVDb250YWluZWRBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgdGVybSA9IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCBzdGF0ZW1lbnQsIG5lZ2F0ZWQsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgY29uc3QgdGVybUNvbnRhaW5lZCA9IHN0YXRlbWVudC5pc1Rlcm1Db250YWluZWQodGVybSwgY29udGV4dCk7XG5cbiAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgaWYgKCFuZWdhdGVkICYmIHRlcm1Db250YWluZWQpIHtcbiAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gIH1cblxuICBpZiAobmVnYXRlZCAmJiAhdGVybUNvbnRhaW5lZCkge1xuICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICghdmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICByZXR1cm4gYmFjaygpO1xuICB9XG5cbiAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG59Il0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJhbGwiLCJleGlzdHMiLCJpc29sYXRlIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsIm5lZ2F0ZWQiLCJzdGF0ZW1lbnQiLCJnZXRUZXJtIiwiaXNOZWdhdGVkIiwiZ2V0U3RhdGVtZW50IiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJmaW5kQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZVRlcm0iLCJiaW5kIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJhZGRBc3NlcnRpb24iLCJ0ZXJtU2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwidGVybVN0cmluZyIsInN0YXRlbWVudFNpbmd1bGFyIiwic3RhdGVtZW50U3RyaW5nIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsInVuaWZ5SW5kZXBlbmRlbnRseSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zIiwibmFtZSIsImZyb21KU09OIiwianNvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVDb250YWluZWRBc3NlcnRpb24iLCJ0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0ZXJtQ29udGFpbmVkIiwiaXNUZXJtQ29udGFpbmVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQW9CQTs7O2VBQUE7OztnQ0FsQjBEO2tFQUVwQzswQkFFQzt5QkFDSzt1QkFDVTs2QkFDUTsrQkFDdUM7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
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9jb250YWluZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaXNEZXJpdmVkLCBpc0RlY2xhcmVkIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb250YWluZWRBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucywgc3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcbmltcG9ydCB7IHRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSxcbiAgICAgICAgIG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSxcbiAgICAgICAgIHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlLFxuICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCBzdGF0ZSBmcm9tIFwiZWFzeS9saWIvbWl4aW5zL3N0YXRlXCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBhbGwsIGV4aXN0cywgaXNvbGF0ZSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgQ29udGFpbmVkQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBuZWdhdGVkLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgaXNOZWdhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0ZWQ7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBjb250YWluZWRBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250YWluZWRBc3NlcnRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVUZXJtID0gdGhpcy52YWxpZGF0ZVRlcm0uYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVUZXJtLFxuICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVdoZW5EZWNsYXJlZCA9IHRoaXMudmFsaWRhdGVXaGVuRGVjbGFyZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlV2hlbkRlY2xhcmVkLFxuICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGFpbmVkQXNzZXJ0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICAgIH0sIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbidzIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHRlcm1TaW5ndWxhciA9IHRoaXMudGVybS5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoIXRlcm1TaW5ndWxhcikge1xuICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMudGVybS5nZXRTdHJpbmcoKSAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy50ZXJtICA9IHRlcm07XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbidzIHRlcm0uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50U2luZ3VsYXIgPSB0aGlzLnN0YXRlbWVudC5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoIXN0YXRlbWVudFNpbmd1bGFyKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSB0aGlzLnN0YXRlbWVudC5nZXRTdHJpbmcoKSAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBpcyBub3Qgc2luZ3VsYXIuYCk7XG5cbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uJ3Mgc3RhdGVtZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZWNsYXJlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlY2xhcmVkID0gaXNEZWNsYXJlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlY2xhcmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVjbGFyZWQgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWNsYXJlZCBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuXG4gICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBpc0Rlcml2ZWQoc3RhdGUpO1xuXG4gICAgaWYgKCFkZXJpdmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVyaXZlZCBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVXaGVuRGVyaXZlZCh0aGlzLnRlcm0sIHRoaXMuc3RhdGVtZW50LCB0aGlzLm5lZ2F0ZWQsIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdW5pZnlJbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyh0aGlzLnRlcm0sIGNvbnRleHQpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zKHRoaXMuc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIHN0YXRlbWVudCwgdGhpcy5uZWdhdGVkLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb250YWluZWRBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICBjb250YWluZWRBc3NlcnRpb24gPSBuZXcgQ29udGFpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIHN0YXRlbWVudCwgbmVnYXRlZCwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICBjb25zdCB0ZXJtQ29udGFpbmVkID0gc3RhdGVtZW50LmlzVGVybUNvbnRhaW5lZCh0ZXJtLCBjb250ZXh0KTtcblxuICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICBpZiAoIW5lZ2F0ZWQgJiYgdGVybUNvbnRhaW5lZCkge1xuICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChuZWdhdGVkICYmICF0ZXJtQ29udGFpbmVkKSB7XG4gICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKCF2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgIHJldHVybiBiYWNrKCk7XG4gIH1cblxuICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbn0iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImFsbCIsImV4aXN0cyIsImlzb2xhdGUiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJDb250YWluZWRBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0ZXJtIiwibmVnYXRlZCIsInN0YXRlbWVudCIsImdldFRlcm0iLCJpc05lZ2F0ZWQiLCJnZXRTdGF0ZW1lbnQiLCJnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlIiwiZ2V0Tm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJhc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImZpbmRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJkZWJ1ZyIsInZhbGlkYXRlVGVybSIsImJpbmQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsInZhbGlkYXRlV2hlbkRlY2xhcmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImFkZEFzc2VydGlvbiIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJ0ZXJtU3RyaW5nIiwic3RhdGVtZW50U2luZ3VsYXIiLCJzdGF0ZW1lbnRTdHJpbmciLCJkZWNsYXJlZCIsImlzRGVjbGFyZWQiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwidW5pZnlJbmRlcGVuZGVudGx5IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbiIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInRlcm1Db250YWluZWQiLCJpc1Rlcm1Db250YWluZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBb0JBOzs7ZUFBQTs7O2dDQWxCMEQ7a0VBRXBDOzBCQUVDO3lCQUNLO3VCQUNV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
@@ -58,7 +58,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
58
58
  }
59
59
  return newObj;
60
60
  }
61
- const { some } = _occamlanguages.continuationUtilities;
61
+ const { cut, some } = _occamlanguages.continuationUtilities, { unbreakable } = _occamlanguages.breakPointUtilities;
62
62
  const _default = (0, _elements.define)(class SchemaAssertion extends _assertion.default {
63
63
  constructor(context, string, node, breakPoint, link, frame){
64
64
  super(context, string, node, breakPoint);
@@ -95,7 +95,18 @@ const _default = (0, _elements.define)(class SchemaAssertion extends _assertion.
95
95
  }
96
96
  return implicitAssumptions;
97
97
  }
98
- validate(state, context, continuation) {
98
+ verify = unbreakable(function(context, forward, back) {
99
+ forward = cut(forward, back); ///
100
+ const schemaAssertionString = this.getString(); ///
101
+ context.trace(`Verifying the '${schemaAssertionString}' schema assertion...`);
102
+ return (0, _state.declare)((state)=>{
103
+ return this.validate(state, context, (schemaAssertion, context, back)=>{
104
+ context.debug(`...verified the '${schemaAssertionString}' schema assertion.`);
105
+ return forward(context, back);
106
+ }, back);
107
+ });
108
+ });
109
+ validate(state, context, forward, back) {
99
110
  let validates;
100
111
  const schameAssertionString = this.getString(); ///
101
112
  context.trace(`Validating the '${schameAssertionString}' schame assertion...`);
@@ -117,16 +128,13 @@ const _default = (0, _elements.define)(class SchemaAssertion extends _assertion.
117
128
  validates = continuation(schameAssertion, context);
118
129
  return validates;
119
130
  });
120
- if (validates) {
121
- context.addAssertion(assertion);
122
- }
123
131
  }
124
132
  if (validates) {
125
133
  context.debug(`...validated the '${schameAssertionString}' schame assertion.`);
126
134
  }
127
135
  return validates;
128
136
  }
129
- validateFrame(state, context, continuation) {
137
+ validateFrame(state, context, forward, back) {
130
138
  let frameValidates;
131
139
  const schameAssertionString = this.getString(); ///
132
140
  context.trace(`Validating the '${schameAssertionString}' schame assertion's frame...`);
@@ -141,7 +149,7 @@ const _default = (0, _elements.define)(class SchemaAssertion extends _assertion.
141
149
  }
142
150
  return frameValidates;
143
151
  }
144
- validateLink(state, context, continuation) {
152
+ validateLink(state, context, forward, back) {
145
153
  let linkValidates;
146
154
  const schameAssertionString = this.getString(); ///
147
155
  context.trace(`Validating the '${schameAssertionString}' schame assertion's link...`);
@@ -156,13 +164,13 @@ const _default = (0, _elements.define)(class SchemaAssertion extends _assertion.
156
164
  }
157
165
  return linkValidates;
158
166
  }
159
- unifyStep(step, context, continuation) {
167
+ unifyStep(step, context, forward, back) {
160
168
  const schemas = context.getSchemas(), statement = step.getStatement(), schemaAssertion = this; ///
161
- return some(schemas, (schema, continuation)=>{
162
- return schema.unifyStatementAndSchemaAssertion(statement, schemaAssertion, context, continuation);
163
- }, continuation);
169
+ return some(schemas, (schema, forward, back)=>{
170
+ return schema.unifyStatementAndSchemaAssertion(statement, schemaAssertion, context, forward, back);
171
+ }, forward, back);
164
172
  }
165
173
  static name = "SchemaAssertion";
166
174
  });
167
175
 
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IEFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uXCI7XG5cbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBkZWNsYXJlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuXG5jb25zdCB7IHNvbWUgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFNjaGVtYUFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGluaywgZnJhbWUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5saW5rID0gbGluaztcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gIH1cblxuICBnZXRMaW5rKCkge1xuICAgIHJldHVybiB0aGlzLmxpbms7XG4gIH1cblxuICBnZXRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZTtcbiAgfVxuXG4gIGdldFNjaGVtYUFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHNjaGVtYUFzc2VydGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKCkgeyByZXR1cm4gdGhpcy5mcmFtZS5nZXRBc3N1bXB0aW9ucygpOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkgeyByZXR1cm4gdGhpcy5mcmFtZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldEltcGxpY2l0QXNzdW1wdGlvbnMoY29udGV4dCkge1xuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZSgpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBJbXBsaWNpdEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgZmFjdHMgPSBjb250ZXh0LmdldEZhY3RzKCk7XG5cbiAgICAgIGZhY3RzLmZvckVhY2goKGZhY3QpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gZmFjdC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gSW1wbGljaXRBc3N1bXB0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgICAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbi52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGltcGxpY2l0QXNzdW1wdGlvbiwgY29udGV4dCkgPT4gdHJ1ZSkgIC8vL1xuICAgICAgICB9KTtcblxuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25zLnB1c2goaW1wbGljaXRBc3N1bXB0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25zO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzY2hhbWVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzY2hhbWVBc3NlcnRpb25TdHJpbmd9JyBzY2hhbWUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2NoYW1lQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzY2hhbWVBc3NlcnRpb25TdHJpbmd9JyBzY2hhbWUgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHNjaGFtZUFzc2VydGlvbiwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydGlvbiA9IHRoaXM7ICAvLy9cblxuICAgICAgY29uc3QgdmFsaWRhdGVGcmFtZSA9IHRoaXMudmFsaWRhdGVGcmFtZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVGcmFtZSxcbiAgICAgICAgdmFsaWRhdGVMaW5rXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBfICkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgIGNvbnN0IHNjaGFtZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgIC8vL1xuXG4gICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzY2hhbWVBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2NoYW1lQXNzZXJ0aW9uU3RyaW5nfScgc2NoYW1lIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVGcmFtZShzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IGZyYW1lVmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc2NoYW1lQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2NoYW1lQXNzZXJ0aW9uU3RyaW5nfScgc2NoYW1lIGFzc2VydGlvbidzIGZyYW1lLi4uYCk7XG5cbiAgICBmcmFtZVZhbGlkYXRlcyA9IHRoaXMuZnJhbWUudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChmcmFtZSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKGZyYW1lVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NjaGFtZUFzc2VydGlvblN0cmluZ30nIHNjaGFtZSBhc3NlcnRpb24ncyBmcmFtZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWVWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZUxpbmsoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBsaW5rVmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc2NoYW1lQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2NoYW1lQXNzZXJ0aW9uU3RyaW5nfScgc2NoYW1lIGFzc2VydGlvbidzIGxpbmsuLi5gKTtcblxuICAgIGxpbmtWYWxpZGF0ZXMgPSB0aGlzLmxpbmsudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChsaW5rLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB0aGlzLmxpbmsgPSBsaW5rO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKGxpbmtWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2NoYW1lQXNzZXJ0aW9uU3RyaW5nfScgc2NoYW1lIGFzc2VydGlvbidzIGxpbmsuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmtWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVN0ZXAoc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc2NoZW1hcyA9IGNvbnRleHQuZ2V0U2NoZW1hcygpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc2NoZW1hQXNzZXJ0aW9uID0gdGhpczsgLy8vXG5cbiAgICByZXR1cm4gc29tZShzY2hlbWFzLCAoc2NoZW1hLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJldHVybiBzY2hlbWEudW5pZnlTdGF0ZW1lbnRBbmRTY2hlbWFBc3NlcnRpb24oc3RhdGVtZW50LCBzY2hlbWFBc3NlcnRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJTY2hlbWFBc3NlcnRpb25cIjtcbn0pO1xuIl0sIm5hbWVzIjpbInNvbWUiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJTY2hlbWFBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJsaW5rIiwiZnJhbWUiLCJnZXRMaW5rIiwiZ2V0RnJhbWUiLCJnZXRTY2hlbWFBc3NlcnRpb25Ob2RlIiwiZ2V0Tm9kZSIsInNjaGVtYUFzc2VydGlvbk5vZGUiLCJnZXRBc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZSIsImdldEltcGxpY2l0QXNzdW1wdGlvbnMiLCJpbXBsaWNpdEFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlIiwiSW1wbGljaXRBc3N1bXB0aW9uIiwiZWxlbWVudHMiLCJmYWN0cyIsImdldEZhY3RzIiwiZm9yRWFjaCIsImZhY3QiLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJpbXBsaWNpdEFzc3VtcHRpb24iLCJmcm9tU3RhdGVtZW50IiwiZGVjbGFyZSIsInN0YXRlIiwidmFsaWRhdGUiLCJwdXNoIiwiY29udGludWF0aW9uIiwidmFsaWRhdGVzIiwic2NoYW1lQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJhc3NlcnRpb24iLCJmaW5kQXNzZXJ0aW9uIiwic2NoYW1lQXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZUZyYW1lIiwiYmluZCIsInZhbGlkYXRlTGluayIsImFsbCIsIl8iLCJhZGRBc3NlcnRpb24iLCJmcmFtZVZhbGlkYXRlcyIsImxpbmtWYWxpZGF0ZXMiLCJ1bmlmeVN0ZXAiLCJzdGVwIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJzY2hlbWFBc3NlcnRpb24iLCJzY2hlbWEiLCJ1bmlmeVN0YXRlbWVudEFuZFNjaGVtYUFzc2VydGlvbiIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVhzQztrRUFFaEI7a0VBRUQ7dUJBR0c7Ozs7Ozs7Ozs7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
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IEFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uXCI7XG5cbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBkZWNsYXJlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuXG5jb25zdCB7IGN1dCwgc29tZSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyB1bmJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFNjaGVtYUFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGluaywgZnJhbWUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5saW5rID0gbGluaztcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gIH1cblxuICBnZXRMaW5rKCkge1xuICAgIHJldHVybiB0aGlzLmxpbms7XG4gIH1cblxuICBnZXRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZTtcbiAgfVxuXG4gIGdldFNjaGVtYUFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHNjaGVtYUFzc2VydGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIGdldEFzc3VtcHRpb25zKCkgeyByZXR1cm4gdGhpcy5mcmFtZS5nZXRBc3N1bXB0aW9ucygpOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkgeyByZXR1cm4gdGhpcy5mcmFtZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldEltcGxpY2l0QXNzdW1wdGlvbnMoY29udGV4dCkge1xuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZSgpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBJbXBsaWNpdEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgZmFjdHMgPSBjb250ZXh0LmdldEZhY3RzKCk7XG5cbiAgICAgIGZhY3RzLmZvckVhY2goKGZhY3QpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gZmFjdC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gSW1wbGljaXRBc3N1bXB0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgICAgICBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbi52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGltcGxpY2l0QXNzdW1wdGlvbiwgY29udGV4dCkgPT4gdHJ1ZSkgIC8vL1xuICAgICAgICB9KTtcblxuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25zLnB1c2goaW1wbGljaXRBc3N1bXB0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25zO1xuICB9XG5cbiAgdmVyaWZ5ID0gdW5icmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IHNjaGVtYUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzY2hlbWFBc3NlcnRpb25TdHJpbmd9JyBzY2hlbWEgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc2NoZW1hQXNzZXJ0aW9uLCBjb250ZXh0ICwgYmFjaykgPT4ge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbi5gKTtcblxuICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgIH0sIGJhY2spO1xuICAgIH0pO1xuICB9KTtcblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzY2hhbWVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzY2hhbWVBc3NlcnRpb25TdHJpbmd9JyBzY2hhbWUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2NoYW1lQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzY2hhbWVBc3NlcnRpb25TdHJpbmd9JyBzY2hhbWUgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHNjaGFtZUFzc2VydGlvbiwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydGlvbiA9IHRoaXM7ICAvLy9cblxuICAgICAgY29uc3QgdmFsaWRhdGVGcmFtZSA9IHRoaXMudmFsaWRhdGVGcmFtZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVGcmFtZSxcbiAgICAgICAgdmFsaWRhdGVMaW5rXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBfICkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgIGNvbnN0IHNjaGFtZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgIC8vL1xuXG4gICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzY2hhbWVBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NjaGFtZUFzc2VydGlvblN0cmluZ30nIHNjaGFtZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlRnJhbWUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgZnJhbWVWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzY2hhbWVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzY2hhbWVBc3NlcnRpb25TdHJpbmd9JyBzY2hhbWUgYXNzZXJ0aW9uJ3MgZnJhbWUuLi5gKTtcblxuICAgIGZyYW1lVmFsaWRhdGVzID0gdGhpcy5mcmFtZS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGZyYW1lLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAoZnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2NoYW1lQXNzZXJ0aW9uU3RyaW5nfScgc2NoYW1lIGFzc2VydGlvbidzIGZyYW1lLmApO1xuICAgIH1cblxuICAgIHJldHVybiBmcmFtZVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlTGluayhzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBsaW5rVmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc2NoYW1lQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2NoYW1lQXNzZXJ0aW9uU3RyaW5nfScgc2NoYW1lIGFzc2VydGlvbidzIGxpbmsuLi5gKTtcblxuICAgIGxpbmtWYWxpZGF0ZXMgPSB0aGlzLmxpbmsudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChsaW5rLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB0aGlzLmxpbmsgPSBsaW5rO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKGxpbmtWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2NoYW1lQXNzZXJ0aW9uU3RyaW5nfScgc2NoYW1lIGFzc2VydGlvbidzIGxpbmsuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmtWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVN0ZXAoc3RlcCwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNjaGVtYXMgPSBjb250ZXh0LmdldFNjaGVtYXMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGVwLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHNjaGVtYUFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgcmV0dXJuIHNvbWUoc2NoZW1hcywgKHNjaGVtYSwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIHNjaGVtYS51bmlmeVN0YXRlbWVudEFuZFNjaGVtYUFzc2VydGlvbihzdGF0ZW1lbnQsIHNjaGVtYUFzc2VydGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU2NoZW1hQXNzZXJ0aW9uXCI7XG59KTtcbiJdLCJuYW1lcyI6WyJjdXQiLCJzb21lIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwidW5icmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiU2NoZW1hQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibGluayIsImZyYW1lIiwiZ2V0TGluayIsImdldEZyYW1lIiwiZ2V0U2NoZW1hQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJzY2hlbWFBc3NlcnRpb25Ob2RlIiwiZ2V0QXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRJbXBsaWNpdEFzc3VtcHRpb25zIiwiaW1wbGljaXRBc3N1bXB0aW9ucyIsIm1ldGF2YXJpYWJsZSIsIkltcGxpY2l0QXNzdW1wdGlvbiIsImVsZW1lbnRzIiwiZmFjdHMiLCJnZXRGYWN0cyIsImZvckVhY2giLCJmYWN0Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiaW1wbGljaXRBc3N1bXB0aW9uIiwiZnJvbVN0YXRlbWVudCIsImRlY2xhcmUiLCJzdGF0ZSIsInZhbGlkYXRlIiwicHVzaCIsInZlcmlmeSIsImZvcndhcmQiLCJiYWNrIiwic2NoZW1hQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJzY2hlbWFBc3NlcnRpb24iLCJkZWJ1ZyIsInZhbGlkYXRlcyIsInNjaGFtZUFzc2VydGlvblN0cmluZyIsImFzc2VydGlvbiIsImZpbmRBc3NlcnRpb24iLCJzY2hhbWVBc3NlcnRpb24iLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZUZyYW1lIiwiYmluZCIsInZhbGlkYXRlTGluayIsImFsbCIsIl8iLCJmcmFtZVZhbGlkYXRlcyIsImxpbmtWYWxpZGF0ZXMiLCJ1bmlmeVN0ZXAiLCJzdGVwIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJzY2hlbWEiLCJ1bmlmeVN0YXRlbWVudEFuZFNjaGVtYUFzc2VydGlvbiIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVoyRDtrRUFFckM7a0VBRUQ7dUJBR0c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXhCLE1BQU0sRUFBRUEsR0FBRyxFQUFFQyxJQUFJLEVBQUUsR0FBR0MscUNBQXFCLEVBQ3JDLEVBQUVDLFdBQVcsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFM0MsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyx3QkFBd0JDLGtCQUFTO0lBQzNELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxLQUFLLENBQUU7UUFDMUQsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJ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
@@ -14,12 +14,13 @@ const _elements = require("../../elements");
14
14
  const _context = require("../../utilities/context");
15
15
  const _instantiate = require("../../process/instantiate");
16
16
  const _element = require("../../utilities/element");
17
+ const _state = require("../../utilities/state");
17
18
  function _interop_require_default(obj) {
18
19
  return obj && obj.__esModule ? obj : {
19
20
  default: obj
20
21
  };
21
22
  }
22
- const { breakPointFromJSON } = _occamlanguages.breakPointUtilities;
23
+ const { cut } = _occamlanguages.continuationUtilities, { unbreakable } = _occamlanguages.breakPointUtilities;
23
24
  const _default = (0, _elements.define)(class SignatureAssertion extends _assertion.default {
24
25
  constructor(context, string, node, breakPoint, link, terms){
25
26
  super(context, string, node, breakPoint);
@@ -36,51 +37,54 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
36
37
  const node = this.getNode(), signatureAssertionNode = node; ///
37
38
  return signatureAssertionNode;
38
39
  }
39
- validate(state, context, continuation) {
40
- let validates;
40
+ verify = unbreakable(function(context, forward, back) {
41
+ forward = cut(forward, back); ///
42
+ const signatureAssertionString = this.getString(); ///
43
+ context.trace(`Verifying the '${signatureAssertionString}' signature assertion...`);
44
+ return (0, _state.declare)((state)=>{
45
+ return this.validate(state, context, (signatureAssertion, context, back)=>{
46
+ context.debug(`...verified the '${signatureAssertionString}' signature assertion.`);
47
+ return forward(context, back);
48
+ }, back);
49
+ });
50
+ });
51
+ validate(state, context, forward, back) {
52
+ forward = cut(forward, back); ///
41
53
  const signatureAssertionString = this.getString(); ///
42
54
  context.trace(`Validating the '${signatureAssertionString}' signature assertion...`);
43
- let assertion;
44
- assertion = this.findAssertion(context);
45
- if (assertion !== null) {
55
+ assertion = this; ///
56
+ const validateTerms = this.validateTerms.bind(this), validateLink = this.validateLink.bind(this);
57
+ validates = all([
58
+ validateTerms,
59
+ validateLink
60
+ ], state, context, (state, context)=>{
61
+ let validates1;
62
+ context.addAssertion(assertion);
46
63
  const signatureAssertion = assertion; ///
47
- context.debug(`The '${signatureAssertionString}' signature assertion is already present.`);
48
- validates = continuation(signatureAssertion, context);
49
- } else {
50
- assertion = this; ///
51
- const validateTerms = this.validateTerms.bind(this), validateLink = this.validateLink.bind(this);
52
- validates = all([
53
- validateTerms,
54
- validateLink
55
- ], state, context, (state, context)=>{
56
- let validates;
57
- context.addAssertion(assertion);
58
- const signatureAssertion = assertion; ///
59
- validates = continuation(signatureAssertion, context);
60
- return validates;
61
- });
62
- }
64
+ validates1 = continuation(signatureAssertion, context);
65
+ return validates1;
66
+ });
63
67
  if (validates) {
64
68
  context.debug(`...validated the '${signatureAssertionString}' signature assertion.`);
65
69
  }
66
70
  return validates;
67
71
  }
68
- validateTerm(term, terms, state, context, continuation) {
72
+ validateTerm(term, terms, state, context, forward, back) {
69
73
  let termValidates;
70
74
  const termString = term.getString(), signatureAssertionString = this.getString(); ///
71
75
  context.trace(`Validating the '${signatureAssertionString}' signature assertion's '${termString}' term...`);
72
76
  termValidates = term.validate(state, context, (term, context)=>{
73
- let validates;
77
+ let validates1;
74
78
  terms.push(term);
75
- validates = continuation(terms, state, context);
76
- return validates;
79
+ validates1 = continuation(terms, state, context);
80
+ return validates1;
77
81
  });
78
82
  if (termValidates) {
79
83
  context.debug(`...validated the '${signatureAssertionString}' signature assertion's '${termString}' term.`);
80
84
  }
81
85
  return termValidates;
82
86
  }
83
- validateTerms(state, context, continuation) {
87
+ validateTerms(state, context, forward, back) {
84
88
  let termsValidate;
85
89
  const signatureAssertionString = this.getString(); ///
86
90
  context.trace(`Validating the '${signatureAssertionString}' signature assertion's terms...`);
@@ -98,31 +102,31 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
98
102
  }
99
103
  return termsValidate;
100
104
  }
101
- validateLink(state, context, continuation) {
105
+ validateLink(state, context, forward, back) {
102
106
  let linkValidates;
103
107
  const signatureAssertionString = this.getString(); ///
104
108
  context.trace(`Validating the '${signatureAssertionString}' signature assertion's link...`);
105
109
  linkValidates = this.link.validate(state, context, (link, context)=>{
106
- let validates = false;
110
+ let validates1 = false;
107
111
  const axiom = context.findAxiomByLink(link);
108
112
  if (axiom !== null) {
109
113
  const axiomSatisfiable = axiom.isSatisfiable();
110
114
  if (axiomSatisfiable) {
111
- validates = true;
115
+ validates1 = true;
112
116
  }
113
117
  }
114
- if (validates) {
118
+ if (validates1) {
115
119
  this.link = link;
116
- validates = continuation(state, context);
120
+ validates1 = continuation(state, context);
117
121
  }
118
- return validates;
122
+ return validates1;
119
123
  });
120
124
  if (linkValidates) {
121
125
  context.debug(`...validated the '${signatureAssertionString}' signature assertion's link.`);
122
126
  }
123
127
  return linkValidates;
124
128
  }
125
- unifyClaim(claim, context, continuation) {
129
+ unifyClaim(claim, context, forward, back) {
126
130
  const claimString = claim.getString(), signatureAssertionString = this.getString();
127
131
  context.trace(`Unifying the '${claimString}' claim with the '${signatureAssertionString}' signature assertion...`);
128
132
  return (0, _context.reconcile)((context)=>{
@@ -144,7 +148,7 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
144
148
  });
145
149
  }, context);
146
150
  }
147
- unifyStepAndFactOrSubproofs(step, factOrSubproofs, context, continuation) {
151
+ unifyStepAndFactOrSubproofs(step, factOrSubproofs, context, forward, back) {
148
152
  let stepAndFactOrSubproofsUnify = false;
149
153
  return (0, _context.reconcile)((context)=>{
150
154
  const axiom = context.findAxiomByLink(this.link), signatureAssertion = this; ///
@@ -152,21 +156,18 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
152
156
  if (!signatureAssertionUnifies) {
153
157
  return continuation(stepAndFactOrSubproofsUnify);
154
158
  }
155
- axiom.unifyStepAndFactOrSubproofs(step, factOrSubproofs, context, continuation);
159
+ axiom.unifyStepAndFactOrSubproofs(step, factOrSubproofs, context, forward, back);
156
160
  });
157
161
  }, context);
158
162
  }
159
163
  static name = "SignatureAssertion";
160
164
  static fromJSON(json, context) {
161
- let signatureAssertion = null;
162
- const { name } = json;
163
- if (this.name === name) {
164
- (0, _context.instantiate)((context)=>{
165
- const { string } = json, definedAssertionNode = (0, _instantiate.instantiateSignatureAssertion)(string, context), node = definedAssertionNode, breakPoint = breakPointFromJSON(json), terms = (0, _element.termsFromSignatureAssertionNode)(definedAssertionNode, context), link = (0, _element.linkFromSignatureAssertionNode)(definedAssertionNode, context);
166
- context = null;
167
- signatureAssertion = new SignatureAssertion(context, string, node, breakPoint, terms, link);
168
- }, context);
169
- }
165
+ let signatureAssertion;
166
+ (0, _context.instantiate)((context)=>{
167
+ const { string } = json, definedAssertionNode = (0, _instantiate.instantiateSignatureAssertion)(string, context), node = definedAssertionNode, breakPoint = null, terms = (0, _element.termsFromSignatureAssertionNode)(definedAssertionNode, context), link = (0, _element.linkFromSignatureAssertionNode)(definedAssertionNode, context);
168
+ context = null;
169
+ signatureAssertion = new SignatureAssertion(context, string, node, breakPoint, terms, link);
170
+ });
170
171
  return signatureAssertion;
171
172
  }
172
173
  static fromStep(step, context) {
@@ -179,4 +180,4 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
179
180
  }
180
181
  });
181
182
 
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zaWduYXR1cmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IHJlY29uY2lsZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlU2lnbmF0dXJlQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHRlcm1zRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUsIGxpbmtGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTaWduYXR1cmVBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHRlcm1zKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGluayA9IGxpbms7XG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybXM7XG4gIH1cblxuICBnZXRMaW5rKCkge1xuICAgIHJldHVybiB0aGlzLmxpbms7XG4gIH1cblxuICBnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbk5vZGU7XG4gIH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGxldCBhc3NlcnRpb247XG5cbiAgICBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAoYXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbiBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzaWduYXR1cmVBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgICAgY29uc3QgdmFsaWRhdGVUZXJtcyA9IHRoaXMudmFsaWRhdGVUZXJtcy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVUZXJtcyxcbiAgICAgICAgdmFsaWRhdGVMaW5rXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzaWduYXR1cmVBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlVGVybSh0ZXJtLCB0ZXJtcywgc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtVmFsaWRhdGVzO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbidzICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICB0ZXJtVmFsaWRhdGVzID0gdGVybS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHRlcm1zLnB1c2godGVybSk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbih0ZXJtcywgc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbidzICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtcyhzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHRlcm1zVmFsaWRhdGU7XG5cbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgdGVybXMuLi5gKTtcblxuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgdmFsaWRhdGVUZXJtID0gdGhpcy52YWxpZGF0ZVRlcm0uYmluZCh0aGlzKTtcblxuICAgIHRlcm1zVmFsaWRhdGUgPSBldmVyeSh0aGlzLnRlcm1zLCB2YWxpZGF0ZVRlcm0sIHRlcm1zLCBzdGF0ZSwgY29udGV4dCwgKHRlcm1zLCBzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHRlcm1zVmFsaWRhdGU7XG5cbiAgICAgIHRlcm1zVmFsaWRhdGUgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybXNWYWxpZGF0ZSkge1xuICAgICAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0ZXJtc1ZhbGlkYXRlO1xuICAgIH0pO1xuXG4gICAgaWYgKHRlcm1zVmFsaWRhdGUpe1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgdGVybXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1zVmFsaWRhdGVcbiAgfVxuXG4gIHZhbGlkYXRlTGluayhzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IGxpbmtWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgbGluay4uLmApO1xuXG4gICAgbGlua1ZhbGlkYXRlcyA9IHRoaXMubGluay52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGxpbmssIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5TGluayhsaW5rKTtcblxuICAgICAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGF4aW9tU2F0aXNmaWFibGUgPSBheGlvbS5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgICAgaWYgKGF4aW9tU2F0aXNmaWFibGUpIHtcbiAgICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgdGhpcy5saW5rID0gbGluaztcblxuICAgICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKGxpbmtWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbidzIGxpbmsuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmtWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeUNsYWltKGNsYWltLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IGNsYWltLmdldFN0cmluZygpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlMaW5rKHRoaXMubGluayk7XG5cbiAgICAgIHJldHVybiBheGlvbS51bmlmeVRlcm1zKHRoaXMudGVybXMsIGNvbnRleHQsICh0ZXJtc1VuaWZ5KSA9PiB7XG4gICAgICAgIGlmICghdGVybXNVbmlmeSkge1xuICAgICAgICAgIGNvbnN0IGNsYWltVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjbGFpbVVuaWZpZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF4aW9tLnVuaWZ5Q2xhaW0oY2xhaW0sIGNvbnRleHQsIChjbGFpbVVuaWZpZXMpID0+IHtcbiAgICAgICAgICBpZiAoY2xhaW1VbmlmaWVzKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltIHdpdGggdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNsYWltVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGNsYWltVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN0ZXBBbmRGYWN0T3JTdWJwcm9vZnMoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlMaW5rKHRoaXMubGluayksXG4gICAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSB0aGlzOyAgLy8vXG5cbiAgICAgIHJldHVybiBheGlvbS51bmlmeVNpZ25hdHVyZUFzc2VydGlvbihzaWduYXR1cmVBc3NlcnRpb24sIGNvbnRleHQsIChzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICghc2lnbmF0dXJlQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF4aW9tLnVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyhzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJTaWduYXR1cmVBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzaWduYXR1cmVBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGRlZmluZWRBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVTaWduYXR1cmVBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IGRlZmluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGxpbmsgPSBsaW5rRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IG5ldyBTaWduYXR1cmVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtcywgbGluayk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGVwKHN0ZXAsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RlcC5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiU2lnbmF0dXJlQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibGluayIsInRlcm1zIiwiZ2V0VGVybXMiLCJnZXRMaW5rIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImNvbnRpbnVhdGlvbiIsInZhbGlkYXRlcyIsInNpZ25hdHVyZUFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiYXNzZXJ0aW9uIiwiZmluZEFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVUZXJtcyIsImJpbmQiLCJ2YWxpZGF0ZUxpbmsiLCJhbGwiLCJhZGRBc3NlcnRpb24iLCJ2YWxpZGF0ZVRlcm0iLCJ0ZXJtIiwidGVybVZhbGlkYXRlcyIsInRlcm1TdHJpbmciLCJwdXNoIiwidGVybXNWYWxpZGF0ZSIsImV2ZXJ5IiwibGlua1ZhbGlkYXRlcyIsImF4aW9tIiwiZmluZEF4aW9tQnlMaW5rIiwiYXhpb21TYXRpc2ZpYWJsZSIsImlzU2F0aXNmaWFibGUiLCJ1bmlmeUNsYWltIiwiY2xhaW0iLCJjbGFpbVN0cmluZyIsInJlY29uY2lsZSIsInVuaWZ5VGVybXMiLCJ0ZXJtc1VuaWZ5IiwiY2xhaW1VbmlmaWVzIiwiY29tbWl0IiwidW5pZnlTdGVwQW5kRmFjdE9yU3VicHJvb2ZzIiwic3RlcCIsImZhY3RPclN1YnByb29mcyIsInN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSIsInVuaWZ5U2lnbmF0dXJlQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uVW5pZmllcyIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJpbnN0YW50aWF0ZSIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiaW5zdGFudGlhdGVTaWduYXR1cmVBc3NlcnRpb24iLCJ0ZXJtc0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwibGlua0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZnJvbVN0ZXAiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUFBOzs7Z0NBWG9DO2tFQUVkOzBCQUVDO3lCQUNnQjs2QkFDTzt5QkFDdUU7Ozs7OztBQUVySCxNQUFNLEVBQUVBLGtCQUFrQixFQUFFLEdBQUdDLG1DQUFtQjtNQUVsRCxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDJCQUEyQkMsa0JBQVM7SUFDOUQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLEtBQUssQ0FBRTtRQUMxRCxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtJ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
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zaWduYXR1cmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IEFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVTaWduYXR1cmVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdGVybXNGcm9tU2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSwgbGlua0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlLCBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHtkZWNsYXJlfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5cbmNvbnN0IHsgY3V0IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IHVuYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgU2lnbmF0dXJlQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsaW5rLCB0ZXJtcykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLmxpbmsgPSBsaW5rO1xuICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgfVxuXG4gIGdldFRlcm1zKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm1zO1xuICB9XG5cbiAgZ2V0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgdmVyaWZ5ID0gdW5icmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmb3J3YXJkID0gY3V0KGZvcndhcmQsIGJhY2spOyAvLy9cblxuICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc2lnbmF0dXJlQXNzZXJ0aW9uLCBjb250ZXh0ICwgYmFjaykgPT4ge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcblxuICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgIH0sIGJhY2spO1xuICAgIH0pO1xuICB9KTtcblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpczsgLy8vXG5cbiAgICBjb25zdCB2YWxpZGF0ZVRlcm1zID0gdGhpcy52YWxpZGF0ZVRlcm1zLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVMaW5rID0gdGhpcy52YWxpZGF0ZUxpbmsuYmluZCh0aGlzKTtcblxuICAgIHZhbGlkYXRlcyA9IGFsbChbXG4gICAgICB2YWxpZGF0ZVRlcm1zLFxuICAgICAgdmFsaWRhdGVMaW5rXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHNpZ25hdHVyZUFzc2VydGlvbiwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlVGVybSh0ZXJtLCB0ZXJtcywgc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgdGVybVZhbGlkYXRlcztcblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24ncyAnJHt0ZXJtU3RyaW5nfScgdGVybS4uLmApO1xuXG4gICAgdGVybVZhbGlkYXRlcyA9IHRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICB0ZXJtcy5wdXNoKHRlcm0pO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24odGVybXMsIHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICB9KTtcblxuICAgIGlmICh0ZXJtVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24ncyAnJHt0ZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlVGVybXMoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgdGVybXNWYWxpZGF0ZTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24ncyB0ZXJtcy4uLmApO1xuXG4gICAgY29uc3QgdGVybXMgPSBbXSxcbiAgICAgICAgICB2YWxpZGF0ZVRlcm0gPSB0aGlzLnZhbGlkYXRlVGVybS5iaW5kKHRoaXMpO1xuXG4gICAgdGVybXNWYWxpZGF0ZSA9IGV2ZXJ5KHRoaXMudGVybXMsIHZhbGlkYXRlVGVybSwgdGVybXMsIHN0YXRlLCBjb250ZXh0LCAodGVybXMsIHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdGVybXNWYWxpZGF0ZTtcblxuICAgICAgdGVybXNWYWxpZGF0ZSA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIGlmICh0ZXJtc1ZhbGlkYXRlKSB7XG4gICAgICAgIHRoaXMudGVybXMgPSB0ZXJtcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRlcm1zVmFsaWRhdGU7XG4gICAgfSk7XG5cbiAgICBpZiAodGVybXNWYWxpZGF0ZSl7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24ncyB0ZXJtcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybXNWYWxpZGF0ZVxuICB9XG5cbiAgdmFsaWRhdGVMaW5rKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGxpbmtWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgbGluay4uLmApO1xuXG4gICAgbGlua1ZhbGlkYXRlcyA9IHRoaXMubGluay52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGxpbmssIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5TGluayhsaW5rKTtcblxuICAgICAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGF4aW9tU2F0aXNmaWFibGUgPSBheGlvbS5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICAgICAgaWYgKGF4aW9tU2F0aXNmaWFibGUpIHtcbiAgICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgdGhpcy5saW5rID0gbGluaztcblxuICAgICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKGxpbmtWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbidzIGxpbmsuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmtWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeUNsYWltKGNsYWltLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSBjbGFpbS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5TGluayh0aGlzLmxpbmspO1xuXG4gICAgICByZXR1cm4gYXhpb20udW5pZnlUZXJtcyh0aGlzLnRlcm1zLCBjb250ZXh0LCAodGVybXNVbmlmeSkgPT4ge1xuICAgICAgICBpZiAoIXRlcm1zVW5pZnkpIHtcbiAgICAgICAgICBjb25zdCBjbGFpbVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oY2xhaW1VbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBheGlvbS51bmlmeUNsYWltKGNsYWltLCBjb250ZXh0LCAoY2xhaW1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgaWYgKGNsYWltVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjbGFpbVVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjbGFpbVVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdGVwQW5kRmFjdE9yU3VicHJvb2ZzKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeUxpbmsodGhpcy5saW5rKSxcbiAgICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHRoaXM7ICAvLy9cblxuICAgICAgcmV0dXJuIGF4aW9tLnVuaWZ5U2lnbmF0dXJlQXNzZXJ0aW9uKHNpZ25hdHVyZUFzc2VydGlvbiwgY29udGV4dCwgKHNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMpID0+IHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXhpb20udW5pZnlTdGVwQW5kRmFjdE9yU3VicHJvb2ZzKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJTaWduYXR1cmVBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzaWduYXR1cmVBc3NlcnRpb247XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlU2lnbmF0dXJlQXNzZXJ0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgdGVybXMgPSB0ZXJtc0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGxpbmsgPSBsaW5rRnJvbVNpZ25hdHVyZUFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gbmV3IFNpZ25hdHVyZUFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm1zLCBsaW5rKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0ZXAoc3RlcCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImN1dCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsInVuYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlNpZ25hdHVyZUFzc2VydGlvbiIsIkFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxpbmsiLCJ0ZXJtcyIsImdldFRlcm1zIiwiZ2V0TGluayIsImdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInZlcmlmeSIsImZvcndhcmQiLCJiYWNrIiwic2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWNsYXJlIiwic3RhdGUiLCJ2YWxpZGF0ZSIsInNpZ25hdHVyZUFzc2VydGlvbiIsImRlYnVnIiwiYXNzZXJ0aW9uIiwidmFsaWRhdGVUZXJtcyIsImJpbmQiLCJ2YWxpZGF0ZUxpbmsiLCJ2YWxpZGF0ZXMiLCJhbGwiLCJhZGRBc3NlcnRpb24iLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZVRlcm0iLCJ0ZXJtIiwidGVybVZhbGlkYXRlcyIsInRlcm1TdHJpbmciLCJwdXNoIiwidGVybXNWYWxpZGF0ZSIsImV2ZXJ5IiwibGlua1ZhbGlkYXRlcyIsImF4aW9tIiwiZmluZEF4aW9tQnlMaW5rIiwiYXhpb21TYXRpc2ZpYWJsZSIsImlzU2F0aXNmaWFibGUiLCJ1bmlmeUNsYWltIiwiY2xhaW0iLCJjbGFpbVN0cmluZyIsInJlY29uY2lsZSIsInVuaWZ5VGVybXMiLCJ0ZXJtc1VuaWZ5IiwiY2xhaW1VbmlmaWVzIiwiY29tbWl0IiwidW5pZnlTdGVwQW5kRmFjdE9yU3VicHJvb2ZzIiwic3RlcCIsImZhY3RPclN1YnByb29mcyIsInN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSIsInVuaWZ5U2lnbmF0dXJlQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uVW5pZmllcyIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJpbnN0YW50aWF0ZSIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwiaW5zdGFudGlhdGVTaWduYXR1cmVBc3NlcnRpb24iLCJ0ZXJtc0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwibGlua0Zyb21TaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZnJvbVN0ZXAiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZUE7OztlQUFBOzs7Z0NBYjJEO2tFQUVyQzswQkFFQzt5QkFDZ0I7NkJBQ087eUJBQ3VFO3VCQUMvRjs7Ozs7O0FBRXRCLE1BQU0sRUFBRUEs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
@@ -14,7 +14,7 @@ const _context = require("../../utilities/context");
14
14
  const _instantiate = require("../../process/instantiate");
15
15
  const _string = require("../../utilities/string");
16
16
  const _element = require("../../utilities/element");
17
- const { all, isolate } = _occamlanguages.continuationUtilities;
17
+ const { cut, all, isolate } = _occamlanguages.continuationUtilities;
18
18
  const _default = (0, _elements.define)(class ImplicitAssumption extends _occamlanguages.Element {
19
19
  constructor(context, string, node, breakPoint, statement){
20
20
  super(context, string, node, breakPoint);
@@ -39,6 +39,7 @@ const _default = (0, _elements.define)(class ImplicitAssumption extends _occamla
39
39
  return implicitAssumptionNodeMatches;
40
40
  }
41
41
  validate(state, context, forward, back) {
42
+ forward = cut(forward, back); ///
42
43
  const implicitAssumptionString = this.getString(); ///
43
44
  context.trace(`Validating the '${implicitAssumptionString}' implicit assumption...`);
44
45
  return isolate((state, context, forward, back)=>{
@@ -97,4 +98,4 @@ const _default = (0, _elements.define)(class ImplicitAssumption extends _occamla
97
98
  }
98
99
  });
99
100
 
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24vaW1wbGljaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBhYmxhdGUsIGF0dGVtcHQsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUltcGxpY2l0QXNzdW1wdGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmdGcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgYWxsLCBpc29sYXRlIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBJbXBsaWNpdEFzc3VtcHRpb24gZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0SW1wbGljaXRBc3N1bXB0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50Tm9kZSgpIHsgcmV0dXJuIHRoaXMuc3RhdGVtZW50LmdldFN0YXRlbWVudE5vZGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhpbXBsaWNpdEFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlID0gaW1wbGljaXRBc3N1bXB0aW9uLmdldE5vZGUoKSxcbiAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hJbXBsaWNpdEFzc3VtcHRpb25Ob2RlKGltcGxpY2l0QXNzdW1wdGlvbk5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBtYXRjaEltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hOb2RlKG5vZGUpLFxuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBpbXBsaWNpdCBhc3N1bXB0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gaXNvbGF0ZSgoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgcmV0dXJuIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnQgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50LmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnRcbiAgICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uID0gdGhpczsgIC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGltcGxpY2l0QXNzdW1wdGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBpbXBsaWNpdCBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0aGlzLnN0YXRlbWVudC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ltcGxpY2l0QXNzdW1wdGlvblN0cmluZ30nIGltcGxpY2l0IGFzc3VtcHRpb24ncyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlcztcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGRlYnVnZ2VyXG5cbiAgICBsZXQgc3RhdGVtZW50VW5pZmllcztcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICAgIHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBpbXBsaWNpdEFzc3VtcHRpb24ncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHN0YXRlbWVudFVuaWZpZXMgPSB0aGlzLnN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtwcm9vZkFzc2VydGlvblN0cmluZ30nIGltcGxpY2l0QXNzdW1wdGlvbidzIHN0YXRlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VW5pZmllcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJJbXBsaWNpdEFzc3VtcHRpb25cIjtcblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBsZXQgaW1wbGljaXRBc3N1bXB0aW9uO1xuXG4gICAgYWJsYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmcgPSBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmdGcm9tU3RhdGVtZW50KHN0YXRlbWVudCksXG4gICAgICAgICAgICAgIHN0cmluZyA9IGltcGxpY2l0QXNzdW1wdGlvblN0cmluZywgIC8vL1xuICAgICAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlID0gaW5zdGFudGlhdGVJbXBsaWNpdEFzc3VtcHRpb24oc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb24gPSBpbXBsaWNpdEFzc3VtcHRpb25Gcm9tSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlLCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbjtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiYWxsIiwiaXNvbGF0ZSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIkltcGxpY2l0QXNzdW1wdGlvbiIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJnZXRJbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiZ2V0Tm9kZSIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiaXNFcXVhbFRvIiwiaW1wbGljaXRBc3N1bXB0aW9uIiwiaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaEltcGxpY2l0QXNzdW1wdGlvbk5vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiZm9yd2FyZCIsImJhY2siLCJpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImdldENvbnRleHQiLCJhdHRlbXB0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJiaW5kIiwiY29tbWl0IiwiZGVidWciLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJ2YWxpZGF0ZXMiLCJjb250aW51YXRpb24iLCJ1bmlmeVN0YXRlbWVudCIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic3RhdGVtZW50VW5pZmllcyIsInN0YXRlbWVudFN0cmluZyIsInByb29mQXNzZXJ0aW9uU3RyaW5nIiwibmFtZSIsImZyb21TdGF0ZW1lbnQiLCJhYmxhdGUiLCJpbnN0YW50aWF0ZSIsImltcGxpY2l0QXNzdW1wdGlvblN0cmluZ0Zyb21TdGF0ZW1lbnQiLCJpbnN0YW50aWF0ZUltcGxpY2l0QXNzdW1wdGlvbiIsImltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFZQTs7O2VBQUE7OztnQ0FWK0M7MEJBRXhCO3lCQUNzQjs2QkFDQzt3QkFDUTt5QkFDTztBQUU3RCxNQUFNLEVBQUVBLEdBQUcsRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHFDQUFxQjtNQUU5QyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDJCQUEyQkMsdUJBQU87SUFDNUQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxTQUFTLENBQUU7UUFDeEQsS0FBSyxDQUFDSixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFNBQVMsR0FBR0E7SUFDbkI7SUFFQUMsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRCxTQUFTO0lBQ3ZCO0lBRUFFLDRCQUE0QjtRQUMxQixNQUFNSixPQUFPLElBQUksQ0FBQ0ssT0FBTyxJQUNuQkMseUJBQXlCTixNQUFPLEdBQUc7UUFFekMsT0FBT007SUFDVDtJQUVBQyxtQkFBbUI7UUFBRSxPQUFPLElBQUksQ0FBQ0wsU0FBUyxDQUFDSyxnQkFBZ0I7SUFBSTtJQUUvREMsVUFBVUMsa0JBQWtCLEVBQUU7UUFDNUIsTUFBTUgseUJBQXlCRyxtQkFBbUJKLE9BQU8sSUFDbkRLLGdDQUFnQyxJQUFJLENBQUNDLDJCQUEyQixDQUFDTCx5QkFDakVNLFVBQVVGLCtCQUFnQyxHQUFHO1FBRW5ELE9BQU9FO0lBQ1Q7SUFFQUQsNEJBQTRCTCxzQkFBc0IsRUFBRTtRQUNsRCxNQUFNTixPQUFPTSx3QkFDUE8sY0FBYyxJQUFJLENBQUNDLFNBQVMsQ0FBQ2QsT0FDN0JVLGdDQUFnQ0csYUFBYSxHQUFHO1FBRXRELE9BQU9IO0lBQ1Q7SUFFQUssU0FBU0MsS0FBSyxFQUFFbEIsT0FBTyxFQUFFbUIsT0FBTyxFQUFFQyxJQUFJLEVBQUU7UUFDdEMsTUFBTUMsMkJBQTJCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFdkR0QixRQUFRdUIsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLHlCQUF5Qix3QkFBd0IsQ0FBQztRQUVuRixPQUFPMUIsUUFBUSxDQUFDdUIsT0FBT2xCLFNBQVNtQixTQUFTQztZQUN2Q3BCLFVBQVUsSUFBSSxDQUFDd0IsVUFBVTtZQUV6QixPQUFPQyxJQUFBQSxnQkFBTyxFQUFDLENBQUN6QjtnQkFDZCxNQUFNMEIsb0JBQW9CLElBQUksQ0FBQ0EsaUJBQWlCLENBQUNDLElBQUksQ0FBQyxJQUFJO2dCQUUxRCxPQUFPakMsSUFBSTtvQkFDVGdDO2lCQUNELEVBQUVSLE9BQU9sQixTQUFTLENBQUNrQixPQUFPbEIsU0FBU29CO29CQUNsQyxJQUFJLENBQUNRLE1BQU0sQ0FBQzVCO29CQUVaLE9BQU9tQixRQUFRQztnQkFDakIsR0FBR0E7WUFDTCxHQUFHcEI7UUFDTCxHQUFHa0IsT0FBT2xCLFNBQVMsQ0FBQ2tCLE9BQU9sQixTQUFTb0I7WUFDbEMsTUFBTVQscUJBQXFCLElBQUksRUFBRyxHQUFHO1lBRXJDWCxRQUFRNkIsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVSLHlCQUF5QixzQkFBc0IsQ0FBQztZQUVuRixPQUFPRixRQUFRUixvQkFBb0JYLFNBQVNvQjtRQUM5QyxHQUFHQTtJQUNMO0lBRUFNLGtCQUFrQlIsS0FBSyxFQUFFbEIsT0FBTyxFQUFFbUIsT0FBTyxFQUFFQyxJQUFJLEVBQUU7UUFDL0MsSUFBSVU7UUFFSixNQUFNVCwyQkFBMkIsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV2RHRCLFFBQVF1QixLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYseUJBQXlCLG9DQUFvQyxDQUFDO1FBRS9GUyxxQkFBcUIsSUFBSSxDQUFDMUIsU0FBUyxDQUFDYSxRQUFRLENBQUNDLE9BQU9sQixTQUFTLENBQUNJLFdBQVdKO1lBQ3ZFLElBQUkrQjtZQUVKLElBQUksQ0FBQzNCLFNBQVMsR0FBR0E7WUFFakIyQixZQUFZQyxhQUFhZCxPQUFPbEI7WUFFaEMsT0FBTytCO1FBQ1Q7UUFFQSxJQUFJRCxvQkFBb0I7WUFDdEI5QixRQUFRNkIsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVSLHlCQUF5QixrQ0FBa0MsQ0FBQztRQUNqRztRQUVBLE9BQU9TO0lBQ1Q7SUFFQUcsZUFBZTdCLFNBQVMsRUFBRThCLGNBQWMsRUFBRUMsZUFBZSxFQUFFO1FBQ3pELFFBQVE7UUFFUixJQUFJQztRQUVKLE1BQU1wQyxVQUFVbUMsaUJBQ1ZFLGtCQUFrQmpDLFVBQVVrQixTQUFTLElBQ3JDZ0IsdUJBQXVCLElBQUksQ0FBQ2hCLFNBQVMsSUFBSyxHQUFHO1FBRW5EdEIsUUFBUXVCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRWMsZ0JBQWdCLHNCQUFzQixFQUFFQyxxQkFBcUIsbUNBQW1DLENBQUM7UUFFaElGLG1CQUFtQixJQUFJLENBQUNoQyxTQUFTLENBQUM2QixjQUFjLENBQUM3QixXQUFXOEIsZ0JBQWdCQztRQUU1RSxJQUFJQyxrQkFBa0I7WUFDcEJwQyxRQUFRNkIsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVRLGdCQUFnQixzQkFBc0IsRUFBRUMscUJBQXFCLGlDQUFpQyxDQUFDO1FBQ2xJO1FBRUEsT0FBT0Y7SUFDVDtJQUVBLE9BQU9HLE9BQU8scUJBQXFCO0lBRW5DLE9BQU9DLGNBQWNwQyxTQUFTLEVBQUVKLE9BQU8sRUFBRTtRQUN2QyxJQUFJVztRQUVKOEIsSUFBQUEsZUFBTSxFQUFDLENBQUN6QztZQUNOMEMsSUFBQUEsb0JBQVcsRUFBQyxDQUFDMUM7Z0JBQ1gsTUFBTXFCLDJCQUEyQnNCLElBQUFBLDZDQUFxQyxFQUFDdkMsWUFDakVILFNBQVNvQiwwQkFDVGIseUJBQXlCb0MsSUFBQUEsMENBQTZCLEVBQUMzQyxRQUFRRDtnQkFFckVXLHFCQUFxQmtDLElBQUFBLHFEQUE0QyxFQUFDckMsd0JBQXdCUjtZQUM1RixHQUFHQTtRQUNMLEdBQUdBO1FBRUgsT0FBT1c7SUFDVDtBQUNGIn0=
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc3VtcHRpb24vaW1wbGljaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBhYmxhdGUsIGF0dGVtcHQsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUltcGxpY2l0QXNzdW1wdGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmdGcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGltcGxpY2l0QXNzdW1wdGlvbkZyb21JbXBsaWNpdEFzc3VtcHRpb25Ob2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgY3V0LCBhbGwsIGlzb2xhdGUgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEltcGxpY2l0QXNzdW1wdGlvbiBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnN0YXRlbWVudCA9IHN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRJbXBsaWNpdEFzc3VtcHRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbk5vZGU7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnROb2RlKCkgeyByZXR1cm4gdGhpcy5zdGF0ZW1lbnQuZ2V0U3RhdGVtZW50Tm9kZSgpOyB9XG5cbiAgaXNFcXVhbFRvKGltcGxpY2l0QXNzdW1wdGlvbikge1xuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUgPSBpbXBsaWNpdEFzc3VtcHRpb24uZ2V0Tm9kZSgpLFxuICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSksXG4gICAgICAgICAgZXF1YWxUbyA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIG1hdGNoSW1wbGljaXRBc3N1bXB0aW9uTm9kZShpbXBsaWNpdEFzc3VtcHRpb25Ob2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGltcGxpY2l0QXNzdW1wdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gaW1wbGljaXRBc3N1bXB0aW9uTm9kZU1hdGNoZXM7XG4gIH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgaW1wbGljaXQgYXNzdW1wdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIGlzb2xhdGUoKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICAgIHJldHVybiBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICAgIHZhbGlkYXRlU3RhdGVtZW50XG4gICAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvbiA9IHRoaXM7ICAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBpbXBsaWNpdCBhc3N1bXB0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChpbXBsaWNpdEFzc3VtcHRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzO1xuXG4gICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7aW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nfScgaW1wbGljaXQgYXNzdW1wdGlvbidzIHN0YXRlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmd9JyBpbXBsaWNpdCBhc3N1bXB0aW9uJ3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBkZWJ1Z2dlclxuXG4gICAgbGV0IHN0YXRlbWVudFVuaWZpZXM7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgaW1wbGljaXRBc3N1bXB0aW9uJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBzdGF0ZW1lbnRVbmlmaWVzID0gdGhpcy5zdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBpbXBsaWNpdEFzc3VtcHRpb24ncyBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiSW1wbGljaXRBc3N1bXB0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgbGV0IGltcGxpY2l0QXNzdW1wdGlvbjtcblxuICAgIGFibGF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nID0gaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQpLFxuICAgICAgICAgICAgICBzdHJpbmcgPSBpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmcsICAvLy9cbiAgICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uTm9kZSA9IGluc3RhbnRpYXRlSW1wbGljaXRBc3N1bXB0aW9uKHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gaW1wbGljaXRBc3N1bXB0aW9uRnJvbUltcGxpY2l0QXNzdW1wdGlvbk5vZGUoaW1wbGljaXRBc3N1bXB0aW9uTm9kZSwgY29udGV4dCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImN1dCIsImFsbCIsImlzb2xhdGUiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiZ2V0SW1wbGljaXRBc3N1bXB0aW9uTm9kZSIsImdldE5vZGUiLCJpbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImlzRXF1YWxUbyIsImltcGxpY2l0QXNzdW1wdGlvbiIsImltcGxpY2l0QXNzdW1wdGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hJbXBsaWNpdEFzc3VtcHRpb25Ob2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiaW1wbGljaXRBc3N1bXB0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJnZXRDb250ZXh0IiwiYXR0ZW1wdCIsInZhbGlkYXRlU3RhdGVtZW50IiwiYmluZCIsImNvbW1pdCIsImRlYnVnIiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVzIiwiY29udGludWF0aW9uIiwidW5pZnlTdGF0ZW1lbnQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN0YXRlbWVudFVuaWZpZXMiLCJzdGF0ZW1lbnRTdHJpbmciLCJwcm9vZkFzc2VydGlvblN0cmluZyIsIm5hbWUiLCJmcm9tU3RhdGVtZW50IiwiYWJsYXRlIiwiaW5zdGFudGlhdGUiLCJpbXBsaWNpdEFzc3VtcHRpb25TdHJpbmdGcm9tU3RhdGVtZW50IiwiaW5zdGFudGlhdGVJbXBsaWNpdEFzc3VtcHRpb24i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