occam-nominal 1.0.533 → 1.0.539

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 (97) hide show
  1. package/lib/context/file/nominal.js +15 -14
  2. package/lib/context/metexic.js +5 -1
  3. package/lib/context.js +7 -3
  4. package/lib/element/assertion/property.js +42 -53
  5. package/lib/element/assertion/schema.js +18 -38
  6. package/lib/element/assertion/signature.js +48 -83
  7. package/lib/element/assumption/implicit.js +3 -3
  8. package/lib/element/assumption.js +11 -23
  9. package/lib/element/claim/axiom.js +19 -41
  10. package/lib/element/claim/conjecture.js +5 -5
  11. package/lib/element/claim/lemma.js +4 -4
  12. package/lib/element/claim/theorem.js +6 -6
  13. package/lib/element/combinator.js +3 -3
  14. package/lib/element/constraint.js +51 -48
  15. package/lib/element/constructor/bracketed.js +2 -2
  16. package/lib/element/constructor.js +3 -3
  17. package/lib/element/declaration/constructor.js +12 -17
  18. package/lib/element/declaration/cotype.js +58 -66
  19. package/lib/element/declaration/generator.js +22 -29
  20. package/lib/element/declaration/property.js +13 -20
  21. package/lib/element/declaration/type.js +18 -29
  22. package/lib/element/declaration/typePrefix.js +7 -10
  23. package/lib/element/equality.js +29 -11
  24. package/lib/element/fact/premise.js +3 -3
  25. package/lib/element/fact/step.js +35 -33
  26. package/lib/element/fact/supposition.js +4 -4
  27. package/lib/element/generator.js +57 -82
  28. package/lib/element/hypothesis.js +3 -3
  29. package/lib/element/label.js +17 -15
  30. package/lib/element/link.js +6 -12
  31. package/lib/element/proof.js +3 -3
  32. package/lib/element/property.js +42 -52
  33. package/lib/element/reference.js +5 -5
  34. package/lib/element/resolution/conclusion.js +3 -3
  35. package/lib/element/resolution/deduction.js +3 -3
  36. package/lib/element/rule.js +4 -4
  37. package/lib/element/schema.js +40 -66
  38. package/lib/element/section.js +3 -3
  39. package/lib/element/signature.js +35 -56
  40. package/lib/element/subproof.js +3 -3
  41. package/lib/element/substitution/frame.js +3 -3
  42. package/lib/element/substitution/statement.js +3 -3
  43. package/lib/element/substitution/term.js +3 -3
  44. package/lib/element/term.js +5 -11
  45. package/lib/element/typePrefix.js +15 -19
  46. package/lib/process/validation.js +4 -6
  47. package/lib/utilities/context.js +6 -1
  48. package/lib/utilities/string.js +12 -12
  49. package/package.json +2 -2
  50. package/src/context/file/nominal.js +19 -19
  51. package/src/context/metexic.js +6 -0
  52. package/src/context.js +11 -4
  53. package/src/element/assertion/property.js +49 -62
  54. package/src/element/assertion/schema.js +27 -47
  55. package/src/element/assertion/signature.js +59 -115
  56. package/src/element/assumption/implicit.js +3 -3
  57. package/src/element/assumption.js +10 -26
  58. package/src/element/claim/axiom.js +17 -45
  59. package/src/element/claim/conjecture.js +3 -3
  60. package/src/element/claim/lemma.js +3 -3
  61. package/src/element/claim/theorem.js +4 -4
  62. package/src/element/combinator.js +2 -2
  63. package/src/element/constraint.js +65 -72
  64. package/src/element/constructor/bracketed.js +1 -1
  65. package/src/element/constructor.js +2 -2
  66. package/src/element/declaration/constructor.js +19 -21
  67. package/src/element/declaration/cotype.js +77 -79
  68. package/src/element/declaration/generator.js +30 -34
  69. package/src/element/declaration/property.js +14 -22
  70. package/src/element/declaration/type.js +26 -34
  71. package/src/element/declaration/typePrefix.js +6 -10
  72. package/src/element/equality.js +43 -14
  73. package/src/element/fact/premise.js +2 -2
  74. package/src/element/fact/step.js +44 -42
  75. package/src/element/fact/supposition.js +2 -2
  76. package/src/element/generator.js +67 -107
  77. package/src/element/hypothesis.js +2 -2
  78. package/src/element/label.js +21 -21
  79. package/src/element/link.js +5 -13
  80. package/src/element/proof.js +3 -3
  81. package/src/element/property.js +51 -73
  82. package/src/element/reference.js +3 -3
  83. package/src/element/resolution/conclusion.js +2 -2
  84. package/src/element/resolution/deduction.js +2 -2
  85. package/src/element/rule.js +3 -3
  86. package/src/element/schema.js +47 -88
  87. package/src/element/section.js +2 -2
  88. package/src/element/signature.js +35 -71
  89. package/src/element/subproof.js +2 -2
  90. package/src/element/substitution/frame.js +3 -3
  91. package/src/element/substitution/statement.js +3 -3
  92. package/src/element/substitution/term.js +3 -3
  93. package/src/element/term.js +4 -12
  94. package/src/element/typePrefix.js +23 -23
  95. package/src/process/validation.js +3 -5
  96. package/src/utilities/context.js +4 -0
  97. package/src/utilities/string.js +14 -14
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "default", {
8
8
  return _default;
9
9
  }
10
10
  });
11
+ const _occamlanguages = require("occam-languages");
11
12
  const _assertion = /*#__PURE__*/ _interop_require_default(require("../assertion"));
12
13
  const _elements = require("../../elements");
13
14
  const _context = require("../../utilities/context");
@@ -21,6 +22,7 @@ function _interop_require_default(obj) {
21
22
  default: obj
22
23
  };
23
24
  }
