occam-nominal 1.0.485 → 1.0.487

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.
@@ -74,18 +74,18 @@ class LiminalContext extends _context.default {
74
74
  this.addInferredSubstitution(inferredSubstitution);
75
75
  });
76
76
  }
77
- solveInferredSubstitutions(continuation) {
77
+ solveInferredSubstitutions(forward, back) {
78
78
  const context = this, inferredSubstitutions = this.getInferredSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromInferredSubstitutions)(inferredSubstitutions);
79
- return forEach(metavariableNodes, (metavariableNode, continuation)=>{
79
+ return forEach(metavariableNodes, (metavariableNode, forward, back)=>{
80
80
  const complexInferredSubstitutions = this.findComplexInferredSubstitutionsByMetavariableNode(metavariableNode);
81
- return forEach(complexInferredSubstitutions, (complexInferredSubstitution, continuation)=>{
81
+ return forEach(complexInferredSubstitutions, (complexInferredSubstitution, forward, back)=>{
82
82
  const inferredSubstitution = complexInferredSubstitution, solved = inferredSubstitution.isSolved();
83
83
  if (solved) {
84
- return continuation();
84
+ return forward(context, back);
85
85
  }
86
- return inferredSubstitution.solve(context, continuation);
87
- }, continuation);
88
- }, continuation);
86
+ return inferredSubstitution.solve(context, forward, back);
87
+ }, forward, back);
88
+ }, forward, back);
89
89
  }
