occam-nominal 1.0.334 → 1.0.340

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/lib/context.js +5 -1
  2. package/lib/element/assertion/contained.js +4 -4
  3. package/lib/element/assertion/defined.js +3 -3
  4. package/lib/element/assertion/subproof.js +6 -6
  5. package/lib/element/assertion/type.js +3 -3
  6. package/lib/element/assumption.js +134 -111
  7. package/lib/element/combinator/bracketed.js +2 -2
  8. package/lib/element/constraint.js +114 -102
  9. package/lib/element/constructor/bracketed.js +3 -3
  10. package/lib/element/deduction.js +2 -2
  11. package/lib/element/equality.js +3 -3
  12. package/lib/element/frame.js +3 -3
  13. package/lib/element/goal.js +67 -57
  14. package/lib/element/hypothesis.js +2 -2
  15. package/lib/element/judgement.js +15 -16
  16. package/lib/element/label.js +25 -22
  17. package/lib/element/metaType.js +2 -2
  18. package/lib/element/metavariable.js +54 -45
  19. package/lib/element/parameter.js +2 -2
  20. package/lib/element/procedureCall.js +2 -2
  21. package/lib/element/procedureReference.js +2 -2
  22. package/lib/element/proofAssertion/step.js +7 -7
  23. package/lib/element/proofAssertion/supposition.js +2 -2
  24. package/lib/element/proofAssertion.js +2 -2
  25. package/lib/element/reference.js +27 -24
  26. package/lib/element/schema.js +165 -154
  27. package/lib/element/signature.js +2 -2
  28. package/lib/element/statement.js +7 -5
  29. package/lib/element/substitution/reference.js +22 -29
  30. package/lib/element/substitution/statement.js +5 -5
  31. package/lib/element/term.js +2 -2
  32. package/lib/element/typePrefix.js +2 -2
  33. package/lib/element/variable.js +2 -2
  34. package/lib/process/unification.js +41 -47
  35. package/lib/process/unify.js +10 -10
  36. package/lib/process/validate.js +6 -6
  37. package/lib/process/validation.js +13 -13
  38. package/package.json +9 -9
  39. package/src/context.js +6 -0
  40. package/src/element/assertion/contained.js +3 -3
  41. package/src/element/assertion/defined.js +2 -2
  42. package/src/element/assertion/subproof.js +5 -5
  43. package/src/element/assertion/type.js +2 -2
  44. package/src/element/assumption.js +158 -132
  45. package/src/element/combinator/bracketed.js +1 -1
  46. package/src/element/constraint.js +134 -125
  47. package/src/element/constructor/bracketed.js +2 -2
  48. package/src/element/deduction.js +1 -1
  49. package/src/element/equality.js +2 -2
  50. package/src/element/frame.js +2 -2
  51. package/src/element/goal.js +82 -74
  52. package/src/element/hypothesis.js +2 -2
  53. package/src/element/judgement.js +20 -22
  54. package/src/element/label.js +26 -25
  55. package/src/element/metaType.js +2 -2
  56. package/src/element/metavariable.js +70 -53
  57. package/src/element/parameter.js +2 -2
  58. package/src/element/procedureCall.js +2 -2
  59. package/src/element/procedureReference.js +2 -2
  60. package/src/element/proofAssertion/step.js +6 -6
  61. package/src/element/proofAssertion/supposition.js +1 -1
  62. package/src/element/proofAssertion.js +1 -1
  63. package/src/element/reference.js +28 -27
  64. package/src/element/schema.js +193 -195
  65. package/src/element/signature.js +2 -2
  66. package/src/element/statement.js +9 -5
  67. package/src/element/substitution/reference.js +22 -35
  68. package/src/element/substitution/statement.js +4 -4
  69. package/src/element/term.js +1 -1
  70. package/src/element/typePrefix.js +2 -2
  71. package/src/element/variable.js +1 -1
  72. package/src/process/unification.js +44 -59
  73. package/src/process/unify.js +9 -9
  74. package/src/process/validate.js +5 -5
  75. package/src/process/validation.js +12 -12
package/lib/context.js CHANGED
@@ -351,6 +351,10 @@ class Context extends _occamlanguages.Context {
351
351
  const context = this.getContext();
352
352
  context.addLemma(lemma);
353
353
  }
354
+ addSchema(schema) {
355
+ const context = this.getContext();
356
+ context.addSchema(schema);
357
+ }
354
358
  addTheorem(theorem) {
355
359
  const context = this.getContext();
356
360
  context.addTheorem(theorem);
@@ -433,4 +437,4 @@ class Context extends _occamlanguages.Context {
433
437
  }
434
438
  }
435
439
 
