occam-nominal 1.0.372 → 1.0.375

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.
@@ -15,13 +15,13 @@ const _default = (0, _elements.define)(class Error extends _occamlanguages.Eleme
15
15
  const node = this.getNode(), errorNode = node; ///
16
16
  return errorNode;
17
17
  }
18
- async verify(context) {
18
+ verify(context, continuation) {
19
19
  let verifies = false;
20
20
  const errorString = this.getString(); ///
21
21
  context.warning(`The '${errorString}' error cannot be verified.`);
22
- return verifies;
22
+ return continuation(verifies, context);
23
23
  }
24
24
  static name = "Error";
25
25
  });
26
26
 
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Vycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEVycm9yIGV4dGVuZHMgRWxlbWVudCB7XG4gIGdldEVycm9yTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZXJyb3JOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gZXJyb3JOb2RlO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5KGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVycm9yU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC53YXJuaW5nKGBUaGUgJyR7ZXJyb3JTdHJpbmd9JyBlcnJvciBjYW5ub3QgYmUgdmVyaWZpZWQuYCk7XG5cbiAgICByZXR1cm4gdmVyaWZpZXM7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRXJyb3JcIjtcbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIkVycm9yIiwiRWxlbWVudCIsImdldEVycm9yTm9kZSIsIm5vZGUiLCJnZXROb2RlIiwiZXJyb3JOb2RlIiwidmVyaWZ5IiwiY29udGV4dCIsInZlcmlmaWVzIiwiZXJyb3JTdHJpbmciLCJnZXRTdHJpbmciLCJ3YXJuaW5nIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBTUE7OztlQUFBOzs7Z0NBSndCOzBCQUVEO01BRXZCLFdBQWVBLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsY0FBY0MsdUJBQU87SUFDL0NDLGVBQWU7UUFDYixNQUFNQyxPQUFPLElBQUksQ0FBQ0MsT0FBTyxJQUNuQkMsWUFBWUYsTUFBTSxHQUFHO1FBRTNCLE9BQU9FO0lBQ1Q7SUFFQSxNQUFNQyxPQUFPQyxPQUFPLEVBQUU7UUFDcEIsSUFBSUMsV0FBVztRQUVmLE1BQU1DLGNBQWMsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUUxQ0gsUUFBUUksT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFRixZQUFZLDJCQUEyQixDQUFDO1FBRWhFLE9BQU9EO0lBQ1Q7SUFFQSxPQUFPSSxPQUFPLFFBQVE7QUFDeEIifQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2Vycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEVycm9yIGV4dGVuZHMgRWxlbWVudCB7XG4gIGdldEVycm9yTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgZXJyb3JOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gZXJyb3JOb2RlO1xuICB9XG5cbiAgdmVyaWZ5KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZXJyb3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0Lndhcm5pbmcoYFRoZSAnJHtlcnJvclN0cmluZ30nIGVycm9yIGNhbm5vdCBiZSB2ZXJpZmllZC5gKTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMsIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkVycm9yXCI7XG59KTtcbiJdLCJuYW1lcyI6WyJkZWZpbmUiLCJFcnJvciIsIkVsZW1lbnQiLCJnZXRFcnJvck5vZGUiLCJub2RlIiwiZ2V0Tm9kZSIsImVycm9yTm9kZSIsInZlcmlmeSIsImNvbnRleHQiLCJjb250aW51YXRpb24iLCJ2ZXJpZmllcyIsImVycm9yU3RyaW5nIiwiZ2V0U3RyaW5nIiwid2FybmluZyIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQU1BOzs7ZUFBQTs7O2dDQUp3QjswQkFFRDtNQUV2QixXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGNBQWNDLHVCQUFPO0lBQy9DQyxlQUFlO1FBQ2IsTUFBTUMsT0FBTyxJQUFJLENBQUNDLE9BQU8sSUFDbkJDLFlBQVlGLE1BQU0sR0FBRztRQUUzQixPQUFPRTtJQUNUO0lBRUFDLE9BQU9DLE9BQU8sRUFBRUMsWUFBWSxFQUFFO1FBQzVCLElBQUlDLFdBQVc7UUFFZixNQUFNQyxjQUFjLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFMUNKLFFBQVFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRUYsWUFBWSwyQkFBMkIsQ0FBQztRQUVoRSxPQUFPRixhQUFhQyxVQUFVRjtJQUNoQztJQUVBLE9BQU9NLE9BQU8sUUFBUTtBQUN4QiJ9
@@ -108,10 +108,10 @@ const _default = (0, _elements.define)(class Goal extends _occamlanguages.Elemen
108
108
  validates = continuation(goaln, context);
109
109
  } else {
110
110
  goaln = this;
111
- const validateStatement = this.validateStatement.bind(this), validateReference = this.validateReference.bind(this);
111
+ const validateReference = this.validateReference.bind(this), validateStatement = this.validateStatement.bind(this);
112
112
  validates = (0, _continuation.all)([
113
- validateStatement,
114
- validateReference
113
+ validateReference,
114
+ validateStatement
115
115
  ], context, (context)=>{
116
116
  let validates;
117
117
  const validateWhenStated = this.validateWhenStated.bind(this), validateWhenDerived = this.validateWhenDerived.bind(this);
@@ -178,12 +178,14 @@ const _default = (0, _elements.define)(class Goal extends _occamlanguages.Elemen
178
178
  context.trace(`Validating the '${goalString}' derived goal...`);
179
179
  const schemas = context.getSchemas();
180
180
  validatesWhenDerived = (0, _continuation.some)(schemas, (schema, context)=>{
181
- let passed;
181
+ let passed = false;
182
182
  const label = schema.getLabel();
183
183
  this.unifyLabel(label, context, (labelUnifies)=>{
184
184
  if (labelUnifies) {
185
185
  this.unifySchema(schema, context, (schemaUnifies)=>{
186
- passed = schemaUnifies; ///
186
+ if (schemaUnifies) {
187
+ passed = true;
188
+ }
187
189
  });
188
190
  }
189
191
  });
@@ -309,4 +311,4 @@ function subproofAssertionFromStatement(statement, context) {
309
311
  return subproofAssertion;
310
312
  }
311
313
 
312
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2dvYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUdvYWwgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgYWxsLCBzb21lLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBHb2FsIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldEdvYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBnb2FsTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBnb2FsTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLnJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhnb2FsKSB7XG4gICAgY29uc3QgZ29hbE5vZGUgPSBnb2FsLmdldE5vZGUoKSxcbiAgICAgICAgICBnb2FsTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoR29hbE5vZGUoZ29hbE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBnb2FsTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hHb2FsTm9kZShnb2FsTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBnb2FsTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBnb2FsTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gZ29hbE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRHb2FsKGNvbnRleHQpIHtcbiAgICBjb25zdCBnb2FsTm9kZSA9IHRoaXMuZ2V0R29hbE5vZGUoKSxcbiAgICAgICAgICBnb2FsID0gY29udGV4dC5maW5kR29hbEJ5R29hbE5vZGUoZ29hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGdvYWw7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3QgZ29hbG5TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtnb2FsblN0cmluZ30nIGdvYWwuLi5gKTtcblxuICAgIGxldCBnb2FsbjtcblxuICAgIGNvbnN0IGdvYWwgPSB0aGlzLmZpbmRHb2FsKGNvbnRleHQpO1xuXG4gICAgaWYgKGdvYWwgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtnb2FsblN0cmluZ30nIGdvYWwgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oZ29hbG4sIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnb2FsbiA9IHRoaXM7XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVSZWZlcmVuY2UgPSB0aGlzLnZhbGlkYXRlUmVmZXJlbmNlLmJpbmQodGhpcyk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGFsbChbXG4gICAgICAgIHZhbGlkYXRlU3RhdGVtZW50LFxuICAgICAgICB2YWxpZGF0ZVJlZmVyZW5jZVxuICAgICAgXSwgY29udGV4dCwgKGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZVdoZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gZXhpc3RzKFtcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5TdGF0ZWQsXG4gICAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZFxuICAgICAgICBdLCBjb250ZXh0LCAoY29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdvYWwgPSBnb2FsbjsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGRHb2FsKGdvYWwpO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihnb2FsbiwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2dvYWxuU3RyaW5nfScgZ29hbC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVSZWZlcmVuY2UoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHJlZmVyZW5jZVZhbGlkYXRlcztcblxuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbCdzIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdGhpcy5yZWZlcmVuY2UudmFsaWRhdGUoY29udGV4dCwgKHJlZmVyZW5jZSwgY29udGV4dCkgPT4ge1xuICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlJyR7Z29hbFN0cmluZ30nIGdvYWwncyByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQpID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGNvbnRleHQpO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZScke2dvYWxTdHJpbmd9JyBnb2FsJ3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIHN0YXRlZCBnb2FsLi4uYCk7XG5cbiAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBjb250aW51YXRpb24oY29udGV4dCk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Z29hbFN0cmluZ30nIHN0YXRlZCBnb2FsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuU3RhdGVkO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmICghc3RhdGVkKSB7XG4gICAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2dvYWxTdHJpbmd9JyBkZXJpdmVkIGdvYWwuLi5gKTtcblxuICAgICAgY29uc3Qgc2NoZW1hcyA9IGNvbnRleHQuZ2V0U2NoZW1hcygpO1xuXG4gICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHNvbWUoc2NoZW1hcywgKHNjaGVtYSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgcGFzc2VkO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCk7XG5cbiAgICAgICAgdGhpcy51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCAobGFiZWxVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgaWYgKGxhYmVsVW5pZmllcykge1xuICAgICAgICAgICAgdGhpcy51bmlmeVNjaGVtYShzY2hlbWEsIGNvbnRleHQsIChzY2hlbWFVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgICAgIHBhc3NlZCA9IHNjaGVtYVVuaWZpZXM7ICAvLy9cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhc3NlZDtcbiAgICAgIH0sIGNvbnRleHQsIChjb250ZXh0KSA9PiB0cnVlKTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gY29udGludWF0aW9uKGNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtnb2FsU3RyaW5nfScgZGVyaXZlZCBnb2FsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIHVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSBsYWJlbC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsLi4uYCk7XG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2UudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCwgKGxhYmVsVW5pZmllcykgPT4ge1xuICAgICAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbCdzIHJlZmVyZW5jZS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24obGFiZWxVbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTY2hlbWEoc2NoZW1hLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzY2hlbWFTdHJpbmcgPSBzY2hlbWEuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsLi4uYCk7XG5cbiAgICBjb25zdCBnZW5lcmFsQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gc2NoZW1hLmdldExhYmVsKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnJlZmVyZW5jZS51bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCAobGFiZWxVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICghbGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgc2NoZW1hQ29uZGl0aW9uYWwgPSBzY2hlbWEuaXNDb25kaXRpb25hbCgpLFxuICAgICAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCh0aGlzLnN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHNjaGVtYUNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uLnVuaWZ5U2NoZW1hKHNjaGVtYSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHNjaGVtYVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFVbmlmaWVzKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbC5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzY2hlbWFVbmlmaWVzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWR1Y3Rpb24gPSBzY2hlbWEuZ2V0RGVkdWN0aW9uKCk7XG5cbiAgICAgICAgdGhpcy51bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChkZWR1Y3Rpb25VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChkZWR1Y3Rpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICBzY2hlbWFVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2NoZW1hVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IGRlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgIHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3MgJyR7Z29hbFN0cmluZ30nIHN0YXRlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gZGVkdWN0aW9uLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIGRlZHVjdGlvbkNvbnRleHQgPSBkZWR1Y3Rpb24uZ2V0Q29udGV4dCgpOyAvLy9cblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGRlZHVjdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICBsZXQgZGVkdWN0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgZGVkdWN0aW9uVW5pZmllcyA9IHRydWU7XG5cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24ncyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyAnJHtnb2FsU3RyaW5nfScgc3RhdGVtZW50LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWR1Y3Rpb25VbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiR29hbFwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGdvYWxOb2RlID0gaW5zdGFudGlhdGVHb2FsKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gZ29hbE5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2VGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGdvYWwgPSBuZXcgR29hbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHJlZmVyZW5jZSwgc3RhdGVtZW50KTtcblxuICAgICAgcmV0dXJuIGdvYWw7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiByZWZlcmVuY2VGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZSA9IGdvYWxOb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoY29udGV4dCksXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICByZXR1cm4gcmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tR29hbE5vZGUoZ29hbE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IGdvYWxOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgbGV0IHN1YnByb29mQXNzZXJ0aW9uO1xuXG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uID0gU3VicHJvb2ZBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCk7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbn1cbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJHb2FsIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInJlZmVyZW5jZSIsInN0YXRlbWVudCIsImdldFJlZmVyZW5jZSIsImdldFN0YXRlbWVudCIsImdldEdvYWxOb2RlIiwiZ2V0Tm9kZSIsImdvYWxOb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsImdldE1ldGF2YXJpYWJsZSIsImlzRXF1YWxUbyIsImdvYWwiLCJnb2FsTm9kZU1hdGNoZXMiLCJtYXRjaEdvYWxOb2RlIiwiZXF1YWxUbyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImZpbmRHb2FsIiwiZmluZEdvYWxCeUdvYWxOb2RlIiwidmFsaWRhdGUiLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZXMiLCJnb2FsblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZ29hbG4iLCJkZWJ1ZyIsInZhbGlkYXRlU3RhdGVtZW50IiwiYmluZCIsInZhbGlkYXRlUmVmZXJlbmNlIiwiYWxsIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImV4aXN0cyIsImFkZEdvYWwiLCJyZWZlcmVuY2VWYWxpZGF0ZXMiLCJnb2FsU3RyaW5nIiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInN0YXRlZCIsImlzU3RhdGVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJzY2hlbWFzIiwiZ2V0U2NoZW1hcyIsInNvbWUiLCJzY2hlbWEiLCJwYXNzZWQiLCJsYWJlbCIsImdldExhYmVsIiwidW5pZnlMYWJlbCIsImxhYmVsVW5pZmllcyIsInVuaWZ5U2NoZW1hIiwic2NoZW1hVW5pZmllcyIsImxhYmVsU3RyaW5nIiwicmVjb25jaWxlIiwic2NoZW1hU3RyaW5nIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzY2hlbWFDb25kaXRpb25hbCIsImlzQ29uZGl0aW9uYWwiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJkZWR1Y3Rpb24iLCJnZXREZWR1Y3Rpb24iLCJ1bmlmeURlZHVjdGlvbiIsImRlZHVjdGlvblVuaWZpZXMiLCJkZWR1Y3Rpb25TdHJpbmciLCJkZWR1Y3Rpb25Db250ZXh0IiwiZ2V0Q29udGV4dCIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50VW5pZmllcyIsImNvbW1pdCIsInRvSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlR29hbCIsInJlZmVyZW5jZUZyb21Hb2FsTm9kZSIsInN0YXRlbWVudEZyb21Hb2FsTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJTdWJwcm9vZkFzc2VydGlvbiIsImVsZW1lbnRzIiwiZnJvbVN0YXRlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUFBOzs7Z0NBWDZDO2tFQUV4Qjs2QkFHVzs4QkFDRTt5QkFDSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXZDLE1BQU0sRUFBRUEsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGFBQWFDLHVCQUFPO0lBQzlDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxTQUFTLENBQUU7UUFDbkUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO0lBQ25CO0lBRUFDLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQ0YsU0FBUztJQUN2QjtJQUVBRyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFDdkI7SUFFQUcsY0FBYztRQUNaLE1BQU1OLE9BQU8sSUFBSSxDQUFDTyxPQUFPLElBQ25CQyxXQUFXUixNQUFPLEdBQUc7UUFFM0IsT0FBT1E7SUFDVDtJQUVBQyxtQkFBbUI7UUFBRSxPQUFPLElBQUksQ0FBQ04sU0FBUyxDQUFDTSxnQkFBZ0I7SUFBSTtJQUUvREMsa0JBQWtCO1FBQUUsT0FBTyxJQUFJLENBQUNSLFNBQVMsQ0FBQ1EsZUFBZTtJQUFJ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
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2dvYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUdvYWwgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgYWxsLCBzb21lLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgcmVjb25jaWxlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBHb2FsIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcmVmZXJlbmNlLCBzdGF0ZW1lbnQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldEdvYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBnb2FsTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBnb2FsTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7IHJldHVybiB0aGlzLnN0YXRlbWVudC5nZXRTdGF0ZW1lbnROb2RlKCk7IH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7IHJldHVybiB0aGlzLnJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGlzRXF1YWxUbyhnb2FsKSB7XG4gICAgY29uc3QgZ29hbE5vZGUgPSBnb2FsLmdldE5vZGUoKSxcbiAgICAgICAgICBnb2FsTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoR29hbE5vZGUoZ29hbE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBnb2FsTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hHb2FsTm9kZShnb2FsTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBnb2FsTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBnb2FsTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gZ29hbE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgZmluZFN1YnByb29mQXNzZXJ0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRHb2FsKGNvbnRleHQpIHtcbiAgICBjb25zdCBnb2FsTm9kZSA9IHRoaXMuZ2V0R29hbE5vZGUoKSxcbiAgICAgICAgICBnb2FsID0gY29udGV4dC5maW5kR29hbEJ5R29hbE5vZGUoZ29hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGdvYWw7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3QgZ29hbG5TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtnb2FsblN0cmluZ30nIGdvYWwuLi5gKTtcblxuICAgIGxldCBnb2FsbjtcblxuICAgIGNvbnN0IGdvYWwgPSB0aGlzLmZpbmRHb2FsKGNvbnRleHQpO1xuXG4gICAgaWYgKGdvYWwgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtnb2FsblN0cmluZ30nIGdvYWwgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oZ29hbG4sIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnb2FsbiA9IHRoaXM7XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlUmVmZXJlbmNlID0gdGhpcy52YWxpZGF0ZVJlZmVyZW5jZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnQgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50LmJpbmQodGhpcyk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGFsbChbXG4gICAgICAgIHZhbGlkYXRlUmVmZXJlbmNlLFxuICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudFxuICAgICAgXSwgY29udGV4dCwgKGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZVdoZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gZXhpc3RzKFtcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5TdGF0ZWQsXG4gICAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZFxuICAgICAgICBdLCBjb250ZXh0LCAoY29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdvYWwgPSBnb2FsbjsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGRHb2FsKGdvYWwpO1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihnb2FsbiwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2dvYWxuU3RyaW5nfScgZ29hbC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVSZWZlcmVuY2UoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHJlZmVyZW5jZVZhbGlkYXRlcztcblxuICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbCdzIHJlZmVyZW5jZS4uLmApO1xuXG4gICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdGhpcy5yZWZlcmVuY2UudmFsaWRhdGUoY29udGV4dCwgKHJlZmVyZW5jZSwgY29udGV4dCkgPT4ge1xuICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlJyR7Z29hbFN0cmluZ30nIGdvYWwncyByZWZlcmVuY2UuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQsIGNvbnRleHQpID0+IHtcbiAgICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGNvbnRleHQpO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZScke2dvYWxTdHJpbmd9JyBnb2FsJ3Mgc3RhdGVtZW50LmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IGdvYWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Z29hbFN0cmluZ30nIHN0YXRlZCBnb2FsLi4uYCk7XG5cbiAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBjb250aW51YXRpb24oY29udGV4dCk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Z29hbFN0cmluZ30nIHN0YXRlZCBnb2FsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuU3RhdGVkO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmICghc3RhdGVkKSB7XG4gICAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2dvYWxTdHJpbmd9JyBkZXJpdmVkIGdvYWwuLi5gKTtcblxuICAgICAgY29uc3Qgc2NoZW1hcyA9IGNvbnRleHQuZ2V0U2NoZW1hcygpO1xuXG4gICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHNvbWUoc2NoZW1hcywgKHNjaGVtYSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgcGFzc2VkID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGFiZWwgPSBzY2hlbWEuZ2V0TGFiZWwoKTtcblxuICAgICAgICB0aGlzLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIChsYWJlbFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBpZiAobGFiZWxVbmlmaWVzKSB7XG4gICAgICAgICAgICB0aGlzLnVuaWZ5U2NoZW1hKHNjaGVtYSwgY29udGV4dCwgKHNjaGVtYVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwYXNzZWQ7XG4gICAgICB9LCBjb250ZXh0LCAoY29udGV4dCkgPT4gdHJ1ZSk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGNvbnRpbnVhdGlvbihjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Z29hbFN0cmluZ30nIGRlcml2ZWQgZ29hbC5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gIH1cblxuICB1bmlmeUxhYmVsKGxhYmVsLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBnb2FsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgIGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbC4uLmApO1xuXG4gICAgcmV0dXJuIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlLnVuaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIChsYWJlbFVuaWZpZXMpID0+IHtcbiAgICAgICAgaWYgKGxhYmVsVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwgd2l0aCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwncyByZWZlcmVuY2UuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGxhYmVsVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U2NoZW1hKHNjaGVtYSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZ29hbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc2NoZW1hU3RyaW5nID0gc2NoZW1hLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbC4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbENvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHNjaGVtYS5nZXRMYWJlbCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2UudW5pZnlMYWJlbChsYWJlbCwgY29udGV4dCwgKGxhYmVsVW5pZmllcykgPT4ge1xuICAgICAgICBpZiAoIWxhYmVsVW5pZmllcykge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIHNjaGVtYUNvbmRpdGlvbmFsID0gc2NoZW1hLmlzQ29uZGl0aW9uYWwoKSxcbiAgICAgICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQodGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzY2hlbWFDb25kaXRpb25hbCkge1xuICAgICAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbi51bmlmeVNjaGVtYShzY2hlbWEsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzY2hlbWFVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hVW5pZmllcykge1xuICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEgd2l0aCB0aGUgJyR7Z29hbFN0cmluZ30nIGdvYWwuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc2NoZW1hVW5pZmllcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVkdWN0aW9uID0gc2NoZW1hLmdldERlZHVjdGlvbigpO1xuXG4gICAgICAgIHRoaXMudW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoZGVkdWN0aW9uVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzY2hlbWFVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgc2NoZW1hVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNjaGVtYVVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbC5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHNjaGVtYVVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ29hbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSBkZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50ICB3aXRoIHRoZSAnJHtnb2FsU3RyaW5nfScgZ29hbCdzICcke2dvYWxTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IGRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25Db250ZXh0ID0gZGVkdWN0aW9uLmdldENvbnRleHQoKTsgLy8vXG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBkZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgbGV0IGRlZHVjdGlvblVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgIGRlZHVjdGlvblVuaWZpZXMgPSB0cnVlO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWR1Y3Rpb25VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uJ3Mgc3RhdGVtZW50IHdpdGggdGhlICcke2dvYWxTdHJpbmd9JyBnb2FsJ3MgJyR7Z29hbFN0cmluZ30nIHN0YXRlbWVudC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVkdWN0aW9uVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICBzdHJpbmcsXG4gICAgICBicmVha1BvaW50XG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkdvYWxcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBnb2FsTm9kZSA9IGluc3RhbnRpYXRlR29hbChzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IGdvYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlRnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Hb2FsTm9kZShnb2FsTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBnb2FsID0gbmV3IEdvYWwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCByZWZlcmVuY2UsIHN0YXRlbWVudCk7XG5cbiAgICAgIHJldHVybiBnb2FsO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG59KTtcblxuZnVuY3Rpb24gcmVmZXJlbmNlRnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBnb2FsTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKGNvbnRleHQpLFxuICAgICAgICByZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgcmV0dXJuIHJlZmVyZW5jZTtcbn1cblxuZnVuY3Rpb24gc3RhdGVtZW50RnJvbUdvYWxOb2RlKGdvYWxOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBnb2FsTm9kZS5nZXRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gc3RhdGVtZW50O1xufVxuXG5mdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbjtcblxuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cztcblxuICBzdWJwcm9vZkFzc2VydGlvbiA9IFN1YnByb29mQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQpOyAgLy8vXG4gIH1cblxuICByZXR1cm4gc3VicHJvb2ZBc3NlcnRpb247XG59XG4iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiR29hbCIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJyZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJnZXRSZWZlcmVuY2UiLCJnZXRTdGF0ZW1lbnQiLCJnZXRHb2FsTm9kZSIsImdldE5vZGUiLCJnb2FsTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJnZXRNZXRhdmFyaWFibGUiLCJpc0VxdWFsVG8iLCJnb2FsIiwiZ29hbE5vZGVNYXRjaGVzIiwibWF0Y2hHb2FsTm9kZSIsImVxdWFsVG8iLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50Tm9kZSIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJmaW5kR29hbCIsImZpbmRHb2FsQnlHb2FsTm9kZSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwidmFsaWRhdGVzIiwiZ29hbG5TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImdvYWxuIiwiZGVidWciLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsImJpbmQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImFsbCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhZGRHb2FsIiwicmVmZXJlbmNlVmFsaWRhdGVzIiwiZ29hbFN0cmluZyIsInN0YXRlbWVudFZhbGlkYXRlcyIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJzdGF0ZWQiLCJpc1N0YXRlZCIsInZhbGlkYXRlc1doZW5EZXJpdmVkIiwic2NoZW1hcyIsImdldFNjaGVtYXMiLCJzb21lIiwic2NoZW1hIiwicGFzc2VkIiwibGFiZWwiLCJnZXRMYWJlbCIsInVuaWZ5TGFiZWwiLCJsYWJlbFVuaWZpZXMiLCJ1bmlmeVNjaGVtYSIsInNjaGVtYVVuaWZpZXMiLCJsYWJlbFN0cmluZyIsInJlY29uY2lsZSIsInNjaGVtYVN0cmluZyIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0Iiwic2NoZW1hQ29uZGl0aW9uYWwiLCJpc0NvbmRpdGlvbmFsIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwidW5pZnlEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25VbmlmaWVzIiwiZGVkdWN0aW9uU3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJjb21taXQiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUdvYWwiLCJyZWZlcmVuY2VGcm9tR29hbE5vZGUiLCJzdGF0ZW1lbnRGcm9tR29hbE5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJlbGVtZW50cyIsImZyb21TdGF0ZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVg2QztrRUFFeEI7NkJBR1c7OEJBQ0U7eUJBQ0s7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV2QyxNQUFNLEVBQUVBLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyx1QkFBTztJQUM5QyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxDQUFFO1FBQ25FLEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtJQUNuQjtJQUVBQyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFDdkI7SUFFQUcsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDRixTQUFTO0lBQ3ZCO0lBRUFHLGNBQWM7UUFDWixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsV0FBV1IsTUFBTyxHQUFHO1FBRTNCLE9BQU9RO0lBQ1Q7SUFFQUMsbUJBQW1CO1FBQUUsT0FBTyxJQUFJLENBQUNOLFNBQVMsQ0FBQ00sZ0JBQWdCO0lBQUk7SUFFL0RD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
@@ -155,13 +155,13 @@ const _default = (0, _elements.define)(class Judgement extends _occamlanguages.E
155
155
  let validates;
156
156
  const judgementnString = this.getString(); ///
157
157
  context.trace(`Validating the '${judgementnString}' judgement...`);
158
- let judgementn;
159
- const judgement = this.findJudgement(context);
158
+ let judgement;
159
+ judgement = this.findJudgement(context);
160
160
  if (judgement !== null) {
161
161
  context.debug(`The '${judgementnString}' judgement is already present.`);
162
- validates = continuation(judgementn, context);
162
+ validates = continuation(judgement, context);
163
163
  } else {
164
- judgementn = this;
164
+ judgement = this;
165
165
  const validateGoal = this.validateGoal.bind(this), validateFrame = this.validateFrame.bind(this);
166
166
  validates = (0, _continuation.all)([
167
167
  validateGoal,
@@ -174,7 +174,7 @@ const _default = (0, _elements.define)(class Judgement extends _occamlanguages.E
174
174
  validateWhenDerived
175
175
  ], context, (context)=>{
176
176
  context.addJudgement(judgement);
177
- return continuation(judgementn, context);
177
+ return continuation(judgement, context);
178
178
  });
179
179
  return validates;
180
180
  });
@@ -210,43 +210,43 @@ const _default = (0, _elements.define)(class Judgement extends _occamlanguages.E
210
210
  }
211
211
  return frameValidates;
212
212
  }
213
- _validateWhenStated(context, continuation) {
213
+ validateWhenStated(context, continuation) {
214
+ let validatesWhenStated = false;
214
215
  const stated = context.isStated();
215
- if (!stated) {
216
- const validatesWhenStated = false;
217
- return continuation(validatesWhenStated);
218
- }
219
- let validatesWhenStated;
220
- const judgementString = this.getString(); ///
221
- context.trace(`Validating the '${judgementString}' stated judgement...`);
222
- validatesWhenStated = true;
223
- if (validatesWhenStated) {
224
- context.debug(`...validated the '${judgementString}' stated judgement.`);
216
+ if (stated) {
217
+ const judgementString = this.getString(); ///
218
+ context.trace(`Validating the '${judgementString}' stated judgement...`);
219
+ validatesWhenStated = continuation(context);
220
+ if (validatesWhenStated) {
221
+ context.debug(`...validated the '${judgementString}' stated judgement.`);
222
+ }
225
223
  }
226
- return continuation(validatesWhenStated);
224
+ return validatesWhenStated;
227
225
  }
228
- _validateWhenDerived(context, continuation) {
226
+ validateWhenDerived(context, continuation) {
227
+ let validatesWhenDerived = false;
229
228
  const stated = context.isStated();
230
- if (stated) {
231
- const validatesWhenDerived = false;
232
- continuation(validatesWhenDerived);
233
- return;
234
- }
235
- const judgementString = this.getString(); ///
236
- context.trace(`Validating the '${judgementString}' derived judgement...`);
237
- const schemas = context.getSchemas(), judgement = this; ///
238
- return (0, _continuation.one)(schemas, (schema, continuation)=>{
239
- schema.unifyJudgement(judgement, context, continuation);
240
- }, (judgementUnifies)=>{
241
- let validatesWhenDerived = false;
242
- if (judgementUnifies) {
243
- validatesWhenDerived = true;
229
+ if (!stated) {
230
+ const judgementString = this.getString(); ///
231
+ context.trace(`Validating the '${judgementString}' derived judgement...`);
232
+ const schemas = context.getSchemas(), judgement = this; ///
233
+ validatesWhenDerived = (0, _continuation.one)(schemas, (schema, context)=>{
234
+ let passed = false;
235
+ schema.unifyJudgement(judgement, context, (judgementUnifies)=>{
236
+ if (judgementUnifies) {
237
+ passed = true;
238
+ }
239
+ });
240
+ return passed;
241
+ }, context, (context)=>true);
242
+ if (validatesWhenDerived) {
243
+ validatesWhenDerived = continuation(context);
244
244
  }
245
245
  if (validatesWhenDerived) {
246
246
  context.debug(`...validated the '${judgementString}' derived judgement.`);
247
247
  }
248
- return continuation(validatesWhenDerived);
249
- });
248
+ }
249
+ return validatesWhenDerived;
250
250
  }
251
251
  toJSON() {
252
252
  const string = this.getString();
@@ -298,4 +298,4 @@ function implicitAssumptionsFromFacts(facts, context) {
298
298
  return implicitAssumptions;
299
299
  }
300
300
 
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2p1ZGdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IG9uZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlLH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBhbGwsIGV4aXN0cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBlcXVhdGVTdGF0ZW1lbnRzIH0gZnJvbSBcIi4uL3Byb2Nlc3MvZXF1YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUp1ZGdlbWVudCB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IHB1c2ggfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSnVkZ2VtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZnJhbWUsIGdvYWwpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIHRoaXMuZ29hbCA9IGdvYWw7XG4gIH1cblxuICBnZXRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZTtcbiAgfVxuXG4gIGdldEFzc3VtcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ29hbDtcbiAgfVxuXG4gIGdldEp1ZGdlbWVudE5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGp1ZGdlbWVudE5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBqdWRnZW1lbnROb2RlO1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBqdWRnZW1lbnROb2RlID0gdGhpcy5nZXRKdWRnZW1lbnROb2RlKCksXG4gICAgICAgICAgc2luZ3VsYXIgPSBqdWRnZW1lbnROb2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzRXF1YWxUbyhqdWRnZW1lbnQpIHtcbiAgICBjb25zdCBqdWRnZW1lbnROb2RlID0ganVkZ2VtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBqdWRnZW1lbnROb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmZyYW1lLmlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUpOyB9XG5cbiAgaXNJbXBsaWNpdCgpIHsgcmV0dXJuIHRoaXMuZnJhbWUuaXNJbXBsaWNpdCgpOyB9XG5cbiAgZ2V0U3RhdGVtZW50KCkgeyByZXR1cm4gdGhpcy5nb2FsLmdldFN0YXRlbWVudCgpOyB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkgeyByZXR1cm4gdGhpcy5nb2FsLmdldFJlZmVyZW5jZSgpOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkgeyByZXR1cm4gdGhpcy5mcmFtZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldEFzc3VtcHRpb25zKGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IFtdLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlKCksXG4gICAgICAgICAgZnJhbWVBc3N1bXB0aW9ucyA9IHRoaXMuZnJhbWUuZ2V0QXNzdW1wdGlvbnMoKTtcblxuICAgIHB1c2goYXNzdW1wdGlvbnMsIGZyYW1lQXNzdW1wdGlvbnMpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZmFjdHMgPSBjb250ZXh0LmdldEZhY3RzKCksXG4gICAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25zID0gaW1wbGljaXRBc3N1bXB0aW9uc0Zyb21GYWN0cyhmYWN0cywgY29udGV4dCk7XG5cbiAgICAgIHB1c2goYXNzdW1wdGlvbnMsIGltcGxpY2l0QXNzdW1wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBhc3N1bXB0aW9ucztcbiAgfVxuXG4gIG1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGp1ZGdlbWVudE5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAganVkZ2VtZW50Tm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4ganVkZ2VtZW50Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkgeyByZXR1cm4gdGhpcy5mcmFtZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7IH1cblxuICBmaW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCkgeyByZXR1cm4gdGhpcy5nb2FsLmZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KTsgfVxuXG4gIGZpbmRKdWRnZW1lbnQoY29udGV4dCkge1xuICAgIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSB0aGlzLmdldEp1ZGdlbWVudE5vZGUoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBjb250ZXh0LmZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgY29tcGFyZVN0ZXAoc3RlcCwgY29udGV4dCkge1xuICAgIGxldCBjb21wYXJlc1RvU3RlcCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHRvIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICBjb21wYXJlc1RvU3RhdGVtZW50ID0gdGhpcy5jb21wYXJlU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoY29tcGFyZXNUb1N0YXRlbWVudCkge1xuICAgICAgY29tcGFyZXNUb1N0ZXAgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjb21wYXJlc1RvU3RlcCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uY29tcGFyZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHRvIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9TdGVwO1xuICB9XG5cbiAgY29tcGFyZVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBsZXQgY29tcGFyZXNUb1N0YXRlbWVudCA9IGZhbHNlO1xuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgY29uc3QgbGVmdFN0YXRlbWVudCA9IHN0YXRlbWVudDsgIC8vL1xuXG4gICAgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIGNvbnN0IHJpZ2h0U3RhdGVtZW50ID0gc3RhdGVtZW50LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50c0VxdWF0ZSA9IGVxdWF0ZVN0YXRlbWVudHMobGVmdFN0YXRlbWVudCwgcmlnaHRTdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudHNFcXVhdGUpIHtcbiAgICAgIGNvbXBhcmVzVG9TdGF0ZW1lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjb21wYXJlc1RvU3RhdGVtZW50KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5jb21wYXJlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9TdGF0ZW1lbnQ7XG4gIH1cblxuICBjb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmZyYW1lLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpOyB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IGp1ZGdlbWVudG5TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRuU3RyaW5nfScganVkZ2VtZW50Li4uYCk7XG5cbiAgICBsZXQganVkZ2VtZW50bjtcblxuICAgIGNvbnN0IGp1ZGdlbWVudCA9IHRoaXMuZmluZEp1ZGdlbWVudChjb250ZXh0KTtcblxuICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtqdWRnZW1lbnRuU3RyaW5nfScganVkZ2VtZW50IGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKGp1ZGdlbWVudG4sIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBqdWRnZW1lbnRuID0gdGhpcztcblxuICAgICAgY29uc3QgdmFsaWRhdGVHb2FsID0gdGhpcy52YWxpZGF0ZUdvYWwuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlRnJhbWUgPSB0aGlzLnZhbGlkYXRlRnJhbWUuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVHb2FsLFxuICAgICAgICB2YWxpZGF0ZUZyYW1lXG4gICAgICBdLCBjb250ZXh0LCAoY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgICB2YWxpZGF0ZXMgPSBleGlzdHMoW1xuICAgICAgICAgIHZhbGlkYXRlV2hlblN0YXRlZCxcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29udGV4dC5hZGRKdWRnZW1lbnQoanVkZ2VtZW50KTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oanVkZ2VtZW50biwgY29udGV4dCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudG5TdHJpbmd9JyBqdWRnZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlR29hbChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgZ29hbFZhbGlkYXRlcztcblxuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCdzIGdvYWwuLi5gKTtcblxuICAgIGdvYWxWYWxpZGF0ZXMgPSB0aGlzLmdvYWwudmFsaWRhdGUoY29udGV4dCwgKGdvYWwsIGNvbnRleHQpID0+IHtcbiAgICAgIHRoaXMuZ29hbCA9IGdvYWw7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBpZiAoZ29hbFZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZScke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCdzIGdvYWwuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdvYWxWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZUZyYW1lKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBmcmFtZVZhbGlkYXRlcztcblxuICAgIGNvbnN0IGp1ZGdlbWVudFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCdzIGZyYW1lLi4uYCk7XG5cbiAgICBmcmFtZVZhbGlkYXRlcyA9IHRoaXMuZnJhbWUudmFsaWRhdGUoY29udGV4dCwgKGZyYW1lLCBjb250ZXh0KSA9PiB7XG4gICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBpZiAoZnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQncyBmcmFtZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWVWYWxpZGF0ZXM7XG4gIH1cblxuICBfdmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmICghc3RhdGVkKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlblN0YXRlZCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBzdGF0ZWQganVkZ2VtZW50Li4uYCk7XG5cbiAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdHJ1ZTtcblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIHN0YXRlZCBqdWRnZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIF92YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBkZXJpdmVkIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgY29uc3Qgc2NoZW1hcyA9IGNvbnRleHQuZ2V0U2NoZW1hcygpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgcmV0dXJuIG9uZShzY2hlbWFzLCAoc2NoZW1hLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHNjaGVtYS51bmlmeUp1ZGdlbWVudChqdWRnZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKGp1ZGdlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoanVkZ2VtZW50VW5pZmllcykge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGRlcml2ZWQganVkZ2VtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZXJpdmVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJKdWRnZW1lbnRcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBqdWRnZW1lbnROb2RlID0gaW5zdGFudGlhdGVKdWRnZW1lbnQoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgZ29hbCA9IGdvYWxGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IGp1ZGdlbWVudCA9IG5ldyBKdWRnZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBmcmFtZSwgZ29hbCk7XG5cbiAgICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRmFjdChmYWN0LCBjb250ZXh0KSB7XG4gICAgbGV0IGp1ZGdlbWVudCA9IG51bGw7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZmFjdC5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdvYWxGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGdvYWxOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRHb2FsTm9kZSgpLFxuICAgICAgICBnb2FsID0gY29udGV4dC5maW5kR29hbEJ5R29sYU5vZGUoZ29hbE5vZGUpO1xuXG4gIHJldHVybiBnb2FsO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5mdW5jdGlvbiBpbXBsaWNpdEFzc3VtcHRpb25zRnJvbUZhY3RzKGZhY3RzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSW1wbGljaXRBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9ucyA9IGZhY3RzLm1hcCgoZmFjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGZhY3QuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gSW1wbGljaXRBc3N1bXB0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb247XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25zO1xufVxuXG4iXSwibmFtZXMiOlsicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiSnVkZ2VtZW50IiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImZyYW1lIiwiZ29hbCIsImdldEZyYW1lIiwiZ2V0QXNzdW1wdGlvbiIsImdldEp1ZGdlbWVudE5vZGUiLCJnZXROb2RlIiwianVkZ2VtZW50Tm9kZSIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsImlzRXF1YWxUbyIsImp1ZGdlbWVudCIsImp1ZGdlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hKdWRnZW1lbnROb2RlIiwiZXF1YWxUbyIsImlzTWV0YXZhcmlhYmxlRGVmaW5lZCIsIm1ldGF2YXJpYWJsZSIsImlzSW1wbGljaXQiLCJnZXRTdGF0ZW1lbnQiLCJnZXRSZWZlcmVuY2UiLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiZnJhbWVBc3N1bXB0aW9ucyIsImZhY3RzIiwiZ2V0RmFjdHMiLCJpbXBsaWNpdEFzc3VtcHRpb25zIiwiaW1wbGljaXRBc3N1bXB0aW9uc0Zyb21GYWN0cyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsImZpbmRKdWRnZW1lbnQiLCJmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlIiwiY29tcGFyZVN0ZXAiLCJzdGVwIiwiY29tcGFyZXNUb1N0ZXAiLCJzdGVwU3RyaW5nIiwiZ2V0U3RyaW5nIiwianVkZ2VtZW50U3RyaW5nIiwidHJhY2UiLCJzdGF0ZW1lbnQiLCJjb21wYXJlc1RvU3RhdGVtZW50IiwiY29tcGFyZVN0YXRlbWVudCIsImRlYnVnIiwic3RhdGVtZW50U3RyaW5nIiwibGVmdFN0YXRlbWVudCIsInJpZ2h0U3RhdGVtZW50Iiwic3RhdGVtZW50c0VxdWF0ZSIsImVxdWF0ZVN0YXRlbWVudHMiLCJjb21wYXJlTWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsInZhbGlkYXRlcyIsImp1ZGdlbWVudG5TdHJpbmciLCJqdWRnZW1lbnRuIiwidmFsaWRhdGVHb2FsIiwiYmluZCIsInZhbGlkYXRlRnJhbWUiLCJhbGwiLCJ2YWxpZGF0ZVdoZW5TdGF0ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwiYWRkSnVkZ2VtZW50IiwiZ29hbFZhbGlkYXRlcyIsImZyYW1lVmFsaWRhdGVzIiwiX3ZhbGlkYXRlV2hlblN0YXRlZCIsInN0YXRlZCIsImlzU3RhdGVkIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsIl92YWxpZGF0ZVdoZW5EZXJpdmVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJzY2hlbWFzIiwiZ2V0U2NoZW1hcyIsIm9uZSIsInNjaGVtYSIsInVuaWZ5SnVkZ2VtZW50IiwianVkZ2VtZW50VW5pZmllcyIsInRvSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlSnVkZ2VtZW50IiwiZnJhbWVGcm9tSnVkZ2VtZW50Tm9kZSIsImdvYWxGcm9tSnVkZ2VtZW50Tm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwianVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUiLCJmcm9tRmFjdCIsImZhY3QiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZ29hbE5vZGUiLCJnZXRHb2FsTm9kZSIsImZpbmRHb2FsQnlHb2xhTm9kZSIsImZyYW1lTm9kZSIsImdldEZyYW1lTm9kZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiSW1wbGljaXRBc3N1bXB0aW9uIiwiZWxlbWVudHMiLCJtYXAiLCJpbXBsaWNpdEFzc3VtcHRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWtCQTs7O2VBQUE7OzsyQkFoQitCO2dDQUNjO2tFQUV4Qjs4QkFFRDt5QkFFUTt3QkFFSzs2QkFDSTt5QkFDTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTNDLE1BQU0sRUFBRUEsSUFBSSxFQUFFLEdBQUdDLHlCQUFjLEVBQ3pCLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxrQkFBa0JDLHVCQUFPO0lBQ25ELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFB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
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2p1ZGdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IG9uZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlLH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBhbGwsIGV4aXN0cyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBlcXVhdGVTdGF0ZW1lbnRzIH0gZnJvbSBcIi4uL3Byb2Nlc3MvZXF1YXRlXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUp1ZGdlbWVudCB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyBqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IHB1c2ggfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgSnVkZ2VtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgZnJhbWUsIGdvYWwpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuICAgIHRoaXMuZ29hbCA9IGdvYWw7XG4gIH1cblxuICBnZXRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZTtcbiAgfVxuXG4gIGdldEFzc3VtcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ29hbDtcbiAgfVxuXG4gIGdldEp1ZGdlbWVudE5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGp1ZGdlbWVudE5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBqdWRnZW1lbnROb2RlO1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBqdWRnZW1lbnROb2RlID0gdGhpcy5nZXRKdWRnZW1lbnROb2RlKCksXG4gICAgICAgICAgc2luZ3VsYXIgPSBqdWRnZW1lbnROb2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzRXF1YWxUbyhqdWRnZW1lbnQpIHtcbiAgICBjb25zdCBqdWRnZW1lbnROb2RlID0ganVkZ2VtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBqdWRnZW1lbnROb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hKdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBqdWRnZW1lbnROb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlKSB7IHJldHVybiB0aGlzLmZyYW1lLmlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUpOyB9XG5cbiAgaXNJbXBsaWNpdCgpIHsgcmV0dXJuIHRoaXMuZnJhbWUuaXNJbXBsaWNpdCgpOyB9XG5cbiAgZ2V0U3RhdGVtZW50KCkgeyByZXR1cm4gdGhpcy5nb2FsLmdldFN0YXRlbWVudCgpOyB9XG5cbiAgZ2V0UmVmZXJlbmNlKCkgeyByZXR1cm4gdGhpcy5nb2FsLmdldFJlZmVyZW5jZSgpOyB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlKCkgeyByZXR1cm4gdGhpcy5mcmFtZS5nZXRNZXRhdmFyaWFibGUoKTsgfVxuXG4gIGdldEFzc3VtcHRpb25zKGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9ucyA9IFtdLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IHRoaXMuZ2V0TWV0YXZhcmlhYmxlKCksXG4gICAgICAgICAgZnJhbWVBc3N1bXB0aW9ucyA9IHRoaXMuZnJhbWUuZ2V0QXNzdW1wdGlvbnMoKTtcblxuICAgIHB1c2goYXNzdW1wdGlvbnMsIGZyYW1lQXNzdW1wdGlvbnMpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZmFjdHMgPSBjb250ZXh0LmdldEZhY3RzKCksXG4gICAgICAgICAgICBpbXBsaWNpdEFzc3VtcHRpb25zID0gaW1wbGljaXRBc3N1bXB0aW9uc0Zyb21GYWN0cyhmYWN0cywgY29udGV4dCk7XG5cbiAgICAgIHB1c2goYXNzdW1wdGlvbnMsIGltcGxpY2l0QXNzdW1wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBhc3N1bXB0aW9ucztcbiAgfVxuXG4gIG1hdGNoSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGp1ZGdlbWVudE5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAganVkZ2VtZW50Tm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4ganVkZ2VtZW50Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkgeyByZXR1cm4gdGhpcy5mcmFtZS5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7IH1cblxuICBmaW5kU3VicHJvb2ZBc3NlcnRpb24oY29udGV4dCkgeyByZXR1cm4gdGhpcy5nb2FsLmZpbmRTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0KTsgfVxuXG4gIGZpbmRKdWRnZW1lbnQoY29udGV4dCkge1xuICAgIGNvbnN0IGp1ZGdlbWVudE5vZGUgPSB0aGlzLmdldEp1ZGdlbWVudE5vZGUoKSxcbiAgICAgICAgICBqdWRnZW1lbnQgPSBjb250ZXh0LmZpbmRKdWRnZW1lbnRCeUp1ZGdlbWVudE5vZGUoanVkZ2VtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50O1xuICB9XG5cbiAgY29tcGFyZVN0ZXAoc3RlcCwgY29udGV4dCkge1xuICAgIGxldCBjb21wYXJlc1RvU3RlcCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHN0ZXAuZ2V0U3RyaW5nKCksXG4gICAgICBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHRvIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHN0ZXAuZ2V0U3RhdGVtZW50KCksXG4gICAgICBjb21wYXJlc1RvU3RhdGVtZW50ID0gdGhpcy5jb21wYXJlU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoY29tcGFyZXNUb1N0YXRlbWVudCkge1xuICAgICAgY29tcGFyZXNUb1N0ZXAgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjb21wYXJlc1RvU3RlcCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4uY29tcGFyZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHRvIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9TdGVwO1xuICB9XG5cbiAgY29tcGFyZVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBsZXQgY29tcGFyZXNUb1N0YXRlbWVudCA9IGZhbHNlO1xuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQ29tcGFyaW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgdG8gdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudC4uLmApO1xuXG4gICAgY29uc3QgbGVmdFN0YXRlbWVudCA9IHN0YXRlbWVudDsgIC8vL1xuXG4gICAgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIGNvbnN0IHJpZ2h0U3RhdGVtZW50ID0gc3RhdGVtZW50LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50c0VxdWF0ZSA9IGVxdWF0ZVN0YXRlbWVudHMobGVmdFN0YXRlbWVudCwgcmlnaHRTdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudHNFcXVhdGUpIHtcbiAgICAgIGNvbXBhcmVzVG9TdGF0ZW1lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjb21wYXJlc1RvU3RhdGVtZW50KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5jb21wYXJlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHRvIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9TdGF0ZW1lbnQ7XG4gIH1cblxuICBjb21wYXJlTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLmZyYW1lLmNvbXBhcmVNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpOyB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IGp1ZGdlbWVudG5TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtqdWRnZW1lbnRuU3RyaW5nfScganVkZ2VtZW50Li4uYCk7XG5cbiAgICBsZXQganVkZ2VtZW50O1xuXG4gICAganVkZ2VtZW50ID0gdGhpcy5maW5kSnVkZ2VtZW50KGNvbnRleHQpO1xuXG4gICAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2p1ZGdlbWVudG5TdHJpbmd9JyBqdWRnZW1lbnQgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBjb250aW51YXRpb24oanVkZ2VtZW50LCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAganVkZ2VtZW50ID0gdGhpcztcblxuICAgICAgY29uc3QgdmFsaWRhdGVHb2FsID0gdGhpcy52YWxpZGF0ZUdvYWwuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlRnJhbWUgPSB0aGlzLnZhbGlkYXRlRnJhbWUuYmluZCh0aGlzKTtcblxuICAgICAgdmFsaWRhdGVzID0gYWxsKFtcbiAgICAgICAgdmFsaWRhdGVHb2FsLFxuICAgICAgICB2YWxpZGF0ZUZyYW1lXG4gICAgICBdLCBjb250ZXh0LCAoY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlV2hlblN0YXRlZCA9IHRoaXMudmFsaWRhdGVXaGVuU3RhdGVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgICB2YWxpZGF0ZXMgPSBleGlzdHMoW1xuICAgICAgICAgIHZhbGlkYXRlV2hlblN0YXRlZCxcbiAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkXG4gICAgICAgIF0sIGNvbnRleHQsIChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29udGV4dC5hZGRKdWRnZW1lbnQoanVkZ2VtZW50KTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oanVkZ2VtZW50LCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7anVkZ2VtZW50blN0cmluZ30nIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVHb2FsKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBnb2FsVmFsaWRhdGVzO1xuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50J3MgZ29hbC4uLmApO1xuXG4gICAgZ29hbFZhbGlkYXRlcyA9IHRoaXMuZ29hbC52YWxpZGF0ZShjb250ZXh0LCAoZ29hbCwgY29udGV4dCkgPT4ge1xuICAgICAgdGhpcy5nb2FsID0gZ29hbDtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb250ZXh0KTtcbiAgICB9KTtcblxuICAgIGlmIChnb2FsVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50J3MgZ29hbC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ29hbFZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlRnJhbWUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IGZyYW1lVmFsaWRhdGVzO1xuXG4gICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50J3MgZnJhbWUuLi5gKTtcblxuICAgIGZyYW1lVmFsaWRhdGVzID0gdGhpcy5mcmFtZS52YWxpZGF0ZShjb250ZXh0LCAoZnJhbWUsIGNvbnRleHQpID0+IHtcbiAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb250ZXh0KTtcbiAgICB9KTtcblxuICAgIGlmIChmcmFtZVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZScke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCdzIGZyYW1lLmApO1xuICAgIH1cblxuICAgIHJldHVybiBmcmFtZVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0YXRlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QganVkZ2VtZW50U3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIHN0YXRlZCBqdWRnZW1lbnQuLi5gKTtcblxuICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGNvbnRpbnVhdGlvbihjb250ZXh0KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBzdGF0ZWQganVkZ2VtZW50LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuU3RhdGVkO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmICghc3RhdGVkKSB7XG4gICAgICBjb25zdCBqdWRnZW1lbnRTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScgZGVyaXZlZCBqdWRnZW1lbnQuLi5gKTtcblxuICAgICAgY29uc3Qgc2NoZW1hcyA9IGNvbnRleHQuZ2V0U2NoZW1hcygpLFxuICAgICAgICAgICAganVkZ2VtZW50ID0gdGhpczsgLy8vXG5cbiAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gb25lKHNjaGVtYXMsIChzY2hlbWEsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHBhc3NlZCA9IGZhbHNlO1xuXG4gICAgICAgIHNjaGVtYS51bmlmeUp1ZGdlbWVudChqdWRnZW1lbnQsIGNvbnRleHQsIChqdWRnZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgaWYgKGp1ZGdlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHBhc3NlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcGFzc2VkO1xuICAgICAgfSwgY29udGV4dCwgKGNvbnRleHQpID0+IHRydWUpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBjb250aW51YXRpb24oY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGRlcml2ZWQganVkZ2VtZW50LmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJKdWRnZW1lbnRcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBqdWRnZW1lbnROb2RlID0gaW5zdGFudGlhdGVKdWRnZW1lbnQoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBqdWRnZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgZ29hbCA9IGdvYWxGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IGp1ZGdlbWVudCA9IG5ldyBKdWRnZW1lbnQoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBmcmFtZSwgZ29hbCk7XG5cbiAgICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgIGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRmFjdChmYWN0LCBjb250ZXh0KSB7XG4gICAgbGV0IGp1ZGdlbWVudCA9IG51bGw7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gZmFjdC5nZXRTdGF0ZW1lbnROb2RlKCk7XG5cbiAgICBpZiAoc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgICAganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGp1ZGdlbWVudDtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdvYWxGcm9tSnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGdvYWxOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRHb2FsTm9kZSgpLFxuICAgICAgICBnb2FsID0gY29udGV4dC5maW5kR29hbEJ5R29sYU5vZGUoZ29hbE5vZGUpO1xuXG4gIHJldHVybiBnb2FsO1xufVxuXG5mdW5jdGlvbiBmcmFtZUZyb21KdWRnZW1lbnROb2RlKGp1ZGdlbWVudE5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVOb2RlID0ganVkZ2VtZW50Tm9kZS5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5mdW5jdGlvbiBpbXBsaWNpdEFzc3VtcHRpb25zRnJvbUZhY3RzKGZhY3RzLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgSW1wbGljaXRBc3N1bXB0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9ucyA9IGZhY3RzLm1hcCgoZmFjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGZhY3QuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICAgICAgaW1wbGljaXRBc3N1bXB0aW9uID0gSW1wbGljaXRBc3N1bXB0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb247XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBpbXBsaWNpdEFzc3VtcHRpb25zO1xufVxuXG4iXSwibmFtZXMiOlsicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiSnVkZ2VtZW50IiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImZyYW1lIiwiZ29hbCIsImdldEZyYW1lIiwiZ2V0QXNzdW1wdGlvbiIsImdldEp1ZGdlbWVudE5vZGUiLCJnZXROb2RlIiwianVkZ2VtZW50Tm9kZSIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsImlzRXF1YWxUbyIsImp1ZGdlbWVudCIsImp1ZGdlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hKdWRnZW1lbnROb2RlIiwiZXF1YWxUbyIsImlzTWV0YXZhcmlhYmxlRGVmaW5lZCIsIm1ldGF2YXJpYWJsZSIsImlzSW1wbGljaXQiLCJnZXRTdGF0ZW1lbnQiLCJnZXRSZWZlcmVuY2UiLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRBc3N1bXB0aW9ucyIsImFzc3VtcHRpb25zIiwiZnJhbWVBc3N1bXB0aW9ucyIsImZhY3RzIiwiZ2V0RmFjdHMiLCJpbXBsaWNpdEFzc3VtcHRpb25zIiwiaW1wbGljaXRBc3N1bXB0aW9uc0Zyb21GYWN0cyIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImZpbmRTdWJwcm9vZkFzc2VydGlvbiIsImZpbmRKdWRnZW1lbnQiLCJmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlIiwiY29tcGFyZVN0ZXAiLCJzdGVwIiwiY29tcGFyZXNUb1N0ZXAiLCJzdGVwU3RyaW5nIiwiZ2V0U3RyaW5nIiwianVkZ2VtZW50U3RyaW5nIiwidHJhY2UiLCJzdGF0ZW1lbnQiLCJjb21wYXJlc1RvU3RhdGVtZW50IiwiY29tcGFyZVN0YXRlbWVudCIsImRlYnVnIiwic3RhdGVtZW50U3RyaW5nIiwibGVmdFN0YXRlbWVudCIsInJpZ2h0U3RhdGVtZW50Iiwic3RhdGVtZW50c0VxdWF0ZSIsImVxdWF0ZVN0YXRlbWVudHMiLCJjb21wYXJlTWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsInZhbGlkYXRlcyIsImp1ZGdlbWVudG5TdHJpbmciLCJ2YWxpZGF0ZUdvYWwiLCJiaW5kIiwidmFsaWRhdGVGcmFtZSIsImFsbCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJhZGRKdWRnZW1lbnQiLCJnb2FsVmFsaWRhdGVzIiwiZnJhbWVWYWxpZGF0ZXMiLCJ2YWxpZGF0ZXNXaGVuU3RhdGVkIiwic3RhdGVkIiwiaXNTdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInNjaGVtYXMiLCJnZXRTY2hlbWFzIiwib25lIiwic2NoZW1hIiwicGFzc2VkIiwidW5pZnlKdWRnZW1lbnQiLCJqdWRnZW1lbnRVbmlmaWVzIiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVKdWRnZW1lbnQiLCJmcmFtZUZyb21KdWRnZW1lbnROb2RlIiwiZ29hbEZyb21KdWRnZW1lbnROb2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsImZyb21GYWN0IiwiZmFjdCIsImdldFN0YXRlbWVudE5vZGUiLCJnb2FsTm9kZSIsImdldEdvYWxOb2RlIiwiZmluZEdvYWxCeUdvbGFOb2RlIiwiZnJhbWVOb2RlIiwiZ2V0RnJhbWVOb2RlIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJJbXBsaWNpdEFzc3VtcHRpb24iLCJlbGVtZW50cyIsIm1hcCIsImltcGxpY2l0QXNzdW1wdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBa0JBOzs7ZUFBQTs7OzJCQWhCK0I7Z0NBQ2M7a0VBRXhCOzhCQUVEO3lCQUVRO3dCQUVLOzZCQUNJO3lCQUNNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFM0MsTUFBTSxFQUFFQSxJQUFJLEVBQUUsR0FBR0MseUJBQWMsRUFDekIsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGtCQUFrQkMsdUJBQU87SUFDbkQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxLQUFLLEVBQUVDLElBQUksQ0FBRTtRQUMxRCxLQUFLLENBQUNMLFNBQVNDLFFBQVFDLE1BQU1DO1FB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
@@ -62,15 +62,23 @@ const _default = (0, _elements.define)(class Label extends _occamlanguages.Eleme
62
62
  return continuation(verifies);
63
63
  }
64
64
  validate(context, continuation) {
65
- let validates;
65
+ let validates = false;
66
66
  const labelString = this.getString(); ///
67
67
  context.trace(`Validating the '${labelString}' label...`);
68
+ const specificContext = context; ///
69
+ context = this.getContext();
68
70
  (0, _context.attempt)((context)=>{
69
- validates = this.validateMetavariable(context, (context)=>{
71
+ const metavariableValidates = this.validateMetavariable(context, (context)=>{
72
+ let validates;
70
73
  const label = this; ///
71
74
  this.commit(context);
72
- return continuation(label, context);
75
+ context = specificContext; ///
76
+ validates = continuation(label, context);
77
+ return validates;
73
78
  });
79
+ if (metavariableValidates) {
80
+ validates = true;
81
+ }
74
82
  }, context);
75
83
  if (validates) {
76
84
  context.debug(`...validated the '${labelString}' label.`);
@@ -157,4 +165,4 @@ const _default = (0, _elements.define)(class Label extends _occamlanguages.Eleme
157
165
  }
158
166
  });
159
167
 
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2xhYmVsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlTGFiZWwgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgbGFiZWxGcm9tTGFiZWxOb2RlLCBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBhdHRlbXB0LCByZWNvbmNpbGUsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgTGFiZWwgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TGFiZWxOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBsYWJlbE5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBsYWJlbE5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0Tm9kZSgpOyB9XG5cbiAgbWF0Y2hMYWJlbE5vZGUobGFiZWxOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGxhYmVsTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBsYWJlbE5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGxhYmVsTm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpOyB9XG5cbiAgY29tcGFyZVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZSA9IHRoaXMuY29tcGFyZU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpLFxuICAgICAgICAgIGNvbXBhcmVzVG9SZWZlcmVuY2UgPSBtZXRhdmFyaWFibGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlOyAvLy9cblxuICAgIHJldHVybiBjb21wYXJlc1RvUmVmZXJlbmNlO1xuICB9XG5cbiAgY29tcGFyZU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLmNvbXBhcmVNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTsgfVxuXG4gIHZlcmlmeShjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBsYWJlbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLi4uYCk7XG5cbiAgICBjb25zdCBsYWJlbE5vZGUgPSB0aGlzLmdldExhYmVsTm9kZSgpLFxuICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGNvbnRleHQuaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZShsYWJlbE5vZGUpO1xuXG4gICAgaWYgKCFsYWJlbFByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGUoY29udGV4dCwgKGxhYmVsLCBjb250ZXh0KSA9PiB0cnVlKTtcblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMpO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLi4uYCk7XG5cbiAgICBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICB2YWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlTWV0YXZhcmlhYmxlKGNvbnRleHQsIChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpczsgLy8vXG5cbiAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYWJlbCwgY29udGV4dCk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVNZXRhdmFyaWFibGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZVZhbGlkYXRlcztcblxuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsJ3MgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSB0aGlzLm1ldGF2YXJpYWJsZS52YWxpZGF0ZShjb250ZXh0LCAobWV0YXZhcmlhYmxlLCBjb250ZXh0KSA9PiB7XG4gICAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb250ZXh0KTtcbiAgICB9KTtcblxuICAgIGlmIChtZXRhdmFyaWFibGVWYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCdzIG1ldGF2YXJpYWJsZS4nYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVZhbGlkYXRlcztcbiAgfVxuXG4gIHVuaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgbGFiZWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlIHdpdGggdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIGNvbnN0IGxhYmVsQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICByZWZlcmVuY2VDb250ZXh0ID0gcmVmZXJlbmNlLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGxhYmVsQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gcmVmZXJlbmNlQ29udGV4dDsgIC8vL1xuXG4gICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKG1ldGF2YXJpYWJsZVVuaWZpZXMpID0+IHtcbiAgICAgICAgbGV0IHJlZmVyZW5jZVVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlVW5pZmllcykge1xuICAgICAgICAgIHJlZmVyZW5jZVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZVVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2Ugd2l0aCB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24ocmVmZXJlbmNlVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgbGFiZWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLm1ldGF2YXJpYWJsZS51bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkobWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAobWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkpID0+IHtcbiAgICAgIGxldCBtZXRhdmFyaWFibGVVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseSkge1xuICAgICAgICBtZXRhdmFyaWFibGVVbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7bWV0YXZhcmlhYmxlU3RyaW5nfScgbWV0YXZhcmlhYmxlIHdpdGggdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24obWV0YXZhcmlhYmxlVW5pZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiTGFiZWxcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBsYWJlbE5vZGUgPSBpbnN0YW50aWF0ZUxhYmVsKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBsYWJlbE5vZGUsIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGxhYmVsID0gbmV3IExhYmVsKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbWV0YXZhcmlhYmxlKTtcblxuICAgICAgICByZXR1cm4gbGFiZWw7XG4gICAgICB9LCBqc29uLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTGFiZWxTdHJpbmcobGFiZWxTdHJpbmcsIGNvbnRleHQpIHtcbiAgICBsZXQgbGFiZWw7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gbGFiZWxTdHJpbmcsICAvLy9cbiAgICAgICAgICAgIGxhYmVsTm9kZSA9IGluc3RhbnRpYXRlTGFiZWwoc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgbGFiZWwgPSBsYWJlbEZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBjb250ZXh0KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBsYWJlbDtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiTGFiZWwiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwibWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0TGFiZWxOb2RlIiwiZ2V0Tm9kZSIsImxhYmVsTm9kZSIsImdldE1ldGF2YXJpYWJsZU5vZGUiLCJtYXRjaExhYmVsTm9kZSIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwibGFiZWxOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJjb21wYXJlUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwibWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZSIsImNvbXBhcmVNZXRhdmFyaWFibGUiLCJjb21wYXJlc1RvUmVmZXJlbmNlIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwidmVyaWZpZXMiLCJnZXRDb250ZXh0IiwibGFiZWxTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImxhYmVsUHJlc2VudCIsImlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUiLCJ2YWxpZGF0ZXMiLCJ2YWxpZGF0ZSIsImxhYmVsIiwiZGVidWciLCJhdHRlbXB0IiwidmFsaWRhdGVNZXRhdmFyaWFibGUiLCJjb21taXQiLCJtZXRhdmFyaWFibGVWYWxpZGF0ZXMiLCJ1bmlmeVJlZmVyZW5jZSIsInJlZmVyZW5jZVN0cmluZyIsImxhYmVsQ29udGV4dCIsInJlZmVyZW5jZUNvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInJlY29uY2lsZSIsInVuaWZ5TWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlVW5pZmllcyIsInJlZmVyZW5jZVVuaWZpZXMiLCJtZXRhdmFyaWFibGVTdHJpbmciLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkiLCJtZXRhdmFyaWFibGVVbmlmaWVzSW50cmluc2ljYWxseSIsInRvSlNPTiIsInNlcmlhbGlzZSIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVMYWJlbCIsIm1ldGF2YXJpYWJsZUZyb21MYWJlbE5vZGUiLCJmcm9tTGFiZWxTdHJpbmciLCJsYWJlbEZyb21MYWJlbE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBQTs7O2dDQVQ2QzswQkFFdEI7NkJBQ1U7eUJBQzZCO3lCQUNTO0FBRXZFLE1BQU0sRUFBRUEsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGNBQWNDLHVCQUFPO0lBQy9DLFlBQVlDLE9B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
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2xhYmVsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlTGFiZWwgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgbGFiZWxGcm9tTGFiZWxOb2RlLCBtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBhdHRlbXB0LCByZWNvbmNpbGUsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgTGFiZWwgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0TGFiZWxOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBsYWJlbE5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBsYWJlbE5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUuZ2V0Tm9kZSgpOyB9XG5cbiAgbWF0Y2hMYWJlbE5vZGUobGFiZWxOb2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IGxhYmVsTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBsYWJlbE5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIGxhYmVsTm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpOyB9XG5cbiAgY29tcGFyZVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlQ29tcGFyZXNUb01ldGF2YXJpYWJsZSA9IHRoaXMuY29tcGFyZU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpLFxuICAgICAgICAgIGNvbXBhcmVzVG9SZWZlcmVuY2UgPSBtZXRhdmFyaWFibGVDb21wYXJlc1RvTWV0YXZhcmlhYmxlOyAvLy9cblxuICAgIHJldHVybiBjb21wYXJlc1RvUmVmZXJlbmNlO1xuICB9XG5cbiAgY29tcGFyZU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUpIHsgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlLmNvbXBhcmVNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTsgfVxuXG4gIHZlcmlmeShjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBsYWJlbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLi4uYCk7XG5cbiAgICBjb25zdCBsYWJlbE5vZGUgPSB0aGlzLmdldExhYmVsTm9kZSgpLFxuICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGNvbnRleHQuaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZShsYWJlbE5vZGUpO1xuXG4gICAgaWYgKCFsYWJlbFByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGUoY29udGV4dCwgKGxhYmVsLCBjb250ZXh0KSA9PiB0cnVlKTtcblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMpO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGFiZWxTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlVmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZU1ldGF2YXJpYWJsZShjb250ZXh0LCAoY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpczsgLy8vXG5cbiAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihsYWJlbCwgY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlVmFsaWRhdGVzKSB7XG4gICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlTWV0YXZhcmlhYmxlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCBtZXRhdmFyaWFibGVWYWxpZGF0ZXM7XG5cbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bGFiZWxTdHJpbmd9JyBsYWJlbCdzIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgbWV0YXZhcmlhYmxlVmFsaWRhdGVzID0gdGhpcy5tZXRhdmFyaWFibGUudmFsaWRhdGUoY29udGV4dCwgKG1ldGF2YXJpYWJsZSwgY29udGV4dCkgPT4ge1xuICAgICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29udGV4dCk7XG4gICAgfSk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwncyBtZXRhdmFyaWFibGUuJ2ApO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVWYWxpZGF0ZXM7XG4gIH1cblxuICB1bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB3aXRoIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLi4uYCk7XG5cbiAgICBjb25zdCBsYWJlbENvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlQ29udGV4dCA9IHJlZmVyZW5jZS5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBsYWJlbENvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHJlZmVyZW5jZUNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZSgpO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeU1ldGF2YXJpYWJsZShtZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChtZXRhdmFyaWFibGVVbmlmaWVzKSA9PiB7XG4gICAgICAgIGxldCByZWZlcmVuY2VVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZVVuaWZpZXMpIHtcbiAgICAgICAgICByZWZlcmVuY2VVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZWZlcmVuY2VVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlIHdpdGggdGhlICcke2xhYmVsU3RyaW5nfScgbGFiZWwuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHJlZmVyZW5jZVVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5TWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGxhYmVsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUudW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KG1ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKG1ldGF2YXJpYWJsZVVuaWZpZXNJbnRyaW5zaWNhbGx5KSA9PiB7XG4gICAgICBsZXQgbWV0YXZhcmlhYmxlVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkpIHtcbiAgICAgICAgbWV0YXZhcmlhYmxlVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVVbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke21ldGF2YXJpYWJsZVN0cmluZ30nIG1ldGF2YXJpYWJsZSB3aXRoIHRoZSAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKG1ldGF2YXJpYWJsZVVuaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBzZXJpYWxpc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIGJyZWFrUG9pbnRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkxhYmVsXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICByZXR1cm4gaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiB1bnNlcmlhbGlzZSgoanNvbiwgY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgbGFiZWxOb2RlID0gaW5zdGFudGlhdGVMYWJlbChzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gbGFiZWxOb2RlLCAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUxhYmVsTm9kZShsYWJlbE5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBsYWJlbCA9IG5ldyBMYWJlbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIG1ldGF2YXJpYWJsZSk7XG5cbiAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUxhYmVsU3RyaW5nKGxhYmVsU3RyaW5nLCBjb250ZXh0KSB7XG4gICAgbGV0IGxhYmVsO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IGxhYmVsU3RyaW5nLCAgLy8vXG4gICAgICAgICAgICBsYWJlbE5vZGUgPSBpbnN0YW50aWF0ZUxhYmVsKHN0cmluZywgY29udGV4dCk7XG5cbiAgICAgIGxhYmVsID0gbGFiZWxGcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkxhYmVsIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsIm1ldGF2YXJpYWJsZSIsImdldE1ldGF2YXJpYWJsZSIsImdldExhYmVsTm9kZSIsImdldE5vZGUiLCJsYWJlbE5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2hMYWJlbE5vZGUiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsImxhYmVsTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiY29tcGFyZVJlZmVyZW5jZSIsInJlZmVyZW5jZSIsIm1ldGF2YXJpYWJsZUNvbXBhcmVzVG9NZXRhdmFyaWFibGUiLCJjb21wYXJlTWV0YXZhcmlhYmxlIiwiY29tcGFyZXNUb1JlZmVyZW5jZSIsInZlcmlmeSIsImNvbnRpbnVhdGlvbiIsInZlcmlmaWVzIiwiZ2V0Q29udGV4dCIsImxhYmVsU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJsYWJlbFByZXNlbnQiLCJpc0xhYmVsUHJlc2VudEJ5TGFiZWxOb2RlIiwidmFsaWRhdGVzIiwidmFsaWRhdGUiLCJsYWJlbCIsImRlYnVnIiwic3BlY2lmaWNDb250ZXh0IiwiYXR0ZW1wdCIsIm1ldGF2YXJpYWJsZVZhbGlkYXRlcyIsInZhbGlkYXRlTWV0YXZhcmlhYmxlIiwiY29tbWl0IiwidW5pZnlSZWZlcmVuY2UiLCJyZWZlcmVuY2VTdHJpbmciLCJsYWJlbENvbnRleHQiLCJyZWZlcmVuY2VDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJyZWNvbmNpbGUiLCJ1bmlmeU1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZVVuaWZpZXMiLCJyZWZlcmVuY2VVbmlmaWVzIiwibWV0YXZhcmlhYmxlU3RyaW5nIiwidW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5IiwibWV0YXZhcmlhYmxlVW5pZmllc0ludHJpbnNpY2FsbHkiLCJ0b0pTT04iLCJzZXJpYWxpc2UiLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlTGFiZWwiLCJtZXRhdmFyaWFibGVGcm9tTGFiZWxOb2RlIiwiZnJvbUxhYmVsU3RyaW5nIiwibGFiZWxGcm9tTGFiZWxOb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFXQTs7O2VBQUE7OztnQ0FUNkM7MEJBRXRCOzZCQUNVO3lCQUM2Qjt5QkFDUztBQUV2RSxNQUFNLEVBQUVBLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxjQUFjQyx1QkFBTztJQUMvQyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFlBQVksQ0FBRTtRQUMzRCxLQUFLLENBQUNKLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtJQUN0QjtJQUVBQyxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUNELFlBQVk7SUFDMUI7SUFFQUUsZUFBZTtRQUNiLE1BQU1KLE9BQU8sSUFBSSxDQUFDSyxPQUFPLElBQ25CQyxZQUFZTixNQUFNLEdBQUc7UUFFM0IsT0FBT007SUFDVDtJQUVBQyxzQkFBc0I7UUFBRSxPQUFPLElBQUksQ0FBQ0wsWUFBWSxDQUFDRyxPQUFPO0lBQUk7SUFFNURHLGVBQWVGLFNBQVMsRUFBRTtRQUN4QixNQUFNTixPQUFPTSxXQUNQRyxjQUFjLElBQUksQ0FBQ0MsU0FBUyxDQUFDVixPQUM3QlcsbUJBQW1CRixhQUFhLEdBQUc7UUFFekMsT0FBT0U7SUFDVDtJQUVBQyxzQkFBc0JDLGdCQUFnQixFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUNYLFlBQVksQ0FBQ1UscUJBQXFCLENBQUNDO0lBQW1CO0lBRTVHQyxpQkFBaUJDLFNBQVMsRUFBRTtRQUMxQixNQUFNYixlQUFlYSxVQUFVWixlQUFlLElBQ3hDYSxxQ0FBcUMsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ2YsZUFDOURnQixzQkFBc0JGLG9DQUFvQyxHQUFH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