90
90
  areInferredSubstitutionsSolved() {
91
91
  const inferredSubstitutions = this.getInferredSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromInferredSubstitutions)(inferredSubstitutions), solved = metavariableNodes.every((metavariableNode)=>{
@@ -198,4 +198,4 @@ class LiminalContext extends _context.default {
198
198
  }
199
199
  }
200
200
 
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOb2Rlc0Zyb21JbmZlcnJlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IHB1c2gsIGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGltaW5hbENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyA9IGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goaW5mZXJyZWRTdWJzdGl0dXRpb25zLCB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldEluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChpbmZlcnJlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0SW5mZXJyZWRTdWJzdGl0dXRpb24gPSBmaXJzdCh0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGZpcnN0SW5mZXJyZWRTdWJzdGl0dXRpb247IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRTaW5ndWxhck5vblRyaXZpYWxJbmZlcnJlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc2luZ3VsYXJOb25Ucml2aWFsSW5mZXJyZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24oKTtcblxuICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwgPSBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24uaXNOb25Ucml2aWFsKCk7XG5cbiAgICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsKSB7XG4gICAgICAgIHNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uID0gc29sZUluZmVycmVkU3Vic3RpdHV0aW9uOyAgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIC8vL1xuICB9XG5cbiAgYWRkSW5mZXJyZWRTdWJzdGl0dXRpb24oaW5mZXJyZWRTdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25BID0gaW5mZXJyZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nID0gaW5mZXJyZWRTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uQiA9IHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZpbmQoKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbkIgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbkFFcXVhbFRvSW5mZXJyZWRTdWJzdGl0dXRpb25CID0gaW5mZXJyZWRTdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhpbmZlcnJlZFN1YnN0aXR1dGlvbkIpO1xuXG4gICAgICBpZiAoaW5mZXJyZWRTdWJzdGl0dXRpb25BRXF1YWxUb0luZmVycmVkU3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZlcnJlZFN1YnN0aXR1dGlvbnMucHVzaChpbmZlcnJlZFN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZvckVhY2goKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEluZmVycmVkU3Vic3RpdHV0aW9uKGluZmVycmVkU3Vic3RpdHV0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNvbHZlSW5mZXJyZWRTdWJzdGl0dXRpb25zKGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldEluZmVycmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVzID0gbWV0YXZhcmlhYmxlTm9kZXNGcm9tSW5mZXJyZWRTdWJzdGl0dXRpb25zKGluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gZm9yRWFjaChtZXRhdmFyaWFibGVOb2RlcywgKG1ldGF2YXJpYWJsZU5vZGUsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgY29uc3QgY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIHJldHVybiBmb3JFYWNoKGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnMsIChjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICAgIHNvbHZlZCA9IGluZmVycmVkU3Vic3RpdHV0aW9uLmlzU29sdmVkKCk7XG5cbiAgICAgICAgaWYgKHNvbHZlZCkge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvbi5zb2x2ZShjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgICAgfSwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgYXJlSW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkKCkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0SW5mZXJyZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMgPSBtZXRhdmFyaWFibGVOb2Rlc0Zyb21JbmZlcnJlZFN1YnN0aXR1dGlvbnMoaW5mZXJyZWRTdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICBzb2x2ZWQgPSBtZXRhdmFyaWFibGVOb2Rlcy5ldmVyeSgobWV0YXZhcmlhYmxlTm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICAgICAgICBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkID0gY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9ucy5ldmVyeSgoY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvblNvbHZlZCA9IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbi5pc1NvbHZlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25Tb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHNvbHZlZDtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5pbmZlcnJlZFN1YnN0aXR1dGlvbnMubGVuZ3RoLFxuICAgICAgICAgIGVtcHR5ID0gKGluZmVycmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gZW1wdHk7XG4gIH1cblxuICBxdWFsaWZ5KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQpIHtcbiAgICBsZXQgcXVhbGlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBlbXB0eSA9IHRoaXMuaXNFbXB0eSgpO1xuXG4gICAgaWYgKGVtcHR5KSB7XG4gICAgICBxdWFsaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmdldFNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbigpO1xuXG4gICAgICBpZiAoc29sZUluZmVycmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgUmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgICAgIHJlZmVyZW5jZUluZmVycmVkU3Vic3RpdHV0aW9uID0gUmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24uZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50KGFzc3VtcHRpb24sIGNvbnN0cmFpbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgICByZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gcmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24uY29tcGFyZVN1YnN0aXR1dGlvbihzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24pO1xuXG4gICAgICAgIGlmIChyZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZUluZmVycmVkU3Vic3RpdHV0aW9uKSB7XG4gICAgICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFsaWZpZXM7XG4gIH1cblxuICBtZXJnZShjb250ZXh0KSB7XG4gICAgY29udGV4dC5kZWJ1ZyhgTWVyZ2luZyB0aGUgbGltaW5hbCBjb250ZXh0YCk7XG5cbiAgICBjb250ZXh0LmFkZEluZmVycmVkU3Vic3RpdHV0aW9ucyh0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG4gIH1cblxuICBmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb24oY2FsbGJhY2spIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldEluZmVycmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uID0gaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZpbmQoY2FsbGJhY2spO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZEluZmVycmVkU3Vic3RpdHV0aW9ucyhjYWxsYmFjaykge1xuICAgIGxldCBpbmZlcnJlZFN1YnN0aXR1dGlvbnM7XG5cbiAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldEluZmVycmVkU3Vic3RpdHV0aW9ucygpO1xuXG4gICAgaW5mZXJyZWRTdWJzdGl0dXRpb25zID0gZmluZChpbmZlcnJlZFN1YnN0aXR1dGlvbnMsIGNhbGxiYWNrKTsgIC8vL1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb24oKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCB2YXJpYWJsZU5vZGVNYXRjaGVzID0gaW5mZXJyZWRTdWJzdGl0dXRpb24ubWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKHZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgc2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kU2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb24oKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvblNpbXBsZSA9IGluZmVycmVkU3Vic3RpdHV0aW9uLmlzU2ltcGxlKCk7XG5cbiAgICAgIGlmIChpbmZlcnJlZFN1YnN0aXR1dGlvblNpbXBsZSkge1xuICAgICAgICBjb25zdCBzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGluZmVycmVkU3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gc2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRDb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBsZXggPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5pc0NvbXBsZXgoKTtcblxuICAgICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGxleCkge1xuICAgICAgICBjb25zdCBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24gPSBpbmZlcnJlZFN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb24oKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7ICAvLy9cbiAgICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gaW5mZXJyZWRTdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNJbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gKGluZmVycmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0luZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IChpbmZlcnJlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCk7XG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICBsaW1pbmFsQ29udGV4dCA9IG5ldyBMaW1pbmFsQ29udGV4dChjb250ZXh0LCBpbmZlcnJlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGxpbWluYWxDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiTGltaW5hbENvbnRleHQiLCJmb3JFYWNoIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwicHVzaCIsImZpbmQiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJnZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJnZXRDb250ZXh0IiwiZ2V0U29sZUluZmVycmVkU3Vic3RpdHV0aW9uIiwic29sZUluZmVycmVkU3Vic3RpdHV0aW9uIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImdldFNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uIiwic2luZ3VsYXJOb25Ucml2aWFsSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsIiwiaXNOb25Ucml2aWFsIiwiYWRkU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwiYWRkSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJpbmZlcnJlZFN1YnN0aXR1dGlvbiIsImluZmVycmVkU3Vic3RpdHV0aW9uQSIsImluZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbkIiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbkFFcXVhbFRvSW5mZXJyZWRTdWJzdGl0dXRpb25CIiwiaXNFcXVhbFRvIiwiZGVidWciLCJhZGRJbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJzb2x2ZUluZmVycmVkU3Vic3RpdHV0aW9ucyIsImNvbnRpbnVhdGlvbiIsIm1ldGF2YXJpYWJsZU5vZGVzIiwibWV0YXZhcmlhYmxlTm9kZXNGcm9tSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnMiLCJmaW5kQ29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiIsInNvbHZlZCIsImlzU29sdmVkIiwic29sdmUiLCJhcmVJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQiLCJldmVyeSIsImNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQiLCJjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25Tb2x2ZWQiLCJpc0VtcHR5IiwiZW1wdHkiLCJxdWFsaWZ5IiwiYXNzdW1wdGlvbiIsImNvbnN0cmFpbnQiLCJxdWFsaWZpZXMiLCJSZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImVsZW1lbnRzIiwicmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJmcm9tQXNzdW1wdGlvbkFuZENvbnN0cmFpbnQiLCJyZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBhcmVzVG9Tc29sZUluZmVycmVkU3Vic3RpdHV0aW9uIiwiY29tcGFyZVN1YnN0aXR1dGlvbiIsIm1lcmdlIiwiZmluZEluZmVycmVkU3Vic3RpdHV0aW9uIiwiY2FsbGJhY2siLCJmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hWYXJpYWJsZU5vZGUiLCJmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImZpbmRTaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZSIsImluZmVycmVkU3Vic3RpdHV0aW9uU2ltcGxlIiwiaXNTaW1wbGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGxleCIsImlzQ29tcGxleCIsImZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJpc0luZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZSIsImluZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudCIsImlzSW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImZyb21Ob3RoaW5nIiwibGltaW5hbENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBcUJBOzs7MkJBWFU7Z0NBQ087Z0VBRWxCO2lFQUNDOytCQUVzQzs7Ozs7O0FBRTNELE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHFDQUFxQixFQUNuQyxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRTdCLE1BQU1OLHVCQUF1Qk8sZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxxQkFBcUIsQ0FBRTtRQUMxQyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxxQkFBcUIsR0FBR0E7SUFDL0I7SUFFQUMseUJBQXlCRCx3QkFBd0IsRUFBRSxFQUFFO1FBQ25ELE1BQU1ELFVBQVUsSUFBSSxDQUFDRyxVQUFVO1FBRS9CUixLQUFLTSx1QkFBdUIsSUFBSSxDQUFDQSxxQkFBcUI7UUFFdERELFFBQVFFLHdCQUF3QixDQUFDRDtRQUVqQyxPQUFPQTtJQUNUO0lBRUFHLDhCQUE4QjtRQUM1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
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOb2Rlc0Zyb21JbmZlcnJlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IHB1c2gsIGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGltaW5hbENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyA9IGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHB1c2goaW5mZXJyZWRTdWJzdGl0dXRpb25zLCB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICBjb250ZXh0LmdldEluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChpbmZlcnJlZFN1YnN0aXR1dGlvbnNMZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0SW5mZXJyZWRTdWJzdGl0dXRpb24gPSBmaXJzdCh0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGZpcnN0SW5mZXJyZWRTdWJzdGl0dXRpb247IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBnZXRTaW5ndWxhck5vblRyaXZpYWxJbmZlcnJlZFN1YnN0aXR1dGlvbigpIHtcbiAgICBsZXQgc2luZ3VsYXJOb25Ucml2aWFsSW5mZXJyZWRTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc29sZUluZmVycmVkU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24oKTtcblxuICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwgPSBzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24uaXNOb25Ucml2aWFsKCk7XG5cbiAgICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb25Ob25Ucml2aWFsKSB7XG4gICAgICAgIHNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uID0gc29sZUluZmVycmVkU3Vic3RpdHV0aW9uOyAgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmd1bGFyTm9uVHJpdmlhbEluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgYWRkU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbikge1xuICAgIC8vL1xuICB9XG5cbiAgYWRkSW5mZXJyZWRTdWJzdGl0dXRpb24oaW5mZXJyZWRTdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25BID0gaW5mZXJyZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nID0gaW5mZXJyZWRTdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBBZGRpbmcgdGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuLi5gKTtcblxuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uQiA9IHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZpbmQoKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbkIgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbkFFcXVhbFRvSW5mZXJyZWRTdWJzdGl0dXRpb25CID0gaW5mZXJyZWRTdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhpbmZlcnJlZFN1YnN0aXR1dGlvbkIpO1xuXG4gICAgICBpZiAoaW5mZXJyZWRTdWJzdGl0dXRpb25BRXF1YWxUb0luZmVycmVkU3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uQiAhPT0gbnVsbCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbmZlcnJlZFN1YnN0aXR1dGlvbnMucHVzaChpbmZlcnJlZFN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2luZmVycmVkU3Vic3RpdHV0aW9uU3RyaW5nfScgaW5mZXJyZWQgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoaW5mZXJyZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgaW5mZXJyZWRTdWJzdGl0dXRpb25zLmZvckVhY2goKGluZmVycmVkU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFkZEluZmVycmVkU3Vic3RpdHV0aW9uKGluZmVycmVkU3Vic3RpdHV0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNvbHZlSW5mZXJyZWRTdWJzdGl0dXRpb25zKGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbUluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIGZvckVhY2gobWV0YXZhcmlhYmxlTm9kZXMsIChtZXRhdmFyaWFibGVOb2RlLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zID0gdGhpcy5maW5kQ29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgcmV0dXJuIGZvckVhY2goY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9ucywgKGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICAgIHNvbHZlZCA9IGluZmVycmVkU3Vic3RpdHV0aW9uLmlzU29sdmVkKCk7XG5cbiAgICAgICAgaWYgKHNvbHZlZCkge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uLnNvbHZlKGNvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgZm9yd2FyZCwgYmFjayk7XG4gIH1cblxuICBhcmVJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQoKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXRJbmZlcnJlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbUluZmVycmVkU3Vic3RpdHV0aW9ucyhpbmZlcnJlZFN1YnN0aXR1dGlvbnMpLFxuICAgICAgICAgIHNvbHZlZCA9IG1ldGF2YXJpYWJsZU5vZGVzLmV2ZXJ5KChtZXRhdmFyaWFibGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zID0gdGhpcy5maW5kQ29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICAgICAgICAgIGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQgPSBjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zLmV2ZXJ5KChjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uU29sdmVkID0gY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uLmlzU29sdmVkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvblNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gc29sdmVkO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICBjb25zdCBpbmZlcnJlZFN1YnN0aXR1dGlvbnNMZW5ndGggPSB0aGlzLmluZmVycmVkU3Vic3RpdHV0aW9ucy5sZW5ndGgsXG4gICAgICAgICAgZW1wdHkgPSAoaW5mZXJyZWRTdWJzdGl0dXRpb25zTGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIHF1YWxpZnkoYXNzdW1wdGlvbiwgY29uc3RyYWludCkge1xuICAgIGxldCBxdWFsaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCk7XG5cbiAgICBpZiAoZW1wdHkpIHtcbiAgICAgIHF1YWxpZmllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZUluZmVycmVkU3Vic3RpdHV0aW9uKCk7XG5cbiAgICAgIGlmIChzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBSZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICAgICAgcmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24gPSBSZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbi5mcm9tQXNzdW1wdGlvbkFuZENvbnN0cmFpbnQoYXNzdW1wdGlvbiwgY29uc3RyYWludCwgY29udGV4dCksXG4gICAgICAgICAgICAgIHJlZmVyZW5jZUluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24gPSByZWZlcmVuY2VJbmZlcnJlZFN1YnN0aXR1dGlvbi5jb21wYXJlU3Vic3RpdHV0aW9uKHNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbik7XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZUluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGFyZXNUb1Nzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24pIHtcbiAgICAgICAgICBxdWFsaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1YWxpZmllcztcbiAgfVxuXG4gIG1lcmdlKGNvbnRleHQpIHtcbiAgICBjb250ZXh0LmRlYnVnKGBNZXJnaW5nIHRoZSBsaW1pbmFsIGNvbnRleHRgKTtcblxuICAgIGNvbnRleHQuYWRkSW5mZXJyZWRTdWJzdGl0dXRpb25zKHRoaXMuaW5mZXJyZWRTdWJzdGl0dXRpb25zKTtcbiAgfVxuXG4gIGZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbihjYWxsYmFjaykge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0SW5mZXJyZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSBpbmZlcnJlZFN1YnN0aXR1dGlvbnMuZmluZChjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25zKGNhbGxiYWNrKSB7XG4gICAgbGV0IGluZmVycmVkU3Vic3RpdHV0aW9ucztcblxuICAgIGluZmVycmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0SW5mZXJyZWRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICBpbmZlcnJlZFN1YnN0aXR1dGlvbnMgPSBmaW5kKGluZmVycmVkU3Vic3RpdHV0aW9ucywgY2FsbGJhY2spOyAgLy8vXG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbigoaW5mZXJyZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZU1hdGNoZXMgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5tYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAodmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGluZmVycmVkU3Vic3RpdHV0aW9uID0gc2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb247ICAvLy9cblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3Qgc2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbigoaW5mZXJyZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uU2ltcGxlID0gaW5mZXJyZWRTdWJzdGl0dXRpb24uaXNTaW1wbGUoKTtcblxuICAgICAgaWYgKGluZmVycmVkU3Vic3RpdHV0aW9uU2ltcGxlKSB7XG4gICAgICAgIGNvbnN0IHNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uID0gaW5mZXJyZWRTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBzaW1wbGVJbmZlcnJlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHNpbXBsZUluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZENvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZEluZmVycmVkU3Vic3RpdHV0aW9ucygoaW5mZXJyZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9uQ29tcGxleCA9IGluZmVycmVkU3Vic3RpdHV0aW9uLmlzQ29tcGxleCgpO1xuXG4gICAgICBpZiAoaW5mZXJyZWRTdWJzdGl0dXRpb25Db21wbGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbiA9IGluZmVycmVkU3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbigoaW5mZXJyZWRTdWJzdGl0dXRpb24pID0+IHsgIC8vL1xuICAgICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBpbmZlcnJlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IGluZmVycmVkU3Vic3RpdHV0aW9uLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gaW5mZXJyZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBpc0luZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBpbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnQgPSAoaW5mZXJyZWRTdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGluZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzSW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgaW5mZXJyZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gKGluZmVycmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBpbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoY29udGV4dCkge1xuICAgIGNvbnN0IGluZmVycmVkU3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgIGxpbWluYWxDb250ZXh0ID0gbmV3IExpbWluYWxDb250ZXh0KGNvbnRleHQsIGluZmVycmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gbGltaW5hbENvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJMaW1pbmFsQ29udGV4dCIsImZvckVhY2giLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJwdXNoIiwiZmluZCIsImZpcnN0IiwiYXJyYXlVdGlsaXRpZXMiLCJDb250ZXh0IiwiY29udGV4dCIsImluZmVycmVkU3Vic3RpdHV0aW9ucyIsImdldEluZmVycmVkU3Vic3RpdHV0aW9ucyIsImdldENvbnRleHQiLCJnZXRTb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJzb2xlSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJpbmZlcnJlZFN1YnN0aXR1dGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdEluZmVycmVkU3Vic3RpdHV0aW9uIiwiZ2V0U2luZ3VsYXJOb25Ucml2aWFsSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJzaW5ndWxhck5vblRyaXZpYWxJbmZlcnJlZFN1YnN0aXR1dGlvbiIsInNvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwiLCJpc05vblRyaXZpYWwiLCJhZGRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJhZGRJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImluZmVycmVkU3Vic3RpdHV0aW9uIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25BIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImluZmVycmVkU3Vic3RpdHV0aW9uQiIsImluZmVycmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9JbmZlcnJlZFN1YnN0aXR1dGlvbkIiLCJpc0VxdWFsVG8iLCJkZWJ1ZyIsImFkZEluZmVycmVkU3Vic3RpdHV0aW9ucyIsInNvbHZlSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiZm9yd2FyZCIsImJhY2siLCJtZXRhdmFyaWFibGVOb2RlcyIsIm1ldGF2YXJpYWJsZU5vZGVzRnJvbUluZmVycmVkU3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zIiwiZmluZENvbXBsZXhJbmZlcnJlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb24iLCJzb2x2ZWQiLCJpc1NvbHZlZCIsInNvbHZlIiwiYXJlSW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkIiwiZXZlcnkiLCJjb21wbGV4SW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkIiwiY29tcGxleEluZmVycmVkU3Vic3RpdHV0aW9uU29sdmVkIiwiaXNFbXB0eSIsImVtcHR5IiwicXVhbGlmeSIsImFzc3VtcHRpb24iLCJjb25zdHJhaW50IiwicXVhbGlmaWVzIiwiUmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsInJlZmVyZW5jZUluZmVycmVkU3Vic3RpdHV0aW9uIiwiZnJvbUFzc3VtcHRpb25BbmRDb25zdHJhaW50IiwicmVmZXJlbmNlSW5mZXJyZWRTdWJzdGl0dXRpb25Db21wYXJlc1RvU3NvbGVJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImNvbXBhcmVTdWJzdGl0dXRpb24iLCJtZXJnZSIsImZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbiIsImNhbGxiYWNrIiwiZmluZEluZmVycmVkU3Vic3RpdHV0aW9ucyIsImZpbmRJbmZlcnJlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoVmFyaWFibGVOb2RlIiwiZmluZEluZmVycmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwic2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJpbmZlcnJlZFN1YnN0aXR1dGlvblNpbXBsZSIsImlzU2ltcGxlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbkNvbXBsZXgiLCJpc0NvbXBsZXgiLCJmaW5kSW5mZXJyZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hTdWJzdGl0dXRpb25Ob2RlIiwiaXNJbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJpbmZlcnJlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0luZmVycmVkU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJmcm9tTm90aGluZyIsImxpbWluYWxDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7O2VBQXFCQTs7OzJCQVhVO2dDQUNPO2dFQUVsQjtpRUFDQzsrQkFFc0M7Ozs7OztBQUUzRCxNQUFNLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyxxQ0FBcUIsRUFDbkMsRUFBRUMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHQyx5QkFBYztBQUU3QixNQUFNTix1QkFBdUJPLGdCQUFPO0lBQ2pELFlBQVlDLE9BQU8sRUFBRUMscUJBQXFCLENBQUU7UUFDMUMsS0FBSyxDQUFDRDtRQUVOLElBQUksQ0FBQ0MscUJBQXFCLEdBQUdBO0lBQy9CO0lBRUFDLHlCQUF5QkQsd0JBQXdCLEVBQUUsRUFBRTtRQUNuRCxNQUFNRCxVQUFVLElBQUksQ0FBQ0csVUFBVTtRQUUvQlIsS0FBS00sdUJBQXVCLElBQUksQ0FBQ0EscUJBQXFCO1FBRXRERCxRQUFRRSx3QkFBd0IsQ0FBQ0Q7UUFFakMsT0FBT0E7SUFDVDtJQUVBRyw4QkFBOEI7UUFDNUIsSUFBSUMsMkJBQTJCO1FBRS9CLE1BQU1DLDhCQUE4QixJQUFJLENBQUNMLHFCQUFxQixDQUFDTSxNQUFNO1FBRXJFLElBQUlELGdDQUFnQyxHQUFHO1lBQ3JDLE1BQU1FLDRCQUE0QlgsTUFBTSxJQUFJLENBQUNJLHFCQUFxQjtZQUVsRUksMkJBQTJCRywyQkFBMkIsR0FBRztRQUMzRDtRQUVBLE9BQU9IO0lBQ1Q7SUFFQUksNENBQTRDO1FBQzFDLElBQUlDLHlDQUF5QztRQUU3QyxNQUFNTCwyQkFBMkIsSUFBSSxDQUFDRCwyQkFBMkI7UUFFakUsSUFBSUMsNkJBQTZCLE1BQU07WUFDckMsTUFBTU0scUNBQXFDTix5QkFBeUJPLFlBQVk7WUFFaEYsSUFBSUQsb0NBQW9DO2dCQUN0Q0QseUNBQXlDTCwwQkFBMkIsR0FBRztZQUN6RTtRQUNGO1FBRUEsT0FBT0s7SUFDVDtJQUVBRyxnQkFBZ0JDLFlBQVksRUFBRTtJQUM1QixHQUFHO0lBQ0w7SUFFQUMsd0JBQXdCQyxvQkFBb0IsRUFBRTtRQUM1QyxNQUFNaEIsVUFBVSxJQUFJLEVBQ2RpQix3QkFBd0JELHNCQUN4QkUsNkJBQTZCRixxQkFBcUJHLFNBQVM7UUFFakVuQixRQUFRb0IsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFRiwyQkFBMkIsaURBQWlELENBQUM7UUFFMUcsTUFBTUcsd0JBQXdCLElBQUksQ0FBQ3BCLHFCQUFxQixDQUFDTCxJQUFJLENBQUMsQ0FBQ29CO1lBQzdELE1BQU1LLHdCQUF3Qkwsc0JBQ3hCTSxvREFBb0RMLHNCQUFzQk0sU0FBUyxDQUFDRjtZQUUxRixJQUFJQyxtREFBbUQ7Z0JBQ3JELE9BQU87WUFDVDtRQUNGLE1BQU07UUFFTixJQUFJRCwwQkFBMEIsTUFBTTtZQUNsQ3JCLFFBQVF3QixLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUVOLDJCQUEyQixzRUFBc0UsQ0FBQztRQUMxSCxPQUFPO1lBQ0wsSUFBSSxDQUFDakIscUJBQXFCLENBQUNOLElBQUksQ0FBQ3FCO1FBQ2xDO1FBRUFoQixRQUFRd0IsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFTiwyQkFBMkIsK0NBQStDLENBQUM7SUFDNUc7SUFFQU8seUJBQXlCeEIscUJBQXFCLEVBQUU7UUFDOUNBLHNCQUFzQlIsT0FBTyxDQUFDLENBQUN1QjtZQUM3QixJQUFJLENBQUNELHVCQUF1QixDQUFDQztRQUMvQjtJQUNGO0lBRUFVLDJCQUEyQkMsT0FBTyxFQUFFQyxJQUFJLEVBQUU7UUFDeEMsTUFBTTVCLFVBQVUsSUFBSSxFQUNkQyx3QkFBd0IsSUFBSSxDQUFDQyx3QkFBd0IsSUFDckQyQixvQkFBb0JDLElBQUFBLHlEQUEwQyxFQUFDN0I7UUFFckUsT0FBT1IsUUFBUW9DLG1CQUFtQixDQUFDRSxrQkFBa0JKLFNBQVNDO1lBQzVELE1BQU1JLCtCQUErQixJQUFJLENBQUNDLGtEQUFrRCxDQUFDRjtZQUU3RixPQUFPdEMsUUFBUXVDLDhCQUE4QixDQUFDRSw2QkFBNkJQLFNBQVNDO2dCQUNsRixNQUFNWix1QkFBdUJrQiw2QkFDdkJDLFNBQVNuQixxQkFBcUJvQixRQUFRO2dCQUU1QyxJQUFJRCxRQUFRO29CQUNWLE9BQU9SLFFBQVEzQixTQUFTNEI7Z0JBQzFCO2dCQUVBLE9BQU9aLHFCQUFxQnFCLEtBQUssQ0FBQ3JDLFNBQVMyQixTQUFTQztZQUN0RCxHQUFHRCxTQUFTQztRQUNkLEdBQUdELFNBQVNDO0lBQ2Q7SUFFQVUsaUNBQWlDO1FBQy9CLE1BQU1yQyx3QkFBd0IsSUFBSSxDQUFDQyx3QkFBd0IsSUFDckQyQixvQkFBb0JDLElBQUFBLHlEQUEwQyxFQUFDN0Isd0JBQy9Ea0MsU0FBU04sa0JBQWtCVSxLQUFLLENBQUMsQ0FBQ1I7WUFDaEMsTUFBTUMsK0JBQStCLElBQUksQ0FBQ0Msa0RBQWtELENBQUNGLG1CQUN2RlMscUNBQXFDUiw2QkFBNkJPLEtBQUssQ0FBQyxDQUFDTDtnQkFDdkUsTUFBTU8sb0NBQW9DUCw0QkFBNEJFLFFBQVE7Z0JBRTlFLElBQUlLLG1DQUFtQztvQkFDckMsT0FBTztnQkFDVDtZQUNGO1lBRU4sSUFBSUQsb0NBQW9DO2dCQUN0QyxPQUFPO1lBQ1Q7UUFDRjtRQUVOLE9BQU9MO0lBQ1Q7SUFFQU8sVUFBVTtRQUNSLE1BQU1wQyw4QkFBOEIsSUFBSSxDQUFDTCxxQkFBcUIsQ0FBQ00sTUFBTSxFQUMvRG9DLFFBQVNyQyxnQ0FBZ0M7UUFFL0MsT0FBT3FDO0lBQ1Q7SUFFQUMsUUFBUUMsVUFBVSxFQUFFQyxVQUFVLEVBQUU7UUFDOUIsSUFBSUMsWUFBWTtRQUVoQixNQUFNSixRQUFRLElBQUksQ0FBQ0QsT0FBTztRQUUxQixJQUFJQyxPQUFPO1lBQ1RJLFlBQVk7UUFDZCxPQUFPO1lBQ0wsTUFBTTFDLDJCQUEyQixJQUFJLENBQUNELDJCQUEyQjtZQUVqRSxJQUFJQyw2QkFBNkIsTUFBTTtnQkFDckMsTUFBTSxFQUFFMkMsNkJBQTZCLEVBQUUsR0FBR0MsaUJBQVEsRUFDNUNqRCxVQUFVLElBQUksRUFDZGtELGdDQUFnQ0YsOEJBQThCRywyQkFBMkIsQ0FBQ04sWUFBWUMsWUFBWTlDLFVBQ2xIb0QsbUVBQW1FRiw4QkFBOEJHLG1CQUFtQixDQUFDaEQ7Z0JBRTNILElBQUkrQyxrRUFBa0U7b0JBQ3BFTCxZQUFZO2dCQUNkO1lBQ0Y7UUFDRjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQU8sTUFBTXRELE9BQU8sRUFBRTtRQUNiQSxRQUFRd0IsS0FBSyxDQUFDLENBQUMsMkJBQTJCLENBQUM7UUFFM0N4QixRQUFReUIsd0JBQXdCLENBQUMsSUFBSSxDQUFDeEIscUJBQXFCO0lBQzdEO0lBRUFzRCx5QkFBeUJDLFFBQVEsRUFBRTtRQUNqQyxNQUFNdkQsd0JBQXdCLElBQUksQ0FBQ0Msd0JBQXdCLElBQ3JEYyx1QkFBdUJmLHNCQUFzQkwsSUFBSSxDQUFDNEQ7UUFFeEQsT0FBT3hDO0lBQ1Q7SUFFQXlDLDBCQUEwQkQsUUFBUSxFQUFFO1FBQ2xDLElBQUl2RDtRQUVKQSx3QkFBd0IsSUFBSSxDQUFDQyx3QkFBd0I7UUFFckRELHdCQUF3QkwsS0FBS0ssdUJBQXVCdUQsV0FBWSxHQUFHO1FBRW5FLE9BQU92RDtJQUNUO0lBRUF5RCx1Q0FBdUNDLFlBQVksRUFBRTtRQUNuRCxNQUFNM0MsdUJBQXVCLElBQUksQ0FBQ3VDLHdCQUF3QixDQUFDLENBQUN2QztZQUMxRCxNQUFNNEMsc0JBQXNCNUMscUJBQXFCNkMsaUJBQWlCLENBQUNGO1lBRW5FLElBQUlDLHFCQUFxQjtnQkFDdkIsT0FBTztZQUNUO1FBQ0YsTUFBTTtRQUVOLE9BQU81QztJQUNUO0lBRUE4QywyQ0FBMkMvQixnQkFBZ0IsRUFBRTtRQUMzRCxNQUFNZ0MsNkJBQTZCLElBQUksQ0FBQ0MsZ0RBQWdELENBQUNqQyxtQkFDbkZmLHVCQUF1QitDLDRCQUE2QixHQUFHO1FBRTdELE9BQU8vQztJQUNUO0lBRUFnRCxpREFBaURqQyxnQkFBZ0IsRUFBRTtRQUNqRSxNQUFNZ0MsNkJBQTZCLElBQUksQ0FBQ1Isd0JBQXdCLENBQUMsQ0FBQ3ZDO1lBQ2hFLE1BQU1pRCw2QkFBNkJqRCxxQkFBcUJrRCxRQUFRO1lBRWhFLElBQUlELDRCQUE0QjtnQkFDOUIsTUFBTUYsNkJBQTZCL0Msc0JBQzdCbUQsMEJBQTBCSiwyQkFBMkJLLHFCQUFxQixDQUFDckM7Z0JBRWpGLElBQUlvQyx5QkFBeUI7b0JBQzNCLE9BQU87Z0JBQ1Q7WUFDRjtRQUNGLE1BQU07UUFFTixPQUFPSjtJQUNUO0lBRUE5QixtREFBbURGLGdCQUFnQixFQUFFO1FBQ25FLE1BQU1HLDhCQUE4QixJQUFJLENBQUN1Qix5QkFBeUIsQ0FBQyxDQUFDekM7WUFDbEUsTUFBTXFELDhCQUE4QnJELHFCQUFxQnNELFNBQVM7WUFFbEUsSUFBSUQsNkJBQTZCO2dCQUMvQixNQUFNbkMsOEJBQThCbEIsc0JBQzlCbUQsMEJBQTBCakMsNEJBQTRCa0MscUJBQXFCLENBQUNyQztnQkFFbEYsSUFBSW9DLHlCQUF5QjtvQkFDM0IsT0FBTztnQkFDVDtZQUNGO1FBQ0YsTUFBTTtRQUVOLE9BQU9qQztJQUNUO0lBRUFxQyw4REFBOER4QyxnQkFBZ0IsRUFBRXlDLGdCQUFnQixFQUFFO1FBQ2hHLE1BQU14RCx1QkFBdUIsSUFBSSxDQUFDdUMsd0JBQXdCLENBQUMsQ0FBQ3ZDO1lBQ3BELE1BQU1tRCwwQkFBMEJuRCxxQkFBcUJvRCxxQkFBcUIsQ0FBQ3JDO1lBRTNFLElBQUlvQyx5QkFBeUI7Z0JBQzNCLE1BQU1NLDBCQUEwQnpELHFCQUFxQjBELHFCQUFxQixDQUFDRjtnQkFFM0UsSUFBSUMseUJBQXlCO29CQUMzQixPQUFPO2dCQUNUO1lBQ0Y7UUFDRixNQUFNO1FBRVosT0FBT3pEO0lBQ1Q7SUFFQTJELGdEQUFnRDVDLGdCQUFnQixFQUFFO1FBQ2hFLE1BQU1mLHVCQUF1QixJQUFJLENBQUM4QywwQ0FBMEMsQ0FBQy9CLG1CQUN2RTZDLDhCQUErQjVELHlCQUF5QjtRQUU5RCxPQUFPNEQ7SUFDVDtJQUVBQyxtRUFBbUU5QyxnQkFBZ0IsRUFBRXlDLGdCQUFnQixFQUFFO1FBQ3JHLE1BQU14RCx1QkFBdUIsSUFBSSxDQUFDdUQsNkRBQTZELENBQUN4QyxrQkFBa0J5QyxtQkFDNUdJLDhCQUErQjVELHlCQUF5QjtRQUU5RCxPQUFPNEQ7SUFDVDtJQUVBLE9BQU9FLFlBQVk5RSxPQUFPLEVBQUU7UUFDMUIsTUFBTUMsd0JBQXdCLEVBQUUsRUFDMUI4RSxpQkFBaUIsSUFBSXZGLGVBQWVRLFNBQVNDO1FBRW5ELE9BQU84RTtJQUNUO0FBQ0YifQ==
@@ -38,6 +38,10 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
38
38
  const frontStatements = front(this.statements), supposedStatements = frontStatements; ///
39
39
  return supposedStatements;
40
40
  }