436
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb250ZXh0IGFzIENvbnRleHRCYXNlIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0IGV4dGVuZHMgQ29udGV4dEJhc2Uge1xuICBnZXRMZXhlcigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbGV4ZXIgPSBjb250ZXh0LmdldExleGVyKCk7XG5cbiAgICByZXR1cm4gbGV4ZXI7XG4gIH1cblxuICBnZXRQYXJzZXIoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHBhcnNlciA9IGNvbnRleHQuZ2V0UGFyc2VyKCk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gY29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRva2VucygpO1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LnNldFRva2Vucyh0b2tlbnMpO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0R29hbHMoZ29hbHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0R29hbHMoZ29hbHMpO1xuXG4gICAgcmV0dXJuIGdvYWxzO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0SnVkZ2VtZW50cyhqdWRnZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50cztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEdlbmVyYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYXRvcnMgPSBjb250ZXh0LmdldEdlbmVyYXRvcnMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVzID0gY29udGV4dC5nZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGNvbWJpbmF0b3JzID0gY29udGV4dC5nZXRDb21iaW5hdG9ycyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvcnM7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBnZXRUb3BMZXZlbEFzc2VydGlvbnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0VG9wTGV2ZWxBc3NlcnRpb25zKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBzY2hlbWFzO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKG5lc3RlZCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB2YXJpYWJsZXMgPSBjb250ZXh0LmdldFZhcmlhYmxlcyhuZXN0ZWQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBjb250ZXh0LmdldFByb3BlcnRpZXMoKTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0U3RlcHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHN0ZXBzID0gY29udGV4dC5nZXRTdGVwcygpO1xuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgZ2V0UHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgcmV0dXJuIHByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZFZhcmlhYmxlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBjb250ZXh0LmdldERlY2xhcmVkVmFyaWFibGVzKCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnM7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGNoaWxkQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IGNoaWxkQ29udGV4dDsgLy8vXG5cbiAgICBtZXRhdmFyaWFibGUgPSBwYXJlbnRDb250ZXh0LmZpbmRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIHJldHVybiBheGlvbTtcbiAgfVxuXG4gIGZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kR29hbEJ5R29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ29hbCA9IGNvbnRleHQuZmluZEdvYWxCeUdvYWxOb2RlKGdvYWxOb2RlKTtcblxuICAgIHJldHVybiBnb2FsO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZyYW1lID0gY29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gY29udGV4dC5maW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGNvbnRleHQuZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgYXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IGNvbnRleHQuZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKTtcblxuICAgIHJldHVybiBzaWduYXR1cmU7XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAganVkZ2VtZW50ID0gY29udGV4dC5maW5kSnVkZ2VtZW50c0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBjb250ZXh0LmZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBjb250ZXh0LmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29uc3RyYWludCA9IGNvbnRleHQuZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKTtcblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gICAgcmV0dXJuIG1ldGFUeXBlO1xuICB9XG5cbiAgZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb2NlZHVyZSA9IGNvbnRleHQuZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmU7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGU7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0ZXJtUHJlc2VudCA9IGNvbnRleHQuaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm1QcmVzZW50O1xuICB9XG5cbiAgaXNHb2FsUHJlc2VudEJ5R29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ29hbFByZXNlbnQgPSBjb250ZXh0LmlzR29hbFByZXNlbnRCeUdvYWxOb2RlKGdvYWxOb2RlKTtcblxuICAgIHJldHVybiBnb2FsUHJlc2VudDtcbiAgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUobGFiZWxOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGNvbnRleHQuaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZShsYWJlbE5vZGUpO1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIGlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IGNvbnRleHQuaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lUHJlc2VudDtcbiAgfVxuXG4gIGlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWFsaXR5UHJlc2VudCA9IGNvbnRleHQuaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGp1ZGdlbWVudFByZXNlbnQgPSBjb250ZXh0LmlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgYXNzZXJ0aW9uUHJlc2VudCA9IGNvbnRleHQuaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRQcmVzZW50ID0gY29udGV4dC5pc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNpZ25hdHVyZVByZXNlbnQgPSBjb250ZXh0LmlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKTtcblxuICAgIHJldHVybiBzaWduYXR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGNvbnRleHQuaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb2NlZHVyZVByZXNlbnQgPSBjb250ZXh0LmlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVQcmVzZW50ID0gY29udGV4dC5pc0RlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlUHJlc2VudCA9IGNvbnRleHQuaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSBjb250ZXh0LmlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gY29udGV4dC5pc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzU3RhdGVkKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICByZXR1cm4gc3RhdGVkO1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGFMZXZlbCA9IGNvbnRleHQuaXNNZXRhTGV2ZWwoKTtcblxuICAgIHJldHVybiBtZXRhTGV2ZWw7XG4gIH1cblxuICBhZGRUZXJtcyh0ZXJtcykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkVGVybXModGVybXMpO1xuICB9XG5cbiAgYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcbiAgfVxuXG4gIGFkZEF4aW9tKGF4aW9tKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBeGlvbShheGlvbSk7XG4gIH1cblxuICBhZGRMZW1tYShsZW1tYSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkTGVtbWEobGVtbWEpO1xuICB9XG5cbiAgYWRkVGhlb3JlbSh0aGVvcmVtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRUaGVvcmVtKHRoZW9yZW0pO1xuICB9XG5cbiAgYWRkQ29uamVjdHVyZShjb25qZWN0dXJlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRDb25qZWN0dXJlKGNvbmplY3R1cmUpO1xuICB9XG5cbiAgYWRkUnVsZShydWxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRSdWxlKHJ1bGUpO1xuICB9XG5cbiAgYWRkVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRUZXJtKHRlcm0pO1xuICB9XG5cbiAgYWRkR29hbChnb2FsKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRHb2FsKGdvYWwpO1xuICB9XG5cbiAgYWRkRnJhbWUoZnJhbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEZyYW1lKGZyYW1lKTtcbiAgfVxuXG4gIGFkZEVxdWFsaXR5KGVxdWFsaXR5KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRFcXVhbGl0eShlcXVhbGl0eSk7XG4gIH1cblxuICBhZGRKdWRnZW1lbnQoanVkZ2VtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRKdWRnZW1lbnQoanVkZ2VtZW50KTtcbiAgfVxuXG4gIGFkZEFzc2VydGlvbihhc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICB9XG5cbiAgYWRkU3RhdGVtZW50KHN0YXRlbWVudCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkU3RhdGVtZW50KHN0YXRlbWVudCk7XG4gIH1cblxuICBhZGRTaWduYXR1cmUoc2lnbmF0dXJlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTaWduYXR1cmUoc2lnbmF0dXJlKTtcbiAgfVxuXG4gIGFkZFJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFJlZmVyZW5jZShyZWZlcmVuY2UpO1xuICB9XG5cbiAgYWRkQXNzdW1wdGlvbihhc3N1bXB0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pO1xuICB9XG5cbiAgYWRkQXNzaWdubWVudChhc3NpZ25tZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKTtcbiAgfVxuXG4gIGFkZERlY2xhcmVkVmFyaWFibGUoZGVjbGFyZWRWYXJpYWJsZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkRGVjbGFyZWRWYXJpYWJsZShkZWNsYXJlZFZhcmlhYmxlKTtcbiAgfVxuXG4gIGFkZENvbnN0cmFpbnQoY29uc3RyYWludCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkQ29uc3RyYWludChjb25zdHJhaW50KTtcbiAgfVxuXG4gIGFkZERlY2xhcmVkTWV0YXZhcmlhYmxlKGRlY2xhcmVkTWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGREZWNsYXJlZE1ldGF2YXJpYWJsZShkZWNsYXJlZE1ldGF2YXJpYWJsZSk7XG4gIH1cblxuICBhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkNvbnRleHQiLCJDb250ZXh0QmFzZSIsImdldExleGVyIiwiY29udGV4dCIsImdldENvbnRleHQiLCJsZXhlciIsImdldFBhcnNlciIsInBhcnNlciIsImdldEZpbGVQYXRoIiwiZmlsZVBhdGgiLCJnZXRUb2tlbnMiLCJ0b2tlbnMiLCJzZXRUb2tlbnMiLCJnZXRUZXJtcyIsInRlcm1zIiwiZ2V0R29hbHMiLCJnb2FscyIsImdldEZyYW1lcyIsImZyYW1lcyIsImdldEVxdWFsaXRpZXMiLCJlcXVhbGl0aWVzIiwiZ2V0SnVkZ2VtZW50cyIsImp1ZGdlbWVudHMiLCJnZXRBc3NlcnRpb25zIiwiYXNzZXJ0aW9ucyIsImdldFN0YXRlbWVudHMiLCJzdGF0ZW1lbnRzIiwiZ2V0U2lnbmF0dXJlcyIsInNpZ25hdHVyZXMiLCJnZXRSZWZlcmVuY2VzIiwicmVmZXJlbmNlcyIsImdldEFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGVzIiwibWV0YXZhcmlhYmxlcyIsImdldFN1YnN0aXR1dGlvbnMiLCJzdWJzdGl0dXRpb25zIiwiZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJkZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldEdlbmVyYXRvcnMiLCJpbmNsdWRlUmVsZWFzZSIsImdlbmVyYXRvcnMiLCJnZXRQcm9jZWR1cmVzIiwicHJvY2VkdXJlcyIsImdldENvbWJpbmF0b3JzIiwiY29tYmluYXRvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJjb25zdHJ1Y3RvcnMiLCJnZXRUb3BMZXZlbEFzc2VydGlvbnMiLCJ0b3BMZXZlbEFzc2VydGlvbnMiLCJnZXRTY2hlbWFzIiwic2NoZW1hcyIsImdldFZhcmlhYmxlcyIsIm5lc3RlZCIsInZhcmlhYmxlcyIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiZ2V0U3RlcHMiLCJzdGVwcyIsImdldFByb29mQXNzZXJ0aW9ucyIsInByb29mQXNzZXJ0aW9ucyIsImdldEVxdWl2YWxlbmNlcyIsImVxdWl2YWxlbmNlcyIsImdldERlY2xhcmVkVmFyaWFibGVzIiwiZGVjbGFyZWRWYXJpYWJsZXMiLCJnZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZXMiLCJnZXRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImZpbmRNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJjaGlsZENvbnRleHQiLCJwYXJlbnRDb250ZXh0IiwiZmluZFJ1bGVCeVJlZmVyZW5jZSIsInJlZmVyZW5jZSIsInJ1bGUiLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsImF4aW9tIiwiZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UiLCJ0b3BMZXZlbEFzc2VydGlvbiIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInRlcm1Ob2RlIiwidGVybSIsImZpbmRHb2FsQnlHb2FsTm9kZSIsImdvYWxOb2RlIiwiZ29hbCIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmaW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5IiwiZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnQiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uTm9kZSIsImFzc2VydGlvbiIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50IiwiZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwicmVmZXJlbmNlTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSIsImFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbiIsImZpbmRSZWZlcmVuY2VCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZmluZEp1ZGdlbWVudHNCeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb24iLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvbiIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwiZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlIiwiY29uc3RyYWludE5vZGUiLCJjb25zdHJhaW50IiwiZmluZFR5cGVCeVR5cGVOYW1lIiwidHlwZU5hbWUiLCJ0eXBlIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsIm5vbWluYWxUeXBlTmFtZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibWV0YVR5cGVOYW1lIiwibWV0YVR5cGUiLCJmaW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZSIsImZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZFZhcmlhYmxlIiwiZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlIiwiaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUiLCJ0ZXJtUHJlc2VudCIsImlzR29hbFByZXNlbnRCeUdvYWxOb2RlIiwiZ29hbFByZXNlbnQiLCJpc0xhYmVsUHJlc2VudEJ5TGFiZWxOb2RlIiwibGFiZWxOb2RlIiwibGFiZWxQcmVzZW50IiwiaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZSIsImZyYW1lUHJlc2VudCIsImlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUiLCJlcXVhbGl0eVByZXNlbnQiLCJpc0p1ZGdlbWVudFByZXNlbnRCeUp1ZGdlbWVudE5vZGUiLCJqdWRnZW1lbnRQcmVzZW50IiwiaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uUHJlc2VudCIsImlzU3RhdGVtZW50UHJlc2VudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudFByZXNlbnQiLCJpc1NpZ25hdHVyZVByZXNlbnRCeVNpZ25hdHVyZU5vZGUiLCJzaWduYXR1cmVQcmVzZW50IiwiaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZSIsInR5cGVQcmVzZW50IiwiaXNQcm9jZWR1cmVQcmVzZW50QnlQcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlUHJlc2VudCIsImlzRGVjbGFyZWRNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOYW1lIiwiaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwibWV0dnZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZVByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwiZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQiLCJpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsImlzU3RhdGVkIiwic3RhdGVkIiwiaXNNZXRhTGV2ZWwiLCJtZXRhTGV2ZWwiLCJhZGRUZXJtcyIsImFkZERlcml2ZWRTdWJzdGl0dXRpb25zIiwiYWRkQXhpb20iLCJhZGRMZW1tYSIsImxlbW1hIiwiYWRkVGhlb3JlbSIsInRoZW9yZW0iLCJhZGRDb25qZWN0dXJlIiwiY29uamVjdHVyZSIsImFkZFJ1bGUiLCJhZGRUZXJtIiwiYWRkR29hbCIsImFkZEZyYW1lIiwiYWRkRXF1YWxpdHkiLCJhZGRKdWRnZW1lbnQiLCJhZGRBc3NlcnRpb24iLCJhZGRTdGF0ZW1lbnQiLCJhZGRTaWduYXR1cmUiLCJhZGRSZWZlcmVuY2UiLCJhZGRBc3N1bXB0aW9uIiwiYWRkQXNzaWdubWVudCIsImFzc2lnbm1lbnQiLCJhZGRNZXRhdmFyaWFibGUiLCJhZGRTdWJzdGl0dXRpb24iLCJhZGREZWNsYXJlZFZhcmlhYmxlIiwiYWRkQ29uc3RyYWludCIsImFkZERlY2xhcmVkTWV0YXZhcmlhYmxlIiwiYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFJQTs7O2VBQXFCQTs7O2dDQUZrQjtBQUV4QixNQUFNQSxnQkFBZ0JDLHVCQUFXO0lBQzlDQyxXQUFXO1FBQ1QsTUFBTUMsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJDLFFBQVFGLFFBQVFELFFBQVE7UUFFOUIsT0FBT0c7SUFDVDtJQUVBQyxZQUFZO1FBQ1YsTUFBTUgsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJHLFNBQVNKLFFBQVFHLFNBQVM7UUFFaEMsT0FBT0M7SUFDVDtJQUVBQyxjQUFjO1FBQ1osTUFBTUwsVUFBVSxJQUFJLENBQUND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
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb250ZXh0IGFzIENvbnRleHRCYXNlIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0IGV4dGVuZHMgQ29udGV4dEJhc2Uge1xuICBnZXRMZXhlcigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbGV4ZXIgPSBjb250ZXh0LmdldExleGVyKCk7XG5cbiAgICByZXR1cm4gbGV4ZXI7XG4gIH1cblxuICBnZXRQYXJzZXIoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHBhcnNlciA9IGNvbnRleHQuZ2V0UGFyc2VyKCk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gY29udGV4dC5nZXRGaWxlUGF0aCgpO1xuXG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgZ2V0VG9rZW5zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRva2VucygpO1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LnNldFRva2Vucyh0b2tlbnMpO1xuICB9XG5cbiAgZ2V0VGVybXModGVybXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0VGVybXModGVybXMpO1xuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgZ2V0R29hbHMoZ29hbHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0R29hbHMoZ29hbHMpO1xuXG4gICAgcmV0dXJuIGdvYWxzO1xuICB9XG5cbiAgZ2V0RnJhbWVzKGZyYW1lcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRGcmFtZXMoZnJhbWVzKTtcblxuICAgIHJldHVybiBmcmFtZXM7XG4gIH1cblxuICBnZXRFcXVhbGl0aWVzKGVxdWFsaXRpZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0RXF1YWxpdGllcyhlcXVhbGl0aWVzKTtcblxuICAgIHJldHVybiBlcXVhbGl0aWVzO1xuICB9XG5cbiAgZ2V0SnVkZ2VtZW50cyhqdWRnZW1lbnRzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldEp1ZGdlbWVudHMoanVkZ2VtZW50cyk7XG5cbiAgICByZXR1cm4ganVkZ2VtZW50cztcbiAgfVxuXG4gIGdldEFzc2VydGlvbnMoYXNzZXJ0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRBc3NlcnRpb25zKGFzc2VydGlvbnMpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTdGF0ZW1lbnRzKHN0YXRlbWVudHMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0U3RhdGVtZW50cyhzdGF0ZW1lbnRzKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlcztcbiAgfVxuXG4gIGdldFJlZmVyZW5jZXMocmVmZXJlbmNlcyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRSZWZlcmVuY2VzKHJlZmVyZW5jZXMpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZXM7XG4gIH1cblxuICBnZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyA9IFtdKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5nZXRBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucyk7XG5cbiAgICByZXR1cm4gYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVzKG1ldGF2YXJpYWJsZXMgPSBbXSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuZ2V0TWV0YXZhcmlhYmxlcyhtZXRhdmFyaWFibGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldFN1YnN0aXR1dGlvbnMoc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zID0gW10pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmdldERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldEdlbmVyYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYXRvcnMgPSBjb250ZXh0LmdldEdlbmVyYXRvcnMoaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVzID0gY29udGV4dC5nZXRQcm9jZWR1cmVzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGNvbWJpbmF0b3JzID0gY29udGV4dC5nZXRDb21iaW5hdG9ycyhpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICByZXR1cm4gY29tYmluYXRvcnM7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBjb25zdHJ1Y3RvcnM7XG4gIH1cblxuICBnZXRUb3BMZXZlbEFzc2VydGlvbnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0VG9wTGV2ZWxBc3NlcnRpb25zKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbnM7XG4gIH1cblxuICBnZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzY2hlbWFzID0gY29udGV4dC5nZXRTY2hlbWFzKGluY2x1ZGVSZWxlYXNlKTtcblxuICAgIHJldHVybiBzY2hlbWFzO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVzKG5lc3RlZCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB2YXJpYWJsZXMgPSBjb250ZXh0LmdldFZhcmlhYmxlcyhuZXN0ZWQpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBjb250ZXh0LmdldFByb3BlcnRpZXMoKTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgZ2V0U3RlcHMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHN0ZXBzID0gY29udGV4dC5nZXRTdGVwcygpO1xuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgZ2V0UHJvb2ZBc3NlcnRpb25zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBwcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgcmV0dXJuIHByb29mQXNzZXJ0aW9ucztcbiAgfVxuXG4gIGdldEVxdWl2YWxlbmNlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKTtcblxuICAgIHJldHVybiBlcXVpdmFsZW5jZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZFZhcmlhYmxlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVjbGFyZWRWYXJpYWJsZXMgPSBjb250ZXh0LmdldERlY2xhcmVkVmFyaWFibGVzKCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZXM7XG4gIH1cblxuICBnZXREZWNsYXJlZE1ldGF2YXJpYWJsZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlcyA9IGNvbnRleHQuZ2V0RGVjbGFyZWRNZXRhdmFyaWFibGVzKCk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGVzO1xuICB9XG5cbiAgZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgcmV0dXJuIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnM7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlKG1ldGF2YXJpYWJsZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGNoaWxkQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29uc3QgcGFyZW50Q29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29udGV4dCA9IGNoaWxkQ29udGV4dDsgLy8vXG5cbiAgICBtZXRhdmFyaWFibGUgPSBwYXJlbnRDb250ZXh0LmZpbmRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGU7XG4gIH1cblxuICBmaW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIGZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBheGlvbSA9IGNvbnRleHQuZmluZEF4aW9tQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIHJldHVybiBheGlvbTtcbiAgfVxuXG4gIGZpbmRUb3BMZXZlbEFzc2VydGlvbkJ5UmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKTtcblxuICAgIHJldHVybiB0b3BMZXZlbEFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBmaW5kR29hbEJ5R29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ29hbCA9IGNvbnRleHQuZmluZEdvYWxCeUdvYWxOb2RlKGdvYWxOb2RlKTtcblxuICAgIHJldHVybiBnb2FsO1xuICB9XG5cbiAgZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZyYW1lID0gY29udGV4dC5maW5kRnJhbWVCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgZmluZEVxdWFsaXR5QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWFsaXR5ID0gY29udGV4dC5maW5kRXF1YWxpdHlCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5O1xuICB9XG5cbiAgZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGp1ZGdlbWVudCA9IGNvbnRleHQuZmluZEp1ZGdlbWVudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgYXNzZXJ0aW9uID0gY29udGV4dC5maW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvbjtcbiAgfVxuXG4gIGZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50O1xuICB9XG5cbiAgZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IGNvbnRleHQuZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKTtcblxuICAgIHJldHVybiBzaWduYXR1cmU7XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlKHJlZmVyZW5jZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb247XG4gIH1cblxuICBmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZTtcbiAgfVxuXG4gIGZpbmRKdWRnZW1lbnRzQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAganVkZ2VtZW50ID0gY29udGV4dC5maW5kSnVkZ2VtZW50c0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnQ7XG4gIH1cblxuICBmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBjb250ZXh0LmZpbmRTdWJzdGl0dXRpb25CeVN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IGNvbnRleHQuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBjb250ZXh0LmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUoY29uc3RyYWludE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgY29uc3RyYWludCA9IGNvbnRleHQuZmluZENvbnN0cmFpbnRCeUNvbnN0cmFpbnROb2RlKGNvbnN0cmFpbnROb2RlKTtcblxuICAgIHJldHVybiBjb25zdHJhaW50O1xuICB9XG5cbiAgZmluZFR5cGVCeVR5cGVOYW1lKHR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpO1xuXG4gICAgcmV0dXJuIG1ldGFUeXBlO1xuICB9XG5cbiAgZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb2NlZHVyZSA9IGNvbnRleHQuZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmU7XG4gIH1cblxuICBmaW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBkZWNsYXJlZFZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllcik7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRWYXJpYWJsZTtcbiAgfVxuXG4gIGZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICByZXR1cm4gZGVjbGFyZWRNZXRhdmFyaWFibGU7XG4gIH1cblxuICBpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSh0ZXJtTm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICB0ZXJtUHJlc2VudCA9IGNvbnRleHQuaXNUZXJtUHJlc2VudEJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm1QcmVzZW50O1xuICB9XG5cbiAgaXNHb2FsUHJlc2VudEJ5R29hbE5vZGUoZ29hbE5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ29hbFByZXNlbnQgPSBjb250ZXh0LmlzR29hbFByZXNlbnRCeUdvYWxOb2RlKGdvYWxOb2RlKTtcblxuICAgIHJldHVybiBnb2FsUHJlc2VudDtcbiAgfVxuXG4gIGlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUobGFiZWxOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGxhYmVsUHJlc2VudCA9IGNvbnRleHQuaXNMYWJlbFByZXNlbnRCeUxhYmVsTm9kZShsYWJlbE5vZGUpO1xuXG4gICAgcmV0dXJuIGxhYmVsUHJlc2VudDtcbiAgfVxuXG4gIGlzRnJhbWVQcmVzZW50QnlGcmFtZU5vZGUoZnJhbWVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGZyYW1lUHJlc2VudCA9IGNvbnRleHQuaXNGcmFtZVByZXNlbnRCeUZyYW1lTm9kZShmcmFtZU5vZGUpO1xuXG4gICAgcmV0dXJuIGZyYW1lUHJlc2VudDtcbiAgfVxuXG4gIGlzRXF1YWxpdHlQcmVzZW50QnlFcXVhbGl0eU5vZGUoZXF1YWxpdHlOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGVxdWFsaXR5UHJlc2VudCA9IGNvbnRleHQuaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZShlcXVhbGl0eU5vZGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsaXR5UHJlc2VudDtcbiAgfVxuXG4gIGlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGp1ZGdlbWVudFByZXNlbnQgPSBjb250ZXh0LmlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZShqdWRnZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBqdWRnZW1lbnRQcmVzZW50O1xuICB9XG5cbiAgaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgYXNzZXJ0aW9uUHJlc2VudCA9IGNvbnRleHQuaXNBc3NlcnRpb25QcmVzZW50QnlBc3NlcnRpb25Ob2RlKGFzc2VydGlvbk5vZGUpO1xuXG4gICAgcmV0dXJuIGFzc2VydGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRQcmVzZW50ID0gY29udGV4dC5pc1N0YXRlbWVudFByZXNlbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50UHJlc2VudDtcbiAgfVxuXG4gIGlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNpZ25hdHVyZVByZXNlbnQgPSBjb250ZXh0LmlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKTtcblxuICAgIHJldHVybiBzaWduYXR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlUHJlc2VudCA9IGNvbnRleHQuaXNNZXRhdmFyaWFibGVQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZVByZXNlbnQ7XG4gIH1cblxuICBpc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIHJldHVybiB0eXBlUHJlc2VudDtcbiAgfVxuXG4gIGlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByb2NlZHVyZVByZXNlbnQgPSBjb250ZXh0LmlzUHJvY2VkdXJlUHJlc2VudEJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVQcmVzZW50O1xuICB9XG5cbiAgaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVQcmVzZW50ID0gY29udGV4dC5pc0RlY2xhcmVkTWV0YXZhcmlhYmxlUHJlc2VudEJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVQcmVzZW50O1xuICB9XG5cbiAgaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcmVmZXJlbmNlUHJlc2VudCA9IGNvbnRleHQuaXNSZWZlcmVuY2VQcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldHZ2YXJpYWJsZU5vZGUpO1xuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQgPSBjb250ZXh0LmlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50ID0gY29udGV4dC5pc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzU3RhdGVkKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICByZXR1cm4gc3RhdGVkO1xuICB9XG5cbiAgaXNNZXRhTGV2ZWwoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIG1ldGFMZXZlbCA9IGNvbnRleHQuaXNNZXRhTGV2ZWwoKTtcblxuICAgIHJldHVybiBtZXRhTGV2ZWw7XG4gIH1cblxuICBhZGRUZXJtcyh0ZXJtcykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkVGVybXModGVybXMpO1xuICB9XG5cbiAgYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMoZGVyaXZlZFN1YnN0aXR1dGlvbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZERlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKTtcbiAgfVxuXG4gIGFkZEF4aW9tKGF4aW9tKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRBeGlvbShheGlvbSk7XG4gIH1cblxuICBhZGRMZW1tYShsZW1tYSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkTGVtbWEobGVtbWEpO1xuICB9XG5cbiAgYWRkU2NoZW1hKHNjaGVtYSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkU2NoZW1hKHNjaGVtYSk7XG4gIH1cblxuICBhZGRUaGVvcmVtKHRoZW9yZW0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFRoZW9yZW0odGhlb3JlbSk7XG4gIH1cblxuICBhZGRDb25qZWN0dXJlKGNvbmplY3R1cmUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZENvbmplY3R1cmUoY29uamVjdHVyZSk7XG4gIH1cblxuICBhZGRSdWxlKHJ1bGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFJ1bGUocnVsZSk7XG4gIH1cblxuICBhZGRUZXJtKHRlcm0pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG4gIH1cblxuICBhZGRHb2FsKGdvYWwpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEdvYWwoZ29hbCk7XG4gIH1cblxuICBhZGRGcmFtZShmcmFtZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkRnJhbWUoZnJhbWUpO1xuICB9XG5cbiAgYWRkRXF1YWxpdHkoZXF1YWxpdHkpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEVxdWFsaXR5KGVxdWFsaXR5KTtcbiAgfVxuXG4gIGFkZEp1ZGdlbWVudChqdWRnZW1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEp1ZGdlbWVudChqdWRnZW1lbnQpO1xuICB9XG5cbiAgYWRkQXNzZXJ0aW9uKGFzc2VydGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG4gIH1cblxuICBhZGRTdGF0ZW1lbnQoc3RhdGVtZW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRTdGF0ZW1lbnQoc3RhdGVtZW50KTtcbiAgfVxuXG4gIGFkZFNpZ25hdHVyZShzaWduYXR1cmUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFNpZ25hdHVyZShzaWduYXR1cmUpO1xuICB9XG5cbiAgYWRkUmVmZXJlbmNlKHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnRleHQuYWRkUmVmZXJlbmNlKHJlZmVyZW5jZSk7XG4gIH1cblxuICBhZGRBc3N1bXB0aW9uKGFzc3VtcHRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc3VtcHRpb24oYXNzdW1wdGlvbik7XG4gIH1cblxuICBhZGRBc3NpZ25tZW50KGFzc2lnbm1lbnQpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQoYXNzaWdubWVudCk7XG4gIH1cblxuICBhZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRNZXRhdmFyaWFibGUobWV0YXZhcmlhYmxlKTtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pO1xuICB9XG5cbiAgYWRkRGVjbGFyZWRWYXJpYWJsZShkZWNsYXJlZFZhcmlhYmxlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGREZWNsYXJlZFZhcmlhYmxlKGRlY2xhcmVkVmFyaWFibGUpO1xuICB9XG5cbiAgYWRkQ29uc3RyYWludChjb25zdHJhaW50KSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgY29udGV4dC5hZGRDb25zdHJhaW50KGNvbnN0cmFpbnQpO1xuICB9XG5cbiAgYWRkRGVjbGFyZWRNZXRhdmFyaWFibGUoZGVjbGFyZWRNZXRhdmFyaWFibGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZERlY2xhcmVkTWV0YXZhcmlhYmxlKGRlY2xhcmVkTWV0YXZhcmlhYmxlKTtcbiAgfVxuXG4gIGFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICBjb250ZXh0LmFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pO1xuICB9XG59XG4iXSwibmFtZXMiOlsiQ29udGV4dCIsIkNvbnRleHRCYXNlIiwiZ2V0TGV4ZXIiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsImxleGVyIiwiZ2V0UGFyc2VyIiwicGFyc2VyIiwiZ2V0RmlsZVBhdGgiLCJmaWxlUGF0aCIsImdldFRva2VucyIsInRva2VucyIsInNldFRva2VucyIsImdldFRlcm1zIiwidGVybXMiLCJnZXRHb2FscyIsImdvYWxzIiwiZ2V0RnJhbWVzIiwiZnJhbWVzIiwiZ2V0RXF1YWxpdGllcyIsImVxdWFsaXRpZXMiLCJnZXRKdWRnZW1lbnRzIiwianVkZ2VtZW50cyIsImdldEFzc2VydGlvbnMiLCJhc3NlcnRpb25zIiwiZ2V0U3RhdGVtZW50cyIsInN0YXRlbWVudHMiLCJnZXRTaWduYXR1cmVzIiwic2lnbmF0dXJlcyIsImdldFJlZmVyZW5jZXMiLCJyZWZlcmVuY2VzIiwiZ2V0QXNzdW1wdGlvbnMiLCJhc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZXMiLCJtZXRhdmFyaWFibGVzIiwiZ2V0U3Vic3RpdHV0aW9ucyIsInN1YnN0aXR1dGlvbnMiLCJnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyIsImRlcml2ZWRTdWJzdGl0dXRpb25zIiwiZ2V0R2VuZXJhdG9ycyIsImluY2x1ZGVSZWxlYXNlIiwiZ2VuZXJhdG9ycyIsImdldFByb2NlZHVyZXMiLCJwcm9jZWR1cmVzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldFRvcExldmVsQXNzZXJ0aW9ucyIsInRvcExldmVsQXNzZXJ0aW9ucyIsImdldFNjaGVtYXMiLCJzY2hlbWFzIiwiZ2V0VmFyaWFibGVzIiwibmVzdGVkIiwidmFyaWFibGVzIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJnZXRTdGVwcyIsInN0ZXBzIiwiZ2V0UHJvb2ZBc3NlcnRpb25zIiwicHJvb2ZBc3NlcnRpb25zIiwiZ2V0RXF1aXZhbGVuY2VzIiwiZXF1aXZhbGVuY2VzIiwiZ2V0RGVjbGFyZWRWYXJpYWJsZXMiLCJkZWNsYXJlZFZhcmlhYmxlcyIsImdldERlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImRlY2xhcmVkTWV0YXZhcmlhYmxlcyIsImdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZmluZE1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsImNoaWxkQ29udGV4dCIsInBhcmVudENvbnRleHQiLCJmaW5kUnVsZUJ5UmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicnVsZSIsImZpbmRBeGlvbUJ5UmVmZXJlbmNlIiwiYXhpb20iLCJmaW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZSIsInRvcExldmVsQXNzZXJ0aW9uIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidGVybU5vZGUiLCJ0ZXJtIiwiZmluZEdvYWxCeUdvYWxOb2RlIiwiZ29hbE5vZGUiLCJnb2FsIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJmcmFtZU5vZGUiLCJmcmFtZSIsImZpbmRFcXVhbGl0eUJ5RXF1YWxpdHlOb2RlIiwiZXF1YWxpdHlOb2RlIiwiZXF1YWxpdHkiLCJmaW5kSnVkZ2VtZW50QnlKdWRnZW1lbnROb2RlIiwianVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudCIsImZpbmRBc3NlcnRpb25CeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25Ob2RlIiwiYXNzZXJ0aW9uIiwiZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnQiLCJmaW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlIiwic2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZSIsImZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VOb2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIiwiYXNzdW1wdGlvbk5vZGUiLCJhc3N1bXB0aW9uIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kSnVkZ2VtZW50c0J5TWV0YXZhcmlhYmxlTm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbiIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uQnlWYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJkZXJpdmVkU3Vic3RpdHV0aW9uIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kQ29uc3RyYWludEJ5Q29uc3RyYWludE5vZGUiLCJjb25zdHJhaW50Tm9kZSIsImNvbnN0cmFpbnQiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJ0eXBlTmFtZSIsInR5cGUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwibm9taW5hbFR5cGVOYW1lIiwiZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZU5hbWUiLCJtZXRhVHlwZSIsImZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUiLCJwcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlIiwiZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkVmFyaWFibGUiLCJmaW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiZGVjbGFyZWRNZXRhdmFyaWFibGUiLCJpc1Rlcm1QcmVzZW50QnlUZXJtTm9kZSIsInRlcm1QcmVzZW50IiwiaXNHb2FsUHJlc2VudEJ5R29hbE5vZGUiLCJnb2FsUHJlc2VudCIsImlzTGFiZWxQcmVzZW50QnlMYWJlbE5vZGUiLCJsYWJlbE5vZGUiLCJsYWJlbFByZXNlbnQiLCJpc0ZyYW1lUHJlc2VudEJ5RnJhbWVOb2RlIiwiZnJhbWVQcmVzZW50IiwiaXNFcXVhbGl0eVByZXNlbnRCeUVxdWFsaXR5Tm9kZSIsImVxdWFsaXR5UHJlc2VudCIsImlzSnVkZ2VtZW50UHJlc2VudEJ5SnVkZ2VtZW50Tm9kZSIsImp1ZGdlbWVudFByZXNlbnQiLCJpc0Fzc2VydGlvblByZXNlbnRCeUFzc2VydGlvbk5vZGUiLCJhc3NlcnRpb25QcmVzZW50IiwiaXNTdGF0ZW1lbnRQcmVzZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50UHJlc2VudCIsImlzU2lnbmF0dXJlUHJlc2VudEJ5U2lnbmF0dXJlTm9kZSIsInNpZ25hdHVyZVByZXNlbnQiLCJpc01ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXRhdmFyaWFibGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5Tm9taW5hbFR5cGVOYW1lIiwidHlwZVByZXNlbnQiLCJpc1Byb2NlZHVyZVByZXNlbnRCeVByb2NlZHVyZU5hbWUiLCJwcm9jZWR1cmVQcmVzZW50IiwiaXNEZWNsYXJlZE1ldGF2YXJpYWJsZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5hbWUiLCJpc1JlZmVyZW5jZVByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJtZXR2dmFyaWFibGVOb2RlIiwicmVmZXJlbmNlUHJlc2VudCIsImlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCIsImlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlIiwiaXNTdGF0ZWQiLCJzdGF0ZWQiLCJpc01ldGFMZXZlbCIsIm1ldGFMZXZlbCIsImFkZFRlcm1zIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJhZGRBeGlvbSIsImFkZExlbW1hIiwibGVtbWEiLCJhZGRTY2hlbWEiLCJzY2hlbWEiLCJhZGRUaGVvcmVtIiwidGhlb3JlbSIsImFkZENvbmplY3R1cmUiLCJjb25qZWN0dXJlIiwiYWRkUnVsZSIsImFkZFRlcm0iLCJhZGRHb2FsIiwiYWRkRnJhbWUiLCJhZGRFcXVhbGl0eSIsImFkZEp1ZGdlbWVudCIsImFkZEFzc2VydGlvbiIsImFkZFN0YXRlbWVudCIsImFkZFNpZ25hdHVyZSIsImFkZFJlZmVyZW5jZSIsImFkZEFzc3VtcHRpb24iLCJhZGRBc3NpZ25tZW50IiwiYXNzaWdubWVudCIsImFkZE1ldGF2YXJpYWJsZSIsImFkZFN1YnN0aXR1dGlvbiIsImFkZERlY2xhcmVkVmFyaWFibGUiLCJhZGRDb25zdHJhaW50IiwiYWRkRGVjbGFyZWRNZXRhdmFyaWFibGUiLCJhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQUlBOzs7ZUFBcUJBOzs7Z0NBRmtCO0FBRXhCLE1BQU1BLGdCQUFnQkMsdUJBQVc7SUFDOUNDLFdBQVc7UUFDVCxNQUFNQyxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QkMsUUFBUUYsUUFBUUQsUUFBUTtRQUU5QixPQUFPRztJQUNUO0lBRUFDLFlBQVk7UUFDVixNQUFNSCxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QkcsU0FBU0osUUFBUUcsU0FBUztRQUVoQyxPQUFPQztJQUNUO0lBRUFDLGNBQWM7UUFDWixNQUFNTCxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QkssV0FBV04sUUFBUUssV0FBVztRQUVwQyxPQUFPQztJQUNUO0lBRUFDLFlBQVk7UUFDVixNQUFNUCxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6Qk8sU0FBU1IsUUFBUU8sU0FBUztRQUVoQyxPQUFPQztJQUNUO0lBRUFDLFVBQVVELE1BQU0sRUFBRTtRQUNoQixNQUFNUixVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUVMsU0FBUyxDQUFDRDtJQUNwQjtJQUVBRSxTQUFTQyxRQUFRLEVBQUUsRUFBRTtRQUNuQixNQUFNWCxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUVUsUUFBUSxDQUFDQztRQUVqQixPQUFPQTtJQUNUO0lBRUFDLFNBQVNDLFFBQVEsRUFBRSxFQUFFO1FBQ25CLE1BQU1iLFVBQVUsSUFBSSxDQUFDQyxVQUFVO1FBRS9CRCxRQUFRWSxRQUFRLENBQUNDO1FBRWpCLE9BQU9BO0lBQ1Q7SUFFQUMsVUFBVUMsU0FBUyxFQUFFLEVBQUU7UUFDckIsTUFBTWYsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVFjLFNBQVMsQ0FBQ0M7UUFFbEIsT0FBT0E7SUFDVDtJQUVBQyxjQUFjQyxhQUFhLEVBQUUsRUFBRTtRQUM3QixNQUFNakIsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVFnQixhQUFhLENBQUNDO1FBRXRCLE9BQU9BO0lBQ1Q7SUFFQUMsY0FBY0MsYUFBYSxFQUFFLEVBQUU7UUFDN0IsTUFBTW5CLFVBQVUsSUFBSSxDQUFDQyxVQUFVO1FBRS9CRCxRQUFRa0IsYUFBYSxDQUFDQztRQUV0QixPQUFPQTtJQUNUO0lBRUFDLGNBQWNDLGFBQWEsRUFBRSxFQUFFO1FBQzdCLE1BQU1yQixVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUW9CLGFBQWEsQ0FBQ0M7UUFFdEIsT0FBT0E7SUFDVDtJQUVBQyxjQUFjQyxhQUFhLEVBQUUsRUFBRTtRQUM3QixNQUFNdkIsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVFzQixhQUFhLENBQUNDO1FBRXRCLE9BQU9BO0lBQ1Q7SUFFQUMsY0FBY0MsYUFBYSxFQUFFLEVBQUU7UUFDN0IsTUFBTXpCLFVBQVUsSUFBSSxDQUFDQyxVQUFVO1FBRS9CRCxRQUFRd0IsYUFBYSxDQUFDQztRQUV0QixPQUFPQTtJQUNUO0lBRUFDLGNBQWNDLGFBQWEsRUFBRSxFQUFFO1FBQzdCLE1BQU0zQixVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUTBCLGFBQWEsQ0FBQ0M7UUFFdEIsT0FBT0E7SUFDVDtJQUVBQyxlQUFlQyxjQUFjLEVBQUUsRUFBRTtRQUMvQixNQUFNN0IsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVE0QixjQUFjLENBQUNDO1FBRXZCLE9BQU9BO0lBQ1Q7SUFFQUMsaUJBQWlCQyxnQkFBZ0IsRUFBRSxFQUFFO1FBQ25DLE1BQU0vQixVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUThCLGdCQUFnQixDQUFDQztRQUV6QixPQUFPQTtJQUNUO0lBRUFDLGlCQUFpQkMsZ0JBQWdCLEVBQUUsRUFBRTtRQUNuQyxNQUFNakMsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVFnQyxnQkFBZ0IsQ0FBQ0M7UUFFekIsT0FBT0E7SUFDVDtJQUVBQyx3QkFBd0JDLHVCQUF1QixFQUFFLEVBQUU7UUFDakQsTUFBTW5DLFVBQVUsSUFBSSxDQUFDQyxVQUFVO1FBRS9CRCxRQUFRa0MsdUJBQXVCLENBQUNDO1FBRWhDLE9BQU9BO0lBQ1Q7SUFFQUMsY0FBY0MsaUJBQWlCLElBQUksRUFBRTtRQUNuQyxNQUFNckMsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJxQyxhQUFhdEMsUUFBUW9DLGFBQWEsQ0FBQ0M7UUFFekMsT0FBT0M7SUFDVDtJQUVBQyxjQUFjRixpQkFBaUIsSUFBSSxFQUFFO1FBQ25DLE1BQU1yQyxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QnVDLGFBQWF4QyxRQUFRdUMsYUFBYSxDQUFDRjtRQUV6QyxPQUFPRztJQUNUO0lBRUFDLGVBQWVKLGlCQUFpQixJQUFJLEVBQUU7UUFDcEMsTUFBTXJDLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCeUMsY0FBYzFDLFFBQVF5QyxjQUFjLENBQUNKO1FBRTNDLE9BQU9LO0lBQ1Q7SUFFQUMsZ0JBQWdCTixpQkFBaUIsSUFBSSxFQUFFO1FBQ3JDLE1BQU1yQyxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QjJDLGVBQWU1QyxRQUFRMkMsZUFBZSxDQUFDTjtRQUU3QyxPQUFPTztJQUNUO0lBRUFDLHNCQUFzQlIsaUJBQWlCLElBQUksRUFBRTtRQUMzQyxNQUFNckMsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekI2QyxxQkFBcUI5QyxRQUFRNkMscUJBQXFCLENBQUNSO1FBRXpELE9BQU9TO0lBQ1Q7SUFFQUMsV0FBV1YsaUJBQWlCLElBQUksRUFBRTtRQUNoQyxNQUFNckMsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekIrQyxVQUFVaEQsUUFBUStDLFVBQVUsQ0FBQ1Y7UUFFbkMsT0FBT1c7SUFDVDtJQUVBQyxhQUFhQyxNQUFNLEVBQUU7UUFDbkIsTUFBTWxELFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCa0QsWUFBWW5ELFFBQVFpRCxZQUFZLENBQUNDO1FBRXZDLE9BQU9DO0lBQ1Q7SUFFQUMsZ0JBQWdCO1FBQ2QsTUFBTXBELFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCb0QsYUFBYXJELFFBQVFvRCxhQUFhO1FBRXhDLE9BQU9DO0lBQ1Q7SUFFQUMsV0FBVztRQUNULE1BQU10RCxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QnNELFFBQVF2RCxRQUFRc0QsUUFBUTtRQUU5QixPQUFPQztJQUNUO0lBRUFDLHFCQUFxQjtRQUNuQixNQUFNeEQsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJ3RCxrQkFBa0J6RCxRQUFRd0Qsa0JBQWtCO1FBRWxELE9BQU9DO0lBQ1Q7SUFFQUMsa0JBQWtCO1FBQ2hCLE1BQU0xRCxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QjBELGVBQWUzRCxRQUFRMEQsZUFBZTtRQUU1QyxPQUFPQztJQUNUO0lBRUFDLHVCQUF1QjtRQUNyQixNQUFNNUQsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekI0RCxvQkFBb0I3RCxRQUFRNEQsb0JBQW9CO1FBRXRELE9BQU9DO0lBQ1Q7SUFFQUMsMkJBQTJCO1FBQ3pCLE1BQU05RCxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QjhELHdCQUF3Qi9ELFFBQVE4RCx3QkFBd0I7UUFFOUQsT0FBT0M7SUFDVDtJQUVBQywrQkFBK0I7UUFDN0IsTUFBTWhFLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCZ0UsNEJBQTRCakUsUUFBUWdFLDRCQUE0QjtRQUV0RSxPQUFPQztJQUNUO0lBRUFDLGlCQUFpQkMsWUFBWSxFQUFFbkUsT0FBTyxFQUFFO1FBQ3RDLE1BQU1vRSxlQUFlcEUsU0FBUyxHQUFHO1FBRWpDQSxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUV6QixNQUFNb0UsZ0JBQWdCckUsU0FBUyxHQUFHO1FBRWxDQSxVQUFVb0UsY0FBYyxHQUFHO1FBRTNCRCxlQUFlRSxjQUFjSCxnQkFBZ0IsQ0FBQ0MsY0FBY25FO1FBRTVELE9BQU9tRTtJQUNUO0lBRUFHLG9CQUFvQkMsU0FBUyxFQUFFO1FBQzdCLE1BQU12RSxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QnVFLE9BQU94RSxRQUFRc0UsbUJBQW1CLENBQUNDO1FBRXpDLE9BQU9DO0lBQ1Q7SUFFQUMscUJBQXFCRixTQUFTLEVBQUU7UUFDOUIsTUFBTXZFLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCeUUsUUFBUTFFLFFBQVF5RSxvQkFBb0IsQ0FBQ0Y7UUFFM0MsT0FBT0c7SUFDVDtJQUVBQyxpQ0FBaUNKLFNBQVMsRUFBRTtRQUMxQyxNQUFNdkUsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekIyRSxvQkFBb0I1RSxRQUFRMkUsZ0NBQWdDLENBQUNKO1FBRW5FLE9BQU9LO0lBQ1Q7SUFFQUMsbUJBQW1CQyxRQUFRLEVBQUU7UUFDM0IsTUFBTTlFLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCOEUsT0FBTy9FLFFBQVE2RSxrQkFBa0IsQ0FBQ0M7UUFFeEMsT0FBT0M7SUFDVDtJQUVBQyxtQkFBbUJDLFFBQVEsRUFBRTtRQUMzQixNQUFNakYsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJpRixPQUFPbEYsUUFBUWdGLGtCQUFrQixDQUFDQztRQUV4QyxPQUFPQztJQUNUO0lBRUFDLHFCQUFxQkMsU0FBUyxFQUFFO1FBQzlCLE1BQU1wRixVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6Qm9GLFFBQVFyRixRQUFRbUYsb0JBQW9CLENBQUNDO1FBRTNDLE9BQU9DO0lBQ1Q7SUFFQUMsMkJBQTJCQyxZQUFZLEVBQUU7UUFDdkMsTUFBTXZGLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCdUYsV0FBV3hGLFFBQVFzRiwwQkFBMEIsQ0FBQ0M7UUFFcEQsT0FBT0M7SUFDVDtJQUVBQyw2QkFBNkJDLGFBQWEsRUFBRTtRQUMxQyxNQUFNMUYsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekIwRixZQUFZM0YsUUFBUXlGLDRCQUE0QixDQUFDQztRQUV2RCxPQUFPQztJQUNUO0lBRUFDLDZCQUE2QkMsYUFBYSxFQUFFO1FBQzFDLE1BQU03RixVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QjZGLFlBQVk5RixRQUFRNEYsNEJBQTRCLENBQUNDO1FBRXZELE9BQU9DO0lBQ1Q7SUFFQUMsNkJBQTZCQyxhQUFhLEVBQUU7UUFDMUMsTUFBTWhHLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCZ0csWUFBWWpHLFFBQVErRiw0QkFBNEIsQ0FBQ0M7UUFFdkQsT0FBT0M7SUFDVDtJQUVBQyw2QkFBNkJDLGFBQWEsRUFBRTtRQUMxQyxNQUFNbkcsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJtRyxZQUFZcEcsUUFBUWtHLDRCQUE0QixDQUFDQztRQUV2RCxPQUFPQztJQUNUO0lBRUFDLDZCQUE2QkMsYUFBYSxFQUFFO1FBQzFDLE1BQU10RyxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QnNFLFlBQVl2RSxRQUFRcUcsNEJBQTRCLENBQUNDO1FBRXZELE9BQU8vQjtJQUNUO0lBRUFnQywrQkFBK0JDLGNBQWMsRUFBRTtRQUM3QyxNQUFNeEcsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJ3RyxhQUFhekcsUUFBUXVHLDhCQUE4QixDQUFDQztRQUUxRCxPQUFPQztJQUNUO0lBRUFDLGdDQUFnQ0MsZ0JBQWdCLEVBQUU7UUFDaEQsTUFBTTNHLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCc0UsWUFBWXZFLFFBQVEwRywrQkFBK0IsQ0FBQ0M7UUFFMUQsT0FBT3BDO0lBQ1Q7SUFFQXFDLGlDQUFpQ0QsZ0JBQWdCLEVBQUU7UUFDakQsTUFBTTNHLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCMEYsWUFBWTNGLFFBQVE0RyxnQ0FBZ0MsQ0FBQ0Q7UUFFM0QsT0FBT2hCO0lBQ1Q7SUFFQWtCLG1DQUFtQ0YsZ0JBQWdCLEVBQUU7UUFDbkQsTUFBTTNHLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCa0UsZUFBZW5FLFFBQVE2RyxrQ0FBa0MsQ0FBQ0Y7UUFFaEUsT0FBT3hDO0lBQ1Q7SUFFQTJDLG1DQUFtQ0MsZ0JBQWdCLEVBQUU7UUFDbkQsTUFBTS9HLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCK0csZUFBZWhILFFBQVE4RyxrQ0FBa0MsQ0FBQ0M7UUFFaEUsT0FBT0M7SUFDVDtJQUVBQyxzQ0FBc0NDLFlBQVksRUFBRTtRQUNsRCxNQUFNbEgsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJrSCxzQkFBc0JuSCxRQUFRaUgscUNBQXFDLENBQUNDO1FBRTFFLE9BQU9DO0lBQ1Q7SUFFQUMsMENBQTBDVCxnQkFBZ0IsRUFBRTtRQUMxRCxNQUFNM0csVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJrSCxzQkFBc0JuSCxRQUFRb0gseUNBQXlDLENBQUNUO1FBRTlFLE9BQU9RO0lBQ1Q7SUFFQUUsK0JBQStCQyxjQUFjLEVBQUU7UUFDN0MsTUFBTXRILFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCc0gsYUFBYXZILFFBQVFxSCw4QkFBOEIsQ0FBQ0M7UUFFMUQsT0FBT0M7SUFDVDtJQUVBQyxtQkFBbUJDLFFBQVEsRUFBRTtRQUMzQixNQUFNekgsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJ5SCxPQUFPMUgsUUFBUXdILGtCQUFrQixDQUFDQztRQUV4QyxPQUFPQztJQUNUO0lBRUFDLDBCQUEwQkMsZUFBZSxFQUFFO1FBQ3pDLE1BQU01SCxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QnlILE9BQU8xSCxRQUFRMkgseUJBQXlCLENBQUNDO1FBRS9DLE9BQU9GO0lBQ1Q7SUFFQUcsMkJBQTJCQyxZQUFZLEVBQUU7UUFDdkMsTUFBTTlILFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCOEgsV0FBVy9ILFFBQVE2SCwwQkFBMEIsQ0FBQ0M7UUFFcEQsT0FBT0M7SUFDVDtJQUVBQyw2QkFBNkJDLGFBQWEsRUFBRTtRQUMxQyxNQUFNakksVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJpSSxZQUFZbEksUUFBUWdJLDRCQUE0QixDQUFDQztRQUV2RCxPQUFPQztJQUNUO0lBRUFDLHlDQUF5Q0Msa0JBQWtCLEVBQUU7UUFDM0QsTUFBTXBJLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCb0ksbUJBQW1CckksUUFBUW1JLHdDQUF3QyxDQUFDQztRQUUxRSxPQUFPQztJQUNUO0lBRUFDLDJDQUEyQ0MsZ0JBQWdCLEVBQUU7UUFDM0QsTUFBTXZJLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCdUksdUJBQXVCeEksUUFBUXNJLDBDQUEwQyxDQUFDQztRQUVoRixPQUFPQztJQUNUO0lBRUFDLHdCQUF3QjNELFFBQVEsRUFBRTtRQUNoQyxNQUFNOUUsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJ5SSxjQUFjMUksUUFBUXlJLHVCQUF1QixDQUFDM0Q7UUFFcEQsT0FBTzREO0lBQ1Q7SUFFQUMsd0JBQXdCMUQsUUFBUSxFQUFFO1FBQ2hDLE1BQU1qRixVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QjJJLGNBQWM1SSxRQUFRMkksdUJBQXVCLENBQUMxRDtRQUVwRCxPQUFPMkQ7SUFDVDtJQUVBQywwQkFBMEJDLFNBQVMsRUFBRTtRQUNuQyxNQUFNOUksVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekI4SSxlQUFlL0ksUUFBUTZJLHlCQUF5QixDQUFDQztRQUV2RCxPQUFPQztJQUNUO0lBRUFDLDBCQUEwQjVELFNBQVMsRUFBRTtRQUNuQyxNQUFNcEYsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJnSixlQUFlakosUUFBUWdKLHlCQUF5QixDQUFDNUQ7UUFFdkQsT0FBTzZEO0lBQ1Q7SUFFQUMsZ0NBQWdDM0QsWUFBWSxFQUFFO1FBQzVDLE1BQU12RixVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QmtKLGtCQUFrQm5KLFFBQVFrSiwrQkFBK0IsQ0FBQzNEO1FBRWhFLE9BQU80RDtJQUNUO0lBRUFDLGtDQUFrQzFELGFBQWEsRUFBRTtRQUMvQyxNQUFNMUYsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJvSixtQkFBbUJySixRQUFRb0osaUNBQWlDLENBQUMxRDtRQUVuRSxPQUFPMkQ7SUFDVDtJQUVBQyxrQ0FBa0N6RCxhQUFhLEVBQUU7UUFDL0MsTUFBTTdGLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCc0osbUJBQW1CdkosUUFBUXNKLGlDQUFpQyxDQUFDekQ7UUFFbkUsT0FBTzBEO0lBQ1Q7SUFFQUMsa0NBQWtDeEQsYUFBYSxFQUFFO1FBQy9DLE1BQU1oRyxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QndKLG1CQUFtQnpKLFFBQVF3SixpQ0FBaUMsQ0FBQ3hEO1FBRW5FLE9BQU95RDtJQUNUO0lBRUFDLGtDQUFrQ3ZELGFBQWEsRUFBRTtRQUMvQyxNQUFNbkcsVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekIwSixtQkFBbUIzSixRQUFRMEosaUNBQWlDLENBQUN2RDtRQUVuRSxPQUFPd0Q7SUFDVDtJQUVBQyx3Q0FBd0NqRCxnQkFBZ0IsRUFBRTtRQUN4RCxNQUFNM0csVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekI0SixzQkFBc0I3SixRQUFRNEosdUNBQXVDLENBQUNqRDtRQUU1RSxPQUFPa0Q7SUFDVDtJQUVBQywrQkFBK0JsQyxlQUFlLEVBQUU7UUFDOUMsTUFBTTVILFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCOEosY0FBYy9KLFFBQVE4Siw4QkFBOEIsQ0FBQ2xDO1FBRTNELE9BQU9tQztJQUNUO0lBRUFDLGtDQUFrQy9CLGFBQWEsRUFBRTtRQUMvQyxNQUFNakksVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJnSyxtQkFBbUJqSyxRQUFRZ0ssaUNBQWlDLENBQUMvQjtRQUVuRSxPQUFPZ0M7SUFDVDtJQUVBQyxnREFBZ0QzQixnQkFBZ0IsRUFBRTtRQUNoRSxNQUFNdkksVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekI0SixzQkFBc0I3SixRQUFRa0ssK0NBQStDLENBQUMzQjtRQUVwRixPQUFPc0I7SUFDVDtJQUVBTSxxQ0FBcUNDLGdCQUFnQixFQUFFO1FBQ3JELE1BQU1wSyxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6Qm9LLG1CQUFtQnJLLFFBQVFtSyxvQ0FBb0MsQ0FBQ0M7UUFFdEUsT0FBT0M7SUFDVDtJQUVBQywrQ0FBK0MzRCxnQkFBZ0IsRUFBRTtRQUMvRCxNQUFNM0csVUFBVSxJQUFJLENBQUNDLFVBQVUsSUFDekJzSyw2QkFBNkJ2SyxRQUFRc0ssOENBQThDLENBQUMzRDtRQUUxRixPQUFPNEQ7SUFDVDtJQUVBQyxrRUFBa0U3RCxnQkFBZ0IsRUFBRUksZ0JBQWdCLEVBQUU7UUFDcEcsTUFBTS9HLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCc0ssNkJBQTZCdkssUUFBUXdLLGlFQUFpRSxDQUFDN0Qsa0JBQWtCSTtRQUUvSCxPQUFPd0Q7SUFDVDtJQUVBRSxXQUFXO1FBQ1QsTUFBTXpLLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCeUssU0FBUzFLLFFBQVF5SyxRQUFRO1FBRS9CLE9BQU9DO0lBQ1Q7SUFFQUMsY0FBYztRQUNaLE1BQU0zSyxVQUFVLElBQUksQ0FBQ0MsVUFBVSxJQUN6QjJLLFlBQVk1SyxRQUFRMkssV0FBVztRQUVyQyxPQUFPQztJQUNUO0lBRUFDLFNBQVNsSyxLQUFLLEVBQUU7UUFDZCxNQUFNWCxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUTZLLFFBQVEsQ0FBQ2xLO0lBQ25CO0lBRUFtSyx3QkFBd0IzSSxvQkFBb0IsRUFBRTtRQUM1QyxNQUFNbkMsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVE4Syx1QkFBdUIsQ0FBQzNJO0lBQ2xDO0lBRUE0SSxTQUFTckcsS0FBSyxFQUFFO1FBQ2QsTUFBTTFFLFVBQVUsSUFBSSxDQUFDQyxVQUFVO1FBRS9CRCxRQUFRK0ssUUFBUSxDQUFDckc7SUFDbkI7SUFFQXNHLFNBQVNDLEtBQUssRUFBRTtRQUNkLE1BQU1qTCxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUWdMLFFBQVEsQ0FBQ0M7SUFDbkI7SUFFQUMsVUFBVUMsTUFBTSxFQUFFO1FBQ2hCLE1BQU1uTCxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUWtMLFNBQVMsQ0FBQ0M7SUFDcEI7SUFFQUMsV0FBV0MsT0FBTyxFQUFFO1FBQ2xCLE1BQU1yTCxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUW9MLFVBQVUsQ0FBQ0M7SUFDckI7SUFFQUMsY0FBY0MsVUFBVSxFQUFFO1FBQ3hCLE1BQU12TCxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUXNMLGFBQWEsQ0FBQ0M7SUFDeEI7SUFFQUMsUUFBUWhILElBQUksRUFBRTtRQUNaLE1BQU14RSxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUXdMLE9BQU8sQ0FBQ2hIO0lBQ2xCO0lBRUFpSCxRQUFRMUcsSUFBSSxFQUFFO1FBQ1osTUFBTS9FLFVBQVUsSUFBSSxDQUFDQyxVQUFVO1FBRS9CRCxRQUFReUwsT0FBTyxDQUFDMUc7SUFDbEI7SUFFQTJHLFFBQVF4RyxJQUFJLEVBQUU7UUFDWixNQUFNbEYsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVEwTCxPQUFPLENBQUN4RztJQUNsQjtJQUVBeUcsU0FBU3RHLEtBQUssRUFBRTtRQUNkLE1BQU1yRixVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUTJMLFFBQVEsQ0FBQ3RHO0lBQ25CO0lBRUF1RyxZQUFZcEcsUUFBUSxFQUFFO1FBQ3BCLE1BQU14RixVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUTRMLFdBQVcsQ0FBQ3BHO0lBQ3RCO0lBRUFxRyxhQUFhbEcsU0FBUyxFQUFFO1FBQ3RCLE1BQU0zRixVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUTZMLFlBQVksQ0FBQ2xHO0lBQ3ZCO0lBRUFtRyxhQUFhaEcsU0FBUyxFQUFFO1FBQ3RCLE1BQU05RixVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUThMLFlBQVksQ0FBQ2hHO0lBQ3ZCO0lBRUFpRyxhQUFhOUYsU0FBUyxFQUFFO1FBQ3RCLE1BQU1qRyxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUStMLFlBQVksQ0FBQzlGO0lBQ3ZCO0lBRUErRixhQUFhNUYsU0FBUyxFQUFFO1FBQ3RCLE1BQU1wRyxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUWdNLFlBQVksQ0FBQzVGO0lBQ3ZCO0lBRUE2RixhQUFhMUgsU0FBUyxFQUFFO1FBQ3RCLE1BQU12RSxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUWlNLFlBQVksQ0FBQzFIO0lBQ3ZCO0lBRUEySCxjQUFjekYsVUFBVSxFQUFFO1FBQ3hCLE1BQU16RyxVQUFVLElBQUksQ0FBQ0MsVUFBVTtRQUUvQkQsUUFBUWtNLGFBQWEsQ0FBQ3pGO0lBQ3hCO0lBRUEwRixjQUFjQyxVQUFVLEVBQUU7UUFDeEIsTUFBTXBNLFVBQVUsSUFBSSxDQUFDQyxVQUFVO1FBRS9CRCxRQUFRbU0sYUFBYSxDQUFDQztJQUN4QjtJQUVBQyxnQkFBZ0JsSSxZQUFZLEVBQUU7UUFDNUIsTUFBTW5FLFVBQVUsSUFBSSxDQUFDQyxVQUFVO1FBRS9CRCxRQUFRcU0sZUFBZSxDQUFDbEk7SUFDMUI7SUFFQW1JLGdCQUFnQnRGLFlBQVksRUFBRTtRQUM1QixNQUFNaEgsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVFzTSxlQUFlLENBQUN0RjtJQUMxQjtJQUVBdUYsb0JBQW9CbEUsZ0JBQWdCLEVBQUU7UUFDcEMsTUFBTXJJLFVBQVUsSUFBSSxDQUFDQyxVQUFVO1FBRS9CRCxRQUFRdU0sbUJBQW1CLENBQUNsRTtJQUM5QjtJQUVBbUUsY0FBY2pGLFVBQVUsRUFBRTtRQUN4QixNQUFNdkgsVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVF3TSxhQUFhLENBQUNqRjtJQUN4QjtJQUVBa0Ysd0JBQXdCakUsb0JBQW9CLEVBQUU7UUFDNUMsTUFBTXhJLFVBQVUsSUFBSSxDQUFDQyxVQUFVO1FBRS9CRCxRQUFReU0sdUJBQXVCLENBQUNqRTtJQUNsQztJQUVBa0UsNEJBQTRCQyx3QkFBd0IsRUFBRTtRQUNwRCxNQUFNM00sVUFBVSxJQUFJLENBQUNDLFVBQVU7UUFFL0JELFFBQVEwTSwyQkFBMkIsQ0FBQ0M7SUFDdEM7QUFDRiJ9
@@ -96,7 +96,7 @@ const _default = (0, _elements.define)(class ContainedAssertion extends _asserti
96
96
  context.debug(`The '${termString}' term is not singular.`);
97
97
  return continuation(termValidates);
98
98
  }