25
+ const { all } = _occamlanguages.continuationUtilities;
24
26
  const _default = (0, _elements.define)(class PropertyAssertion extends _assertion.default {
25
27
  constructor(context, string, node, breakPoint, subjectTerm, propertyTerm){
26
28
  super(context, string, node, breakPoint);
@@ -41,74 +43,61 @@ const _default = (0, _elements.define)(class PropertyAssertion extends _assertio
41
43
  const propertyTermType = this.propertyTerm.getType(), propertyType = propertyTermType; ///
42
44
  return propertyType;
43
45
  }
44
- validate(state, context, continuation) {
45
- let validates;
46
+ validate(state, context, forward, back) {
47
+ let assertion;
46
48
  const propertyAssertionString = this.getString(); ///
47
49
  context.trace(`Validating the '${propertyAssertionString}' property assertion...`);
48
- let assertion;
49
50
  assertion = this.findAssertion(context);
50
51
  if (assertion !== null) {
51
52
  const propertyAssertion = assertion; ///
52
53
  context.debug(`The '${propertyAssertionString}' property assertion is already present.`);
53
- validates = continuation(propertyAssertion, context);
54
- } else {
55
- assertion = this;
56
- const validateTerms = this.validateTerms.bind(this);
57
- validates = all([
58
- validateTerms
59
- ], state, context, (state, context)=>{
60
- let validates;
61
- context.addAssertion(assertion);
62
- const propertyAssertion = assertion; ///
63
- validates = continuation(propertyAssertion, context);
64
- return validates;
65
- });
66
- if (validates) {
67
- this.assign(state, context);
68
- }
54
+ return forward(propertyAssertion, context, back);
69
55
  }
70
- if (validates) {
56
+ assertion = this;
57
+ const validateTerms = this.validateTerms.bind(this);
58
+ return all([
59
+ validateTerms
60
+ ], state, context, (state, context, back)=>{
61
+ this.assign(state, context);
62
+ context.addAssertion(assertion);
63
+ const propertyAssertion = assertion; ///
71
64
  context.debug(`...validated the '${propertyAssertionString}' property assertion.`);
72
- }
73
- return validates;
65
+ return forward(propertyAssertion, context, back);
66
+ }, back);
74
67
  }
75
- validateTerms(state, context, continuation) {
76
- let termsValidate = false;
68
+ validateTerms(state, context, forward, back) {
77
69
  const propertyAssertionString = this.getString(); ///
78
70
  context.trace(`Validating the '${propertyAssertionString}' property assertion's terms...`);
79
- const subjectTermValidtes = this.subjectTerm.validate(state, context, (subjectTerm, context)=>{
80
- const propertyTermValidates = this.validatePropertyTerm(state, context, (propertyTerm, context)=>{
81
- let validates = false;
82
- const subjectTermType = subjectTerm.getType(), propertyTermType = propertyTerm.getType(), subjectTermTypeEqualToSubTypeOrSuperTypeOfPropertyTermType = subjectTermType.isEqualToSubTypeOrSuperTypeOf(propertyTermType);
83
- if (subjectTermTypeEqualToSubTypeOrSuperTypeOfPropertyTermType) {
84
- this.subjectTerm = subjectTerm;
85
- this.propertyTerm = propertyTerm;
86
- validates = continuation(state, context);
87
- }
88
- return validates;
89
- });
90
- return propertyTermValidates;
91
- });
92
- if (subjectTermValidtes) {
93
- termsValidate = true;
94
- }
95
- if (termsValidate) {
71
+ const validateSubjectTerm = this.validateSubjectTerm.bind(this), validatePropertyTerm = this.validatePropertyTerm.bind(this);
72
+ return all([
73
+ validateSubjectTerm,
74
+ validatePropertyTerm
75
+ ], state, context, (state, context, back)=>{
76
+ const subjectTermType = this.subjectTerm.getType(), propertyTermType = this.propertyTerm.getType(), subjectTermTypeEqualToSubTypeOrSuperTypeOfPropertyTermType = subjectTermType.isEqualToSubTypeOrSuperTypeOf(propertyTermType);
77
+ if (!subjectTermTypeEqualToSubTypeOrSuperTypeOfPropertyTermType) {
78
+ return back();
79
+ }
96
80
  context.debug(`...validated the '${propertyAssertionString}' property assertion's terms.`);
97
- }
98
- return termsValidate;
81
+ return forward(state, context, back);
82
+ }, back);
83
+ }
84
+ validateSubjectTerm(state, context, forward, back) {
85
+ const includeType = false, propertyString = this.getString(includeType); ///
86
+ context.trace(`Validating the '${propertyString}' property assertion's subject term...`);
87
+ return this.subjectTerm.validate(state, context, (subjectTerm, context, back)=>{
88
+ this.subjectTerm = subjectTerm;
89
+ context.debug(`...validated the '${propertyString}' property assertion's subject term.`);
90
+ return forward(state, context, back);
91
+ }, back);
99
92
  }
100
- validatePropertyTerm(state, context, continuation) {
101
- let propertyTermValidates = false;
93
+ validatePropertyTerm(state, context, forward, back) {
102
94
  const includeType = false, propertyString = this.getString(includeType); ///
103
95
  context.trace(`Validating the '${propertyString}' property assertion's property term...`);
104
- const propertyTermUnifiesWithProperties = (0, _validation.unifyTermWithProperties)(this.propertyTerm, state, context, continuation);
105
- if (propertyTermUnifiesWithProperties) {
106
- propertyTermValidates = true;
107
- }
108
- if (propertyTermValidates) {
96
+ return (0, _validation.unifyTermWithProperties)(this.propertyTerm, state, context, (propertyTerm, state, context, back)=>{
97
+ this.propertyTerm = propertyTerm;
109
98
  context.debug(`...validated the '${propertyString}' property assertion's property term.`);
110
- }
111
- return propertyTermValidates;
99
+ return forward(state, context, back);
100
+ }, back);
112
101
  }
113
102
  assign(state, context) {
114
103
  const derived = (0, _state.isDerived)(state), transient = (0, _state.isTransient)(state);
@@ -146,4 +135,4 @@ const _default = (0, _elements.define)(class PropertyAssertion extends _assertio
146
135
  }
147
136
  });
148
137
 
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9wcm9wZXJ0eS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGlzRGVyaXZlZCwgaXNUcmFuc2llbnQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyB1bmlmeVRlcm1XaXRoUHJvcGVydGllcyB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlUHJvcGVydHlBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdmFyaWFibGVBc3NpZ25tZW50RnJvbVByZXBlcnR5QXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvYXNzaWduXCI7XG5pbXBvcnQgeyBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlLCBzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUsIHByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByb3BlcnR5QXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJqZWN0VGVybSwgcHJvcGVydHlUZXJtKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3ViamVjdFRlcm0gPSBzdWJqZWN0VGVybTtcbiAgICB0aGlzLnByb3BlcnR5VGVybSA9IHByb3BlcnR5VGVybTtcbiAgfVxuXG4gIGdldFN1YmplY3RUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnN1YmplY3RUZXJtO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5VGVybTtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlUeXBlKCkge1xuICAgIGNvbnN0IHByb3BlcnR5VGVybVR5cGUgPSB0aGlzLnByb3BlcnR5VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgcHJvcGVydHlUeXBlID0gcHJvcGVydHlUZXJtVHlwZTsgIC8vL1xuXG4gICAgcmV0dXJuIHByb3BlcnR5VHlwZTtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtwcm9wZXJ0eUFzc2VydGlvblN0cmluZ30nIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gICAgbGV0IGFzc2VydGlvbjtcblxuICAgIGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Byb3BlcnR5QXNzZXJ0aW9uU3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHByb3BlcnR5QXNzZXJ0aW9uLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0aW9uID0gdGhpcztcblxuICAgICAgY29uc3QgdmFsaWRhdGVUZXJtcyA9IHRoaXMudmFsaWRhdGVUZXJtcy5iaW5kKHRoaXMpO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBhbGwoW1xuICAgICAgICB2YWxpZGF0ZVRlcm1zXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHByb3BlcnR5QXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgdGhpcy5hc3NpZ24oc3RhdGUsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvcGVydHlBc3NlcnRpb25TdHJpbmd9JyBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlVGVybXMoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtc1ZhbGlkYXRlID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJvcGVydHlBc3NlcnRpb25TdHJpbmd9JyBwcm9wZXJ0eSBhc3NlcnRpb24ncyB0ZXJtcy4uLmApO1xuXG4gICAgY29uc3Qgc3ViamVjdFRlcm1WYWxpZHRlcyA9IHRoaXMuc3ViamVjdFRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzdWJqZWN0VGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydHlUZXJtVmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZVByb3BlcnR5VGVybShzdGF0ZSwgY29udGV4dCwgKHByb3BlcnR5VGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc3ViamVjdFRlcm1UeXBlID0gc3ViamVjdFRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICBwcm9wZXJ0eVRlcm1UeXBlID0gcHJvcGVydHlUZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgc3ViamVjdFRlcm1UeXBlRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mUHJvcGVydHlUZXJtVHlwZSA9IHN1YmplY3RUZXJtVHlwZS5pc0VxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZihwcm9wZXJ0eVRlcm1UeXBlKTtcblxuICAgICAgICBpZiAoc3ViamVjdFRlcm1UeXBlRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mUHJvcGVydHlUZXJtVHlwZSkge1xuICAgICAgICAgIHRoaXMuc3ViamVjdFRlcm0gPSBzdWJqZWN0VGVybTtcblxuICAgICAgICAgIHRoaXMucHJvcGVydHlUZXJtID0gcHJvcGVydHlUZXJtO1xuXG4gICAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHByb3BlcnR5VGVybVZhbGlkYXRlcztcbiAgICB9KTtcblxuICAgIGlmIChzdWJqZWN0VGVybVZhbGlkdGVzKSB7XG4gICAgICB0ZXJtc1ZhbGlkYXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGVybXNWYWxpZGF0ZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtwcm9wZXJ0eUFzc2VydGlvblN0cmluZ30nIHByb3BlcnR5IGFzc2VydGlvbidzIHRlcm1zLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtc1ZhbGlkYXRlO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wZXJ0eVRlcm0oc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBwcm9wZXJ0eVRlcm1WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgcHJvcGVydHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uJ3MgcHJvcGVydHkgdGVybS4uLmApO1xuXG4gICAgY29uc3QgcHJvcGVydHlUZXJtVW5pZmllc1dpdGhQcm9wZXJ0aWVzID0gdW5pZnlUZXJtV2l0aFByb3BlcnRpZXModGhpcy5wcm9wZXJ0eVRlcm0sIHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pXG5cbiAgICBpZiAocHJvcGVydHlUZXJtVW5pZmllc1dpdGhQcm9wZXJ0aWVzKSB7XG4gICAgICBwcm9wZXJ0eVRlcm1WYWxpZGF0ZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wZXJ0eVRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eSBhc3NlcnRpb24ncyBwcm9wZXJ0eSB0ZXJtLmApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eVRlcm1WYWxpZGF0ZXM7XG4gIH1cblxuICBhc3NpZ24oc3RhdGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKSxcbiAgICAgICAgICB0cmFuc2llbnQgPSBpc1RyYW5zaWVudChzdGF0ZSk7XG5cbiAgICBpZiAoZGVyaXZlZCB8fCB0cmFuc2llbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IHRoaXMsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlQXNzaWdtZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVByZXBlcnR5QXNzZXJ0aW9uKHByb3BlcnR5QXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQuYWRkQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbWVudCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGpzb24gPSB7XG4gICAgICBuYW1lLFxuICAgICAgc3RyaW5nXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlByb3BlcnR5QXNzZXJ0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgcHJvcGVydHlBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlUHJvcGVydHlBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gbnVsbCxcbiAgICAgICAgICAgICAgc3ViamVjdFRlcm0gPSBzdWJqZWN0VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUocHJvcGVydHlBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcHJvcGVydHlUZXJtID0gcHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gbmV3IFByb3BlcnR5QXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3ViamVjdFRlcm0sIHByb3BlcnR5VGVybSk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJvcGVydHlBc3NlcnRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIlByb3BlcnR5QXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3ViamVjdFRlcm0iLCJwcm9wZXJ0eVRlcm0iLCJnZXRTdWJqZWN0VGVybSIsImdldFByb3BlcnR5VGVybSIsImdldFByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJwcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJnZXRQcm9wZXJ0eVR5cGUiLCJwcm9wZXJ0eVRlcm1UeXBlIiwiZ2V0VHlwZSIsInByb3BlcnR5VHlwZSIsInZhbGlkYXRlIiwic3RhdGUiLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZXMiLCJwcm9wZXJ0eUFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiYXNzZXJ0aW9uIiwiZmluZEFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwiZGVidWciLCJ2YWxpZGF0ZVRlcm1zIiwiYmluZCIsImFsbCIsImFkZEFzc2VydGlvbiIsImFzc2lnbiIsInRlcm1zVmFsaWRhdGUiLCJzdWJqZWN0VGVybVZhbGlkdGVzIiwicHJvcGVydHlUZXJtVmFsaWRhdGVzIiwidmFsaWRhdGVQcm9wZXJ0eVRlcm0iLCJzdWJqZWN0VGVybVR5cGUiLCJzdWJqZWN0VGVybVR5cGVFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2ZQcm9wZXJ0eVRlcm1UeXBlIiwiaXNFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YiLCJpbmNsdWRlVHlwZSIsInByb3BlcnR5U3RyaW5nIiwicHJvcGVydHlUZXJtVW5pZmllc1dpdGhQcm9wZXJ0aWVzIiwidW5pZnlUZXJtV2l0aFByb3BlcnRpZXMiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwidHJhbnNpZW50IiwiaXNUcmFuc2llbnQiLCJ2YXJpYWJsZUFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdubWVudEZyb21QcmVwZXJ0eUFzc2VydGlvbiIsImFkZEFzc2lnbm1lbnQiLCJ0b0pTT04iLCJqc29uIiwibmFtZSIsImdldE5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVQcm9wZXJ0eUFzc2VydGlvbiIsInN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7O2tFQVZzQjswQkFFQzt5QkFDSzt1QkFDVzs0QkFDQzs2QkFDSzt3QkFDVzt5QkFDd0U7Ozs7OztNQUVoSSxXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDBCQUEwQkMsa0JBQVM7SUFDN0QsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxXQUFXLEVBQUVDLFlBQVksQ0FBRTtRQUN4RSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLFlBQVksR0FBR0E7SUFDdEI7SUFFQUMsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUNGLFdBQVc7SUFDekI7SUFFQUcsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDRixZQUFZO0lBQzFCO0lBRUFHLDJCQUEyQjtRQUN6QixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsd0JBQXdCUixNQUFNLEdBQUc7UUFFdkMsT0FBT1E7SUFDVDtJQUVBQyxrQkFBa0I7UUFDaEIsTUFBTUMsbUJBQW1CLElBQUksQ0FBQ1AsWUFBWSxDQUFDUSxPQUFPLElBQzVDQyxlQUFlRixrQkFBbUIsR0FBRztRQUUzQyxPQUFPRTtJQUNUO0lBRUFDLFNBQVNDLEtBQUssRUFBRWhCLE9BQU8sRUFBRWlCLFlBQVksRUFBRTtRQUNyQyxJQUFJQztRQUVKLE1BQU1DLDBCQUEwQixJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRXREcEIsUUFBUXFCLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFRix3QkFBd0Is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
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9wcm9wZXJ0eS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaXNEZXJpdmVkLCBpc1RyYW5zaWVudCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RhdGVcIjtcbmltcG9ydCB7IHVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVQcm9wZXJ0eUFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tUHJlcGVydHlBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9hc3NpZ25cIjtcbmltcG9ydCB7IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUsIHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgcHJvcGVydHlUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGFsbCB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgUHJvcGVydHlBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN1YmplY3RUZXJtLCBwcm9wZXJ0eVRlcm0pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5zdWJqZWN0VGVybSA9IHN1YmplY3RUZXJtO1xuICAgIHRoaXMucHJvcGVydHlUZXJtID0gcHJvcGVydHlUZXJtO1xuICB9XG5cbiAgZ2V0U3ViamVjdFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3ViamVjdFRlcm07XG4gIH1cblxuICBnZXRQcm9wZXJ0eVRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlUZXJtO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbk5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbk5vZGU7XG4gIH1cblxuICBnZXRQcm9wZXJ0eVR5cGUoKSB7XG4gICAgY29uc3QgcHJvcGVydHlUZXJtVHlwZSA9IHRoaXMucHJvcGVydHlUZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICBwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eVRlcm1UeXBlOyAgLy8vXG5cbiAgICByZXR1cm4gcHJvcGVydHlUeXBlO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtwcm9wZXJ0eUFzc2VydGlvblN0cmluZ30nIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7cHJvcGVydHlBc3NlcnRpb25TdHJpbmd9JyBwcm9wZXJ0eSBhc3NlcnRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChwcm9wZXJ0eUFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgYXNzZXJ0aW9uID0gdGhpcztcblxuICAgIGNvbnN0IHZhbGlkYXRlVGVybXMgPSB0aGlzLnZhbGlkYXRlVGVybXMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVUZXJtc1xuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMuYXNzaWduKHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Byb3BlcnR5QXNzZXJ0aW9uU3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChwcm9wZXJ0eUFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm1zKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgcHJvcGVydHlBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Byb3BlcnR5QXNzZXJ0aW9uU3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uJ3MgdGVybXMuLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkYXRlU3ViamVjdFRlcm0gPSB0aGlzLnZhbGlkYXRlU3ViamVjdFRlcm0uYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVByb3BlcnR5VGVybSA9IHRoaXMudmFsaWRhdGVQcm9wZXJ0eVRlcm0uYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVTdWJqZWN0VGVybSxcbiAgICAgIHZhbGlkYXRlUHJvcGVydHlUZXJtXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdFRlcm1UeXBlID0gdGhpcy5zdWJqZWN0VGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlcm1UeXBlID0gdGhpcy5wcm9wZXJ0eVRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgc3ViamVjdFRlcm1UeXBlRXF1YWxUb1N1YlR5cGVPclN1cGVyVHlwZU9mUHJvcGVydHlUZXJtVHlwZSA9IHN1YmplY3RUZXJtVHlwZS5pc0VxdWFsVG9TdWJUeXBlT3JTdXBlclR5cGVPZihwcm9wZXJ0eVRlcm1UeXBlKTtcblxuICAgICAgaWYgKCFzdWJqZWN0VGVybVR5cGVFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2ZQcm9wZXJ0eVRlcm1UeXBlKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvcGVydHlBc3NlcnRpb25TdHJpbmd9JyBwcm9wZXJ0eSBhc3NlcnRpb24ncyB0ZXJtcy5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVTdWJqZWN0VGVybShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgcHJvcGVydHlTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkgYXNzZXJ0aW9uJ3Mgc3ViamVjdCB0ZXJtLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5zdWJqZWN0VGVybS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN1YmplY3RUZXJtLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnN1YmplY3RUZXJtID0gc3ViamVjdFRlcm07XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eSBhc3NlcnRpb24ncyBzdWJqZWN0IHRlcm0uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlUHJvcGVydHlUZXJtKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBwcm9wZXJ0eVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eSBhc3NlcnRpb24ncyBwcm9wZXJ0eSB0ZXJtLi4uYCk7XG5cbiAgICByZXR1cm4gdW5pZnlUZXJtV2l0aFByb3BlcnRpZXModGhpcy5wcm9wZXJ0eVRlcm0sIHN0YXRlLCBjb250ZXh0LCAocHJvcGVydHlUZXJtLCBzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5wcm9wZXJ0eVRlcm0gPSBwcm9wZXJ0eVRlcm07XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eSBhc3NlcnRpb24ncyBwcm9wZXJ0eSB0ZXJtLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjaylcbiAgfVxuXG4gIGFzc2lnbihzdGF0ZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBpc0Rlcml2ZWQoc3RhdGUpLFxuICAgICAgICAgIHRyYW5zaWVudCA9IGlzVHJhbnNpZW50KHN0YXRlKTtcblxuICAgIGlmIChkZXJpdmVkIHx8IHRyYW5zaWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gdGhpcywgLy8vXG4gICAgICAgICAgdmFyaWFibGVBc3NpZ21lbnQgPSB2YXJpYWJsZUFzc2lnbm1lbnRGcm9tUHJlcGVydHlBc3NlcnRpb24ocHJvcGVydHlBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KHZhcmlhYmxlQXNzaWdtZW50KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBsZXQganNvbjtcblxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAganNvbiA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBzdHJpbmdcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiUHJvcGVydHlBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBwcm9wZXJ0eUFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVQcm9wZXJ0eUFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gcHJvcGVydHlBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBudWxsLFxuICAgICAgICAgICAgICBzdWJqZWN0VGVybSA9IHN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZShwcm9wZXJ0eUFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBwcm9wZXJ0eVRlcm0gPSBwcm9wZXJ0eVRlcm1Gcm9tUHJvcGVydHlBc3NlcnRpb25Ob2RlKHByb3BlcnR5QXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgcHJvcGVydHlBc3NlcnRpb24gPSBuZXcgUHJvcGVydHlBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdWJqZWN0VGVybSwgcHJvcGVydHlUZXJtKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBwcm9wZXJ0eUFzc2VydGlvbjtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiYWxsIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiUHJvcGVydHlBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdWJqZWN0VGVybSIsInByb3BlcnR5VGVybSIsImdldFN1YmplY3RUZXJtIiwiZ2V0UHJvcGVydHlUZXJtIiwiZ2V0UHJvcGVydHlBc3NlcnRpb25Ob2RlIiwiZ2V0Tm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsImdldFByb3BlcnR5VHlwZSIsInByb3BlcnR5VGVybVR5cGUiLCJnZXRUeXBlIiwicHJvcGVydHlUeXBlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImZpbmRBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVUZXJtcyIsImJpbmQiLCJhc3NpZ24iLCJhZGRBc3NlcnRpb24iLCJ2YWxpZGF0ZVN1YmplY3RUZXJtIiwidmFsaWRhdGVQcm9wZXJ0eVRlcm0iLCJzdWJqZWN0VGVybVR5cGUiLCJzdWJqZWN0VGVybVR5cGVFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2ZQcm9wZXJ0eVRlcm1UeXBlIiwiaXNFcXVhbFRvU3ViVHlwZU9yU3VwZXJUeXBlT2YiLCJpbmNsdWRlVHlwZSIsInByb3BlcnR5U3RyaW5nIiwidW5pZnlUZXJtV2l0aFByb3BlcnRpZXMiLCJkZXJpdmVkIiwiaXNEZXJpdmVkIiwidHJhbnNpZW50IiwiaXNUcmFuc2llbnQiLCJ2YXJpYWJsZUFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdubWVudEZyb21QcmVwZXJ0eUFzc2VydGlvbiIsImFkZEFzc2lnbm1lbnQiLCJ0b0pTT04iLCJqc29uIiwibmFtZSIsImdldE5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVQcm9wZXJ0eUFzc2VydGlvbiIsInN1YmplY3RUZXJtRnJvbVByb3BlcnR5QXNzZXJ0aW9uTm9kZSIsInByb3BlcnR5VGVybUZyb21Qcm9wZXJ0eUFzc2VydGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsInByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWdCQTs7O2VBQUE7OztnQ0Fkc0M7a0VBRWhCOzBCQUVDO3lCQUNLO3VCQUNXOzRCQUNDOzZCQUNLO3dCQUNXO3lCQUN3RTs7Ozs7O0FBRWhJLE1BQU0sRUFBRUEsR0FBRyxFQUFFLEdBQUdDLHFDQUFxQjtNQUVyQyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDBCQUEwQkMsa0JBQVM7SUFDN0QsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxXQUFXLEVBQUVDLFlBQVksQ0FBRTtRQUN4RSxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLFlBQVksR0FBR0E7SUFDdEI7SUFFQUMsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUNGLFdBQVc7SUFDekI7SUFFQUcsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDRixZQUFZO0lBQzFCO0lBRUFHLDJCQUEyQjtRQUN6QixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsd0JBQXdCUixNQUFNLEdBQUc7UUFFdkMsT0FBT1E7SUFDVDtJQUVBQyxrQkFBa0I7UUFDaEIsTUFBTUMsbUJBQW1CLElBQUksQ0FBQ1AsWUFBWSxDQUFDUSxPQUFPLElBQzVDQyxlQUFlRixrQkFBbUIsR0FBRztRQUUzQyxPQUFPRTtJQUNUO0lBRUFDLFNBQVNDLEtBQUssRUFBRWhCLE9BQU8sRUFBRWlCLE9BQU8sRUFBRUMsSUFBSSxFQUFFO1FBQ3RDLElBQUlDO1FBRUosTUFBTUMsMEJBQTBCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFF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
@@ -11,8 +11,6 @@ Object.defineProperty(exports, "default", {
11
11
  const _occamlanguages = require("occam-languages");
12
12
  const _elements = /*#__PURE__*/ _interop_require_wildcard(require("../../elements"));
13
13
  const _assertion = /*#__PURE__*/ _interop_require_default(require("../assertion"));
14
- const _state = require("../../utilities/state");
15
- const _context = require("../../utilities/context");
16
14
  function _interop_require_default(obj) {
17
15
  return obj && obj.__esModule ? obj : {
18
16
  default: obj
@@ -59,7 +57,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
59
57
  }
60
58
  return newObj;
61
59
  }
62
- const { unbreakable } = _occamlanguages.breakPointUtilities, { cut, all, some, every, isolate } = _occamlanguages.continuationUtilities;
60
+ const { unbreakable } = _occamlanguages.breakPointUtilities, { cut, all, some, every } = _occamlanguages.continuationUtilities;
63
61
  const _default = (0, _elements.define)(class SchemaAssertion extends _assertion.default {
64
62
  constructor(context, string, node, breakPoint, link, frame){
65
63
  super(context, string, node, breakPoint);
@@ -101,27 +99,6 @@ const _default = (0, _elements.define)(class SchemaAssertion extends _assertion.
101
99
  return forward(implicitAssumptions, context, back);
102
100
  }, back);
103
101
  }
104
- verify = unbreakable(function(context, forward, back) {
105
- forward = cut(forward, back); ///
106
- const schemaAssertionString = this.getString(); ///
107
- context.trace(`Verifying the '${schemaAssertionString}' schema assertion...`);
108
- return isolate((context, forward, back)=>{
109
- return (0, _state.declare)((state)=>{
110
- return this.validate(state, context, (schemaAssertion, context, back)=>{
111
- return forward(back);
112
- }, back);
113
- });
114
- }, context, (context, back)=>{
115
- context.debug(`...verified the '${schemaAssertionString}' schema assertion.`);
116
- return forward(context, back);
117
- }, (exception)=>{
118
- if (exception) {
119
- return back(exception);
120
- }
121
- context.trace(`Unable to verify the '${schemaAssertionString}' schema assertion.`);
122
- return back();
123
- });
124
- });
125
102
  apply = unbreakable(function(step, context, forward, back) {
126
103
  forward = cut(forward, back); ///
127
104
  const schemas = context.getSchemas(), statement = step.getStatement(), schemaAssertion = this, schemaAssertionString = this.getString(); ///
@@ -134,22 +111,25 @@ const _default = (0, _elements.define)(class SchemaAssertion extends _assertion.
134
111
  }, forward, back);
135
112
  });
136
113
  validate(state, context, forward, back) {
114
+ let assertion;
137
115
  const schemaAssertionString = this.getString(); ///
138
116
  context.trace(`Validating the '${schemaAssertionString}' schema assertion...`);
139
- return isolate((state, context, forward, back)=>{
140
- return (0, _context.attempt)((context)=>{
141
- const validateLink = this.validateLink.bind(this), validateFrame = this.validateFrame.bind(this);
142
- return all([
143
- validateLink,
144
- validateFrame
145
- ], state, context, (state, context, back)=>{
146
- this.commit(context);
147
- return forward(back);
148
- }, back);
149
- }, context);
150
- }, state, context, (state, context, back)=>{
117
+ assertion = this.findAssertion(context);
118
+ if (assertion !== null) {
119
+ const schemaAssertion = assertion; ///
120
+ context.debug(`The '${schemaAssertionString}' schema assertion is already present.`);
121
+ return forward(schemaAssertion, context, back);
122
+ }
123
+ assertion = this; ///
124
+ const validateLink = this.validateLink.bind(this), validateFrame = this.validateFrame.bind(this);
125
+ return all([
126
+ validateLink,
127
+ validateFrame
128
+ ], state, context, (state, context, back)=>{
129
+ context.addAssertion(assertion);
130
+ const schemaAssertion = assertion; ///
151
131
  context.debug(`...validated the '${schemaAssertionString}' schema assertion.`);
152
- return forward(context, back);
132
+ return forward(schemaAssertion, context, back);
153
133
  }, back);
154
134
  }
155
135
  validateLink(state, context, forward, back) {
@@ -173,4 +153,4 @@ const _default = (0, _elements.define)(class SchemaAssertion extends _assertion.
173
153
  static name = "SchemaAssertion";
174
154
  });
175
155
 
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IEFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgZGVjbGFyZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RhdGVcIjtcbmltcG9ydCB7IGF0dGVtcHQgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyB1bmJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgY3V0LCBhbGwsIHNvbWUsIGV2ZXJ5LCBpc29sYXRlIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTY2hlbWFBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIGZyYW1lKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGluayA9IGxpbms7XG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICB9XG5cbiAgZ2V0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5saW5rO1xuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBnZXRTY2hlbWFBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBzY2hlbWFBc3NlcnRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHNjaGVtYUFzc2VydGlvbk5vZGU7XG4gIH1cblxuICBpc1Npbmd1bGFyKCkgeyByZXR1cm4gdGhpcy5mcmFtZS5pc1Npbmd1bGFyKCk7IH1cblxuICBnZXRBc3N1bXB0aW9ucygpIHsgcmV0dXJuIHRoaXMuZnJhbWUuZ2V0QXNzdW1wdGlvbnMoKTsgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMuZnJhbWUuZ2V0TWV0YXZhcmlhYmxlKCk7IH1cblxuICBnZXRJbXBsaWNpdEFzc3VtcHRpb25zKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBpbXBsaWNpdEFzc3VtcHRpb25zID0gW10sXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gdGhpcy5nZXRNZXRhdmFyaWFibGUoKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGltcGxpY2l0QXNzdW1wdGlvbnMsIGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGZhY3RzID0gY29udGV4dC5nZXRGYWN0cygpO1xuXG4gICAgZmFjdHMuZm9yRWFjaCgoZmFjdCkgPT4ge1xuICAgICAgY29uc3QgeyBJbXBsaWNpdEFzc3VtcHRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgc3RhdGVtZW50ID0gZmFjdC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgIGltcGxpY2l0QXNzdW1wdGlvbiA9IEltcGxpY2l0QXNzdW1wdGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgIGltcGxpY2l0QXNzdW1wdGlvbnMucHVzaChpbXBsaWNpdEFzc3VtcHRpb24pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGV2ZXJ5KGltcGxpY2l0QXNzdW1wdGlvbnMsIChpbXBsaWNpdEFzc3VtcHRpb24sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb24udmVyaWZ5KGNvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gZm9yd2FyZChpbXBsaWNpdEFzc3VtcHRpb25zLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZlcmlmeSA9IHVuYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBzY2hlbWFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIGlzb2xhdGUoKGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHNjaGVtYUFzc2VydGlvbiwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm4gYmFjayhleGNlcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtzY2hlbWFBc3NlcnRpb25TdHJpbmd9JyBzY2hlbWEgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH0pO1xuICB9KTtcblxuICBhcHBseSA9IHVuYnJlYWthYmxlKGZ1bmN0aW9uIChzdGVwLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgZm9yd2FyZCA9IGN1dChmb3J3YXJkLCBiYWNrKTsgLy8vXG5cbiAgICBjb25zdCBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RlcC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBzY2hlbWFBc3NlcnRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICBzY2hlbWFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYEFwcGx5aW5nIHRoZSAnJHtzY2hlbWFBc3NlcnRpb25TdHJpbmd9JyBzY2hlbWEgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gc29tZShzY2hlbWFzLCAoc2NoZW1hLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gc2NoZW1hLmFwcGx5KHN0YXRlbWVudCwgc2NoZW1hQXNzZXJ0aW9uLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi5hcHBsaWVkIHRoZSAnJHtzY2hlbWFBc3NlcnRpb25TdHJpbmd9JyBzY2hlbWEgYXNzZXJ0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gIH0pO1xuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc2NoZW1hQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIGlzb2xhdGUoKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZUxpbmsgPSB0aGlzLnZhbGlkYXRlTGluay5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2YWxpZGF0ZUZyYW1lID0gdGhpcy52YWxpZGF0ZUZyYW1lLmJpbmQodGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIGFsbChbXG4gICAgICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgICAgIHZhbGlkYXRlRnJhbWVcbiAgICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHRoaXMuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgc3RhdGUsIGNvbnRleHQsIChzdGF0ZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzY2hlbWFBc3NlcnRpb25TdHJpbmd9JyBzY2hlbWEgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTGluayhzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNjaGVtYUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NjaGVtYUFzc2VydGlvblN0cmluZ30nIHNjaGVtYSBhc3NlcnRpb24ncyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5saW5rLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAobGluaywgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5saW5rID0gbGluaztcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzY2hlbWFBc3NlcnRpb25TdHJpbmd9JyBzY2hlbWEgYXNzZXJ0aW9uJ3MgbGluay5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVGcmFtZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNjaGVtYUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NjaGVtYUFzc2VydGlvblN0cmluZ30nIHNjaGVtYSBhc3NlcnRpb24ncyBmcmFtZS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZnJhbWUudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChmcmFtZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NjaGVtYUFzc2VydGlvblN0cmluZ30nIHNjaGVtYSBhc3NlcnRpb24ncyBmcmFtZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlNjaGVtYUFzc2VydGlvblwiO1xufSk7XG4iXSwibmFtZXMiOlsidW5icmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiY3V0IiwiYWxsIiwic29tZSIsImV2ZXJ5IiwiaXNvbGF0ZSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIlNjaGVtYUFzc2VydGlvbiIsIkFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxpbmsiLCJmcmFtZSIsImdldExpbmsiLCJnZXRGcmFtZSIsImdldFNjaGVtYUFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwic2NoZW1hQXNzZXJ0aW9uTm9kZSIsImlzU2luZ3VsYXIiLCJnZXRBc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZSIsImdldEltcGxpY2l0QXNzdW1wdGlvbnMiLCJmb3J3YXJkIiwiYmFjayIsImltcGxpY2l0QXNzdW1wdGlvbnMiLCJtZXRhdmFyaWFibGUiLCJmYWN0cyIsImdldEZhY3RzIiwiZm9yRWFjaCIsImZhY3QiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJlbGVtZW50cyIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImltcGxpY2l0QXNzdW1wdGlvbiIsImZyb21TdGF0ZW1lbnQiLCJwdXNoIiwidmVyaWZ5Iiwic2NoZW1hQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWNsYXJlIiwic3RhdGUiLCJ2YWxpZGF0ZSIsInNjaGVtYUFzc2VydGlvbiIsImRlYnVnIiwiZXhjZXB0aW9uIiwiYXBwbHkiLCJzdGVwIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJzY2hlbWEiLCJhdHRlbXB0IiwidmFsaWRhdGVMaW5rIiwiYmluZCIsInZhbGlkYXRlRnJhbWUiLCJjb21taXQiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFjQTs7O2VBQUE7OztnQ0FaMkQ7a0VBRXRDO2tFQUNDO3VCQUdFO3lCQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IEFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuXG5jb25zdCB7IHVuYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBjdXQsIGFsbCwgc29tZSwgZXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFNjaGVtYUFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGluaywgZnJhbWUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5saW5rID0gbGluaztcbiAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG4gIH1cblxuICBnZXRMaW5rKCkge1xuICAgIHJldHVybiB0aGlzLmxpbms7XG4gIH1cblxuICBnZXRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZTtcbiAgfVxuXG4gIGdldFNjaGVtYUFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHNjaGVtYUFzc2VydGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gc2NoZW1hQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIGlzU2luZ3VsYXIoKSB7IHJldHVybiB0aGlzLmZyYW1lLmlzU2luZ3VsYXIoKTsgfVxuXG4gIGdldEFzc3VtcHRpb25zKCkgeyByZXR1cm4gdGhpcy5mcmFtZS5nZXRBc3N1bXB0aW9ucygpOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkgeyByZXR1cm4gdGhpcy5mcmFtZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldEltcGxpY2l0QXNzdW1wdGlvbnMoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGltcGxpY2l0QXNzdW1wdGlvbnMgPSBbXSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZSgpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoaW1wbGljaXRBc3N1bXB0aW9ucywgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdHMgPSBjb250ZXh0LmdldEZhY3RzKCk7XG5cbiAgICBmYWN0cy5mb3JFYWNoKChmYWN0KSA9PiB7XG4gICAgICBjb25zdCB7IEltcGxpY2l0QXNzdW1wdGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICBzdGF0ZW1lbnQgPSBmYWN0LmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gSW1wbGljaXRBc3N1bXB0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgICAgaW1wbGljaXRBc3N1bXB0aW9ucy5wdXNoKGltcGxpY2l0QXNzdW1wdGlvbik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXZlcnkoaW1wbGljaXRBc3N1bXB0aW9ucywgKGltcGxpY2l0QXNzdW1wdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIGltcGxpY2l0QXNzdW1wdGlvbi52ZXJpZnkoY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGltcGxpY2l0QXNzdW1wdGlvbnMsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgYXBwbHkgPSB1bmJyZWFrYWJsZShmdW5jdGlvbiAoc3RlcCwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3Qgc2NoZW1hcyA9IGNvbnRleHQuZ2V0U2NoZW1hcygpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgc2NoZW1hQXNzZXJ0aW9uID0gdGhpcywgLy8vXG4gICAgICAgICAgc2NoZW1hQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBBcHBseWluZyB0aGUgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHNvbWUoc2NoZW1hcywgKHNjaGVtYSwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIHNjaGVtYS5hcHBseShzdGF0ZW1lbnQsIHNjaGVtYUFzc2VydGlvbiwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uYXBwbGllZCB0aGUgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbi5gKTtcblxuICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICAgIH0sIGJhY2spO1xuICAgIH0sIGZvcndhcmQsIGJhY2spO1xuICB9KTtcblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3NlcnRpb247XG5cbiAgICBjb25zdCBzY2hlbWFBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzY2hlbWFBc3NlcnRpb25TdHJpbmd9JyBzY2hlbWEgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAoYXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzY2hlbWFBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbiBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHNjaGVtYUFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgYXNzZXJ0aW9uID0gdGhpczsgLy8vXG5cbiAgICBjb25zdCB2YWxpZGF0ZUxpbmsgPSB0aGlzLnZhbGlkYXRlTGluay5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlRnJhbWUgPSB0aGlzLnZhbGlkYXRlRnJhbWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgdmFsaWRhdGVGcmFtZVxuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnN0IHNjaGVtYUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2NoZW1hQXNzZXJ0aW9uU3RyaW5nfScgc2NoZW1hIGFzc2VydGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc2NoZW1hQXNzZXJ0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlTGluayhzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNjaGVtYUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NjaGVtYUFzc2VydGlvblN0cmluZ30nIHNjaGVtYSBhc3NlcnRpb24ncyBsaW5rLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5saW5rLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAobGluaywgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5saW5rID0gbGluaztcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzY2hlbWFBc3NlcnRpb25TdHJpbmd9JyBzY2hlbWEgYXNzZXJ0aW9uJ3MgbGluay5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVGcmFtZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNjaGVtYUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NjaGVtYUFzc2VydGlvblN0cmluZ30nIHNjaGVtYSBhc3NlcnRpb24ncyBmcmFtZS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZnJhbWUudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChmcmFtZSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NjaGVtYUFzc2VydGlvblN0cmluZ30nIHNjaGVtYSBhc3NlcnRpb24ncyBmcmFtZS5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlNjaGVtYUFzc2VydGlvblwiO1xufSk7XG4iXSwibmFtZXMiOlsidW5icmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiY3V0IiwiYWxsIiwic29tZSIsImV2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiU2NoZW1hQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibGluayIsImZyYW1lIiwiZ2V0TGluayIsImdldEZyYW1lIiwiZ2V0U2NoZW1hQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJzY2hlbWFBc3NlcnRpb25Ob2RlIiwiaXNTaW5ndWxhciIsImdldEFzc3VtcHRpb25zIiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0SW1wbGljaXRBc3N1bXB0aW9ucyIsImZvcndhcmQiLCJiYWNrIiwiaW1wbGljaXRBc3N1bXB0aW9ucyIsIm1ldGF2YXJpYWJsZSIsImZhY3RzIiwiZ2V0RmFjdHMiLCJmb3JFYWNoIiwiZmFjdCIsIkltcGxpY2l0QXNzdW1wdGlvbiIsImVsZW1lbnRzIiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiaW1wbGljaXRBc3N1bXB0aW9uIiwiZnJvbVN0YXRlbWVudCIsInB1c2giLCJ2ZXJpZnkiLCJhcHBseSIsInN0ZXAiLCJzY2hlbWFzIiwiZ2V0U2NoZW1hcyIsInNjaGVtYUFzc2VydGlvbiIsInNjaGVtYUFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwic2NoZW1hIiwiZGVidWciLCJ2YWxpZGF0ZSIsInN0YXRlIiwiYXNzZXJ0aW9uIiwiZmluZEFzc2VydGlvbiIsInZhbGlkYXRlTGluayIsImJpbmQiLCJ2YWxpZGF0ZUZyYW1lIiwiYWRkQXNzZXJ0aW9uIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7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
@@ -11,7 +11,6 @@ Object.defineProperty(exports, "default", {
11
11
  const _occamlanguages = require("occam-languages");
12
12
  const _assertion = /*#__PURE__*/ _interop_require_default(require("../assertion"));
13
13
  const _elements = require("../../elements");
14
- const _state = require("../../utilities/state");
15
14
  const _context = require("../../utilities/context");
16
15
  const _element = require("../../utilities/element");
17
16
  function _interop_require_default(obj) {
@@ -19,7 +18,7 @@ function _interop_require_default(obj) {
19
18
  default: obj
20
19
  };
21
20
  }
22
- const { cut } = _occamlanguages.continuationUtilities, { unbreakable } = _occamlanguages.breakPointUtilities;
21
+ const { unbreakable } = _occamlanguages.breakPointUtilities, { cut, all, every } = _occamlanguages.continuationUtilities;
23
22
  const _default = (0, _elements.define)(class SignatureAssertion extends _assertion.default {
24
23
  constructor(context, string, node, breakPoint, link, terms){
25
24
  super(context, string, node, breakPoint);
@@ -36,109 +35,75 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
36
35
  const node = this.getNode(), signatureAssertionNode = node; ///
37
36
  return signatureAssertionNode;
38
37
  }
39
- verify = unbreakable(function(context, forward, back) {
40
- forward = cut(forward, back); ///
41
- const signatureAssertionString = this.getString(); ///
42
- context.trace(`Verifying the '${signatureAssertionString}' signature assertion...`);
43
- return (0, _state.declare)((state)=>{
44
- return this.validate(state, context, (signatureAssertion, context, back)=>{
45
- context.debug(`...verified the '${signatureAssertionString}' signature assertion.`);
46
- return forward(context, back);
47
- }, back);
48
- });
49
- });
50
38
  apply = unbreakable(function(step, factOrSubproofs, context, forward, back) {
51
39
  forward = cut(forward, back); ///
52
- let stepAndFactOrSubproofsUnify = false;
53
40
  const signatureAssertionString = this.getString(); ///
54
41
  context.trace(`Applying the '${signatureAssertionString}' signature assertion...`);
55
- return (0, _context.reconcile)((context)=>{
56
- const axiom = context.findAxiomByLink(this.link), signatureAssertion = this; ///
57
- return axiom.unifySignatureAssertion(signatureAssertion, context, (signatureAssertionUnifies)=>{
58
- if (!signatureAssertionUnifies) {
59
- return continuation(stepAndFactOrSubproofsUnify);
60
- }
61
- context.debug(`applied the '${signatureAssertionString}' signature assertion.`);
62
- axiom.unifyStepAndFactOrSubproofs(step, factOrSubproofs, context, forward, back);
63
- });
64
- }, context);
42
+ return (0, _context.isolate)((step, factOrSubproofs, context, forward, back)=>{
43
+ return (0, _context.reconcile)((context)=>{
44
+ const axiom = context.findAxiomByLink(this.link), signatureAssertion = this; ///
45
+ return axiom.unifySignatureAssertion(signatureAssertion, context, (context, back)=>{
46
+ axiom.apply(step, factOrSubproofs, context, (context, back)=>{
47
+ return forward(back);
48
+ }, back);
49
+ }, back);
50
+ }, context);
51
+ }, step, factOrSubproofs, context, (step, factOrSubproofs, context, back)=>{
52
+ context.debug(`applied the '${signatureAssertionString}' signature assertion.`);
53
+ return forward(context, back);
54
+ }, back);
65
55
  });
66
56
  validate(state, context, forward, back) {
57
+ let assertion;
67
58
  const signatureAssertionString = this.getString(); ///
68
59
  context.trace(`Validating the '${signatureAssertionString}' signature assertion...`);
60
+ assertion = this.findAssertion(context);
61
+ if (assertion !== null) {
62
+ const signatureAssertion = assertion; ///
63
+ context.debug(`The '${signatureAssertionString}' signature assertion is already present.`);
64
+ return forward(signatureAssertion, context, back);
65
+ }
69
66
  assertion = this; ///
70
- const validateTerms = this.validateTerms.bind(this), validateLink = this.validateLink.bind(this);
71
- validates = all([
72
- validateTerms,
73
- validateLink
74
- ], state, context, (state, context)=>{
75
- let validates1;
67
+ const validateLink = this.validateLink.bind(this), validateTerms = this.validateTerms.bind(this);
68
+ return all([
69
+ validateLink,
70
+ validateTerms
71
+ ], state, context, (state, context, back)=>{
76
72
  context.addAssertion(assertion);
77
73
  const signatureAssertion = assertion; ///
78
- validates1 = continuation(signatureAssertion, context);
79
- return validates1;
80
- });
81
- if (validates) {
82
74
  context.debug(`...validated the '${signatureAssertionString}' signature assertion.`);
83
- }
84
- return validates;
75
+ return forward(signatureAssertion, context, back);
76
+ }, back);
85
77
  }
86
78
  validateTerm(term, terms, state, context, forward, back) {
87
- let termValidates;
88
79
  const termString = term.getString(), signatureAssertionString = this.getString(); ///
89
80
  context.trace(`Validating the '${signatureAssertionString}' signature assertion's '${termString}' term...`);
90
- termValidates = term.validate(state, context, (term, context)=>{
91
- let validates1;
81
+ return term.validate(state, context, (term, context, back)=>{
92
82
  terms.push(term);
93
- validates1 = continuation(terms, state, context);
94
- return validates1;
95
- });
96
- if (termValidates) {
97
83
  context.debug(`...validated the '${signatureAssertionString}' signature assertion's '${termString}' term.`);
98
- }
99
- return termValidates;
100
- }
101
- validateTerms(state, context, forward, back) {
102
- let termsValidate;
103
- const signatureAssertionString = this.getString(); ///
104
- context.trace(`Validating the '${signatureAssertionString}' signature assertion's terms...`);
105
- const terms = [], validateTerm = this.validateTerm.bind(this);
106
- termsValidate = every(this.terms, validateTerm, terms, state, context, (terms, state, context)=>{
107
- let termsValidate;
108
- termsValidate = continuation(state, context);
109
- if (termsValidate) {
110
- this.terms = terms;
111
- }
112
- return termsValidate;
113
- });
114
- if (termsValidate) {
115
- context.debug(`...validated the '${signatureAssertionString}' signature assertion's terms.`);
116
- }
117
- return termsValidate;
84
+ return forward(terms, state, context, back);
85
+ }, back);
118
86
  }
119
87
  validateLink(state, context, forward, back) {
120
- let linkValidates;
121
88
  const signatureAssertionString = this.getString(); ///
122
89
  context.trace(`Validating the '${signatureAssertionString}' signature assertion's link...`);
123
- linkValidates = this.link.validate(state, context, (link, context)=>{
124
- let validates1 = false;
125
- const axiom = context.findAxiomByLink(link);
126
- if (axiom !== null) {
127
- const axiomSatisfiable = axiom.isSatisfiable();
128
- if (axiomSatisfiable) {
129
- validates1 = true;
130
- }
131
- }
132
- if (validates1) {
133
- this.link = link;
134
- validates1 = continuation(state, context);
135
- }
136
- return validates1;
137
- });
138
- if (linkValidates) {
90
+ return this.link.validate(state, context, (link, context, back)=>{
91
+ this.link = link;
139
92
  context.debug(`...validated the '${signatureAssertionString}' signature assertion's link.`);
140
- }
141
- return linkValidates;
93
+ return forward(state, context, back);
94
+ }, back);
95
+ }
96
+ validateTerms(state, context, forward, back) {
97
+ const signatureAssertionString = this.getString(); ///
98
+ context.trace(`Validating the '${signatureAssertionString}' signature assertion's terms...`);
99
+ const terms = [];
100
+ return every(this.terms, (term, terms, state, context, forward, back)=>{
101
+ return this.validateTerm(term, terms, state, context, forward, back);
102
+ }, terms, state, context, (terms, state, context, back)=>{
103
+ this.terms = terms;
104
+ context.debug(`...validated the '${signatureAssertionString}' signature assertion's terms.`);
105
+ return forward(state, context, back);
106
+ }, back);
142
107
  }
143
108
  unifyClaim(claim, context, forward, back) {
144
109
  const claimString = claim.getString(), signatureAssertionString = this.getString();
@@ -173,4 +138,4 @@ const _default = (0, _elements.define)(class SignatureAssertion extends _asserti
173
138
  }
174
139
  });
175
140
 
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zaWduYXR1cmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IEFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgZGVjbGFyZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RhdGVcIjtcbmltcG9ydCB7IHJlY29uY2lsZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgc2lnbmF0dXJlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBjdXQgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgdW5icmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTaWduYXR1cmVBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxpbmssIHRlcm1zKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGluayA9IGxpbms7XG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybXM7XG4gIH1cblxuICBnZXRMaW5rKCkge1xuICAgIHJldHVybiB0aGlzLmxpbms7XG4gIH1cblxuICBnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbk5vZGU7XG4gIH1cblxuICB2ZXJpZnkgPSB1bmJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChzaWduYXR1cmVBc3NlcnRpb24sIGNvbnRleHQgLCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgfSwgYmFjayk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGFwcGx5ID0gdW5icmVha2FibGUoZnVuY3Rpb24gKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgbGV0IHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQXBwbHlpbmcgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeUxpbmsodGhpcy5saW5rKSxcbiAgICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHRoaXM7ICAvLy9cblxuICAgICAgcmV0dXJuIGF4aW9tLnVuaWZ5U2lnbmF0dXJlQXNzZXJ0aW9uKHNpZ25hdHVyZUFzc2VydGlvbiwgY29udGV4dCwgKHNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMpID0+IHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgYXBwbGllZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcblxuICAgICAgICBheGlvbS51bmlmeVN0ZXBBbmRGYWN0T3JTdWJwcm9vZnMoc3RlcCwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9KTtcblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgY29uc3QgdmFsaWRhdGVUZXJtcyA9IHRoaXMudmFsaWRhdGVUZXJtcy5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlTGluayA9IHRoaXMudmFsaWRhdGVMaW5rLmJpbmQodGhpcyk7XG5cbiAgICB2YWxpZGF0ZXMgPSBhbGwoW1xuICAgICAgdmFsaWRhdGVUZXJtcyxcbiAgICAgIHZhbGlkYXRlTGlua1xuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzaWduYXR1cmVBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm0odGVybSwgdGVybXMsIHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IHRlcm1WYWxpZGF0ZXM7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIHRlcm1WYWxpZGF0ZXMgPSB0ZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgdGVybXMucHVzaCh0ZXJtKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHRlcm1zLCBzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1WYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm1zKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IHRlcm1zVmFsaWRhdGU7XG5cbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgdGVybXMuLi5gKTtcblxuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgdmFsaWRhdGVUZXJtID0gdGhpcy52YWxpZGF0ZVRlcm0uYmluZCh0aGlzKTtcblxuICAgIHRlcm1zVmFsaWRhdGUgPSBldmVyeSh0aGlzLnRlcm1zLCB2YWxpZGF0ZVRlcm0sIHRlcm1zLCBzdGF0ZSwgY29udGV4dCwgKHRlcm1zLCBzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHRlcm1zVmFsaWRhdGU7XG5cbiAgICAgIHRlcm1zVmFsaWRhdGUgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybXNWYWxpZGF0ZSkge1xuICAgICAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0ZXJtc1ZhbGlkYXRlO1xuICAgIH0pO1xuXG4gICAgaWYgKHRlcm1zVmFsaWRhdGUpe1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgdGVybXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1zVmFsaWRhdGVcbiAgfVxuXG4gIHZhbGlkYXRlTGluayhzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBsaW5rVmFsaWRhdGVzO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbidzIGxpbmsuLi5gKTtcblxuICAgIGxpbmtWYWxpZGF0ZXMgPSB0aGlzLmxpbmsudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChsaW5rLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeUxpbmsobGluayk7XG5cbiAgICAgIGlmIChheGlvbSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBheGlvbVNhdGlzZmlhYmxlID0gYXhpb20uaXNTYXRpc2ZpYWJsZSgpO1xuXG4gICAgICAgIGlmIChheGlvbVNhdGlzZmlhYmxlKSB7XG4gICAgICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIHRoaXMubGluayA9IGxpbms7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICB9KTtcblxuICAgIGlmIChsaW5rVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24ncyBsaW5rLmApO1xuICAgIH1cblxuICAgIHJldHVybiBsaW5rVmFsaWRhdGVzO1xuICB9XG5cbiAgdW5pZnlDbGFpbShjbGFpbSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gY2xhaW0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltIHdpdGggdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeUxpbmsodGhpcy5saW5rKTtcblxuICAgICAgcmV0dXJuIGF4aW9tLnVuaWZ5VGVybXModGhpcy50ZXJtcywgY29udGV4dCwgKHRlcm1zVW5pZnkpID0+IHtcbiAgICAgICAgaWYgKCF0ZXJtc1VuaWZ5KSB7XG4gICAgICAgICAgY29uc3QgY2xhaW1VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGNsYWltVW5pZmllcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXhpb20udW5pZnlDbGFpbShjbGFpbSwgY29udGV4dCwgKGNsYWltVW5pZmllcykgPT4ge1xuICAgICAgICAgIGlmIChjbGFpbVVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2xhaW1VbmlmaWVzKSB7XG4gICAgICAgICAgICBjb250ZXh0LmNvbW1pdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oY2xhaW1VbmlmaWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJTaWduYXR1cmVBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbVN0ZXAoc3RlcCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGVwLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBzaWduYXR1cmVBc3NlcnRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImN1dCIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsInVuYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlNpZ25hdHVyZUFzc2VydGlvbiIsIkFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxpbmsiLCJ0ZXJtcyIsImdldFRlcm1zIiwiZ2V0TGluayIsImdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwic2lnbmF0dXJlQXNzZXJ0aW9uTm9kZSIsInZlcmlmeSIsImZvcndhcmQiLCJiYWNrIiwic2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWNsYXJlIiwic3RhdGUiLCJ2YWxpZGF0ZSIsInNpZ25hdHVyZUFzc2VydGlvbiIsImRlYnVnIiwiYXBwbHkiLCJzdGVwIiwiZmFjdE9yU3VicHJvb2ZzIiwic3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5IiwicmVjb25jaWxlIiwiYXhpb20iLCJmaW5kQXhpb21CeUxpbmsiLCJ1bmlmeVNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMiLCJjb250aW51YXRpb24iLCJ1bmlmeVN0ZXBBbmRGYWN0T3JTdWJwcm9vZnMiLCJhc3NlcnRpb24iLCJ2YWxpZGF0ZVRlcm1zIiwiYmluZCIsInZhbGlkYXRlTGluayIsInZhbGlkYXRlcyIsImFsbCIsImFkZEFzc2VydGlvbiIsInZhbGlkYXRlVGVybSIsInRlcm0iLCJ0ZXJtVmFsaWRhdGVzIiwidGVybVN0cmluZyIsInB1c2giLCJ0ZXJtc1ZhbGlkYXRlIiwiZXZlcnkiLCJsaW5rVmFsaWRhdGVzIiwiYXhpb21TYXRpc2ZpYWJsZSIsImlzU2F0aXNmaWFibGUiLCJ1bmlmeUNsYWltIiwiY2xhaW0iLCJjbGFpbVN0cmluZyIsInVuaWZ5VGVybXMiLCJ0ZXJtc1VuaWZ5IiwiY2xhaW1VbmlmaWVzIiwiY29tbWl0IiwibmFtZSIsImZyb21TdGVwIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVoyRDtrRUFFckM7MEJBRUM7dUJBQ0M7eUJBQ0U7eUJBQzBCOzs7Ozs7QUFFcEQsTUFBTSxFQUFFQSxHQUFHLEVBQUUsR0FBR0MscUNBQXFCLEVBQy9CLEVBQUVDLFdBQVcsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFM0MsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQywyQkFBMkJDLGtCQUFTO0lBQzlELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxLQUFLLENBQUU7UUFDMUQsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLEtBQUssR0FBR0E7SUFDZjtJQUVBQyxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUNELEtBQUs7SUFDbkI7SUFFQUUsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDSCxJQUFJO0lBQ2xCO0lBRUFJLDRCQUE0QjtRQUMxQixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMseUJBQXlCUixNQUFPLEdBQUc7UUFFekMsT0FBT1E7SUFDVDtJQUVBQyxTQUFTaEIsWUFBWSxTQUFVSyxPQUFPLEVBQUVZLE9BQU8sRUFBRUMsSUFBSTtRQUNuREQsVUFBVW5CLElBQUltQixTQUFTQyxPQUFPLEdBQUc7UUFFakMsTUFBTUMsMkJBQTJCLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFdERmLFFBQVFnQixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLHlCQUF5Qix3QkFBd0IsQ0FBQztRQUVsRixPQUFPRyxJQUFBQSxjQUFPLEVBQUMsQ0FBQ0M7WUFDZCxPQUFPLElBQUksQ0FB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
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zaWduYXR1cmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IEFzc2VydGlvbiBmcm9tIFwiLi4vYXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi8uLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaXNvbGF0ZSwgcmVjb25jaWxlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IHVuYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBjdXQsIGFsbCwgZXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFNpZ25hdHVyZUFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGluaywgdGVybXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5saW5rID0gbGluaztcbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gIH1cblxuICBnZXRUZXJtcygpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtcztcbiAgfVxuXG4gIGdldExpbmsoKSB7XG4gICAgcmV0dXJuIHRoaXMubGluaztcbiAgfVxuXG4gIGdldFNpZ25hdHVyZUFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbk5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gc2lnbmF0dXJlQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIGFwcGx5ID0gdW5icmVha2FibGUoZnVuY3Rpb24gKHN0ZXAsIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZvcndhcmQgPSBjdXQoZm9yd2FyZCwgYmFjayk7IC8vL1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQXBwbHlpbmcgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiBpc29sYXRlKChzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5TGluayh0aGlzLmxpbmspLFxuICAgICAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSB0aGlzOyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIGF4aW9tLnVuaWZ5U2lnbmF0dXJlQXNzZXJ0aW9uKHNpZ25hdHVyZUFzc2VydGlvbiwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBheGlvbS5hcHBseShzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZm9yd2FyZChiYWNrKTtcbiAgICAgICAgICB9LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIChzdGVwLCBmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYGFwcGxpZWQgdGhlICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9KTtcblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3NlcnRpb247XG5cbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAoYXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbiBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHNpZ25hdHVyZUFzc2VydGlvbiwgY29udGV4dCwgYmFjayk7XG4gICAgfVxuXG4gICAgYXNzZXJ0aW9uID0gdGhpczsgLy8vXG5cbiAgICBjb25zdCB2YWxpZGF0ZUxpbmsgPSB0aGlzLnZhbGlkYXRlTGluay5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlVGVybXMgPSB0aGlzLnZhbGlkYXRlVGVybXMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVMaW5rLFxuICAgICAgdmFsaWRhdGVUZXJtc1xuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnN0IHNpZ25hdHVyZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc2lnbmF0dXJlQXNzZXJ0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybSh0ZXJtLCB0ZXJtcywgc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIHJldHVybiB0ZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgdGVybXMucHVzaCh0ZXJtKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHRlcm1zLCBzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2YWxpZGF0ZUxpbmsoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgbGluay4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMubGluay52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKGxpbmssIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIHRoaXMubGluayA9IGxpbms7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbidzIGxpbmsuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybXMoc3RhdGUsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uJ3MgdGVybXMuLi5gKTtcblxuICAgIGNvbnN0IHRlcm1zID0gW107XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy50ZXJtcywgKHRlcm0sIHRlcm1zLCBzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVUZXJtKHRlcm0sIHRlcm1zLCBzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgdGVybXMsIHN0YXRlLCBjb250ZXh0LCAodGVybXMsIHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICB0aGlzLnRlcm1zID0gdGVybXM7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbidzIHRlcm1zLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeUNsYWltKGNsYWltLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY2xhaW1TdHJpbmcgPSBjbGFpbS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5TGluayh0aGlzLmxpbmspO1xuXG4gICAgICByZXR1cm4gYXhpb20udW5pZnlUZXJtcyh0aGlzLnRlcm1zLCBjb250ZXh0LCAodGVybXNVbmlmeSkgPT4ge1xuICAgICAgICBpZiAoIXRlcm1zVW5pZnkpIHtcbiAgICAgICAgICBjb25zdCBjbGFpbVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oY2xhaW1VbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBheGlvbS51bmlmeUNsYWltKGNsYWltLCBjb250ZXh0LCAoY2xhaW1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgaWYgKGNsYWltVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjbGFpbVVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjbGFpbVVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlNpZ25hdHVyZUFzc2VydGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tU3RlcChzdGVwLCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0ZXAuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZUFzc2VydGlvbjtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsidW5icmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiY3V0IiwiYWxsIiwiZXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJTaWduYXR1cmVBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJsaW5rIiwidGVybXMiLCJnZXRUZXJtcyIsImdldExpbmsiLCJnZXRTaWduYXR1cmVBc3NlcnRpb25Ob2RlIiwiZ2V0Tm9kZSIsInNpZ25hdHVyZUFzc2VydGlvbk5vZGUiLCJhcHBseSIsInN0ZXAiLCJmYWN0T3JTdWJwcm9vZnMiLCJmb3J3YXJkIiwiYmFjayIsInNpZ25hdHVyZUFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiaXNvbGF0ZSIsInJlY29uY2lsZSIsImF4aW9tIiwiZmluZEF4aW9tQnlMaW5rIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwidW5pZnlTaWduYXR1cmVBc3NlcnRpb24iLCJkZWJ1ZyIsInZhbGlkYXRlIiwic3RhdGUiLCJhc3NlcnRpb24iLCJmaW5kQXNzZXJ0aW9uIiwidmFsaWRhdGVMaW5rIiwiYmluZCIsInZhbGlkYXRlVGVybXMiLCJhZGRBc3NlcnRpb24iLCJ2YWxpZGF0ZVRlcm0iLCJ0ZXJtIiwidGVybVN0cmluZyIsInB1c2giLCJ1bmlmeUNsYWltIiwiY2xhaW0iLCJjbGFpbVN0cmluZyIsInVuaWZ5VGVybXMiLCJ0ZXJtc1VuaWZ5IiwiY2xhaW1VbmlmaWVzIiwiY29udGludWF0aW9uIiwiY29tbWl0IiwibmFtZSIsImZyb21TdGVwIiwic3RhdGVtZW50Tm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzaWduYXR1cmVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVgyRDtrRUFFckM7MEJBRUM7eUJBQ1k7eUJBQ2lCOzs7Ozs7QUFFcEQsTUFBTSxFQUFFQSxXQUFXLEVBQUUsR0FBR0MsbUNBQW1CLEVBQ3JDLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxLQUFLLEVBQUUsR0FBR0MscUNBQXFCO01BRWpELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMkJBQTJCQyxrQkFBUztJQUM5RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsS0FBSyxDQUFFO1FBQzFELEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxLQUFLLEdBQUdBO0lBQ2Y7SUFFQUMsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDRCxLQUFLO0lBQ25CO0lBRUFFLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0gsSUFBSTtJQUNsQjtJQUVBSSw0QkFBNEI7UUFDMUIsTUFBTU4sT0FBTyxJQUFJLENBQUNPLE9BQU8sSUFDbkJDLHlCQUF5QlIsTUFBTyxHQUFHO1FBRXpDLE9BQU9RO0lBQ1Q7SUFFQUMsUUFBUXBCLFlBQVksU0FBVXFCLElBQUksRUFBRUMsZUFBZSxFQUFFYixPQUFPLEVBQUVjLE9BQU8sRUFBRUMsSUFBSTtRQUN6RUQsVUFBVXJCLElBQUlxQixTQUFTQyxPQUFPLEdBQUc7UUFFakMsTUFBTUMsMkJBQTJCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFdkRqQixRQUFRa0IsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFRix5QkFBeUIsd0JBQXdCLENBQUM7UUFFakYsT0FBT0csSUFBQUEsZ0JBQU8sRUFBQyxDQUFDUCxNQUFNQyxpQkFBaUJiLFNBQVNjLFNBQVNDO1lBQ3ZELE9BQU9LLElBQUFBLGtCQUFTLEVBQUMsQ0FBQ3BCO2dCQUNoQixNQUFNcUIsUUFBUXJCLFFBQVFzQixlQUFlLENBQUMsSUFBSSxDQUFDbEIsSUFBSSxHQUN6Q21CLHFCQUFxQixJQUFJLEVBQUcsR0FBRztnQkFFckMsT0FBT0YsTUFBTUcsdUJBQXVCLENBQUNELG9CQUFvQnZCLFNBQVMsQ0FBQ0EsU0FBU2U7b0JBQzFFTSxNQUFNVixLQUFLLENBQUNDLE1BQU1DLGlCQUFpQmIsU0FBUyxDQUFDQSxTQUFTZTt3QkFDcEQsT0FBT0QsUUFBUUM7b0JBQ2pCLEdBQUdBO2dCQUNMLEdBQUdBO1lBQ0wsR0FBR2Y7UUFDTCxHQUFHWSxNQUFNQyxpQkFBaUJiLFNBQVMsQ0FBQ1ksTUFBTUMsaUJBQWlCYixTQUFTZTtZQUNsRWYsUUFBUXlCLEtBQUssQ0FBQyxDQUFDLGFBQWEsRUFBRVQseUJBQXlCLHNCQUFzQixDQUFDO1lBRTlFLE9BQU9GLFFBQVFkLFNBQVNlO1FBQzFCLEdBQUdBO0lBQ0wsR0FBRztJQUVIVyxTQUFTQyxLQUFLLEVBQUUzQixPQUFPLEVBQUVjLE9BQU8sRUFBRUMsSUFBSSxFQUFFO1FBQ3RDLElBQUlhO1FBRUosTUFBTVosMkJBQTJCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFdkRqQixRQUFRa0IsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLHlCQUF5Qix3QkFBd0IsQ0FBQztRQUVuRlksWUFBWSxJQUFJLENBQUNDLGFBQWEsQ0FBQzdCO1FBRS9CLElBQUk0QixjQUFjLE1BQU07WUFDdEIsTUFBTUwscUJBQXFCSyxXQUFXLEdBQUc7WUFFekM1QixRQUFReUIsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFVCx5QkFBeUIseUNBQXlDLENBQUM7WUFFekYsT0FBT0YsUUFBUVMsb0JBQW9CdkIsU0FBU2U7UUFDOUM7UUFFQWEsWUFBWSxJQUFJLEVBQUUsR0FBRztRQUVyQixNQUFNRSxlQUFlLElBQUksQ0FBQ0EsWUFBWSxDQUFDQyxJQUFJLENBQUMsSUFBSSxHQUMxQ0MsZ0JBQWdCLElBQUksQ0FBQ0EsYUFBYSxDQUFDRCxJQUFJLENBQUMsSUFBSTtRQUVsRCxPQUFPckMsSUFBSTtZQUNUb0M7WUFDQUU7U0FDRCxFQUFFTCxPQUFPM0IsU0FBUyxDQUFDMkIsT0FBTzNCLFNBQVNlO1lBQ2xDZixRQUFRaUMsWUFBWSxDQUFDTDtZQUVyQixNQUFNTCxxQkFBcUJLLFdBQVcsR0FBRztZQUV6QzVCLFFBQVF5QixLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRVQseUJBQXlCLHNCQUFzQixDQUFDO1lBRW5GLE9BQU9GLFFBQVFTLG9CQUFvQnZCLFNBQVNlO1FBQzlDLEdBQUdBO0lBQ0w7SUFFQW1CLGFBQWFDLElBQUksRUFBRTlCLEtBQUssRUFBRXNCLEtBQUssRUFBRTNCLE9BQU8sRUFBRWMsT0FBTyxFQUFFQyxJQUFJLEVBQUU7UUFDdkQsTUFBTXFCLGFBQWFELEtBQUtsQixTQUFTLElBQzNCRCwyQkFBMkIsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUV2RGpCLFFBQVFrQixLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYseUJBQXlCLHlCQUF5QixFQUFFb0IsV0FBVyxTQUFTLENBQUM7UUFFMUcsT0FBT0QsS0FBS1QsUUFBUSxDQUFDQyxPQUFPM0IsU0FBUyxDQUFDbUMsTUFBTW5DLFNBQVNlO1lBQ25EVixNQUFNZ0MsSUFBSSxDQUFDRjtZQUVYbkMsUUFBUXlCLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFVCx5QkFBeUIseUJBQXlCLEVBQUVvQixXQUFXLE9BQU8sQ0FBQztZQUUxRyxPQUFPdEIsUUFBUVQsT0FBT3NCLE9BQU8zQixTQUFTZTtRQUN4QyxHQUFHQTtJQUNMO0lBRUFlLGFBQWFILEtBQUssRUFBRTNCLE9BQU8sRUFBRWMsT0FBTyxFQUFFQyxJQUFJLEVBQUU7UUFDMUMsTUFBTUMsMkJBQTJCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFdkRqQixRQUFRa0IsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLHlCQUF5QiwrQkFBK0IsQ0FBQztRQUUxRixPQUFPLElBQUksQ0FBQ1osSUFBSSxDQUFDc0IsUUFBUSxDQUFDQyxPQUFPM0IsU0FBUyxDQUFDSSxNQUFNSixTQUFTZTtZQUN4RCxJQUFJLENBQUNYLElBQUksR0FBR0E7WUFFWkosUUFBUXlCLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixFQUFFVCx5QkFBeUIsNkJBQTZCLENBQUM7WUFFMUYsT0FBT0YsUUFBUWEsT0FBTzNCLFNBQVNlO1FBQ2pDLEdBQUdBO0lBQ0w7SUFFQWlCLGNBQWNMLEtBQUssRUFBRTNCLE9BQU8sRUFBRWMsT0FBTyxFQUFFQyxJQUFJLEVBQUU7UUFDM0MsTUFBTUMsMkJBQTJCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFdkRqQixRQUFRa0IsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLHlCQUF5QixnQ0FBZ0MsQ0FBQztRQUUzRixNQUFNWCxRQUFRLEVBQUU7UUFFaEIsT0FBT1YsTUFBTSxJQUFJLENBQUNVLEtBQUssRUFBRSxDQUFDOEIsTUFBTTlCLE9BQU9zQixPQUFPM0IsU0FBU2MsU0FBU0M7WUFDOUQsT0FBTyxJQUFJLENBQUNtQixZQUFZLENBQUNDLE1BQU05QixPQUFPc0IsT0FBTzNCLFNBQVNjLFNBQVNDO1FBQ2pFLEdBQUdWLE9BQU9zQixPQUFPM0IsU0FBUyxDQUFDSyxPQUFPc0IsT0FBTzNCLFNBQVNlO1lBQ2hELElBQUksQ0FBQ1YsS0FBSyxHQUFHQTtZQUViTCxRQUFReUIsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVULHlCQUF5Qiw4QkFBOEIsQ0FBQztZQUUzRixPQUFPRixRQUFRYSxPQUFPM0IsU0FBU2U7UUFDakMsR0FBR0E7SUFDTDtJQUVBdUIsV0FBV0MsS0FBSyxFQUFFdkMsT0FBTyxFQUFFYyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUN4QyxNQUFNeUIsY0FBY0QsTUFBTXRCLFNBQVMsSUFDN0JELDJCQUEyQixJQUFJLENBQUNDLFNBQVM7UUFFL0NqQixRQUFRa0IsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFc0IsWUFBWSxrQkFBa0IsRUFBRXhCLHlCQUF5Qix3QkFBd0IsQ0FBQztRQUVqSCxPQUFPSSxJQUFBQSxrQkFBUyxFQUFDLENBQUNwQjtZQUNoQixNQUFNcUIsUUFBUXJCLFFBQVFzQixlQUFlLENBQUMsSUFBSSxDQUFDbEIsSUFBSTtZQUUvQyxPQUFPaUIsTUFBTW9CLFVBQVUsQ0FBQyxJQUFJLENBQUNwQyxLQUFLLEVBQUVMLFNBQVMsQ0FBQzBDO2dCQUM1QyxJQUFJLENBQUNBLFlBQVk7b0JBQ2YsTUFBTUMsZUFBZTtvQkFFckIsT0FBT0MsYUFBYUQ7Z0JBQ3RCO2dCQUVBLE9BQU90QixNQUFNaUIsVUFBVSxDQUFDQyxPQUFPdkMsU0FBUyxDQUFDMkM7b0JBQ3ZDLElBQUlBLGNBQWM7d0JBQ2hCM0MsUUFBUXlCLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFZSxZQUFZLGtCQUFrQixFQUFFeEIseUJBQXlCLHNCQUFzQixDQUFDO29CQUNuSDtvQkFFQSxJQUFJMkIsY0FBYzt3QkFDaEIzQyxRQUFRNkMsTUFBTTtvQkFDaEI7b0JBRUEsT0FBT0QsYUFBYUQ7Z0JBQ3RCO1lBQ0Y7UUFDRixHQUFHM0M7SUFDTDtJQUVBLE9BQU84QyxPQUFPLHFCQUFxQjtJQUVuQyxPQUFPQyxTQUFTbkMsSUFBSSxFQUFFWixPQUFPLEVBQUU7UUFDN0IsTUFBTWdELGdCQUFnQnBDLEtBQUtxQyxnQkFBZ0IsSUFDckMxQixxQkFBcUIyQixJQUFBQSw0Q0FBbUMsRUFBQ0YsZUFBZWhEO1FBRTlFLE9BQU91QjtJQUNUO0lBRUEsT0FBTzRCLGNBQWNDLFNBQVMsRUFBRXBELE9BQU8sRUFBRTtRQUN2QyxNQUFNZ0QsZ0JBQWdCSSxVQUFVM0MsT0FBTyxJQUNqQ2MscUJBQXFCMkIsSUFBQUEsNENBQW1DLEVBQUNGLGVBQWVoRDtRQUU5RSxPQUFPdUI7SUFDVDtBQUNGIn0=