41
+ getSupposedStatement(index) {
42
+ const supposedStatements = this.getSupposedStatements(), supposedStatement = supposedStatements[index];
43
+ return supposedStatement;
44
+ }
41
45
  getSubproofAssertionNode() {
42
46
  const node = this.getNode(), subproofAssertionNode = node; ///
43
47
  return subproofAssertionNode;
@@ -81,22 +85,13 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
81
85
  const context = specificContext, subproofString = subproof.getString(), subproofAssertionString = this.getString(); ///
82
86
  context.trace(`Unifying the '${subproofString}' subproof with the '${subproofAssertionString}' subproof assertion...`);
83
87
  const lastStep = subproof.getLastStep();
84
- return this.unifyLastStep(lastStep, generalContext, specificContext, (lastStepUnifies)=>{
85
- let subproofUnifies = false;
86
- if (!lastStepUnifies) {
87
- return continuation(subproofUnifies);
88
- }
88
+ return this.unifyLastStep(lastStep, generalContext, specificContext, (generalContext, specificContext, back)=>{
89
89
  const suppositions = subproof.getSuppositions();
90
- return this.unifySuppositions(suppositions, generalContext, specificContext, (suppositionsUnify)=>{
91
- if (suppositionsUnify) {
92
- subproofUnifies = true;
93
- }
94
- if (subproofUnifies) {
95
- context.debug(`...unified the '${subproofString}' subproof with the '${subproofAssertionString}' subproof assertion.`);
96
- }
97
- return continuation(subproofUnifies);
98
- });
99
- });
90
+ return this.unifySuppositions(suppositions, generalContext, specificContext, (generalContext, specificContext, back)=>{
91
+ context.debug(`...unified the '${subproofString}' subproof with the '${subproofAssertionString}' subproof assertion.`);
92
+ return forward(generalContext, specificContext, back);
93
+ }, back);
94
+ }, back);
100
95
  }