99
- this.term.validate(context, (term, context)=>{
99
+ return this.term.validate(context, (term, context)=>{
100
100
  let termValidates = false;
101
101
  if (term !== null) {
102
102
  this.term = term; ///
@@ -121,7 +121,7 @@ const _default = (0, _elements.define)(class ContainedAssertion extends _asserti
121
121
  context.debug(`The '${frameString}' frame is not singular.`);
122
122
  return continuation(frameValidates);
123
123
  }
124
- this.frame.validate(context, (frame)=>{
124
+ return this.frame.validate(context, (frame)=>{
125
125
  let frameValidates = false;
126
126
  if (frame !== null) {
127
127
  this.frame = frame;
@@ -136,7 +136,7 @@ const _default = (0, _elements.define)(class ContainedAssertion extends _asserti
136
136
  validateStatement(context, continuation) {
137
137
  const statementString = this.statement.getString();
138
138
  context.trace(`Validating the '${statementString}' statement...`);
139
- this.statement.validate(context, (statement)=>{
139
+ return this.statement.validate(context, (statement)=>{
140
140
  let statementValidates = false;
141
141
  if (statement !== null) {
142
142
  statementValidates = true;
@@ -235,4 +235,4 @@ function validateWhenDerived(term, frame, statement, negated, context, continuat
235
235
  return continuation(validatesWhenDerived);
236
236
  }
237
237
 
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9jb250YWluZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBhbGwsIGV4aXN0cyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zLCBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdWJzdGl0dXRpb25zXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUsXG4gICAgICAgICBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlLFxuICAgICAgICAgbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlLFxuICAgICAgICAgc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUsXG4gICAgICAgICBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIENvbnRhaW5lZEFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbk5vZGU7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkQXNzZXJ0aW9uID0gdGhpcy5maW5kVmFsaWRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IHZhbGlkQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29udGFpbmVkQXNzZXJ0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZVRlcm0gPSB0aGlzLnZhbGlkYXRlVGVybS5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlRnJhbWUgPSB0aGlzLnZhbGlkYXRlRnJhbWUuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVUZXJtLFxuICAgICAgdmFsaWRhdGVGcmFtZSxcbiAgICAgIHZhbGlkYXRlU3RhdGVtZW50XG4gICAgXSwgY29udGV4dCwgKHZhbGlkYWV0cykgPT4ge1xuICAgICAgaWYgKCF2YWxpZGFldHMpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGNvbnRhaW5lZEFzc2VydGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQsXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb25zdCBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oY29udGFpbmVkQXNzZXJ0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXMgPSB0cnVlOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy50ZXJtLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBjb250aW5hZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250aW5hZWRBc3NlcnRpb25TdHJpbmd9JyBjb250aW5hZWQgYXNzZXJ0aW9uJ3MgdGVybS4uLmApO1xuXG4gICAgY29uc3QgdGVybVNpbmd1bGFyID0gdGhpcy50ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghdGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB0ZXJtVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBpcyBub3Qgc2luZ3VsYXIuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlcyk7XG4gICAgfVxuXG4gICAgdGhpcy50ZXJtLnZhbGlkYXRlKGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnRlcm0gPSB0ZXJtOyAvLy9cblxuICAgICAgICB0ZXJtVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZScke2NvbnRpbmFlZEFzc2VydGlvblN0cmluZ30nIGNvbnRpbmFlZCBhc3NlcnRpb24ncyB0ZXJtLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVGcmFtZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBpZiAodGhpcy5mcmFtZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgZnJhbWVWYWxpZGF0ZXMgPSB0cnVlOyAgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZnJhbWVWYWxpZGF0ZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5mcmFtZS5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgY29udGluYWVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUnJHtjb250aW5hZWRBc3NlcnRpb25TdHJpbmd9JyBjb250aW5hZWQgYXNzZXJ0aW9uJ3MgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZS4uLmApO1xuXG4gICAgY29uc3QgZnJhbWVTaW5ndWxhciA9IHRoaXMuZnJhbWUuaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKCFmcmFtZVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCBmcmFtZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSBpcyBub3Qgc2luZ3VsYXIuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZnJhbWVWYWxpZGF0ZXMpO1xuICAgIH1cblxuICAgIHRoaXMuZnJhbWUudmFsaWRhdGUoY29udGV4dCwgKGZyYW1lKSA9PiB7XG4gICAgICBsZXQgZnJhbWVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICBmcmFtZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmcmFtZVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlJyR7Y29udGluYWVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGluYWVkIGFzc2VydGlvbidzICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZnJhbWVWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5zdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy5mcmFtZSwgdGhpcy5zdGF0ZW1lbnQsIHRoaXMubmVnYXRlZCwgY29udGV4dCwgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSA9PiB7XG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlJbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnModGhpcy5mcmFtZSwgY29udGV4dCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnModGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgZnJhbWUsIHN0YXRlbWVudCwgdGhpcy5uZWdhdGVkLCBjb250ZXh0LCAodmFsaWRhdGVzV2hlbkRlcml2ZWQpID0+IHtcbiAgICAgIGxldCB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IGZhbHNlO1xuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHVuaWZpZXNJbmRlcGVuZGVudGx5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb250YWluZWRBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIGZyYW1lLCBzdGF0ZW1lbnQsIG5lZ2F0ZWQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1Db250YWluZWQgPSBzdGF0ZW1lbnQuaXNUZXJtQ29udGFpbmVkKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICBpZiAoIW5lZ2F0ZWQgJiYgdGVybUNvbnRhaW5lZCkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWdhdGVkICYmICF0ZXJtQ29udGFpbmVkKSB7XG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhbWUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyYW1lQ29udGFpbmVkID0gc3RhdGVtZW50LmlzRnJhbWVDb250YWluZWQoZnJhbWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoIW5lZ2F0ZWQgJiYgZnJhbWVDb250YWluZWQpIHtcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVnYXRlZCAmJiAhZnJhbWVDb250YWluZWQpIHtcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xufSJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsImZyYW1lIiwibmVnYXRlZCIsInN0YXRlbWVudCIsImdldFRlcm0iLCJnZXRGcmFtZSIsImlzTmVnYXRlZCIsImdldFN0YXRlbWVudCIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZEFzc2VydGlvbiIsImZpbmRWYWxpZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVUZXJtIiwiYmluZCIsInZhbGlkYXRlRnJhbWUiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImFsbCIsInZhbGlkYWV0cyIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZVdoZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJ2YWxpZGF0ZXMiLCJhc3NlcnRpb24iLCJhZGRBc3NlcnRpb24iLCJ0ZXJtVmFsaWRhdGVzIiwidGVybVN0cmluZyIsImNvbnRpbmFlZEFzc2VydGlvblN0cmluZyIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJmcmFtZVZhbGlkYXRlcyIsImZyYW1lU3RyaW5nIiwiZnJhbWVTaW5ndWxhciIsInN0YXRlbWVudFN0cmluZyIsInN0YXRlbWVudFZhbGlkYXRlcyIsInN0YXRlZCIsImlzU3RhdGVkIiwidW5pZnlJbmRlcGVuZGVudGx5IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJ1bmlmaWVzSW5kZXBlbmRlbnRseSIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlQ29udGFpbmVkQXNzZXJ0aW9uIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInRlcm1Db250YWluZWQiLCJpc1Rlcm1Db250YWluZWQiLCJmcmFtZUNvbnRhaW5lZCIsImlzRnJhbWVDb250YWluZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQW1CQTs7O2VBQUE7OztnQ0FqQm9DO2tFQUVkOzBCQUVDO3lCQUNLOzhCQUNBOzZCQUNrQjsrQkFDdUU7eUJBS2pFOzs7Ozs7QUFFcEQsTUFBTSxFQUFFQSxrQkFBa0IsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFbEQsV0FBZUMsSUFBQUEs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
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9jb250YWluZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBhbGwsIGV4aXN0cyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zLCBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdWJzdGl0dXRpb25zXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUsXG4gICAgICAgICBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlLFxuICAgICAgICAgbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlLFxuICAgICAgICAgc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUsXG4gICAgICAgICBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIENvbnRhaW5lZEFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbk5vZGU7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkQXNzZXJ0aW9uID0gdGhpcy5maW5kVmFsaWRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IHZhbGlkQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29udGFpbmVkQXNzZXJ0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZVRlcm0gPSB0aGlzLnZhbGlkYXRlVGVybS5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlRnJhbWUgPSB0aGlzLnZhbGlkYXRlRnJhbWUuYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCA9IHRoaXMudmFsaWRhdGVTdGF0ZW1lbnQuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVUZXJtLFxuICAgICAgdmFsaWRhdGVGcmFtZSxcbiAgICAgIHZhbGlkYXRlU3RhdGVtZW50XG4gICAgXSwgY29udGV4dCwgKHZhbGlkYWV0cykgPT4ge1xuICAgICAgaWYgKCF2YWxpZGFldHMpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGNvbnRhaW5lZEFzc2VydGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQsXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb25zdCBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oY29udGFpbmVkQXNzZXJ0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLnRlcm0gPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXMgPSB0cnVlOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy50ZXJtLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBjb250aW5hZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250aW5hZWRBc3NlcnRpb25TdHJpbmd9JyBjb250aW5hZWQgYXNzZXJ0aW9uJ3MgdGVybS4uLmApO1xuXG4gICAgY29uc3QgdGVybVNpbmd1bGFyID0gdGhpcy50ZXJtLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghdGVybVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCB0ZXJtVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBpcyBub3Qgc2luZ3VsYXIuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVybS52YWxpZGF0ZShjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHRlcm1WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy50ZXJtID0gdGVybTsgLy8vXG5cbiAgICAgICAgdGVybVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXJtVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUnJHtjb250aW5hZWRBc3NlcnRpb25TdHJpbmd9JyBjb250aW5hZWQgYXNzZXJ0aW9uJ3MgdGVybS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtVmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlRnJhbWUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgaWYgKHRoaXMuZnJhbWUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyYW1lVmFsaWRhdGVzID0gdHJ1ZTsgIC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZnJhbWUuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGNvbnRpbmFlZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlJyR7Y29udGluYWVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGluYWVkIGFzc2VydGlvbidzICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuLi5gKTtcblxuICAgIGNvbnN0IGZyYW1lU2luZ3VsYXIgPSB0aGlzLmZyYW1lLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghZnJhbWVTaW5ndWxhcikge1xuICAgICAgY29uc3QgZnJhbWVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgaXMgbm90IHNpbmd1bGFyLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mcmFtZS52YWxpZGF0ZShjb250ZXh0LCAoZnJhbWUpID0+IHtcbiAgICAgIGxldCBmcmFtZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoZnJhbWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IGZyYW1lO1xuXG4gICAgICAgIGZyYW1lVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZyYW1lVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUnJHtjb250aW5hZWRBc3NlcnRpb25TdHJpbmd9JyBjb250aW5hZWQgYXNzZXJ0aW9uJ3MgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihmcmFtZVZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSB0aGlzLnN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudC4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy5mcmFtZSwgdGhpcy5zdGF0ZW1lbnQsIHRoaXMubmVnYXRlZCwgY29udGV4dCwgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSA9PiB7XG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlJbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnModGhpcy5mcmFtZSwgY29udGV4dCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnModGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgZnJhbWUsIHN0YXRlbWVudCwgdGhpcy5uZWdhdGVkLCBjb250ZXh0LCAodmFsaWRhdGVzV2hlbkRlcml2ZWQpID0+IHtcbiAgICAgIGxldCB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IGZhbHNlO1xuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5LmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHVuaWZpZXNJbmRlcGVuZGVudGx5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb250YWluZWRBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIGZyYW1lLCBzdGF0ZW1lbnQsIG5lZ2F0ZWQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1Db250YWluZWQgPSBzdGF0ZW1lbnQuaXNUZXJtQ29udGFpbmVkKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICBpZiAoIW5lZ2F0ZWQgJiYgdGVybUNvbnRhaW5lZCkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWdhdGVkICYmICF0ZXJtQ29udGFpbmVkKSB7XG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhbWUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyYW1lQ29udGFpbmVkID0gc3RhdGVtZW50LmlzRnJhbWVDb250YWluZWQoZnJhbWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoIW5lZ2F0ZWQgJiYgZnJhbWVDb250YWluZWQpIHtcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVnYXRlZCAmJiAhZnJhbWVDb250YWluZWQpIHtcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xufSJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsImZyYW1lIiwibmVnYXRlZCIsInN0YXRlbWVudCIsImdldFRlcm0iLCJnZXRGcmFtZSIsImlzTmVnYXRlZCIsImdldFN0YXRlbWVudCIsImdldENvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZEFzc2VydGlvbiIsImZpbmRWYWxpZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVUZXJtIiwiYmluZCIsInZhbGlkYXRlRnJhbWUiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImFsbCIsInZhbGlkYWV0cyIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZVdoZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJleGlzdHMiLCJ2YWxpZGF0ZXMiLCJhc3NlcnRpb24iLCJhZGRBc3NlcnRpb24iLCJ0ZXJtVmFsaWRhdGVzIiwidGVybVN0cmluZyIsImNvbnRpbmFlZEFzc2VydGlvblN0cmluZyIsInRlcm1TaW5ndWxhciIsImlzU2luZ3VsYXIiLCJmcmFtZVZhbGlkYXRlcyIsImZyYW1lU3RyaW5nIiwiZnJhbWVTaW5ndWxhciIsInN0YXRlbWVudFN0cmluZyIsInN0YXRlbWVudFZhbGlkYXRlcyIsInN0YXRlZCIsImlzU3RhdGVkIiwidW5pZnlJbmRlcGVuZGVudGx5IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJ1bmlmaWVzSW5kZXBlbmRlbnRseSIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlQ29udGFpbmVkQXNzZXJ0aW9uIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInRlcm1Db250YWluZWQiLCJpc1Rlcm1Db250YWluZWQiLCJmcmFtZUNvbnRhaW5lZCIsImlzRnJhbWVDb250YWluZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQW1CQTs7O2VBQUE7OztnQ0FqQm9DO2tFQUVkOzBCQUVDO3lCQUNLOzhCQUNBOzZCQUNrQjsrQkFDdUU7eUJBS2pFOzs7Ozs7QUFFcEQsTUFBTSxFQUFFQSxrQkFBa0IsRUFBRSxHQUFHQyxtQ0FB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
@@ -92,7 +92,7 @@ const _default = (0, _elements.define)(class DefinedAssertion extends _assertion
92
92
  context.debug(`The '${termString}' term is not singular.`);
93
93
  return continuation(termValidates);
94
94
  }
95
- this.term.validate(context, (term, context)=>{
95
+ return this.term.validate(context, (term, context)=>{
96
96
  let termValidates = false;
97
97
  if (term !== null) {
98
98
  this.term = term; ///
@@ -117,7 +117,7 @@ const _default = (0, _elements.define)(class DefinedAssertion extends _assertion
117
117
  context.debug(`The '${frameString}' frame is not singular.`);
118
118
  return continuation(frameValidates);
119
119
  }
120
- this.frame.validate(context, (frame)=>{
120
+ return this.frame.validate(context, (frame)=>{
121
121
  let frameValidates = false;
122
122
  if (frame !== null) {
123
123
  this.frame = frame;
@@ -235,4 +235,4 @@ function validateWhenDerived(term, frame, negated, context, continuation) {
235
235
  continuation(validatesWhenDerived);
236
236
  }
237
237
 
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9kZWZpbmVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVEZWZpbmVkQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VxdWl2YWxlbmNlc1wiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucywgZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdWJzdGl0dXRpb25zXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSwgZnJhbWVGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlLCBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSwgZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgRGVmaW5lZEFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLmZyYW1lPSBmcmFtZTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldERlZmluZWRBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRBc3NlcnRpb24gPSB0aGlzLmZpbmRWYWxpZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IHZhbGlkQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24gaXMgYWxyZWFkeSB2YWxpZC5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWZpbmVkQXNzZXJ0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZVRlcm0gPSB0aGlzLnZhbGlkYXRlVGVybS5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlRnJhbWUgPSB0aGlzLnZhbGlkYXRlRnJhbWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVUZXJtLFxuICAgICAgdmFsaWRhdGVGcmFtZVxuICAgIF0sIGNvbnRleHQsICh2YWxpZGFldHMpID0+IHtcbiAgICAgIGlmICghdmFsaWRhZXRzKSB7XG4gICAgICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVmaW5lZEFzc2VydGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQsXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpczsgLy8vXG5cbiAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGRlZmluZWRBc3NlcnRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm0oY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgdGVybVZhbGlkYXRlcyA9IHRydWU7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0aGlzLnRlcm0uZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24ncyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtU2luZ3VsYXIgPSB0aGlzLnRlcm0uaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKCF0ZXJtU2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICB0aGlzLnRlcm0udmFsaWRhdGUoY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB0ZXJtVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMudGVybSA9IHRlcm07IC8vL1xuXG4gICAgICAgIHRlcm1WYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW9uJ3MgdGVybS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtVmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlRnJhbWUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgaWYgKHRoaXMuZnJhbWUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyYW1lVmFsaWRhdGVzID0gdHJ1ZTsgIC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZnJhbWUuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZScke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlvbidzICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuLi5gKTtcblxuICAgIGNvbnN0IGZyYW1lU2luZ3VsYXIgPSB0aGlzLmZyYW1lLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghZnJhbWVTaW5ndWxhcikge1xuICAgICAgY29uc3QgZnJhbWVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUgaXMgbm90IHNpbmd1bGFyLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnZhbGlkYXRlKGNvbnRleHQsIChmcmFtZSkgPT4ge1xuICAgICAgbGV0IGZyYW1lVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgZnJhbWVWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZScke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlvbidzICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oZnJhbWVWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmICghc3RhdGVkKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlblN0YXRlZCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG5cbiAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGRlZmluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdHJ1ZTtcblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBzdGF0ZWQgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKHN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy5mcmFtZSwgdGhpcy5uZWdhdGVkLCBjb250ZXh0LCAodmFsaWRhdGVzV2hlbkRlcml2ZWQpID0+IHtcbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGRlZmluZWQgYXNzZXJ0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZXJpdmVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnModGhpcy5mcmFtZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCBmcmFtZSwgdGhpcy5uZWdhdGVkLCBjb250ZXh0LCAodmFsaWRhdGVzV2hlbkRlcml2ZWQpID0+IHtcbiAgICAgIGxldCB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IGZhbHNlO1xuXG4gICAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odW5pZmllc0luZGVwZW5kZW50bHkpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkRlZmluZWRBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbjtcblxuICAgIGlmICh0aGlzLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlRGVmaW5lZEFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gZGVmaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgICAgdGVybSA9IHRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlKGRlZmluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBuZWdhdGVkID0gbmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIGRlZmluZWRBc3NlcnRpb24gPSBuZXcgRGVmaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGZyYW1lLCBuZWdhdGVkKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gaXNWYXJpYWJsZURlZmluZWQodmFyaWFibGUsIGNvbnRleHQpIHtcbiAgY29uc3QgZXF1aXZhbGVuY2VzID0gY29udGV4dC5nZXRFcXVpdmFsZW5jZXMoKSxcbiAgICAgICAgZ3JvdW5kZWRUZXJtcyA9IFtdLFxuICAgICAgICBkZWZpbmVkVmFyaWFibGVzID0gW107XG5cbiAgc2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyhlcXVpdmFsZW5jZXMsIGdyb3VuZGVkVGVybXMsIGRlZmluZWRWYXJpYWJsZXMsIGNvbnRleHQpO1xuXG4gIGNvbnN0IHZhcmlhYmxlTWF0Y2hlc0RlZmluZWRWYXJpYWJsZSA9IGRlZmluZWRWYXJpYWJsZXMuc29tZSgoZGVmaW5lZFZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVmaW5lZFZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlID0gZGVmaW5lZFZhcmlhYmxlLmNvbXBhcmVWYXJpYWJsZSh2YXJpYWJsZSk7XG5cbiAgICAgICAgICBpZiAoZGVmaW5lZFZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlID09PSB2YXJpYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdmFyaWFibGVEZWZpbmVkID0gdmFyaWFibGVNYXRjaGVzRGVmaW5lZFZhcmlhYmxlOyAvLy9cblxuICByZXR1cm4gdmFyaWFibGVEZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHN0ZXBzID0gY29udGV4dC5nZXRTdGVwcygpLFxuICAgICAgICBtZXRhdmFyaWFibGVEZWZpbmVkID0gc3RlcHMuc29tZSgoc3RlcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZURlZmluZWQgPSBzdGVwLmlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZURlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIG1ldGF2YXJpYWJsZURlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgZnJhbWUsIG5lZ2F0ZWQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHRlcm0uZ2V0VmFyaWFibGVJZGVudGlmaWVyKCksXG4gICAgICAgICAgZGVjbGFyZWREYXJpYWJsZSA9IGNvbnRleHQuZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpLFxuICAgICAgICAgIGRlY2xhcmVkRGFyaWFibGVEZWZpbmVkID0gaXNWYXJpYWJsZURlZmluZWQoZGVjbGFyZWREYXJpYWJsZSwgY29udGV4dCk7XG5cbiAgICBpZiAoIW5lZ2F0ZWQgJiYgZGVjbGFyZWREYXJpYWJsZURlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVnYXRlZCAmJiAhZGVjbGFyZWREYXJpYWJsZURlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZnJhbWUhPT0gbnVsbCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBmcmFtZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgZGVjbGFyZWRNZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZURlZmluZWQgPSBpc01ldGF2YXJpYWJsZURlZmluZWQoZGVjbGFyZWRNZXRhdmFyaWFibGUsIGNvbnRleHQpO1xuXG4gICAgaWYgKCFuZWdhdGVkICYmIGRlY2xhcmVkTWV0YXZhcmlhYmxlRGVmaW5lZCkge1xuICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChuZWdhdGVkICYmICFkZWNsYXJlZE1ldGF2YXJpYWJsZURlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xufVxuIl0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJEZWZpbmVkQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsImZyYW1lIiwibmVnYXRlZCIsImdldFRlcm0iLCJnZXRGcmFtZSIsImlzTmVnYXRlZCIsImdldERlZmluZWRBc3NlcnRpb25Ob2RlIiwiZ2V0Tm9kZSIsImRlZmluZWRBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJjb250aW51YXRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZEFzc2VydGlvbiIsImZpbmRWYWxpZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb24iLCJkZWJ1ZyIsInZhbGlkYXRlVGVybSIsImJpbmQiLCJ2YWxpZGF0ZUZyYW1lIiwiYWxsIiwidmFsaWRhZXRzIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlc1doZW5EZXJpdmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImV4aXN0cyIsInZhbGlkYXRlcyIsImFzc2VydGlvbiIsImFkZEFzc2VydGlvbiIsInRlcm1WYWxpZGF0ZXMiLCJ0ZXJtU3RyaW5nIiwidGVybVNpbmd1bGFyIiwiaXNTaW5ndWxhciIsImZyYW1lVmFsaWRhdGVzIiwiZnJhbWVTdHJpbmciLCJmcmFtZVNpbmd1bGFyIiwic3RhdGVkIiwiaXNTdGF0ZWQiLCJ1bmlmeUluZGVwZW5kZW50bHkiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnMiLCJmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMiLCJ1bmlmaWVzSW5kZXBlbmRlbnRseSIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlRGVmaW5lZEFzc2VydGlvbiIsInRlcm1Gcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlIiwibmVnYXRlZEZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsImlzVmFyaWFibGVEZWZpbmVkIiwidmFyaWFibGUiLCJlcXVpdmFsZW5jZXMiLCJnZXRFcXVpdmFsZW5jZXMiLCJncm91bmRlZFRlcm1zIiwiZGVmaW5lZFZhcmlhYmxlcyIsInNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMiLCJ2YXJpYWJsZU1hdGNoZXNEZWZpbmVkVmFyaWFibGUiLCJzb21lIiwiZGVmaW5lZFZhcmlhYmxlIiwiZGVmaW5lZFZhcmlhYmxlQ29tcGFyZXNUb1ZhcmlhYmxlIiwiY29tcGFyZVZhcmlhYmxlIiwidmFyaWFibGVEZWZpbmVkIiwiaXNNZXRhdmFyaWFibGVEZWZpbmVkIiwibWV0YXZhcmlhYmxlIiwic3RlcHMiLCJnZXRTdGVwcyIsIm1ldGF2YXJpYWJsZURlZmluZWQiLCJzdGVwIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwiZGVjbGFyZWREYXJpYWJsZSIsImZpbmREZWNsYXJlZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZERhcmlhYmxlRGVmaW5lZCIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwiZGVjbGFyZWRNZXRhdmFyaWFibGUiLCJmaW5kRGVjbGFyZWRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZURlZmluZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWdCQTs7O2VBQUE7OztnQ0Fkb0M7a0VBRWQ7MEJBRUM7eUJBQ0s7OEJBQ0E7NkJBQ2dCOzhCQUNhOytCQUNvQjt5QkFDc0U7Ozs7OztBQUVuSixNQUFNLEVBQUVBLGtCQUFrQixFQUFFLEdBQUdDLG1DQUFtQjtNQUVsRCxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLHlCQUF5QkMsa0JBQVM7SUFDNUQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxDQUFFO1FBQ25FLEtBQUssQ0FBQ04sU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxLQUFLLEdBQUVBO1FBQ1osSUFBSSxDQUFDQyxPQUFPLEdBQUdBO0lBQ2pCO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0gsSUFBSTtJQUNs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
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9kZWZpbmVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gXCIuLi9hc3NlcnRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgYWxsLCBleGlzdHMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVEZWZpbmVkQXNzZXJ0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHNlcGFyYXRlR3JvdW5kZWRUZXJtc0FuZERlZmluZWRWYXJpYWJsZXMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2VxdWl2YWxlbmNlc1wiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucywgZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdWJzdGl0dXRpb25zXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSwgZnJhbWVGcm9tSkRlZmluZWRBc3NlcnRpb25Ob2RlLCBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSwgZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgYnJlYWtQb2ludEZyb21KU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgRGVmaW5lZEFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLmZyYW1lPSBmcmFtZTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldERlZmluZWRBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBkZWZpbmVkQXNzZXJ0aW9uTm9kZTtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRBc3NlcnRpb24gPSB0aGlzLmZpbmRWYWxpZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IHZhbGlkQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24gaXMgYWxyZWFkeSB2YWxpZC5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWZpbmVkQXNzZXJ0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0ZVRlcm0gPSB0aGlzLnZhbGlkYXRlVGVybS5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZhbGlkYXRlRnJhbWUgPSB0aGlzLnZhbGlkYXRlRnJhbWUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVUZXJtLFxuICAgICAgdmFsaWRhdGVGcmFtZVxuICAgIF0sIGNvbnRleHQsICh2YWxpZGFldHMpID0+IHtcbiAgICAgIGlmICghdmFsaWRhZXRzKSB7XG4gICAgICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZGVmaW5lZEFzc2VydGlvbik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQsXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBkZWZpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29uc3QgYXNzZXJ0aW9uID0gdGhpczsgLy8vXG5cbiAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGRlZmluZWRBc3NlcnRpb24pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm0oY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgaWYgKHRoaXMudGVybSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgdGVybVZhbGlkYXRlcyA9IHRydWU7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0aGlzLnRlcm0uZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24ncyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtU2luZ3VsYXIgPSB0aGlzLnRlcm0uaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKCF0ZXJtU2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZXJtLnZhbGlkYXRlKGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnRlcm0gPSB0ZXJtOyAvLy9cblxuICAgICAgICB0ZXJtVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZScke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBkZWZpbmVkIGFzc2VydGlvbidzIHRlcm0uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZUZyYW1lKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLmZyYW1lID09PSBudWxsKSB7XG4gICAgICBjb25zdCBmcmFtZVZhbGlkYXRlcyA9IHRydWU7ICAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihmcmFtZVZhbGlkYXRlcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmZyYW1lLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24ncyAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCBmcmFtZVNpbmd1bGFyID0gdGhpcy5mcmFtZS5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoIWZyYW1lU2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IGZyYW1lVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihmcmFtZVZhbGlkYXRlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZnJhbWUudmFsaWRhdGUoY29udGV4dCwgKGZyYW1lKSA9PiB7XG4gICAgICBsZXQgZnJhbWVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcblxuICAgICAgICBmcmFtZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmcmFtZVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZXMgdGhlJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlZmluZWQgYXNzZXJ0aW9uJ3MgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihmcmFtZVZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgaWYgKCFzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2RlZmluZWRBc3NlcnRpb25TdHJpbmd9JyBzdGF0ZWQgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIHN0YXRlZCBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoc3RhdGVkKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZXJpdmVkKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVyaXZlZCBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlV2hlbkRlcml2ZWQodGhpcy50ZXJtLCB0aGlzLmZyYW1lLCB0aGlzLm5lZ2F0ZWQsIGNvbnRleHQsICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkgPT4ge1xuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlcyB0aGUgJyR7ZGVmaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlJbmRlcGVuZGVudGx5KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICAgIGRlZmluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnModGhpcy50ZXJtLCBjb250ZXh0KSxcbiAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lQW5kU3Vic3RpdHV0aW9ucyh0aGlzLmZyYW1lLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIGZyYW1lLCB0aGlzLm5lZ2F0ZWQsIGNvbnRleHQsICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkgPT4ge1xuICAgICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gZmFsc2U7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh1bmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtkZWZpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVmaW5lZCBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih1bmlmaWVzSW5kZXBlbmRlbnRseSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRGVmaW5lZEFzc2VydGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGRlZmluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGRlZmluZWRBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVEZWZpbmVkQXNzZXJ0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUoZGVmaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZShkZWZpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgZGVmaW5lZEFzc2VydGlvbiA9IG5ldyBEZWZpbmVkQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGRlZmluZWRBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBpc1ZhcmlhYmxlRGVmaW5lZCh2YXJpYWJsZSwgY29udGV4dCkge1xuICBjb25zdCBlcXVpdmFsZW5jZXMgPSBjb250ZXh0LmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICBncm91bmRlZFRlcm1zID0gW10sXG4gICAgICAgIGRlZmluZWRWYXJpYWJsZXMgPSBbXTtcblxuICBzZXBhcmF0ZUdyb3VuZGVkVGVybXNBbmREZWZpbmVkVmFyaWFibGVzKGVxdWl2YWxlbmNlcywgZ3JvdW5kZWRUZXJtcywgZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCk7XG5cbiAgY29uc3QgdmFyaWFibGVNYXRjaGVzRGVmaW5lZFZhcmlhYmxlID0gZGVmaW5lZFZhcmlhYmxlcy5zb21lKChkZWZpbmVkVmFyaWFibGUpID0+IHtcbiAgICAgICAgICBjb25zdCBkZWZpbmVkVmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGUgPSBkZWZpbmVkVmFyaWFibGUuY29tcGFyZVZhcmlhYmxlKHZhcmlhYmxlKTtcblxuICAgICAgICAgIGlmIChkZWZpbmVkVmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGUgPT09IHZhcmlhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB2YXJpYWJsZURlZmluZWQgPSB2YXJpYWJsZU1hdGNoZXNEZWZpbmVkVmFyaWFibGU7IC8vL1xuXG4gIHJldHVybiB2YXJpYWJsZURlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RlcHMgPSBjb250ZXh0LmdldFN0ZXBzKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZURlZmluZWQgPSBzdGVwcy5zb21lKChzdGVwKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlRGVmaW5lZCA9IHN0ZXAuaXNNZXRhdmFyaWFibGVEZWZpbmVkKG1ldGF2YXJpYWJsZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlRGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlRGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdGVybS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICBkZWNsYXJlZERhcmlhYmxlID0gY29udGV4dC5maW5kRGVjbGFyZWRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyKHZhcmlhYmxlSWRlbnRpZmllciksXG4gICAgICAgICAgZGVjbGFyZWREYXJpYWJsZURlZmluZWQgPSBpc1ZhcmlhYmxlRGVmaW5lZChkZWNsYXJlZERhcmlhYmxlLCBjb250ZXh0KTtcblxuICAgIGlmICghbmVnYXRlZCAmJiBkZWNsYXJlZERhcmlhYmxlRGVmaW5lZCkge1xuICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChuZWdhdGVkICYmICFkZWNsYXJlZERhcmlhYmxlRGVmaW5lZCkge1xuICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmcmFtZSE9PSBudWxsKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IGZyYW1lLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICBkZWNsYXJlZE1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZERlY2xhcmVkTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpLFxuICAgICAgICAgIGRlY2xhcmVkTWV0YXZhcmlhYmxlRGVmaW5lZCA9IGlzTWV0YXZhcmlhYmxlRGVmaW5lZChkZWNsYXJlZE1ldGF2YXJpYWJsZSwgY29udGV4dCk7XG5cbiAgICBpZiAoIW5lZ2F0ZWQgJiYgZGVjbGFyZWRNZXRhdmFyaWFibGVEZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5lZ2F0ZWQgJiYgIWRlY2xhcmVkTWV0YXZhcmlhYmxlRGVmaW5lZCkge1xuICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG59XG4iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkRlZmluZWRBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0ZXJtIiwiZnJhbWUiLCJuZWdhdGVkIiwiZ2V0VGVybSIsImdldEZyYW1lIiwiaXNOZWdhdGVkIiwiZ2V0RGVmaW5lZEFzc2VydGlvbk5vZGUiLCJnZXROb2RlIiwiZGVmaW5lZEFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsImRlZmluZWRBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkQXNzZXJ0aW9uIiwiZmluZFZhbGlkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImRlYnVnIiwidmFsaWRhdGVUZXJtIiwiYmluZCIsInZhbGlkYXRlRnJhbWUiLCJhbGwiLCJ2YWxpZGFldHMiLCJ2YWxpZGF0ZXNXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwidmFsaWRhdGVzIiwiYXNzZXJ0aW9uIiwiYWRkQXNzZXJ0aW9uIiwidGVybVZhbGlkYXRlcyIsInRlcm1TdHJpbmciLCJ0ZXJtU2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwiZnJhbWVWYWxpZGF0ZXMiLCJmcmFtZVN0cmluZyIsImZyYW1lU2luZ3VsYXIiLCJzdGF0ZWQiLCJpc1N0YXRlZCIsInVuaWZ5SW5kZXBlbmRlbnRseSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyIsImZyYW1lRnJvbUZyYW1lQW5kU3Vic3RpdHV0aW9ucyIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwibmFtZSIsImZyb21KU09OIiwianNvbiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVEZWZpbmVkQXNzZXJ0aW9uIiwidGVybUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJmcmFtZUZyb21KRGVmaW5lZEFzc2VydGlvbk5vZGUiLCJuZWdhdGVkRnJvbUpEZWZpbmVkQXNzZXJ0aW9uTm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwiaXNWYXJpYWJsZURlZmluZWQiLCJ2YXJpYWJsZSIsImVxdWl2YWxlbmNlcyIsImdldEVxdWl2YWxlbmNlcyIsImdyb3VuZGVkVGVybXMiLCJkZWZpbmVkVmFyaWFibGVzIiwic2VwYXJhdGVHcm91bmRlZFRlcm1zQW5kRGVmaW5lZFZhcmlhYmxlcyIsInZhcmlhYmxlTWF0Y2hlc0RlZmluZWRWYXJpYWJsZSIsInNvbWUiLCJkZWZpbmVkVmFyaWFibGUiLCJkZWZpbmVkVmFyaWFibGVDb21wYXJlc1RvVmFyaWFibGUiLCJjb21wYXJlVmFyaWFibGUiLCJ2YXJpYWJsZURlZmluZWQiLCJpc01ldGF2YXJpYWJsZURlZmluZWQiLCJtZXRhdmFyaWFibGUiLCJzdGVwcyIsImdldFN0ZXBzIiwibWV0YXZhcmlhYmxlRGVmaW5lZCIsInN0ZXAiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJkZWNsYXJlZERhcmlhYmxlIiwiZmluZERlY2xhcmVkVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsImRlY2xhcmVkRGFyaWFibGVEZWZpbmVkIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJkZWNsYXJlZE1ldGF2YXJpYWJsZSIsImZpbmREZWNsYXJlZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsImRlY2xhcmVkTWV0YXZhcmlhYmxlRGVmaW5lZCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBZ0JBOzs7ZUFBQTs7O2dDQWRvQztrRUFFZDswQkFFQzt5QkFDSzs4QkFDQTs2QkFDZ0I7OEJBQ2E7K0JBQ29CO3lCQUNzRTs7Ozs7O0FBRW5KLE1BQU0sRUFBRUEsa0JBQWtCLEVBQUUsR0FBR0MsbUNBQW1CO01BRWxELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMseUJBQXlCQyxrQkFBUztJQUM1RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFQyxPQUFPLENBQUU7UUFDbkUsS0FBSyxDQUFDTixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLEtBQUssR0FBRUE7UUFDWixJQUFJLENBQUNDLE9BQU8sR0FBR0E7SUFDakI7SUFFQUMsVUFBVTtRQUNSLE9BQU8sSUFBSSxD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