101
96
  unifyLastStep(lastStep, generalContext, specificContext, forward, back) {
102
97
  const context = specificContext, lastStepString = lastStep.getString(), deducedStatement = this.getDeducedStatement(), deducedStatementString = deducedStatement.getString();
@@ -106,53 +101,39 @@ const _default = (0, _elements.define)(class SubproofAssertion extends _assertio
106
101
  return (0, _context.join)((specificContext)=>{
107
102
  return (0, _context.reconcile)((specificContext)=>{
108
103
  const lastStepStatement = lastStep.getStatement();
109
- return deducedStatement.unifyStatement(lastStepStatement, generalContext, specificContext, (lastStepStatementUnifies)=>{
110
- let lastStepUnifies = false;
111
- if (lastStepStatementUnifies) {
112
- specificContext.commit(context);
113
- lastStepUnifies = true;
114
- }
115
- if (lastStepUnifies) {
116
- context.debug(`...unified the '${lastStepString}' last step with the '${deducedStatementString}' deduced statement.`);
117
- }
118
- return continuation(lastStepUnifies);
119
- });
104
+ return deducedStatement.unifyStatement(lastStepStatement, generalContext, specificContext, (generalContext, specificContext, back)=>{
105
+ specificContext.commit(context);
106
+ specificContext = context; ///
107
+ context.debug(`...unified the '${lastStepString}' last step with the '${deducedStatementString}' deduced statement.`);
108
+ return forward(generalContext, specificContext, back);
109
+ }, back);
120
110
  }, specificContext);
121
111
  }, specificContext, context);
122
112
  }
123
- unifySupposition(supposition, supposedStatement, generalContext, specificContext, forward, back) {
124
- const context = specificContext, suppositionString = supposition.getString(), supposedStatementString = supposedStatement.getString();
113
+ unifySupposition(supposition, generalContext, specificContext, forward, back, index) {
114
+ const context = specificContext, suppositionString = supposition.getString(), supposedStatement = this.getSupposedStatement(index), supposedStatementString = supposedStatement.getString();
125
115
  context.trace(`Unifying the '${suppositionString}' supposition with the '${supposedStatementString}' supposed statement...`);
126
116
  const suppositionContext = supposition.getContext();
127
117
  specificContext = suppositionContext; ///
128
118
  return (0, _context.join)((specificContext)=>{
129
119
  return (0, _context.reconcile)((specificContext)=>{
130
120
  const suppositionStatement = supposition.getStatement();
131
- return supposedStatement.unifyStatement(suppositionStatement, generalContext, specificContext, (suppositionStatementUnifies)=>{
132
- let suppositionUnifies = false;
133
- if (suppositionStatementUnifies) {
134
- specificContext.commit(context);
135
- suppositionUnifies = true;
136
- }
137
- if (suppositionUnifies) {
138
- context.debug(`...unified the '${suppositionString}' supposition with the '${supposedStatementString}' supposed statement.`);
139
- }
140
- return continuation(suppositionUnifies);
141
- });
121
+ return supposedStatement.unifyStatement(suppositionStatement, generalContext, specificContext, (generalContext, specificContext, back)=>{
122
+ specificContext.commit(context);
123
+ specificContext = context; ///
124
+ context.debug(`...unified the '${suppositionString}' supposition with the '${supposedStatementString}' supposed statement.`);
125
+ return forward(generalContext, specificContext, back);
126
+ }, back);
142
127
  }, specificContext);
143
128
  }, specificContext, context);
144
129
  }
145
130
  unifySuppositions(suppositions, generalContext, specificContext, forward, back) {
146
131
  const supposedStatements = this.getSupposedStatements(), suppositionsLength = suppositions.length, supposedStatementsLength = supposedStatements.length;
147
132
  if (suppositionsLength !== supposedStatementsLength) {
148
- const suppositionsUnify = false;
149
- return continuation(suppositionsUnify);
133
+ return back();
150
134
  }
151
- let index = suppositionsLength; ///
152
- return backwardsEvery(suppositions, (supposition, forward, back)=>{
153
- index--;
154
- const supposedStatement = supposedStatements[index];
155
- return this.unifySupposition(supposition, supposedStatement, generalContext, specificContext, forward, back);
135
+ return backwardsEvery(suppositions, (supposition, forward, back, index)=>{
136
+ return this.unifySupposition(supposition, generalContext, specificContext, forward, back, index);
156
137
  }, forward, back);
157
138
  }
158
139
  static name = "SubproofAssertion";
@@ -181,4 +162,4 @@ function statementsFromSubproofAssertionNode(subproofAssertionNode, context) {
181
162
  return statements;
182
163
  }
183
164
 
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBqb2luLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVN1YnByb29mQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBsYXN0LCBmcm9udCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYWxsLCBldmVyeSwgYmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFN1YnByb29mQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHM7XG4gIH1cblxuICBnZXREZWR1Y2VkU3RhdGVtZW50KCkge1xuICAgIGNvbnN0IGxhc3RTdGF0ZW1lbnQgPSBsYXN0KHRoaXMuc3RhdGVtZW50cyksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IGxhc3RTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdXBwb3NlZFN0YXRlbWVudHMoKSB7XG4gICAgY29uc3QgZnJvbnRTdGF0ZW1lbnRzID0gZnJvbnQodGhpcy5zdGF0ZW1lbnRzKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHMgPSBmcm9udFN0YXRlbWVudHM7ICAvLy9cblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgbGV0IGFzc2VydGlvbjtcblxuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQgKHN1YnByb29mQXNzZXJ0aW9uLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50cyA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnRzLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlU3RhdGVtZW50c1xuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3VicHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnRzKHN0YXRlLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbidzIHN0YXRlbWVudHMuLi5gKTtcblxuICAgIHJldHVybiBldmVyeSh0aGlzLnN0YXRlbWVudHMsIChzdGF0ZW1lbnQsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIHJldHVybiBkZWNsYXJlKChzdGF0ZSkgPT4ge1xuICAgICAgICByZXR1cm4gc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoc3RhdGVtZW50LCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24ncyBzdGF0ZW1lbnRzLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB1bmlmeVN1YnByb29mKHN1YnByb29mLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2YuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBsYXN0U3RlcCA9IHN1YnByb29mLmdldExhc3RTdGVwKCk7XG5cbiAgICByZXR1cm4gdGhpcy51bmlmeUxhc3RTdGVwKGxhc3RTdGVwLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAobGFzdFN0ZXBVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgc3VicHJvb2ZVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgIGlmICghbGFzdFN0ZXBVbmlmaWVzKSB7XG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VicHJvb2ZVbmlmaWVzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3VwcG9zaXRpb25zID0gc3VicHJvb2YuZ2V0U3VwcG9zaXRpb25zKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN1cHBvc2l0aW9uc1VuaWZ5KSA9PiB7XG4gICAgICAgIGlmIChzdXBwb3NpdGlvbnNVbmlmeSkge1xuICAgICAgICAgIHN1YnByb29mVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VicHJvb2ZVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VicHJvb2ZVbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlMYXN0U3RlcChsYXN0U3RlcCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBsYXN0U3RlcFN0cmluZyA9IGxhc3RTdGVwLmdldFN0cmluZygpLFxuICAgICAgICAgIGRlZHVjZWRTdGF0ZW1lbnQgPSB0aGlzLmdldERlZHVjZWRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50U3RyaW5nID0gZGVkdWNlZFN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtsYXN0U3RlcFN0cmluZ30nIGxhc3Qgc3RlcCB3aXRoIHRoZSAnJHtkZWR1Y2VkU3RhdGVtZW50U3RyaW5nfScgZGVkdWNlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3QgbGFzdFN0ZXBDb250ZXh0ID0gbGFzdFN0ZXAuZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gbGFzdFN0ZXBDb250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgbGFzdFN0ZXBTdGF0ZW1lbnQgPSBsYXN0U3RlcC5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gZGVkdWNlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChsYXN0U3RlcFN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGxhc3RTdGVwU3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBsYXN0U3RlcFVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChsYXN0U3RlcFN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgICAgIGxhc3RTdGVwVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxhc3RTdGVwVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7bGFzdFN0ZXBTdHJpbmd9JyBsYXN0IHN0ZXAgd2l0aCB0aGUgJyR7ZGVkdWNlZFN0YXRlbWVudFN0cmluZ30nIGRlZHVjZWQgc3RhdGVtZW50LmApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihsYXN0U3RlcFVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgc3VwcG9zZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuLi5gKVxuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpO1xuXG4gICAgc3BlY2lmaWNDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25TdGF0ZW1lbnQgPSBzdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQoc3VwcG9zaXRpb25TdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdXBwb3NpdGlvblN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VwcG9zaXRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3VwcG9zaXRpb25TdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgICBzdXBwb3NpdGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXBwb3NpdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQuYClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uVW5pZmllcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnRzID0gdGhpcy5nZXRTdXBwb3NlZFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9uc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VwcG9zaXRpb25zVW5pZnkpO1xuICAgIH1cblxuICAgIGxldCBpbmRleCA9IHN1cHBvc2l0aW9uc0xlbmd0aDsgLy8vXG5cbiAgICByZXR1cm4gYmFja3dhcmRzRXZlcnkoc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGZvcndhcmQsIGJhY2spID0+IHtcbiAgICAgIGluZGV4LS07XG5cbiAgICAgIGNvbnN0IHN1cHBvc2VkU3RhdGVtZW50ID0gc3VwcG9zZWRTdGF0ZW1lbnRzW2luZGV4XTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgc3VwcG9zZWRTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgIH0sIGZvcndhcmQsIGJhY2spO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlN1YnByb29mQXNzZXJ0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb3JBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICBzdWJwcm9vckFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29yQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWV0Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1ldE5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG4iXSwibmFtZXMiOlsibGFzdCIsImZyb250IiwiYXJyYXlVdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiYWxsIiwiZXZlcnkiLCJiYWNrd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50cyIsImdldFN0YXRlbWVudHMiLCJnZXREZWR1Y2VkU3RhdGVtZW50IiwibGFzdFN0YXRlbWVudCIsImRlZHVjZWRTdGF0ZW1lbnQiLCJnZXRTdXBwb3NlZFN0YXRlbWVudHMiLCJmcm9udFN0YXRlbWVudHMiLCJzdXBwb3NlZFN0YXRlbWVudHMiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImZpbmRBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVTdGF0ZW1lbnRzIiwiYmluZCIsImFkZEFzc2VydGlvbiIsInN0YXRlbWVudCIsImRlY2xhcmUiLCJ1bmlmeVN1YnByb29mIiwic3VicHJvb2YiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN1YnByb29mU3RyaW5nIiwibGFzdFN0ZXAiLCJnZXRMYXN0U3RlcCIsInVuaWZ5TGFzdFN0ZXAiLCJsYXN0U3RlcFVuaWZpZXMiLCJzdWJwcm9vZlVuaWZpZXMiLCJjb250aW51YXRpb24iLCJzdXBwb3NpdGlvbnMiLCJnZXRTdXBwb3NpdGlvbnMiLCJ1bmlmeVN1cHBvc2l0aW9ucyIsInN1cHBvc2l0aW9uc1VuaWZ5IiwibGFzdFN0ZXBTdHJpbmciLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwibGFzdFN0ZXBDb250ZXh0IiwiZ2V0Q29udGV4dCIsImpvaW4iLCJyZWNvbmNpbGUiLCJsYXN0U3RlcFN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50IiwibGFzdFN0ZXBTdGF0ZW1lbnRVbmlmaWVzIiwiY29tbWl0IiwidW5pZnlTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uIiwic3VwcG9zZWRTdGF0ZW1lbnQiLCJzdXBwb3NpdGlvblN0cmluZyIsInN1cHBvc2VkU3RhdGVtZW50U3RyaW5nIiwic3VwcG9zaXRpb25Db250ZXh0Iiwic3VwcG9zaXRpb25TdGF0ZW1lbnQiLCJzdXBwb3NpdGlvblN0YXRlbWVudFVuaWZpZXMiLCJzdXBwb3NpdGlvblVuaWZpZXMiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgiLCJpbmRleCIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJzdWJwcm9vckFzc2VydGlvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsInN0YXRlbWV0Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OzsyQkFmK0I7Z0NBQzRCO2tFQUVyQzswQkFFQzt1QkFDQzt5QkFDcUI7NkJBQ0E7eUJBQ007Ozs7OztBQUVuRCxNQUFNLEVBQUVBLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlC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
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9zdWJwcm9vZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBqb2luLCByZWNvbmNpbGUsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVN1YnByb29mQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBsYXN0LCBmcm9udCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYWxsLCBldmVyeSwgYmFja3dhcmRzRXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFN1YnByb29mQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnRzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHM7XG4gIH1cblxuICBnZXREZWR1Y2VkU3RhdGVtZW50KCkge1xuICAgIGNvbnN0IGxhc3RTdGF0ZW1lbnQgPSBsYXN0KHRoaXMuc3RhdGVtZW50cyksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudCA9IGxhc3RTdGF0ZW1lbnQ7IC8vL1xuXG4gICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRTdXBwb3NlZFN0YXRlbWVudHMoKSB7XG4gICAgY29uc3QgZnJvbnRTdGF0ZW1lbnRzID0gZnJvbnQodGhpcy5zdGF0ZW1lbnRzKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHMgPSBmcm9udFN0YXRlbWVudHM7ICAvLy9cblxuICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudHM7XG4gIH1cblxuICBnZXRTdXBwb3NlZFN0YXRlbWVudChpbmRleCkge1xuICAgIGNvbnN0IHN1cHBvc2VkU3RhdGVtZW50cyA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgc3VwcG9zZWRTdGF0ZW1lbnQgPSBzdXBwb3NlZFN0YXRlbWVudHNbaW5kZXhdO1xuXG4gICAgcmV0dXJuIHN1cHBvc2VkU3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3VicHJvb2ZBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbk5vZGU7XG4gIH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGxldCBhc3NlcnRpb247XG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBhc3NlcnRpb24gPSB0aGlzLmZpbmRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAoYXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbiBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkIChzdWJwcm9vZkFzc2VydGlvbiwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgYXNzZXJ0aW9uID0gdGhpczsgLy8vXG5cbiAgICBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudHMgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50cy5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2YWxpZGF0ZVN0YXRlbWVudHNcbiAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN1YnByb29mQXNzZXJ0aW9uLCBjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50cyhzdGF0ZSwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24ncyBzdGF0ZW1lbnRzLi4uYCk7XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy5zdGF0ZW1lbnRzLCAoc3RhdGVtZW50LCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0YXRlbWVudC52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHN0YXRlbWVudCwgY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uJ3Mgc3RhdGVtZW50cy5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoc3RhdGUsIGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpLFxuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgbGFzdFN0ZXAgPSBzdWJwcm9vZi5nZXRMYXN0U3RlcCgpO1xuXG4gICAgcmV0dXJuIHRoaXMudW5pZnlMYXN0U3RlcChsYXN0U3RlcCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHN1YnByb29mLmdldFN1cHBvc2l0aW9ucygpO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9ucyhzdXBwb3NpdGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICB9LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHVuaWZ5TGFzdFN0ZXAobGFzdFN0ZXAsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgbGFzdFN0ZXBTdHJpbmcgPSBsYXN0U3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50ID0gdGhpcy5nZXREZWR1Y2VkU3RhdGVtZW50KCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudFN0cmluZyA9IGRlZHVjZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7bGFzdFN0ZXBTdHJpbmd9JyBsYXN0IHN0ZXAgd2l0aCB0aGUgJyR7ZGVkdWNlZFN0YXRlbWVudFN0cmluZ30nIGRlZHVjZWQgc3RhdGVtZW50Li4uYClcblxuICAgIGNvbnN0IGxhc3RTdGVwQ29udGV4dCA9IGxhc3RTdGVwLmdldENvbnRleHQoKTtcblxuICAgIHNwZWNpZmljQ29udGV4dCA9IGxhc3RTdGVwQ29udGV4dDsgIC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGxhc3RTdGVwU3RhdGVtZW50ID0gbGFzdFN0ZXAuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgICAgcmV0dXJuIGRlZHVjZWRTdGF0ZW1lbnQudW5pZnlTdGF0ZW1lbnQobGFzdFN0ZXBTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke2xhc3RTdGVwU3RyaW5nfScgbGFzdCBzdGVwIHdpdGggdGhlICcke2RlZHVjZWRTdGF0ZW1lbnRTdHJpbmd9JyBkZWR1Y2VkIHN0YXRlbWVudC5gKTtcblxuICAgICAgICAgIHJldHVybiBmb3J3YXJkKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spO1xuICAgICAgICB9LCBiYWNrKTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaywgaW5kZXgpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudCA9IHRoaXMuZ2V0U3VwcG9zZWRTdGF0ZW1lbnQoaW5kZXgpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50U3RyaW5nID0gc3VwcG9zZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbiB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC4uLmApXG5cbiAgICBjb25zdCBzdXBwb3NpdGlvbkNvbnRleHQgPSBzdXBwb3NpdGlvbi5nZXRDb250ZXh0KCk7XG5cbiAgICBzcGVjaWZpY0NvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3NpdGlvblN0YXRlbWVudCA9IHN1cHBvc2l0aW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICAgIHJldHVybiBzdXBwb3NlZFN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdXBwb3NpdGlvblN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGJhY2spID0+IHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgIC8vL1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbiB3aXRoIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudC5gKVxuXG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgYmFjayk7XG4gICAgICAgIH0sIGJhY2spO1xuICAgICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnRzID0gdGhpcy5nZXRTdXBwb3NlZFN0YXRlbWVudHMoKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNMZW5ndGggPSBzdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBmb3J3YXJkLCBiYWNrLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgZm9yd2FyZCwgYmFjaywgaW5kZXgpO1xuICAgIH0sIGZvcndhcmQsIGJhY2spO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlN1YnByb29mQXNzZXJ0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb3JBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlU3VicHJvb2ZBc3NlcnRpb24oc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHN1YnByb29mQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnRzID0gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICBzdWJwcm9vckFzc2VydGlvbiA9IG5ldyBTdWJwcm9vZkFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudHMpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnByb29yQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3RhdGVtZW50c0Zyb21TdWJwcm9vZkFzc2VydGlvbk5vZGUoc3VicHJvb2ZBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGVzID0gc3VicHJvb2ZBc3NlcnRpb25Ob2RlLmdldFN0YXRlbWVudE5vZGVzKCksXG4gICAgICAgIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnROb2Rlcy5tYXAoKHN0YXRlbWV0Tm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1ldE5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG4iXSwibmFtZXMiOlsibGFzdCIsImZyb250IiwiYXJyYXlVdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiYWxsIiwiZXZlcnkiLCJiYWNrd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImRlZmluZSIsIlN1YnByb29mQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50cyIsImdldFN0YXRlbWVudHMiLCJnZXREZWR1Y2VkU3RhdGVtZW50IiwibGFzdFN0YXRlbWVudCIsImRlZHVjZWRTdGF0ZW1lbnQiLCJnZXRTdXBwb3NlZFN0YXRlbWVudHMiLCJmcm9udFN0YXRlbWVudHMiLCJzdXBwb3NlZFN0YXRlbWVudHMiLCJnZXRTdXBwb3NlZFN0YXRlbWVudCIsImluZGV4Iiwic3VwcG9zZWRTdGF0ZW1lbnQiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJzdGF0ZSIsImZvcndhcmQiLCJiYWNrIiwiYXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImZpbmRBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVTdGF0ZW1lbnRzIiwiYmluZCIsImFkZEFzc2VydGlvbiIsInN0YXRlbWVudCIsImRlY2xhcmUiLCJ1bmlmeVN1YnByb29mIiwic3VicHJvb2YiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN1YnByb29mU3RyaW5nIiwibGFzdFN0ZXAiLCJnZXRMYXN0U3RlcCIsInVuaWZ5TGFzdFN0ZXAiLCJzdXBwb3NpdGlvbnMiLCJnZXRTdXBwb3NpdGlvbnMiLCJ1bmlmeVN1cHBvc2l0aW9ucyIsImxhc3RTdGVwU3RyaW5nIiwiZGVkdWNlZFN0YXRlbWVudFN0cmluZyIsImxhc3RTdGVwQ29udGV4dCIsImdldENvbnRleHQiLCJqb2luIiwicmVjb25jaWxlIiwibGFzdFN0ZXBTdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudCIsImNvbW1pdCIsInVuaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmciLCJzdXBwb3NpdGlvbkNvbnRleHQiLCJzdXBwb3NpdGlvblN0YXRlbWVudCIsInN1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsInN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJzdWJwcm9vckFzc2VydGlvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudHNGcm9tU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJnZXRTdGF0ZW1lbnROb2RlcyIsIm1hcCIsInN0YXRlbWV0Tm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWlCQTs7O2VBQUE7OzsyQkFmK0I7Z0NBQzRCO2tFQUVyQzswQkFFQzt1QkFDQzt5QkFDcUI7NkJBQ0E7eUJBQ007Ozs7OztBQUVuRCxNQUFNLEVBQUVBLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjLEVBQ2hDLEVBQUVDLGtCQUFrQixFQUFFLEdBQUdDLG1DQUFtQixFQUM1QyxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHFDQUFxQjtNQUU1RCxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLDBCQUEwQkMsa0JBQVM7SUFDN0QsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxVQUFVLENBQUU7UUFDekQsS0FBSyxDQUFDSixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLFVBQVUsR0FBR0E7SUFDcEI7SUFFQUMsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNELFVBQVU7SUFDeEI7SUFFQUUsc0JBQXNCO1FBQ3BCLE1BQU1DLGdCQUFnQm5CLEtBQUssSUFBSSxDQUFDZ0IsVUFBVSxHQUNwQ0ksbUJBQW1CRCxlQUFlLEdBQUc7UUFFM0MsT0FBT0M7SUFDVDtJQUVBQyx3QkFBd0I7UUFDdEIsTUFBTUMsa0JBQWtCckIsTUFBTSxJQUFJLENBQUNlLFVBQVUsR0FDdkNPLHFC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
@@ -74,9 +74,7 @@ class Claim extends _occamlanguages.Element {
74
74
  verifySuppositions,
75
75
  verifyDeduction,
76
76
  verifyProof
77
- ], context, ()=>{
78
- debugger;
79
- }, back);
77
+ ], context, forward, back);
80
78
  }, context);
81
79
  }
82
80
  verifyLabels(context, forward, back) {
@@ -209,24 +207,29 @@ class Claim extends _occamlanguages.Element {
209
207
  });
210
208
  }, context);
211
209
  }
212
- unifyFactOrSubproofsWithSupposition(factorSubproofs, supposition, context, forward, back) {
213
- return extract(factorSubproofs, (factOrSubproof, continuation1)=>{
214
- return supposition.unifyFactOrSubproof(factOrSubproof, context, continuation1);
215
- }, (factOrSubproof = null)=>{
216
- if (factOrSubproof !== null) {
217
- const factorSubproofsUnifiesWithSupposition = true;
218
- return context.solveInferredSubstitutions(()=>{
219
- return continuation(factorSubproofsUnifiesWithSupposition);
220
- });
210
+ unifyFactOrSubproofsWithSupposition(factOrSubproofs, supposition, context, forward, back) {
211
+ return extract(factOrSubproofs, (factOrSubproof, forward, back)=>{
212
+ return supposition.unifyFactOrSubproof(factOrSubproof, context, forward, back);
213
+ }, (factOrSubproofs, factOrSubproof, context, back)=>{
214
+ return context.solveInferredSubstitutions((back)=>{
215
+ return forward(factOrSubproofs, context, back);
216
+ }, back);
217
+ }, (exception)=>{
218
+ if (exception) {
219
+ return back(exception);
221
220
  }
222
- return supposition.unifyIndependently(context, continuation);
221
+ return supposition.unifyIndependently(context, (context, back)=>{
222
+ return forward(factOrSubproofs, context, back);
223
+ }, back);
223
224
  });
224
225
  }
225
- unifyFactOrSubproofsWithSuppositions(factorSubproofs, context, forward, back) {
226
- factorSubproofs = reverse(factorSubproofs); ///
227
- return backwardsEvery(this.suppositions, (supposition, continuation1)=>{
228
- return this.unifyFactOrSubproofsWithSupposition(factorSubproofs, supposition, context, continuation1);
229
- }, continuation);
226
+ unifyFactOrSubproofsWithSuppositions(factOrSubproofs, context, forward, back) {
227
+ factOrSubproofs = reverse(factOrSubproofs); ///
228
+ return backwardsEvery(this.suppositions, (supposition, factOrSubproofs, context, forward, back)=>{
229
+ return this.unifyFactOrSubproofsWithSupposition(factOrSubproofs, supposition, context, forward, back);
230
+ }, factOrSubproofs, context, (factOrSubproofs, context, back)=>{
231
+ return forward(context, back);
232
+ }, back);
230
233
  }
231
234
  toJSON() {
232
235
  const labelsJSON = (0, _json.labelsToLabelsJSON)(this.labels), deductionJSON = (0, _json.deductionToDeductionJSON)(this.deduction), suppositionsJSON = (0, _json.suppositionsToSuppositionsJSON)(this.suppositions), signatureJSON = (0, _json.signatureToSignatureJSON)(this.signature), hypothesesJSON = (0, _json.hypothesesToHypothesesJSON)(this.hypotheses), string = this.getString();
@@ -251,4 +254,4 @@ class Claim extends _occamlanguages.Element {
251
254
  }
252
255
  }
253
256
 
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NsYWltLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZW5jbG9zZSwgcmVjb25jaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgbGFiZWxzRnJvbUpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Gcm9tSlNPTixcbiAgICAgICAgIHNpZ25hdHVyZUZyb21KU09OLFxuICAgICAgICAgbGFiZWxzVG9MYWJlbHNKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc0Zyb21KU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zRnJvbUpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04sXG4gICAgICAgICBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04sXG4gICAgICAgICBoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHJldmVyc2UgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBhbGwsIGV2ZXJ5LCBleHRyYWN0LCBmb3J3YXJkc0V2ZXJ5LCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGFpbSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5sYWJlbHMgPSBsYWJlbHM7XG4gICAgdGhpcy5zdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnM7XG4gICAgdGhpcy5kZWR1Y3Rpb24gPSBkZWR1Y3Rpb247XG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBnZXRMYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnN1cHBvc2l0aW9ucztcbiAgfVxuXG4gIGdldERlZHVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb247XG4gIH1cblxuICBnZXRQcm9vZigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9vZjtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmU7XG4gIH1cblxuICBnZXRIeXBvdGhlc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh5cG90aGVzZXM7XG4gIH1cblxuICBzZXRIeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb24oaW5kZXgpIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHRoaXMuc3VwcG9zaXRpb25zW2luZGV4XSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9XG5cbiAgaXNTYXRpc2ZpYWJsZSgpIHtcbiAgICBjb25zdCBzYXRpc2ZpYWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHNhdGlzZmlhYmxlO1xuICB9XG5cbiAgaXNIeXBvdGhldGljYWwoKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlc0xlbmd0aCA9IHRoaXMuaHlwb3RoZXNlcy5sZW5ndGgsXG4gICAgICAgICAgaHlwb3RoZXRpY2FsID0gKGh5cG90aGVzZXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBoeXBvdGhldGljYWw7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB2ZXJpZnlFeChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgIHZlcmlmeURlZHVjdGlvbixcbiAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgIF0sIGNvbnRleHQsICgpID0+IHtcbiAgICAgICAgZGVidWdnZXJcbiAgICAgIH0sIGJhY2spO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdmVyaWZ5TGFiZWxzKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIGxhYmVscy4uLmApO1xuXG4gICAgY29uc3QgdmVyaWZ5TGFiZWwgPSB0aGlzLnZlcmlmeUxhYmVsLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy5sYWJlbHMsIHZlcmlmeUxhYmVsLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBsYWJlbHMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLi4uYCk7XG5cbiAgICByZXR1cm4gbGFiZWwudmVyaWZ5KChiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmVyaWZ5UHJvb2YoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHByb29mLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIHJldHVybiB0aGlzLnByb29mLnZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQsIChwcm9vZlZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHByb29mLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHByb29mVmVyaWZpZXMsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5RGVkdWN0aW9uKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IHRoaXMuZGVkdWN0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb24udmVyaWZ5KGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbi52ZXJpZnkoY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGZhY3RPclN1YnByb29mID0gc3VwcG9zaXRpb247ICAvLy8vXG5cbiAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgY29udGV4dC5hZGRGYWN0T3JTdWJwcm9vZihmYWN0T3JTdWJwcm9vZik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2ZXJpZnlTdXBwb3NpdGlvbnMoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3Mgc3VwcG9zaXRpb25zLi4uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZHNFdmVyeSh0aGlzLnN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3Mgc3VwcG9zaXRpb25zLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzaXMoaHlwb3RoZXNpcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgaHlwb3RoZXNpc1N0cmluZyA9IGh5cG90aGVzaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLi4uYCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcy5kaXNjaGFyZ2UoY29udGV4dCwgKGh5cG90aGVzaXNEaXNjaGFyZ2VzLCBjb250ZXh0KSA9PiB7XG4gICAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4uZGlzY2hhcmdlcyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGh5cG90aGVzaXNEaXNjaGFyZ2VzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzZXMoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGh5cG90aGVzZXMgPSB0aGlzLmdldEh5cG90aGVzZXMoKSxcbiAgICAgICAgIGh5cG90aGVzZXNMZW5ndGggPSBoeXBvdGhlc2VzLmxlbmd0aDtcblxuICAgIGlmIChoeXBvdGhlc2VzTGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBoeXBvdGhlc2VzRGlzY2hhcmdlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oaHlwb3RoZXNlc0Rpc2NoYXJnZWQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIGh5cG90aGVzZXMuLi5gKTtcblxuICAgIGNvbnN0IGRpc2NoYXJnZUh5cG90aGVzaXMgPSB0aGlzLmRpc2NoYXJnZUh5cG90aGVzaXMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBldmVyeShoeXBvdGhlc2VzLCBkaXNjaGFyZ2VIeXBvdGhlc2lzLCBjb250ZXh0LCAoaHlwb3RoZXNlc0Rpc2NoYXJnZWQpID0+IHtcbiAgICAgIGlmIChoeXBvdGhlc2VzRGlzY2hhcmdlZCkge1xuICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgaHlwb3RoZXNlcy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihoeXBvdGhlc2VzRGlzY2hhcmdlZCwgY29udGV4dCk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0ZXBXaXRoRGVkdWN0aW9uKHN0ZXAsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uLnVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCAoc3RlcFVuaWZpZXMpID0+IHtcbiAgICAgIGxldCBzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24gPSBmYWxzZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzKSB7XG4gICAgICAgIHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyhzdGVwLCBmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN0ZXBXaXRoRGVkdWN0aW9uKHN0ZXAsIGNvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzV2l0aERlZHVjdGlvbikgPT4ge1xuICAgICAgICBpZiAoIXN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICAgICAgY29uc3Qgc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2VzKGNvbnRleHQsIChoeXBvdGhlc2VzRGlzY2hhcmdlKSA9PiB7XG4gICAgICAgICAgaWYgKCFoeXBvdGhlc2VzRGlzY2hhcmdlKSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyhmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIChmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoZmFjdG9yU3VicHJvb2ZzVW5pZmllc1dpdGhTdXBwb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkID0gY29udGV4dC5hcmVJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQoKTtcblxuICAgICAgICAgICAgICBpZiAoaW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkKSB7XG4gICAgICAgICAgICAgICAgc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbihmYWN0b3JTdWJwcm9vZnMsIHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgcmV0dXJuIGV4dHJhY3QoZmFjdG9yU3VicHJvb2ZzLCAoZmFjdE9yU3VicHJvb2YsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHN1cHBvc2l0aW9uLnVuaWZ5RmFjdE9yU3VicHJvb2YoZmFjdE9yU3VicHJvb2YsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgKGZhY3RPclN1YnByb29mID0gbnVsbCkgPT4ge1xuICAgICAgaWYgKGZhY3RPclN1YnByb29mICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGZhY3RvclN1YnByb29mc1VuaWZpZXNXaXRoU3VwcG9zaXRpb24gPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBjb250ZXh0LnNvbHZlSW5mZXJyZWRTdWJzdGl0dXRpb25zKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGZhY3RvclN1YnByb29mc1VuaWZpZXNXaXRoU3VwcG9zaXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1cHBvc2l0aW9uLnVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlGYWN0T3JTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb25zKGZhY3RvclN1YnByb29mcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGZhY3RvclN1YnByb29mcyA9IHJldmVyc2UoZmFjdG9yU3VicHJvb2ZzKTsgLy8vXG5cbiAgICByZXR1cm4gYmFja3dhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbihmYWN0b3JTdWJwcm9vZnMsIHN1cHBvc2l0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIGNvbnRpbnVhdGlvbik7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVsc1RvTGFiZWxzSlNPTih0aGlzLmxhYmVscyksXG4gICAgICAgICAgZGVkdWN0aW9uSlNPTiA9IGRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTih0aGlzLmRlZHVjdGlvbiksXG4gICAgICAgICAgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTih0aGlzLnN1cHBvc2l0aW9ucyksXG4gICAgICAgICAgc2lnbmF0dXJlSlNPTiA9IHNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTih0aGlzLnNpZ25hdHVyZSksXG4gICAgICAgICAgaHlwb3RoZXNlc0pTT04gPSBoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTih0aGlzLmh5cG90aGVzZXMpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGxhYmVscyA9IGxhYmVsc0pTT04sICAvLy9cbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25KU09OLCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zSlNPTiwgIC8vL1xuICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUpTT04sICAvLy9cbiAgICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0pTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIGRlZHVjdGlvbixcbiAgICAgICAgICAgIHN1cHBvc2l0aW9ucyxcbiAgICAgICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgICAgIGh5cG90aGVzZXNcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oQ2xhc3MsIGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBsYWJlbHNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzaWduYXR1cmUgPSBzaWduYXR1cmVGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBoeXBvdGhlc2VzID0gaHlwb3RoZXNlc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGNsYWltU3RyaW5nID0gY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVscywgc2lnbmF0dXJlLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgICAgc3RyaW5nID0gY2xhaW1TdHJpbmcsIC8vL1xuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICAgIGNsYWltID0gbmV3IENsYXNzKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIHNpZ25hdHVyZSwgaHlwb3RoZXNlcyk7XG5cbiAgICByZXR1cm4gY2xhaW07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJDbGFpbSIsInJldmVyc2UiLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImFsbCIsImV2ZXJ5IiwiZXh0cmFjdCIsImZvcndhcmRzRXZlcnkiLCJiYWNrd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJsYWJlbHMiLCJzdXBwb3NpdGlvbnMiLCJkZWR1Y3Rpb24iLCJwcm9vZiIsInNpZ25hdHVyZSIsImh5cG90aGVzZXMiLCJnZXRMYWJlbHMiLCJnZXRTdXBwb3NpdGlvbnMiLCJnZXREZWR1Y3Rpb24iLCJnZXRQcm9vZiIsImdldFNpZ25hdHVyZSIsImdldEh5cG90aGVzZXMiLCJzZXRIeXBvdGhlc2VzIiwiZ2V0U3VwcG9zaXRpb24iLCJpbmRleCIsInN1cHBvc2l0aW9uIiwiaXNTYXRpc2ZpYWJsZSIsInNhdGlzZmlhYmxlIiwiaXNIeXBvdGhldGljYWwiLCJoeXBvdGhlc2VzTGVuZ3RoIiwibGVuZ3RoIiwiaHlwb3RoZXRpY2FsIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwic29tZSIsImxhYmVsIiwidmVyaWZ5RXgiLCJmb3J3YXJkIiwiYmFjayIsImVuY2xvc2UiLCJ2ZXJpZnlQcm9vZiIsImJpbmQiLCJ2ZXJpZnlMYWJlbHMiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJjbGFpbVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmVyaWZ5TGFiZWwiLCJkZWJ1ZyIsImxhYmVsU3RyaW5nIiwidmVyaWZ5Iiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwicHJvb2ZWZXJpZmllcyIsImNvbnRpbnVhdGlvbiIsImRlZHVjdGlvblN0cmluZyIsInZlcmlmeVN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25TdHJpbmciLCJmYWN0T3JTdWJwcm9vZiIsImFzc2lnbkFzc2lnbm1lbnRzIiwiYWRkRmFjdE9yU3VicHJvb2YiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJkaXNjaGFyZ2VIeXBvdGhlc2lzIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNTdHJpbmciLCJkaXNjaGFyZ2UiLCJoeXBvdGhlc2lzRGlzY2hhcmdlcyIsImRpc2NoYXJnZUh5cG90aGVzZXMiLCJoeXBvdGhlc2VzRGlzY2hhcmdlZCIsInVuaWZ5U3RlcFdpdGhEZWR1Y3Rpb24iLCJzdGVwIiwicnVsZVN0cmluZyIsInN0ZXBTdHJpbmciLCJ1bmlmeVN0ZXAiLCJzdGVwVW5pZmllcyIsInN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiIsInVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyIsImZhY3RvclN1YnByb29mcyIsInJlY29uY2lsZSIsInN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uIiwic3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5IiwiaHlwb3RoZXNlc0Rpc2NoYXJnZSIsInVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyIsImZhY3RvclN1YnByb29mc1VuaWZpZXNXaXRoU3VwcG9zaXRpb25zIiwiaW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkIiwiYXJlSW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkIiwidW5pZnlGYWN0T3JTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb24iLCJ1bmlmeUZhY3RPclN1YnByb29mIiwiZmFjdG9yU3VicHJvb2ZzVW5pZmllc1dpdGhTdXBwb3NpdGlvbiIsInNvbHZlSW5mZXJyZWRTdWJzdGl0dXRpb25zIiwidW5pZnlJbmRlcGVuZGVudGx5IiwidG9KU09OIiwibGFiZWxzSlNPTiIsImxhYmVsc1RvTGFiZWxzSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwic2lnbmF0dXJlSlNPTiIsInNpZ25hdHVyZVRvU2lnbmF0dXJlSlNPTiIsImh5cG90aGVzZXNKU09OIiwiaHlwb3RoZXNlc1RvSHlwb3RoZXNlc0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJDbGFzcyIsImxhYmVsc0Zyb21KU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsInNpZ25hdHVyZUZyb21KU09OIiwiaHlwb3RoZXNlc0Zyb21KU09OIiwiY2xhaW1TdHJpbmdGcm9tTGFiZWxzU2lnbmF0dXJlU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIiwiY2xhaW0iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXNCQTs7O2VBQXFCQTs7OzJCQXBCVTtnQ0FDcUM7eUJBRWpDO3dCQUNvQztzQkFVeEI7QUFFL0MsTUFBTSxFQUFFQyxPQUFPLEVBQUUsR0FBR0MseUJBQWMsRUFDNUIsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQixFQUN4RSxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxhQUFhLEVBQUVDLGNBQWMsRUFBRSxHQUFHQyxxQ0FBcUI7QUFFckUsTUFBTVgsY0FBY1ksdUJBQU87SUFDeEMsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxNQUFNLEVBQUVDLFlBQVksRUFBRUMsU0FBUyxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxDQUFFO1FBQzVHLEtBQUssQ0FBQ1QsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxZQUFZLEdBQUdBO1FBQ3BCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lBQ3BCO0lBRUFDLFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQ04sTUFBTTtJQUNwQjtJQUVBTyxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUNOLFlBQVk7SUFDMUI7SUFFQU8sZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDTixTQUFTO0lBQ3ZCO0lBRUFPLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQ04sS0FBSztJQUNuQjtJQUVBTyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNOLFNBQVM7SUFDdkI7SUFFQU8sZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNOLFVBQVU7SUFDeEI7SUFFQU8sY0FBY1AsVUFBVSxFQUFFO1FBQ3hCLElBQUksQ0FBQ0EsVUFBVSxHQUFHQTtJQUNwQjtJQUVBUSxlQUFlQyxLQUFLLEVBQUU7UUFDcEIsTUFBTUMsY0FBYyxJQUFJLENBQUNkLFlBQVksQ0FBQ2EsTUFBTSxJQUFJO1FBRWhELE9BQU9DO0lBQ1Q7SUFFQUMsZ0JBQWdCO1FBQ2QsTUFBTUMsY0FBYztRQUVwQixPQUFPQTtJQUNUO0lBRUFDLGlCQUFpQjtRQUNmLE1BQU1DLG1CQUFtQixJQUFJLENBQUNkLFVBQVUsQ0FBQ2UsTUFBTSxFQUN6Q0MsZUFBZ0JGLG1CQUFtQjtRQUV6QyxPQUFPRTtJQUNUO0lBRUFDLHNCQUFzQkMsZ0JBQWdCLEVBQUU7UUFDdEMsTUFBTUMsMEJBQTBCLElBQUksQ0FBQ3hCLE1BQU0sQ0FBQ3lCLElBQUksQ0FBQyxDQUFDQztZQUNoRCxNQUFNRiwwQkFBMEJFLE1BQU1KLHFCQUFxQixDQUFDQztZQUU1RCxJQUFJQyx5QkFBeUI7Z0JBQzNCLE9BQU87WUFDVDtRQUNGO1FBRUEsT0FBT0E7SUFDVDtJQUVBRyxTQUFTL0IsT0FBTyxFQUFFZ0MsT0FBTyxFQUFFQyxJQUFJLEVBQUU7UUFDL0IsT0FBT0MsSUFBQUEsZ0JBQU8sRUFBQyxDQUFDbEM7WUFDZCxNQUFNbUMsY0FBYyxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsSUFBSSxDQUFDLElBQUksR0FDeENDLGVBQWUsSUFBSSxDQUFDQSxZQUFZLENBQUNELElBQUksQ0FBQyxJQUFJLEdBQzFDRSxrQkFBa0IsSUFBSSxDQUFDQSxlQUFlLENBQUNGLElBQUksQ0FBQyxJQUFJLEdBQ2hERyxxQkFBcUIsSUFBSSxDQUFDQSxrQkFBa0IsQ0FBQ0gsSUFBSSxDQUFDLElBQUk7WUFFNUQsT0FBTzNDLElBQUk7Z0JBQ1Q0QztnQkFDQUU7Z0JBQ0FEO2dCQUNBSDthQUNELEVBQUVuQyxTQUFTO2dCQUNWLFFBQVE7WUFDVixHQUFHaUM7UUFDTCxHQUFHakM7SUFDTDtJQUVBcUMsYUFBYXJDLE9BQU8sRUFBRWdDLE9BQU8sRUFBRUMsSUFBSSxFQUFFO1FBQ25DLE1BQU1PLGNBQWMsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUUxQ3pDLFFBQVEwQyxLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFlBQVksbUJBQW1CLENBQUM7UUFFaEUsTUFBTUcsY0FBYyxJQUFJLENBQUNBLFdBQVcsQ0FBQ1AsSUFBSSxDQUFDLElBQUk7UUFFOUMsT0FBTzFDLE1BQU0sSUFBSSxDQUFDVSxNQUFNLEVBQUV1QyxhQUFhM0MsU0FBUyxDQUFDQSxTQUFTaUM7WUFDeERqQyxRQUFRNEMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVKLFlBQVksaUJBQWlCLENBQUM7WUFFaEUsT0FBT1IsUUFBUWhDLFNBQVNpQztRQUMxQixHQUFHQTtJQUNMO0lBRUFVLFlBQVliLEtBQUssRUFBRTlCLE9BQU8sRUFBRWdDLE9BQU8sRUFBRUMsSUFBSSxFQUFFO1FBQ3pDLE1BQU1ZLGNBQWNmLE1BQU1XLFNBQVMsSUFDN0JELGNBQWMsSUFBSSxDQUFDQyxTQUFTLElBQUksR0FBRztRQUV6Q3pDLFFBQVEwQyxLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFlBQVksV0FBVyxFQUFFSyxZQUFZLFVBQVUsQ0FBQztRQUVoRixPQUFPZixNQUFNZ0IsTUFBTSxDQUFDLENBQUNiO1lBQ25CakMsUUFBUTRDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFSixZQUFZLFdBQVcsRUFBRUssWUFBWSxRQUFRLENBQUM7WUFFaEYsT0FBT2IsUUFBUWhDLFNBQVNpQztRQUMxQixHQUFHQTtJQUNMO0lBRUFFLFlBQVluQyxPQUFPLEVBQUVnQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUNsQyxJQUFJLElBQUksQ0FBQzFCLEtBQUssS0FBSyxNQUFNO1lBQ3ZCLE9BQU95QixRQUFRaEMsU0FBU2lDO1FBQzFCO1FBRUEsTUFBTU8sY0FBYyxJQUFJLENBQUNDLFNBQVMsSUFBSyxHQUFHO1FBRTFDekMsUUFBUTBDLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsWUFBWSxrQkFBa0IsQ0FBQztRQUUvRCxNQUFNTyxZQUFZLElBQUksQ0FBQ3pDLFNBQVMsQ0FBQzBDLFlBQVk7UUFFN0MsT0FBTyxJQUFJLENBQUN6QyxLQUFLLENBQUN1QyxNQUFNLENBQUNDLFdBQVcvQyxTQUFTLENBQUNpRDtZQUM1QyxJQUFJQSxlQUFlO2dCQUNqQmpELFFBQVE0QyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRUosWUFBWSxnQkFBZ0IsQ0FBQztZQUNqRTtZQUVBLE9BQU9VLGFBQWFELGVBQWVqRDtRQUNyQztJQUNGO0lBRUFzQyxnQkFBZ0J0QyxPQUFPLEVBQUVnQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUN0QyxNQUFNTyxjQUFjLElBQUksQ0FBQ0MsU0FBUyxJQUM1QlUsa0JBQWtCLElBQUksQ0FBQzdDLFNBQVMsQ0FBQ21DLFNBQVM7UUFFaER6QyxRQUFRMEMsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixZQUFZLFdBQVcsRUFBRVcsZ0JBQWdCLGNBQWMsQ0FBQztRQUV4RixPQUFPLElBQUksQ0FBQzdDLFNBQVMsQ0FBQ3dDLE1BQU0sQ0FBQzlDLFNBQVMsQ0FBQ0EsU0FBU2lDO1lBQzlDakMsUUFBUTRDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFSixZQUFZLFdBQVcsRUFBRVcsZ0JBQWdCLFlBQVksQ0FBQztZQUV4RixPQUFPbkIsUUFBUWhDLFNBQVNpQztRQUMxQixHQUFHQTtJQUNMO0lBRUFtQixrQkFBa0JqQyxXQUFXLEVBQUVuQixPQUFPLEVBQUVnQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUNyRCxNQUFNTyxjQUFjLElBQUksQ0FBQ0MsU0FBUyxJQUM1Qlksb0JBQW9CbEMsWUFBWXNCLFNBQVM7UUFFL0N6QyxRQUFRMEMsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixZQUFZLFdBQVcsRUFBRWEsa0JBQWtCLGdCQUFnQixDQUFDO1FBRTVGLE9BQU9sQyxZQUFZMkIsTUFBTSxDQUFDOUMsU0FBUyxDQUFDQSxTQUFTaUM7WUFDM0MsTUFBTXFCLGlCQUFpQm5DLGFBQWMsSUFBSTtZQUV6Q25CLFFBQVF1RCxpQkFBaUI7WUFFekJ2RCxRQUFRd0QsaUJBQWlCLENBQUNGO1lBRTFCdEQsUUFBUTRDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFSixZQUFZLFdBQVcsRUFBRWEsa0JBQWtCLGNBQWMsQ0FBQztZQUU1RixPQUFPckIsUUFBUWhDLFNBQVNpQztRQUMxQixHQUFHQTtJQUNMO0lBRUFNLG1CQUFtQnZDLE9BQU8sRUFBRWdDLE9BQU8sRUFBRUMsSUFBSSxFQUFFO1FBQ3pDLE1BQU13QixxQkFBcUIsSUFBSSxDQUFDcEQsWUFBWSxDQUFDbUIsTUFBTTtRQUVuRCxJQUFJaUMsdUJBQXVCLEdBQUc7WUFDNUIsT0FBT3pCLFFBQVFoQyxTQUFTaUM7UUFDMUI7UUFFQSxNQUFNTyxjQUFjLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFMUN6QyxRQUFRMEMsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixZQUFZLHlCQUF5QixDQUFDO1FBRXRFLE9BQU81QyxjQUFjLElBQUksQ0FBQ1MsWUFBWSxFQUFFLENBQUNjLGFBQWFuQixTQUFTZ0MsU0FBU0M7WUFDdEUsT0FBTyxJQUFJLENBQUNtQixpQkFBaUIsQ0FBQ2pDLGFBQWFuQixTQUFTZ0MsU0FBU0M7UUFDL0QsR0FBR2pDLFNBQVMsQ0FBQ0EsU0FBU2lDO1lBQ3BCakMsUUFBUTRDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFSixZQUFZLHVCQUF1QixDQUFDO1lBRXRFLE9BQU9SLFFBQVFoQyxTQUFTaUM7UUFDMUIsR0FBR0E7SUFDTDtJQUVBeUIsb0JBQW9CQyxVQUFVLEVBQUUzRCxPQUFPLEVBQUVnQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUN0RCxNQUFNTyxjQUFjLElBQUksQ0FBQ0MsU0FBUyxJQUM1Qm1CLG1CQUFtQkQsV0FBV2xCLFNBQVM7UUFFN0N6QyxRQUFRMEMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVGLFlBQVksV0FBVyxFQUFFb0IsaUJBQWlCLGVBQWUsQ0FBQztRQUU1RixPQUFPRCxXQUFXRSxTQUFTLENBQUM3RCxTQUFTLENBQUM4RCxzQkFBc0I5RDtZQUMxRCxJQUFJOEQsc0JBQXNCO2dCQUN4QjlELFFBQVEwQyxLQUFLLENBQUMsQ0FBQyxtQkFBbUIsRUFBRUYsWUFBWSxXQUFXLEVBQUVvQixpQkFBaUIsYUFBYSxDQUFDO1lBQzlGO1lBRUEsT0FBT1YsYUFBYVksc0JBQXNCOUQ7UUFDNUM7SUFDRjtJQUVBK0Qsb0JBQW9CL0QsT0FBTyxFQUFFZ0MsT0FBTyxFQUFFQyxJQUFJLEVBQUU7UUFDMUMsTUFBTXhCLGFBQWEsSUFBSSxDQUFDTSxhQUFhLElBQ2hDUSxtQkFBbUJkLFdBQVdlLE1BQU07UUFFekMsSUFBSUQscUJBQXFCLEdBQUc7WUFDMUIsTUFBTXlDLHVCQUF1QjtZQUU3QixPQUFPZCxhQUFhYyxzQkFBc0JoRTtRQUM1QztRQUVBLE1BQU13QyxjQUFjLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFekN6QyxRQUFRMEMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVGLFlBQVksdUJBQXVCLENBQUM7UUFFdEUsTUFBTWtCLHNCQUFzQixJQUFJLENBQUNBLG1CQUFtQixDQUFDdEIsSUFBSSxDQUFDLElBQUk7UUFFOUQsT0FBTzFDLE1BQU1lLFlBQVlpRCxxQkFBcUIxRCxTQUFTLENBQUNnRTtZQUN0RCxJQUFJQSxzQkFBc0I7Z0JBQ3hCaEUsUUFBUTBDLEtBQUssQ0FBQyxDQUFDLG1CQUFtQixFQUFFRixZQUFZLHFCQUFxQixDQUFDO1lBQ3hFO1lBRUEsT0FBT1UsYUFBYWMsc0JBQXNCaEU7UUFDNUM7SUFDRjtJQUVBaUUsdUJBQXVCQyxJQUFJLEVBQUVsRSxPQUFPLEVBQUVnQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUNuRCxNQUFNa0MsYUFBYSxJQUFJLENBQUMxQixTQUFTLElBQzNCMkIsYUFBYUYsS0FBS3pCLFNBQVMsSUFDM0JVLGtCQUFrQixJQUFJLENBQUM3QyxTQUFTLENBQUNtQyxTQUFTO1FBRWhEekMsUUFBUTBDLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRTBCLFdBQVcsaUJBQWlCLEVBQUVELFdBQVcsVUFBVSxFQUFFaEIsZ0JBQWdCLGNBQWMsQ0FBQztRQUVuSCxPQUFPLElBQUksQ0FBQzdDLFNBQVMsQ0FBQytELFNBQVMsQ0FBQ0gsTUFBTWxFLFNBQVMsQ0FBQ3NFO1lBQzlDLElBQUlDLDJCQUEyQjtZQUUvQixJQUFJRCxhQUFhO2dCQUNmQywyQkFBMkI7WUFDN0I7WUFFQSxJQUFJQSwwQkFBMEI7Z0JBQzVCdkUsUUFBUTRDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFd0IsV0FBVyxpQkFBaUIsRUFBRUQsV0FBVyxVQUFVLEVBQUVoQixnQkFBZ0IsWUFBWSxDQUFDO1lBQ3JIO1lBRUEsT0FBT0QsYUFBYXFCLDBCQUEwQnZFO1FBQ2hEO0lBQ0Y7SUFFQXdFLDRCQUE0Qk4sSUFBSSxFQUFFTyxlQUFlLEVBQUV6RSxPQUFPLEVBQUVnQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUN6RSxPQUFPeUMsSUFBQUEsa0JBQVMsRUFBQyxDQUFDMUU7WUFDaEIsT0FBTyxJQUFJLENBQUNpRSxzQkFBc0IsQ0FBQ0MsTUFBTWxFLFNBQVMsQ0FBQzJFO2dCQUNqRCxJQUFJLENBQUNBLCtCQUErQjtvQkFDbEMsTUFBTUMsOEJBQThCO29CQUVwQyxPQUFPMUIsYUFBYTBCLDZCQUE2QjVFO2dCQUNuRDtnQkFFQSxPQUFPLElBQUksQ0FBQytELG1CQUFtQixDQUFDL0QsU0FBUyxDQUFDNkU7b0JBQ3hDLElBQUksQ0FBQ0EscUJBQXFCO3dCQUN4QixNQUFNRCw4QkFBOEI7d0JBRXBDLE9BQU8xQixhQUFhMEI7b0JBQ3RCO29CQUVBLE9BQU8sSUFBSSxDQUFDRSxvQ0FBb0MsQ0FBQ0wsaUJBQWlCekUsU0FBUyxDQUFDK0U7d0JBQzFFLElBQUlILDhCQUE4Qjt3QkFFbEMsSUFBSUcsd0NBQXdDOzRCQUMxQyxNQUFNQyw4QkFBOEJoRixRQUFRaUYsOEJBQThCOzRCQUUxRSxJQUFJRCw2QkFBNkI7Z0NBQy9CSiw4QkFBOEI7NEJBQ2hDO3dCQUNGO3dCQUVBLE9BQU8xQixhQUFhMEI7b0JBQ3RCO2dCQUNGO1lBQ0Y7UUFDRixHQUFHNUU7SUFDTDtJQUVBa0Ysb0NBQW9DVCxlQUFlLEVBQUV0RCxXQUFXLEVBQUVuQixPQUFPLEVBQUVnQyxPQUFPLEVBQUVDLElBQUksRUFBRTtRQUN4RixPQUFPdEMsUUFBUThFLGlCQUFpQixDQUFDbkIsZ0JBQWdCSjtZQUMvQyxPQUFPL0IsWUFBWWdFLG1CQUFtQixDQUFDN0IsZ0JBQWdCdEQsU0FBU2tEO1FBQ2xFLEdBQUcsQ0FBQ0ksaUJBQWlCLElBQUk7WUFDdkIsSUFBSUEsbUJBQW1CLE1BQU07Z0JBQzNCLE1BQU04Qix3Q0FBd0M7Z0JBRTlDLE9BQU9wRixRQUFRcUYsMEJBQTBCLENBQUM7b0JBQ3hDLE9BQU9uQyxhQUFha0M7Z0JBQ3RCO1lBQ0Y7WUFFQSxPQUFPakUsWUFBWW1FLGtCQUFrQixDQUFDdEYsU0FBU2tEO1FBQ2pEO0lBQ0Y7SUFFQTRCLHFDQUFxQ0wsZUFBZSxFQUFFekUsT0FBTyxFQUFFZ0MsT0FBTyxFQUFFQyxJQUFJLEVBQUU7UUFDNUV3QyxrQkFBa0JyRixRQUFRcUYsa0JBQWtCLEdBQUc7UUFFL0MsT0FBTzVFLGVBQWUsSUFBSSxDQUFDUSxZQUFZLEVBQUUsQ0FBQ2MsYUFBYStCO1lBQ3JELE9BQU8sSUFBSSxDQUFDZ0MsbUNBQW1DLENBQUNULGlCQUFpQnRELGFBQWFuQixTQUFTa0Q7UUFDekYsR0FBR0E7SUFDTDtJQUVBcUMsU0FBUztRQUNQLE1BQU1DLGFBQWFDLElBQUFBLHdCQUFrQixFQUFDLElBQUksQ0FBQ3JGLE1BQU0sR0FDM0NzRixnQkFBZ0JDLElBQUFBLDhCQUF3QixFQUFDLElBQUksQ0FBQ3JGLFNBQVMsR0FDdkRzRixtQkFBbUJDLElBQUFBLG9DQUE4QixFQUFDLElBQUksQ0FBQ3hGLFlBQVksR0FDbkV5RixnQkFBZ0JDLElBQUFBLDhCQUF3QixFQUFDLElBQUksQ0FBQ3ZGLFNBQVMsR0FDdkR3RixpQkFBaUJDLElBQUFBLGdDQUEwQixFQUFDLElBQUksQ0FBQ3hGLFVBQVUsR0FDM0RSLFNBQVMsSUFBSSxDQUFDd0MsU0FBUztRQUU3QixJQUFJdEM7UUFFSkEsYUFBYSxJQUFJLENBQUMrRixhQUFhO1FBRS9CLE1BQU1DLGlCQUFpQjVHLDJCQUEyQlk7UUFFbERBLGFBQWFnRyxnQkFBaUIsR0FBRztRQUVqQyxNQUFNL0YsU0FBU29GLFlBQ1RsRixZQUFZb0YsZUFDWnJGLGVBQWV1RixrQkFDZnBGLFlBQVlzRixlQUNackYsYUFBYXVGLGdCQUNiSSxPQUFPO1lBQ0xuRztZQUNBRTtZQUNBQztZQUNBRTtZQUNBRDtZQUNBRztZQUNBQztRQUNGO1FBRU4sT0FBTzJGO0lBQ1Q7SUFFQSxPQUFPQyxTQUFTQyxLQUFLLEVBQUVGLElBQUksRUFBRXBHLE9BQU8sRUFBRTtRQUNwQyxNQUFNSSxTQUFTbUcsSUFBQUEsb0JBQWMsRUFBQ0gsTUFBTXBHLFVBQzlCTSxZQUFZa0csSUFBQUEsdUJBQWlCLEVBQUNKLE1BQU1wRyxVQUNwQ0ssZUFBZW9HLElBQUFBLDBCQUFvQixFQUFDTCxNQUFNcEcsVUFDMUNRLFlBQVlrRyxJQUFBQSx1QkFBaUIsRUFBQ04sTUFBTXBHLFVBQ3BDUyxhQUFha0csSUFBQUEsd0JBQWtCLEVBQUNQLE1BQU1wRyxVQUN0Q3dDLGNBQWNvRSxJQUFBQSw4REFBc0QsRUFBQ3hHLFFBQVFJLFdBQVdILGNBQWNDLFlBQ3RHTCxTQUFTdUMsYUFDVHRDLE9BQU8sTUFDUEMsYUFBYWIsbUJBQW1COEcsT0FDaEM3RixRQUFRLE1BQ1JzRyxRQUFRLElBQUlQLE1BQU10RyxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZQyxRQUFRQyxjQUFjQyxXQUFXQyxPQUFPQyxXQUFXQztRQUU5RyxPQUFPb0c7SUFDVDtBQUNGIn0=
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NsYWltLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZW5jbG9zZSwgcmVjb25jaWxlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgbGFiZWxzRnJvbUpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Gcm9tSlNPTixcbiAgICAgICAgIHNpZ25hdHVyZUZyb21KU09OLFxuICAgICAgICAgbGFiZWxzVG9MYWJlbHNKU09OLFxuICAgICAgICAgaHlwb3RoZXNlc0Zyb21KU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zRnJvbUpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04sXG4gICAgICAgICBzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04sXG4gICAgICAgICBoeXBvdGhlc2VzVG9IeXBvdGhlc2VzSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IHJldmVyc2UgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzLFxuICAgICAgeyBhbGwsIGV2ZXJ5LCBleHRyYWN0LCBmb3J3YXJkc0V2ZXJ5LCBiYWNrd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGFpbSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVscywgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBzaWduYXR1cmUsIGh5cG90aGVzZXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5sYWJlbHMgPSBsYWJlbHM7XG4gICAgdGhpcy5zdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnM7XG4gICAgdGhpcy5kZWR1Y3Rpb24gPSBkZWR1Y3Rpb247XG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICAgIHRoaXMuc2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBnZXRMYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxzO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnN1cHBvc2l0aW9ucztcbiAgfVxuXG4gIGdldERlZHVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb247XG4gIH1cblxuICBnZXRQcm9vZigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9vZjtcbiAgfVxuXG4gIGdldFNpZ25hdHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduYXR1cmU7XG4gIH1cblxuICBnZXRIeXBvdGhlc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh5cG90aGVzZXM7XG4gIH1cblxuICBzZXRIeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgZ2V0U3VwcG9zaXRpb24oaW5kZXgpIHtcbiAgICBjb25zdCBzdXBwb3NpdGlvbiA9IHRoaXMuc3VwcG9zaXRpb25zW2luZGV4XSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICB9XG5cbiAgaXNTYXRpc2ZpYWJsZSgpIHtcbiAgICBjb25zdCBzYXRpc2ZpYWJsZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHNhdGlzZmlhYmxlO1xuICB9XG5cbiAgaXNIeXBvdGhldGljYWwoKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlc0xlbmd0aCA9IHRoaXMuaHlwb3RoZXNlcy5sZW5ndGgsXG4gICAgICAgICAgaHlwb3RoZXRpY2FsID0gKGh5cG90aGVzZXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBoeXBvdGhldGljYWw7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5sYWJlbHMuc29tZSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gbGFiZWwubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICB2ZXJpZnlFeChjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgcmV0dXJuIGVuY2xvc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5TGFiZWxzID0gdGhpcy52ZXJpZnlMYWJlbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeURlZHVjdGlvbiA9IHRoaXMudmVyaWZ5RGVkdWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMgPSB0aGlzLnZlcmlmeVN1cHBvc2l0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgICByZXR1cm4gYWxsKFtcbiAgICAgICAgdmVyaWZ5TGFiZWxzLFxuICAgICAgICB2ZXJpZnlTdXBwb3NpdGlvbnMsXG4gICAgICAgIHZlcmlmeURlZHVjdGlvbixcbiAgICAgICAgdmVyaWZ5UHJvb2ZcbiAgICAgIF0sIGNvbnRleHQsIGZvcndhcmQsIGJhY2spO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdmVyaWZ5TGFiZWxzKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIGxhYmVscy4uLmApO1xuXG4gICAgY29uc3QgdmVyaWZ5TGFiZWwgPSB0aGlzLnZlcmlmeUxhYmVsLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gZXZlcnkodGhpcy5sYWJlbHMsIHZlcmlmeUxhYmVsLCBjb250ZXh0LCAoY29udGV4dCwgYmFjaykgPT4ge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyBsYWJlbHMuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmVyaWZ5TGFiZWwobGFiZWwsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICAgIGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0ncyAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLi4uYCk7XG5cbiAgICByZXR1cm4gbGFiZWwudmVyaWZ5KChiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH0sIGJhY2spO1xuICB9XG5cbiAgdmVyaWZ5UHJvb2YoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHByb29mLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIHJldHVybiB0aGlzLnByb29mLnZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQsIChwcm9vZlZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIHByb29mLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHByb29mVmVyaWZpZXMsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5RGVkdWN0aW9uKGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBjbGFpbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IHRoaXMuZGVkdWN0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdGhpcy5kZWR1Y3Rpb24udmVyaWZ5KGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbi52ZXJpZnkoY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGZhY3RPclN1YnByb29mID0gc3VwcG9zaXRpb247ICAvLy8vXG5cbiAgICAgIGNvbnRleHQuYXNzaWduQXNzaWdubWVudHMoKTtcblxuICAgICAgY29udGV4dC5hZGRGYWN0T3JTdWJwcm9vZihmYWN0T3JTdWJwcm9vZik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoY29udGV4dCwgYmFjayk7XG4gICAgfSwgYmFjayk7XG4gIH1cblxuICB2ZXJpZnlTdXBwb3NpdGlvbnMoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGNvbnRleHQsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3Mgc3VwcG9zaXRpb25zLi4uYCk7XG5cbiAgICByZXR1cm4gZm9yd2FyZHNFdmVyeSh0aGlzLnN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgY29udGV4dCwgKGNvbnRleHQsIGJhY2spID0+IHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3Mgc3VwcG9zaXRpb25zLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzaXMoaHlwb3RoZXNpcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgaHlwb3RoZXNpc1N0cmluZyA9IGh5cG90aGVzaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLi4uYCk7XG5cbiAgICByZXR1cm4gaHlwb3RoZXNpcy5kaXNjaGFyZ2UoY29udGV4dCwgKGh5cG90aGVzaXNEaXNjaGFyZ2VzLCBjb250ZXh0KSA9PiB7XG4gICAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXMpIHtcbiAgICAgICAgY29udGV4dC50cmFjZShgLi4uZGlzY2hhcmdlcyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzICcke2h5cG90aGVzaXNTdHJpbmd9JyBoeXBvdGhlc2lzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGh5cG90aGVzaXNEaXNjaGFyZ2VzLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzZXMoY29udGV4dCwgZm9yd2FyZCwgYmFjaykge1xuICAgIGNvbnN0IGh5cG90aGVzZXMgPSB0aGlzLmdldEh5cG90aGVzZXMoKSxcbiAgICAgICAgIGh5cG90aGVzZXNMZW5ndGggPSBoeXBvdGhlc2VzLmxlbmd0aDtcblxuICAgIGlmIChoeXBvdGhlc2VzTGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBoeXBvdGhlc2VzRGlzY2hhcmdlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oaHlwb3RoZXNlc0Rpc2NoYXJnZWQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYWltU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSdzIGh5cG90aGVzZXMuLi5gKTtcblxuICAgIGNvbnN0IGRpc2NoYXJnZUh5cG90aGVzaXMgPSB0aGlzLmRpc2NoYXJnZUh5cG90aGVzaXMuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBldmVyeShoeXBvdGhlc2VzLCBkaXNjaGFyZ2VIeXBvdGhlc2lzLCBjb250ZXh0LCAoaHlwb3RoZXNlc0Rpc2NoYXJnZWQpID0+IHtcbiAgICAgIGlmIChoeXBvdGhlc2VzRGlzY2hhcmdlZCkge1xuICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltJ3MgaHlwb3RoZXNlcy5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihoeXBvdGhlc2VzRGlzY2hhcmdlZCwgY29udGV4dCk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN0ZXBXaXRoRGVkdWN0aW9uKHN0ZXAsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBjb25zdCBydWxlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdGVwU3RyaW5nID0gc3RlcC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZSdzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uLnVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCAoc3RlcFVuaWZpZXMpID0+IHtcbiAgICAgIGxldCBzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24gPSBmYWxzZTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzKSB7XG4gICAgICAgIHN0ZXBVbmlmaWVzV2l0aERlZHVjdGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwVW5pZmllc1dpdGhEZWR1Y3Rpb24pIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3RlcEFuZEZhY3RPclN1YnByb29mcyhzdGVwLCBmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICByZXR1cm4gcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN0ZXBXaXRoRGVkdWN0aW9uKHN0ZXAsIGNvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzV2l0aERlZHVjdGlvbikgPT4ge1xuICAgICAgICBpZiAoIXN0YXRlbWVudFVuaWZpZXNXaXRoRGVkdWN0aW9uKSB7XG4gICAgICAgICAgY29uc3Qgc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2VzKGNvbnRleHQsIChoeXBvdGhlc2VzRGlzY2hhcmdlKSA9PiB7XG4gICAgICAgICAgaWYgKCFoeXBvdGhlc2VzRGlzY2hhcmdlKSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyhmYWN0b3JTdWJwcm9vZnMsIGNvbnRleHQsIChmYWN0b3JTdWJwcm9vZnNVbmlmaWVzV2l0aFN1cHBvc2l0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoZmFjdG9yU3VicHJvb2ZzVW5pZmllc1dpdGhTdXBwb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkID0gY29udGV4dC5hcmVJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQoKTtcblxuICAgICAgICAgICAgICBpZiAoaW5mZXJyZWRTdWJzdGl0dXRpb25zU29sdmVkKSB7XG4gICAgICAgICAgICAgICAgc3RlcEFuZEZhY3RPclN1YnByb29mc1VuaWZ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN0ZXBBbmRGYWN0T3JTdWJwcm9vZnNVbmlmeSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbihmYWN0T3JTdWJwcm9vZnMsIHN1cHBvc2l0aW9uLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKSB7XG4gICAgcmV0dXJuIGV4dHJhY3QoZmFjdE9yU3VicHJvb2ZzLFxuICAgICAgKGZhY3RPclN1YnByb29mLCBmb3J3YXJkLCBiYWNrKSA9PiB7XG4gICAgICAgIHJldHVybiBzdXBwb3NpdGlvbi51bmlmeUZhY3RPclN1YnByb29mKGZhY3RPclN1YnByb29mLCBjb250ZXh0LCBmb3J3YXJkLCBiYWNrKTtcbiAgICAgIH0sIChmYWN0T3JTdWJwcm9vZnMsIGZhY3RPclN1YnByb29mLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgIHJldHVybiBjb250ZXh0LnNvbHZlSW5mZXJyZWRTdWJzdGl0dXRpb25zKChiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9LCAoZXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwcG9zaXRpb24udW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQsIChjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZvcndhcmQoZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKTtcbiAgICAgICAgfSwgYmFjayk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHVuaWZ5RmFjdE9yU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyhmYWN0T3JTdWJwcm9vZnMsIGNvbnRleHQsIGZvcndhcmQsIGJhY2spIHtcbiAgICBmYWN0T3JTdWJwcm9vZnMgPSByZXZlcnNlKGZhY3RPclN1YnByb29mcyk7IC8vL1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KHRoaXMuc3VwcG9zaXRpb25zLCAoc3VwcG9zaXRpb24sIGZhY3RPclN1YnByb29mcywgY29udGV4dCwgZm9yd2FyZCwgYmFjaykgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudW5pZnlGYWN0T3JTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb24oZmFjdE9yU3VicHJvb2ZzLCBzdXBwb3NpdGlvbiwgY29udGV4dCwgZm9yd2FyZCwgYmFjayk7XG4gICAgfSwgZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCAoZmFjdE9yU3VicHJvb2ZzLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0LCBiYWNrKTtcbiAgICB9LCBiYWNrKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBsYWJlbHNKU09OID0gbGFiZWxzVG9MYWJlbHNKU09OKHRoaXMubGFiZWxzKSxcbiAgICAgICAgICBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OKHRoaXMuZGVkdWN0aW9uKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OKHRoaXMuc3VwcG9zaXRpb25zKSxcbiAgICAgICAgICBzaWduYXR1cmVKU09OID0gc2lnbmF0dXJlVG9TaWduYXR1cmVKU09OKHRoaXMuc2lnbmF0dXJlKSxcbiAgICAgICAgICBoeXBvdGhlc2VzSlNPTiA9IGh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OKHRoaXMuaHlwb3RoZXNlcyksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzSlNPTiwgIC8vL1xuICAgICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkpTT04sICAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNKU09OLCAgLy8vXG4gICAgICAgICAgc2lnbmF0dXJlID0gc2lnbmF0dXJlSlNPTiwgIC8vL1xuICAgICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgZGVkdWN0aW9uLFxuICAgICAgICAgICAgc3VwcG9zaXRpb25zLFxuICAgICAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICAgICAgaHlwb3RoZXNlc1xuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihDbGFzcywganNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IGxhYmVscyA9IGxhYmVsc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IHNpZ25hdHVyZUZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIGh5cG90aGVzZXMgPSBoeXBvdGhlc2VzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgY2xhaW1TdHJpbmcgPSBjbGFpbVN0cmluZ0Zyb21MYWJlbHNTaWduYXR1cmVTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24obGFiZWxzLCBzaWduYXR1cmUsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uKSxcbiAgICAgICAgICBzdHJpbmcgPSBjbGFpbVN0cmluZywgLy8vXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICBwcm9vZiA9IG51bGwsXG4gICAgICAgICAgY2xhaW0gPSBuZXcgQ2xhc3MoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgc2lnbmF0dXJlLCBoeXBvdGhlc2VzKTtcblxuICAgIHJldHVybiBjbGFpbTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNsYWltIiwicmV2ZXJzZSIsImFycmF5VXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiYWxsIiwiZXZlcnkiLCJleHRyYWN0IiwiZm9yd2FyZHNFdmVyeSIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImxhYmVscyIsInN1cHBvc2l0aW9ucyIsImRlZHVjdGlvbiIsInByb29mIiwic2lnbmF0dXJlIiwiaHlwb3RoZXNlcyIsImdldExhYmVscyIsImdldFN1cHBvc2l0aW9ucyIsImdldERlZHVjdGlvbiIsImdldFByb29mIiwiZ2V0U2lnbmF0dXJlIiwiZ2V0SHlwb3RoZXNlcyIsInNldEh5cG90aGVzZXMiLCJnZXRTdXBwb3NpdGlvbiIsImluZGV4Iiwic3VwcG9zaXRpb24iLCJpc1NhdGlzZmlhYmxlIiwic2F0aXNmaWFibGUiLCJpc0h5cG90aGV0aWNhbCIsImh5cG90aGVzZXNMZW5ndGgiLCJsZW5ndGgiLCJoeXBvdGhldGljYWwiLCJtYXRjaE1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJzb21lIiwibGFiZWwiLCJ2ZXJpZnlFeCIsImZvcndhcmQiLCJiYWNrIiwiZW5jbG9zZSIsInZlcmlmeVByb29mIiwiYmluZCIsInZlcmlmeUxhYmVscyIsInZlcmlmeURlZHVjdGlvbiIsInZlcmlmeVN1cHBvc2l0aW9ucyIsImNsYWltU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2ZXJpZnlMYWJlbCIsImRlYnVnIiwibGFiZWxTdHJpbmciLCJ2ZXJpZnkiLCJzdGF0ZW1lbnQiLCJnZXRTdGF0ZW1lbnQiLCJwcm9vZlZlcmlmaWVzIiwiY29udGludWF0aW9uIiwiZGVkdWN0aW9uU3RyaW5nIiwidmVyaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblN0cmluZyIsImZhY3RPclN1YnByb29mIiwiYXNzaWduQXNzaWdubWVudHMiLCJhZGRGYWN0T3JTdWJwcm9vZiIsInN1cHBvc2l0aW9uc0xlbmd0aCIsImRpc2NoYXJnZUh5cG90aGVzaXMiLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc1N0cmluZyIsImRpc2NoYXJnZSIsImh5cG90aGVzaXNEaXNjaGFyZ2VzIiwiZGlzY2hhcmdlSHlwb3RoZXNlcyIsImh5cG90aGVzZXNEaXNjaGFyZ2VkIiwidW5pZnlTdGVwV2l0aERlZHVjdGlvbiIsInN0ZXAiLCJydWxlU3RyaW5nIiwic3RlcFN0cmluZyIsInVuaWZ5U3RlcCIsInN0ZXBVbmlmaWVzIiwic3RlcFVuaWZpZXNXaXRoRGVkdWN0aW9uIiwidW5pZnlTdGVwQW5kRmFjdE9yU3VicHJvb2ZzIiwiZmFjdG9yU3VicHJvb2ZzIiwicmVjb25jaWxlIiwic3RhdGVtZW50VW5pZmllc1dpdGhEZWR1Y3Rpb24iLCJzdGVwQW5kRmFjdE9yU3VicHJvb2ZzVW5pZnkiLCJoeXBvdGhlc2VzRGlzY2hhcmdlIiwidW5pZnlGYWN0T3JTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb25zIiwiZmFjdG9yU3VicHJvb2ZzVW5pZmllc1dpdGhTdXBwb3NpdGlvbnMiLCJpbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQiLCJhcmVJbmZlcnJlZFN1YnN0aXR1dGlvbnNTb2x2ZWQiLCJ1bmlmeUZhY3RPclN1YnByb29mc1dpdGhTdXBwb3NpdGlvbiIsImZhY3RPclN1YnByb29mcyIsInVuaWZ5RmFjdE9yU3VicHJvb2YiLCJzb2x2ZUluZmVycmVkU3Vic3RpdHV0aW9ucyIsImV4Y2VwdGlvbiIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInRvSlNPTiIsImxhYmVsc0pTT04iLCJsYWJlbHNUb0xhYmVsc0pTT04iLCJkZWR1Y3Rpb25KU09OIiwiZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OIiwic3VwcG9zaXRpb25zSlNPTiIsInN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiIsInNpZ25hdHVyZUpTT04iLCJzaWduYXR1cmVUb1NpZ25hdHVyZUpTT04iLCJoeXBvdGhlc2VzSlNPTiIsImh5cG90aGVzZXNUb0h5cG90aGVzZXNKU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiQ2xhc3MiLCJsYWJlbHNGcm9tSlNPTiIsImRlZHVjdGlvbkZyb21KU09OIiwic3VwcG9zaXRpb25zRnJvbUpTT04iLCJzaWduYXR1cmVGcm9tSlNPTiIsImh5cG90aGVzZXNGcm9tSlNPTiIsImNsYWltU3RyaW5nRnJvbUxhYmVsc1NpZ25hdHVyZVN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiIsImNsYWltIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFzQkE7OztlQUFxQkE7OzsyQkFwQlU7Z0NBQ3FDO3lCQUVqQzt3QkFDb0M7c0JBVXhCO0FBRS9DLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdDLHlCQUFjLEVBQzVCLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDeEUsRUFBRUMsR0FBRyxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsYUFBYSxFQUFFQyxjQUFjLEVBQUUsR0FBR0MscUNBQXFCO0FBRXJFLE1BQU1YLGNBQWNZLHVCQUFPO0lBQ3hDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsTUFBTSxFQUFFQyxZQUFZLEVBQUVDLFNBQVMsRUFBRUMsS0FBSyxFQUFFQyxTQUFTLEVBQUVDLFVBQVUsQ0FBRTtRQUM1RyxLQUFLLENBQUNULFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUNOLE1BQU07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