@magic-xpa/engine 4.900.0-dev491.7 → 4.901.0-ang15-dev491.310

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 (52) hide show
  1. package/esm2020/src/ClientManager.mjs +56 -15
  2. package/esm2020/src/CurrentClientVersion.mjs +2 -2
  3. package/esm2020/src/bridge/MagicBridge.mjs +3 -3
  4. package/esm2020/src/commands/ClientToServer/DataviewCommand.mjs +6 -6
  5. package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +4 -4
  6. package/esm2020/src/commands/ClientToServer/EventCommand.mjs +8 -8
  7. package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +4 -4
  8. package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +5 -5
  9. package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +7 -7
  10. package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +6 -6
  11. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +8 -8
  12. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +7 -7
  13. package/esm2020/src/data/DataView.mjs +34 -34
  14. package/esm2020/src/data/DataviewManager.mjs +7 -7
  15. package/esm2020/src/data/Field.mjs +3 -2
  16. package/esm2020/src/data/Record.mjs +10 -10
  17. package/esm2020/src/data/TaskTransactionManager.mjs +4 -4
  18. package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +5 -5
  19. package/esm2020/src/env/Environment.mjs +7 -7
  20. package/esm2020/src/env/LanguageData.mjs +10 -5
  21. package/esm2020/src/event/EventsManager.mjs +2 -2
  22. package/esm2020/src/event/RunTimeEvent.mjs +16 -16
  23. package/esm2020/src/exp/ExpressionEvaluator.mjs +2 -2
  24. package/esm2020/src/gui/FormsTable.mjs +8 -8
  25. package/esm2020/src/gui/MgControl.mjs +12 -11
  26. package/esm2020/src/gui/MgForm.mjs +4 -22
  27. package/esm2020/src/http/HttpManager.mjs +8 -8
  28. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +22 -22
  29. package/esm2020/src/rt/DataviewHeaderBase.mjs +16 -16
  30. package/esm2020/src/rt/Operation.mjs +3 -3
  31. package/esm2020/src/rt/RecomputeTable.mjs +12 -4
  32. package/esm2020/src/rt/RemoteDataviewHeader.mjs +10 -7
  33. package/esm2020/src/security/UserDetails.mjs +12 -12
  34. package/esm2020/src/tasks/MGData.mjs +4 -4
  35. package/esm2020/src/tasks/RCTimer.mjs +10 -10
  36. package/esm2020/src/tasks/RemoteTaskService.mjs +3 -3
  37. package/esm2020/src/tasks/Task.mjs +56 -48
  38. package/esm2020/src/util/PrmMap.mjs +5 -5
  39. package/esm2020/src/util/ReturnResult.mjs +7 -7
  40. package/esm2020/src/util/Scrambler.mjs +3 -2
  41. package/esm2020/src/util/cookie.service.mjs +2 -2
  42. package/fesm2015/magic-xpa-engine.mjs +375 -325
  43. package/fesm2015/magic-xpa-engine.mjs.map +1 -1
  44. package/fesm2020/magic-xpa-engine.mjs +368 -318
  45. package/fesm2020/magic-xpa-engine.mjs.map +1 -1
  46. package/package.json +6 -6
  47. package/src/ClientManager.d.ts +2 -1
  48. package/src/bridge/MagicBridge.d.ts +1 -1
  49. package/src/gui/MgForm.d.ts +1 -3
  50. package/src/tasks/RemoteTaskService.d.ts +1 -1
  51. package/src/tasks/Task.d.ts +1 -1
  52. package/magic-xpa-engine.d.ts +0 -2
@@ -3,13 +3,6 @@ import { XMLConstants } from "@magic-xpa/utils";
3
3
  import { Manager, RuntimeContextBase } from "@magic-xpa/gui";
4
4
  import { RemoteTaskService } from "../tasks/RemoteTaskService";
5
5
  export class FormsTable {
6
- constructor(task, parentForm) {
7
- this._task = null;
8
- this._parentForm = null;
9
- this._formsStringXml = null;
10
- this._task = task;
11
- this._parentForm = parentForm;
12
- }
13
6
  get Count() {
14
7
  return this._formsStringXml.length;
15
8
  }
@@ -18,6 +11,13 @@ export class FormsTable {
18
11
  return this._formsStringXml.get_Item(formDisplayIndex - 1);
19
12
  return null;
20
13
  }
14
+ constructor(task, parentForm) {
15
+ this._task = null;
16
+ this._parentForm = null;
17
+ this._formsStringXml = null;
18
+ this._task = task;
19
+ this._parentForm = parentForm;
20
+ }
21
21
  async fillData() {
22
22
  this._formsStringXml = new List();
23
23
  let parser = Manager.GetCurrentRuntimeContext().Parser;
@@ -63,4 +63,4 @@ export class FormsTable {
63
63
  await this._task.PrepareTaskForm();
64
64
  }
65
65
  }
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybXNUYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZ3VpL0Zvcm1zVGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFDLE9BQU8sRUFBWSxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsT0FBTyxFQUFjLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFLN0QsTUFBTSxPQUFPLFVBQVU7SUF3QnJCLFlBQVksSUFBVSxFQUFFLFVBQXNCO1FBdkJ0QyxVQUFLLEdBQVMsSUFBSSxDQUFDO1FBQ25CLGdCQUFXLEdBQWUsSUFBSSxDQUFDO1FBQ3ZDLG9CQUFlLEdBQWlCLElBQUksQ0FBQztRQXNCbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQW5CRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO0lBQ3JDLENBQUM7SUFPRCxRQUFRLENBQUMsZ0JBQXdCO1FBQy9CLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTtZQUN6RSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTdELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQVdELEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWxDLElBQUksTUFBTSxHQUFjLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUVsRSxPQUFPLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFO1NBQ3hEO0lBQ0gsQ0FBQztJQU1ELHFCQUFxQixDQUFDLGdCQUF3QjtRQUU1QyxJQUFJLFVBQVUsR0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTtZQUN6RSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRS9DLElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtZQUN2QixrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFckUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBT08sS0FBSyxDQUFDLGdCQUFnQixDQUFDLFlBQW9CO1FBQ2pELElBQUksWUFBWSxLQUFLLElBQUk7WUFDdkIsT0FBTyxLQUFLLENBQUM7UUFFZixJQUFJLE1BQU0sR0FBYyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDbEUsSUFBSSxZQUFZLEtBQUssWUFBWSxDQUFDLFlBQVksRUFBRTtZQUM5QyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNyRzthQUNJLElBQUksWUFBWSxLQUFLLFlBQVksQ0FBQyxXQUFXLEVBQUU7WUFDbEQsSUFBSSxhQUFhLEdBQVcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQzNGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFDSSxJQUFJLFlBQVksS0FBSyxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDMUQsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUM7U0FDYjthQUNJLElBQUksWUFBWSxLQUFLLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUMzRCxNQUFNLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1lBRWhELE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFLTyxLQUFLLENBQUMsa0NBQWtDO1FBQzlDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLFlBQVksaUJBQWlCO1lBQ3JELE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xpc3R9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1htbFBhcnNlciwgWE1MQ29uc3RhbnRzfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge01hbmFnZXIsIE1nRm9ybUJhc2UsIFJ1bnRpbWVDb250ZXh0QmFzZX0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7VGFza30gZnJvbSBcIi4uL3Rhc2tzL1Rhc2tcIjtcclxuaW1wb3J0IHtSZW1vdGVUYXNrU2VydmljZX0gZnJvbSBcIi4uL3Rhc2tzL1JlbW90ZVRhc2tTZXJ2aWNlXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyBzYXZlIGFsbCBmb3JtcyBvbiB0YXNrXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBGb3Jtc1RhYmxlIHtcclxuICBwcml2YXRlIF90YXNrOiBUYXNrID0gbnVsbDtcclxuICBwcml2YXRlIF9wYXJlbnRGb3JtOiBNZ0Zvcm1CYXNlID0gbnVsbDtcclxuICBfZm9ybXNTdHJpbmdYbWw6IExpc3Q8c3RyaW5nPiA9IG51bGw7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY291bnQgb2YgZm9ybXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldCBDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1zU3RyaW5nWG1sLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJuIHRoZSBmb3JtIGJ5IHNlbmQgdGhlIGRpc3BsYXkgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvcm1EaXNwbGF5SW5kZXhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0X0l0ZW0oZm9ybURpc3BsYXlJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChmb3JtRGlzcGxheUluZGV4ID4gMCAmJiBmb3JtRGlzcGxheUluZGV4IDw9IHRoaXMuX2Zvcm1zU3RyaW5nWG1sLmxlbmd0aClcclxuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1zU3RyaW5nWG1sLmdldF9JdGVtKGZvcm1EaXNwbGF5SW5kZXggLSAxKTtcclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHRhc2s6IFRhc2ssIHBhcmVudEZvcm06IE1nRm9ybUJhc2UpIHtcclxuICAgIHRoaXMuX3Rhc2sgPSB0YXNrO1xyXG4gICAgdGhpcy5fcGFyZW50Rm9ybSA9IHBhcmVudEZvcm07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2UgdGhlIGZvcm0gc3RydWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tSZWZcIj5yZWZlcmVuY2UgdG8gdGhlIG93bmVyVGFzayBvZiB0aGlzIGZvcm08L3BhcmFtPlxyXG4gIGFzeW5jIGZpbGxEYXRhKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZm9ybXNTdHJpbmdYbWwgPSBuZXcgTGlzdCgpO1xyXG5cclxuICAgIGxldCBwYXJzZXI6IFhtbFBhcnNlciA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuUGFyc2VyO1xyXG5cclxuICAgIHdoaWxlIChhd2FpdCB0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLmdldE5leHRUYWcoKSkpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5pdCB0aGUgZm9ybSBvZiB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZm9ybURpc3BsYXlJbmRleFwiPjwvcGFyYW0+XHJcbiAgSW5pdEZvcm1Gcm9tWG1sU3RyaW5nKGZvcm1EaXNwbGF5SW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gd2hpbGUgdGhlIGZvcm0gaXNuJ3QgZXhpc3QgdGhlIGZpcnN0IGZvcm0gd2lsbCBiZSBvcGVuLiAoaXQgaXMgdGhlIHNhbWUgaW4gbm9uIG9mZmxpbmUgdGFzaylcclxuICAgIGxldCBmb3JtU3RyWG1sOiBzdHJpbmcgPSB0aGlzLmdldF9JdGVtKDEpO1xyXG5cclxuICAgIGlmIChmb3JtRGlzcGxheUluZGV4ID4gMCAmJiBmb3JtRGlzcGxheUluZGV4IDw9IHRoaXMuX2Zvcm1zU3RyaW5nWG1sLmxlbmd0aClcclxuICAgICAgZm9ybVN0clhtbCA9IHRoaXMuZ2V0X0l0ZW0oZm9ybURpc3BsYXlJbmRleCk7XHJcblxyXG4gICAgaWYgKGZvcm1TdHJYbWwgIT09IG51bGwpIHtcclxuICAgICAgUnVudGltZUNvbnRleHRCYXNlLkluc3RhbmNlLlBhcnNlci5wdXNoKCk7IC8vIGFsbG93IHJlY3Vyc2l2ZSBwYXJzaW5nXHJcbiAgICAgIFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5QYXJzZXIuUHJlcGFyZUZvcm1SZWFkU3RyaW5nKGZvcm1TdHJYbWwpO1xyXG5cclxuICAgICAgdGhpcy5fdGFzay5Gb3JtSW5pdERhdGEodGhpcy5fcGFyZW50Rm9ybSk7XHJcbiAgICAgIFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5QYXJzZXIucG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVG8gYWxsb2NhdGUgYW5kIGZpbGwgaW5uZXIgb2JqZWN0cyBvZiB0aGUgY2xhc3NcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvdW5kVGFnTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGFzeW5jIGluaXRJbm5lck9iamVjdHMoZm91bmRUYWdOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgcGFyc2VyOiBYbWxQYXJzZXIgPSBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLlBhcnNlcjtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IFhNTENvbnN0YW50cy5NR19UQUdfRk9STVMpIHtcclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpOyAvLyBtb3ZlIEluZGV4IHRvIGVuZCBvZiA8ZHZoZWFkZXI+ICsxIGZvciAnPidcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvdW5kVGFnTmFtZSA9PT0gWE1MQ29uc3RhbnRzLk1HX1RBR19GT1JNKSB7XHJcbiAgICAgIGxldCBmb3JtU3RyaW5nWG1sOiBzdHJpbmcgPSBSdW50aW1lQ29udGV4dEJhc2UuSW5zdGFuY2UuUGFyc2VyLlJlYWRUb0VuZE9mQ3VycmVudEVsZW1lbnQoKTtcclxuICAgICAgdGhpcy5fZm9ybXNTdHJpbmdYbWwucHVzaChmb3JtU3RyaW5nWG1sKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09ICgnLycgKyBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk0pKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09ICgnLycgKyBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk1TKSkge1xyXG4gICAgICBhd2FpdCB0aGlzLlByZXBhcmVNYWluRGlzcGxheUZvckNvbm5lY3RlZFRhc2soKTtcclxuXHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGZvciByZW1vdGUgdGFzayB3ZSBoYXZlIGFsbCB0aGUgaW5mb3JtYXRpb24gdGhhdCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgZm9ybSBkaXNwbGF5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIFByZXBhcmVNYWluRGlzcGxheUZvckNvbm5lY3RlZFRhc2soKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fdGFzay5UYXNrU2VydmljZSBpbnN0YW5jZW9mIFJlbW90ZVRhc2tTZXJ2aWNlKVxyXG4gICAgICBhd2FpdCB0aGlzLl90YXNrLlByZXBhcmVUYXNrRm9ybSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybXNUYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZ3VpL0Zvcm1zVGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFDLE9BQU8sRUFBWSxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsT0FBTyxFQUFjLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFLN0QsTUFBTSxPQUFPLFVBQVU7SUFRckIsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBT0QsUUFBUSxDQUFDLGdCQUF3QjtRQUMvQixJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07WUFDekUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU3RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxZQUFZLElBQVUsRUFBRSxVQUFzQjtRQXZCdEMsVUFBSyxHQUFTLElBQUksQ0FBQztRQUNuQixnQkFBVyxHQUFlLElBQUksQ0FBQztRQUN2QyxvQkFBZSxHQUFpQixJQUFJLENBQUM7UUFzQm5DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0lBQ2hDLENBQUM7SUFNRCxLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVsQyxJQUFJLE1BQU0sR0FBYyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFFbEUsT0FBTyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRTtTQUN4RDtJQUNILENBQUM7SUFNRCxxQkFBcUIsQ0FBQyxnQkFBd0I7UUFFNUMsSUFBSSxVQUFVLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxQyxJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07WUFDekUsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUvQyxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDdkIsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXJFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQU9PLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFvQjtRQUNqRCxJQUFJLFlBQVksS0FBSyxJQUFJO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1FBRWYsSUFBSSxNQUFNLEdBQWMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ2xFLElBQUksWUFBWSxLQUFLLFlBQVksQ0FBQyxZQUFZLEVBQUU7WUFDOUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckc7YUFDSSxJQUFJLFlBQVksS0FBSyxZQUFZLENBQUMsV0FBVyxFQUFFO1lBQ2xELElBQUksYUFBYSxHQUFXLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUMzRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQztTQUNiO2FBQ0ksSUFBSSxZQUFZLEtBQUssQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzFELE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFDSSxJQUFJLFlBQVksS0FBSyxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDM0QsTUFBTSxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztZQUVoRCxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS08sS0FBSyxDQUFDLGtDQUFrQztRQUM5QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxZQUFZLGlCQUFpQjtZQUNyRCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtYbWxQYXJzZXIsIFhNTENvbnN0YW50c30gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtNYW5hZ2VyLCBNZ0Zvcm1CYXNlLCBSdW50aW1lQ29udGV4dEJhc2V9IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuLi90YXNrcy9UYXNrXCI7XHJcbmltcG9ydCB7UmVtb3RlVGFza1NlcnZpY2V9IGZyb20gXCIuLi90YXNrcy9SZW1vdGVUYXNrU2VydmljZVwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gc2F2ZSBhbGwgZm9ybXMgb24gdGFza1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRm9ybXNUYWJsZSB7XHJcbiAgcHJpdmF0ZSBfdGFzazogVGFzayA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfcGFyZW50Rm9ybTogTWdGb3JtQmFzZSA9IG51bGw7XHJcbiAgX2Zvcm1zU3RyaW5nWG1sOiBMaXN0PHN0cmluZz4gPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNvdW50IG9mIGZvcm1zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXQgQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3Jtc1N0cmluZ1htbC5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiB0aGUgZm9ybSBieSBzZW5kIHRoZSBkaXNwbGF5IGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3JtRGlzcGxheUluZGV4XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldF9JdGVtKGZvcm1EaXNwbGF5SW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoZm9ybURpc3BsYXlJbmRleCA+IDAgJiYgZm9ybURpc3BsYXlJbmRleCA8PSB0aGlzLl9mb3Jtc1N0cmluZ1htbC5sZW5ndGgpXHJcbiAgICAgIHJldHVybiB0aGlzLl9mb3Jtc1N0cmluZ1htbC5nZXRfSXRlbShmb3JtRGlzcGxheUluZGV4IC0gMSk7XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcih0YXNrOiBUYXNrLCBwYXJlbnRGb3JtOiBNZ0Zvcm1CYXNlKSB7XHJcbiAgICB0aGlzLl90YXNrID0gdGFzaztcclxuICAgIHRoaXMuX3BhcmVudEZvcm0gPSBwYXJlbnRGb3JtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlIHRoZSBmb3JtIHN0cnVjdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrUmVmXCI+cmVmZXJlbmNlIHRvIHRoZSBvd25lclRhc2sgb2YgdGhpcyBmb3JtPC9wYXJhbT5cclxuICBhc3luYyBmaWxsRGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2Zvcm1zU3RyaW5nWG1sID0gbmV3IExpc3QoKTtcclxuXHJcbiAgICBsZXQgcGFyc2VyOiBYbWxQYXJzZXIgPSBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLlBhcnNlcjtcclxuXHJcbiAgICB3aGlsZSAoYXdhaXQgdGhpcy5pbml0SW5uZXJPYmplY3RzKHBhcnNlci5nZXROZXh0VGFnKCkpKSB7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGluaXQgdGhlIGZvcm0gb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvcm1EaXNwbGF5SW5kZXhcIj48L3BhcmFtPlxyXG4gIEluaXRGb3JtRnJvbVhtbFN0cmluZyhmb3JtRGlzcGxheUluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIC8vIHdoaWxlIHRoZSBmb3JtIGlzbid0IGV4aXN0IHRoZSBmaXJzdCBmb3JtIHdpbGwgYmUgb3Blbi4gKGl0IGlzIHRoZSBzYW1lIGluIG5vbiBvZmZsaW5lIHRhc2spXHJcbiAgICBsZXQgZm9ybVN0clhtbDogc3RyaW5nID0gdGhpcy5nZXRfSXRlbSgxKTtcclxuXHJcbiAgICBpZiAoZm9ybURpc3BsYXlJbmRleCA+IDAgJiYgZm9ybURpc3BsYXlJbmRleCA8PSB0aGlzLl9mb3Jtc1N0cmluZ1htbC5sZW5ndGgpXHJcbiAgICAgIGZvcm1TdHJYbWwgPSB0aGlzLmdldF9JdGVtKGZvcm1EaXNwbGF5SW5kZXgpO1xyXG5cclxuICAgIGlmIChmb3JtU3RyWG1sICE9PSBudWxsKSB7XHJcbiAgICAgIFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5QYXJzZXIucHVzaCgpOyAvLyBhbGxvdyByZWN1cnNpdmUgcGFyc2luZ1xyXG4gICAgICBSdW50aW1lQ29udGV4dEJhc2UuSW5zdGFuY2UuUGFyc2VyLlByZXBhcmVGb3JtUmVhZFN0cmluZyhmb3JtU3RyWG1sKTtcclxuXHJcbiAgICAgIHRoaXMuX3Rhc2suRm9ybUluaXREYXRhKHRoaXMuX3BhcmVudEZvcm0pO1xyXG4gICAgICBSdW50aW1lQ29udGV4dEJhc2UuSW5zdGFuY2UuUGFyc2VyLnBvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRvIGFsbG9jYXRlIGFuZCBmaWxsIGlubmVyIG9iamVjdHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3VuZFRhZ05hbWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhc3luYyBpbml0SW5uZXJPYmplY3RzKGZvdW5kVGFnTmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHBhcnNlcjogWG1sUGFyc2VyID0gTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5QYXJzZXI7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk1TKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTsgLy8gbW92ZSBJbmRleCB0byBlbmQgb2YgPGR2aGVhZGVyPiArMSBmb3IgJz4nXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09IFhNTENvbnN0YW50cy5NR19UQUdfRk9STSkge1xyXG4gICAgICBsZXQgZm9ybVN0cmluZ1htbDogc3RyaW5nID0gUnVudGltZUNvbnRleHRCYXNlLkluc3RhbmNlLlBhcnNlci5SZWFkVG9FbmRPZkN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICAgIHRoaXMuX2Zvcm1zU3RyaW5nWG1sLnB1c2goZm9ybVN0cmluZ1htbCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSAoJy8nICsgWE1MQ29uc3RhbnRzLk1HX1RBR19GT1JNKSkge1xyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSAoJy8nICsgWE1MQ29uc3RhbnRzLk1HX1RBR19GT1JNUykpIHtcclxuICAgICAgYXdhaXQgdGhpcy5QcmVwYXJlTWFpbkRpc3BsYXlGb3JDb25uZWN0ZWRUYXNrKCk7XHJcblxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBmb3IgcmVtb3RlIHRhc2sgd2UgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIHRoYXQgd2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIGZvcm0gZGlzcGxheVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBQcmVwYXJlTWFpbkRpc3BsYXlGb3JDb25uZWN0ZWRUYXNrKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX3Rhc2suVGFza1NlcnZpY2UgaW5zdGFuY2VvZiBSZW1vdGVUYXNrU2VydmljZSlcclxuICAgICAgYXdhaXQgdGhpcy5fdGFzay5QcmVwYXJlVGFza0Zvcm0oKTtcclxuICB9XHJcbn1cclxuIl19
@@ -6,15 +6,6 @@ import { TaskBase } from '../tasks/TaskBase';
6
6
  import { ConstInterface } from '../ConstInterface';
7
7
  import { AccessHelper } from '../AccessHelper';
8
8
  export class MgControl extends MgControlBase {
9
- constructor(type, taskOrParentMgForm, parentControlOrParentControlIdx) {
10
- if (arguments.length === 0)
11
- super();
12
- else if (arguments.length === 3 && (type === null || type.constructor === Number) && (taskOrParentMgForm === null || taskOrParentMgForm instanceof TaskBase) && (parentControlOrParentControlIdx === null || parentControlOrParentControlIdx.constructor === Number))
13
- super(type, taskOrParentMgForm.getForm(), parentControlOrParentControlIdx);
14
- else
15
- super(type, taskOrParentMgForm, parentControlOrParentControlIdx);
16
- this.initialize();
17
- }
18
9
  initialize() {
19
10
  this._focusedStopExecution = false;
20
11
  this._inControlSuffix = false;
@@ -27,6 +18,15 @@ export class MgControl extends MgControlBase {
27
18
  this.HasZoomHandler = false;
28
19
  this.ArgList = null;
29
20
  }
21
+ constructor(type, taskOrParentMgForm, parentControlOrParentControlIdx) {
22
+ if (arguments.length === 0)
23
+ super();
24
+ else if (arguments.length === 3 && (type === null || type.constructor === Number) && (taskOrParentMgForm === null || taskOrParentMgForm instanceof TaskBase) && (parentControlOrParentControlIdx === null || parentControlOrParentControlIdx.constructor === Number))
25
+ super(type, taskOrParentMgForm.getForm(), parentControlOrParentControlIdx);
26
+ else
27
+ super(type, taskOrParentMgForm, parentControlOrParentControlIdx);
28
+ this.initialize();
29
+ }
30
30
  GetVarIndex() {
31
31
  return super.getForm().getTask().DataView.Dvcount + this.veeIndx;
32
32
  }
@@ -39,7 +39,8 @@ export class MgControl extends MgControlBase {
39
39
  if (!isTagProcessed) {
40
40
  switch (attribute) {
41
41
  case ConstInterface.MG_ATTR_SUBFORM_TASK:
42
- this._subformTaskId = valueStr;
42
+ if (valueStr.trim() != "")
43
+ this._subformTaskId = valueStr;
43
44
  break;
44
45
  case ConstInterface.MG_ATTR_REFRESHON:
45
46
  this.refreshOnString = valueStr.trim();
@@ -352,4 +353,4 @@ export class MgControl extends MgControlBase {
352
353
  }
353
354
  }
354
355
  MgControl.ReturnToCtrl = null;
355
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWdDb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ndWkvTWdDb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsYUFBYSxFQUdiLGFBQWEsRUFHZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxjQUFjLEVBRWYsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJM0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQVE3QyxNQUFNLE9BQU8sU0FBVSxTQUFRLGFBQWE7SUFvQzFDLFlBQVksSUFBb0IsRUFBRSxrQkFBd0IsRUFBRSwrQkFBd0M7UUFDbEcsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDeEIsS0FBSyxFQUFFLENBQUM7YUFDTCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEtBQUssSUFBSSxJQUFJLGtCQUFrQixZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUMsK0JBQStCLEtBQUssSUFBSSxJQUFJLCtCQUErQixDQUFDLFdB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LENBQUM7U0FDZDtRQUVELElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsTUFBTTtZQUNULE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsa0NBQWtDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFakcsSUFBSSxjQUFjLEVBQUU7WUFDbEIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNuQjtRQUdELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O0FBOWtCTSxzQkFBWSxHQUFjLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tbWFuZHMsXHJcbiAgQ29tbWFuZFR5cGUsXHJcbiAgR3VpRGF0YUNvbGxlY3Rpb24sXHJcbiAgSHRtbFByb3BlcnRpZXMsXHJcbiAgTWdDb250cm9sQmFzZSxcclxuICBNZ0Zvcm1CYXNlLFxyXG4gIFByb3BlcnR5LFxyXG4gIFByb3BJbnRlcmZhY2UsXHJcbiAgUHJvcFBhcmVudEludGVyZmFjZSxcclxuICBWYWxpZGF0aW9uRGV0YWlsc1xyXG59IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtcclxuICBJbnRlcm5hbEludGVyZmFjZSxcclxuICBMb2dnZXIsXHJcbiAgTWdDb250cm9sVHlwZSxcclxuICBTY3JvbGxCYXJUaHVtYlR5cGUsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBTdWJmb3JtVHlwZSxcclxuICBUYWJsZUJlaGF2aW91cixcclxuICBYbWxQYXJzZXJcclxufSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtEZWJ1ZywgTlN0cmluZ30gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge0FyZ3VtZW50c0xpc3R9IGZyb20gJy4uL3J0L0FyZ3VtZW50c0xpc3QnO1xyXG5pbXBvcnQge1Rhc2tCYXNlfSBmcm9tICcuLi90YXNrcy9UYXNrQmFzZSc7XHJcbmltcG9ydCB7TWdGb3JtfSBmcm9tICcuL01nRm9ybSc7XHJcbmltcG9ydCB7RmllbGR9IGZyb20gJy4uL2RhdGEvRmllbGQnO1xyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tICcuLi9kYXRhL0RhdGFWaWV3JztcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSAnLi4vQWNjZXNzSGVscGVyJztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgZGF0YSBmb3IgPGNvbnRyb2w+IC4uLjwvY29udHJvbD4gdGFnXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8YXV0aG9yPiAgZWh1ZG1cclxuLy8vXHJcbi8vLyA8L2F1dGhvcj5cclxuZXhwb3J0IGNsYXNzIE1nQ29udHJvbCBleHRlbmRzIE1nQ29udHJvbEJhc2UgaW1wbGVtZW50cyBQcm9wUGFyZW50SW50ZXJmYWNlIHtcclxuICBwcml2YXRlIF9mb2N1c2VkU3RvcEV4ZWN1dGlvbjogYm9vbGVhbjsgLy8gdXNlZCB0byByZW1lbWJlciBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZlxyXG4gIHByaXZhdGUgX2luQ29udHJvbFN1ZmZpeDogYm9vbGVhbjsgLy8gdHJ1ZSwgaXMgY29udHJvbCBpcyBpbiBjb250cm9sIHN1ZmZpeFxyXG4gIHByaXZhdGUgX3J0RXZ0VGFzazogVGFza0Jhc2U7XHJcblxyXG4gIHByaXZhdGUgX3N1YmZvcm1UYXNrSWQ6IHN0cmluZzsgLy8gdGhlIHRhc2sgaWQgb2YgdGhlIHN1YiBmb3JtIHRhc2sgKGlmIHRoaXNcclxuICBwcml2YXRlIF9zdWJmb3JtVGFzazogVGFza0Jhc2U7IC8vIHJlZmVyZW5jZSB0byB0YXNrIG9mIHRoZSBzdWIgZm9ybSB0YXNrXHJcblxyXG4gIElzSW50ZXJhY3RpdmVVcGRhdGU6IGJvb2xlYW47IC8vIHRydWUgaWYgdGhpcyBjb250cm9sIHdhcyBtb2RpZmllZCBieSB1c2VyXHJcbiAgcHJpdmF0ZSByZWZyZXNoT25TdHJpbmc6IHN0cmluZzsgLy8gT25seSBmb3Igb2ZmbGluZS4gR2V0IGl0IGZyb20gWE1MIGFuZCBwdXQgaXQgb24gdGhlIHN1YmZvcm0gdGFzayB3aGVuIHRoZSBzdWJmb3JtIHRhc2sgaXMgb3BlbmVkXHJcbiAgU3ViZm9ybUxvYWRlZDogYm9vbGVhbjsgLy8gdHJ1ZSwgaWYgdGhlIHN1YmZvcm0gdGFzayB3YXMgbG9hZGVkIGFscmVhZHlcclxuICBIYXNab29tSGFuZGxlcjogYm9vbGVhbjsgLy8gaWYgVFJVRSwgdGhlcmUgaXMgYSB6b29tIGhhbmRsZXIgb24gdGhpcyBjdHJsXHJcbiAgQXJnTGlzdDogQXJndW1lbnRzTGlzdDsgLy8gYXJndW1lbnQgbGlzdCBidWlsdCBmcm9tIHRoZSBwcm9wZXJ0eVxyXG5cclxuICBzdGF0aWMgUmV0dXJuVG9DdHJsOiBNZ0NvbnRyb2wgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemUoKSB7XHJcbiAgICB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5faW5Db250cm9sU3VmZml4ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9ydEV2dFRhc2sgPSBudWxsO1xyXG4gICAgdGhpcy5fc3ViZm9ybVRhc2tJZCA9IG51bGw7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFzayA9IG51bGw7XHJcbiAgICB0aGlzLklzSW50ZXJhY3RpdmVVcGRhdGUgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmcmVzaE9uU3RyaW5nID0gbnVsbDtcclxuICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5IYXNab29tSGFuZGxlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHRhc2s6IFRhc2tCYXNlLCBwYXJlbnRDb250cm9sOiBudW1iZXIpO1xyXG4gIGNvbnN0cnVjdG9yKHR5cGU6IE1nQ29udHJvbFR5cGUsIHBhcmVudE1nRm9ybTogTWdGb3JtQmFzZSwgcGFyZW50Q29udHJvbElkeDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3Rvcih0eXBlPzogTWdDb250cm9sVHlwZSwgdGFza09yUGFyZW50TWdGb3JtPzogYW55LCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcclxuICAgICAgc3VwZXIoKTtcclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHR5cGUgPT09IG51bGwgfHwgdHlwZS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAodGFza09yUGFyZW50TWdGb3JtID09PSBudWxsIHx8IHRhc2tPclBhcmVudE1nRm9ybSBpbnN0YW5jZW9mIFRhc2tCYXNlKSAmJiAocGFyZW50Q29udHJvbE9yUGFyZW50Q29udHJvbElkeCA9PT0gbnVsbCB8fCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKVxyXG4gICAgICBzdXBlcih0eXBlLCB0YXNrT3JQYXJlbnRNZ0Zvcm0uZ2V0Rm9ybSgpLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuICAgIGVsc2VcclxuICAgICAgc3VwZXIodHlwZSwgdGFza09yUGFyZW50TWdGb3JtLCBwYXJlbnRDb250cm9sT3JQYXJlbnRDb250cm9sSWR4KTtcclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcclxuICB9XHJcblxyXG4gIEdldFZhckluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKDxEYXRhVmlldz5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpLkRhdGFWaWV3KS5EdmNvdW50ICsgdGhpcy52ZWVJbmR4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTZXQgYXJndW1lbnRzIGZyb20gdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZ0Zvcm1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRpdElkeFwiPjwvcGFyYW0+XHJcbiAgYXN5bmMgZmlsbERhdGEobWdGb3JtOiBNZ0Zvcm1CYXNlLCBkaXRJZHg6IG51bWJlciwgcGFyc2VyOiBYbWxQYXJzZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHN1cGVyLmZpbGxEYXRhKG1nRm9ybSwgZGl0SWR4LCBwYXJzZXIpO1xyXG4gICAgdGhpcy5BcmdMaXN0ID0gYXdhaXQgdGhpcy5HZXRBcmd1bWVudExpc3QoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGNvbnRyb2wgYXR0cmlidXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgU2V0QXR0cmlidXRlKGF0dHJpYnV0ZTogc3RyaW5nLCB2YWx1ZVN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNUYWdQcm9jZXNzZWQ6IGJvb2xlYW4gPSBzdXBlci5TZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZVN0cik7XHJcbiAgICBpZiAoIWlzVGFnUHJvY2Vzc2VkKSB7XHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NVQkZPUk1fVEFTSzpcclxuICAgICAgICAgIHRoaXMuX3N1YmZvcm1UYXNrSWQgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRUZSRVNIT046XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hPblN0cmluZyA9IHZhbHVlU3RyLnRyaW0oKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpc1RhZ1Byb2Nlc3NlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKE5TdHJpbmcuRm9ybWF0KFwiVW5yZWNvZ25pemVkIGF0dHJpYnV0ZTogJ3swfSdcIiwgYXR0cmlidXRlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVGFnUHJvY2Vzc2VkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBidWlsZCBBcmd1bWVudCBsaXN0IGZyb20gdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIEdldEFyZ3VtZW50TGlzdCgpOiBQcm9taXNlPEFyZ3VtZW50c0xpc3Q+IHtcclxuICAgIGxldCBhcmdMaXN0OiBBcmd1bWVudHNMaXN0ID0gbnVsbDtcclxuICAgIGlmICh0aGlzLl9wcm9wVGFiID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gYXJnTGlzdDtcclxuICAgIGxldCBBcmdMaXN0UHJvcDogUHJvcGVydHkgPSB0aGlzLl9wcm9wVGFiLmdldFByb3BCeUlkKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BBUkFNRVRFUlMpO1xyXG4gICAgaWYgKEFyZ0xpc3RQcm9wID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gYXJnTGlzdDtcclxuXHJcbiAgICBsZXQgcGFybXM6IHN0cmluZyA9IGF3YWl0IEFyZ0xpc3RQcm9wLmdldFZhbHVlKCk7XHJcbiAgICBpZiAocGFybXMgIT09IG51bGwpIHtcclxuICAgICAgYXJnTGlzdCA9IG5ldyBBcmd1bWVudHNMaXN0KCk7XHJcbiAgICAgIGFyZ0xpc3QuZmlsbExpc3QocGFybXMsIDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKTtcclxuICAgICAgaWYgKHRoaXMucmVmcmVzaE9uU3RyaW5nICE9PSBudWxsKVxyXG4gICAgICAgIGFyZ0xpc3QuUmVmcmVzaE9uU3RyaW5nID0gdGhpcy5yZWZyZXNoT25TdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJnTGlzdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiB0aGlzIGNvbnRyb2wgaXMgZGVzY2VuZGFudCBvZiB0aGUgcGFyZW50Rm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwYXJlbnRGb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzRGVzY2VuZGVudChwYXJlbnRGb3JtOiBNZ0Zvcm0pOiBib29sZWFuIHtcclxuICAgIGxldCBpc0Rlc2NlbmRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjaGVja0N1cnJlbnRGb3JtOiBNZ0Zvcm0gPSA8TWdGb3JtPnN1cGVyLmdldEZvcm0oKTtcclxuXHJcbiAgICBEZWJ1Zy5Bc3NlcnQocGFyZW50Rm9ybSAhPT0gbnVsbCk7XHJcblxyXG4gICAgd2hpbGUgKCFpc0Rlc2NlbmRlbnQgJiYgY2hlY2tDdXJyZW50Rm9ybSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAocGFyZW50Rm9ybSA9PT0gY2hlY2tDdXJyZW50Rm9ybSlcclxuICAgICAgICBpc0Rlc2NlbmRlbnQgPSB0cnVlO1xyXG5cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGN1cnJUYXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5jaGVja0N1cnJlbnRGb3JtLmdldFRhc2soKTtcclxuICAgICAgICBpZiAoY3VyclRhc2suZ2V0UGFyZW50KCkgIT09IG51bGwpXHJcbiAgICAgICAgICBjaGVja0N1cnJlbnRGb3JtID0gPE1nRm9ybT5jdXJyVGFzay5nZXRQYXJlbnQoKS5nZXRGb3JtKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpc0Rlc2NlbmRlbnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmVmcmVzaCBjb250cm9sIGRpc3BsYXkgaWYgaXQgaGFzIGEgcHJvcGVydHkgd2hpY2ggaXMgYW4gZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2hPbkV4cHJlc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IHNpemU6IG51bWJlciA9ICh0aGlzLl9wcm9wVGFiID09PSBudWxsID8gMCA6IHRoaXMuX3Byb3BUYWIuZ2V0U2l6ZSgpKTtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eTtcclxuICAgIGxldCByZWZyZXNoOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemUgJiYgIXJlZnJlc2g7IGkrKykge1xyXG4gICAgICBwcm9wID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wKGkpO1xyXG5cclxuICAgICAgc3dpdGNoIChwcm9wLmdldElEKCkpIHtcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RBVEE6XHJcbiAgICAgICAgICBpZiAoIXByb3AuaXNFeHByZXNzaW9uKCkgJiYgdGhpcy5fZmllbGQgIT09IG51bGwgJiYgdGhpcy5fZmllbGQuZ2V0VGFzaygpICE9PSB0aGlzLmdldEZvcm0oKS5nZXRUYXNrKCkpIHtcclxuICAgICAgICAgICAgcmVmcmVzaCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIC8qICBmYWxscyB0aHJvdWdoICovXHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQ6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5BQkxFRDpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JBTkdFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVFJBTlNMQVRPUjpcclxuICAgICAgICAgIGlmIChwcm9wLmlzRXhwcmVzc2lvbigpKVxyXG4gICAgICAgICAgICByZWZyZXNoID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVmcmVzaClcclxuICAgICAgICBhd2FpdCB0aGlzLlJlZnJlc2hEaXNwbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbnZva2UoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgaW52b2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIHRoZSBjb250cm9sIGlzIG5vdCB2aXNpYmxlLCBub3QgZW5hYmxlZCBvciBub3QgcGFya2FibGUgc2tpcCB0aGlzIGNvbnRyb2xcclxuICAgIGlmIChhd2FpdCB0aGlzLmlzUGFya2FibGUodHJ1ZSkpIHtcclxuICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhNZ0NvbnRyb2xCYXNlKHRoaXMsIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWCk7XHJcbiAgICAgIGludm9rZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGludm9rZWQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpc1BhcmthYmxlKGNoZWNrRW5hYmxlZEFuZFZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSAhc3VwZXIuaXNJbWFnZUNvbnRyb2woKTtcclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgYXdhaXQgc3VwZXIuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOQUJMRUQsIHRydWUpO1xyXG5cclxuICAgICAgYXdhaXQgc3VwZXIuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEUsIHRydWUpO1xyXG4gICAgICByZXN1bHQgPSBhd2FpdCBzdXBlci5pc1BhcmthYmxlKGNoZWNrRW5hYmxlZEFuZFZpc2libGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgc3ViZm9ybSB0YXNrIGlkIG9mIHRoZSBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRTdWJmb3JtVGFza0lkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3ViZm9ybVRhc2tJZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmaW5kIHRoZSBzdWJmb3JtIHRhc2sgYWNjb3JkaW5nIHRvIGl0cyBpZCBhbmQgc2F2ZSBpdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaW5pdFN1YmZvcm1UYXNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHN1cGVyLmlzU3ViZm9ybSgpKVxyXG4gICAgICB0aGlzLl9zdWJmb3JtVGFzayA9IDxUYXNrQmFzZT5HdWlEYXRhQ29sbGVjdGlvbi5NR0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh0aGlzLl9zdWJmb3JtVGFza0lkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGNvbnRyb2wncyBwYXJlbnRUYWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0UGFyZW50VGFibGUoKTogTWdDb250cm9sIHtcclxuICAgIHJldHVybiA8TWdDb250cm9sPnRoaXMuX3BhcmVudFRhYmxlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlc3RvcmUgYW5kIGRpc3BsYXkgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgY29udHJvbCB1c2VkIHdoZW4gdGhlIGNvbnRyb2wgaXMgbm90IG1vZGlmaWFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIHJlc3RvcmVPbGRWYWx1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9maWVsZCAhPT0gbnVsbClcclxuICAgICAgYXdhaXQgKDxGaWVsZD50aGlzLl9maWVsZCkudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHN1cGVyLnJlc2V0UHJldlZhbCgpO1xyXG4gICAgICBhd2FpdCBzdXBlci5TZXRBbmRSZWZyZXNoRGlzcGxheVZhbHVlKGF3YWl0IHRoaXMuZ2V0TWdWYWx1ZSh0aGlzLlZhbHVlKSwgdGhpcy5Jc051bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIGV2ZW50IHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFJ0RXZ0VGFzayhjdXJUYXNrOiBUYXNrQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcnRFdnRUYXNrID0gY3VyVGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBldmVudCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRSdEV2dFRhc2soKTogVGFza0Jhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX3J0RXZ0VGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSBzdWJmb3JtIHRhc2sgaWQgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFN1YmZvcm1UYXNrSWQodGFza0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YmZvcm1UYXNrSWQgPSB0YXNrSWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZiBoYW5kbGUgZm9jdXMgb24gdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNGb2N1c2VkU3RvcEV4ZWN1dGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZW1lbWJlciBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZiBoYW5kbGUgZm9jdXMgb24gdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm9jdXNlZFN0b3BFeGVjdXRpb25cIj48L3BhcmFtPlxyXG4gIHNldEZvY3VzZWRTdG9wRXhlY3V0aW9uKGZvY3VzZWRTdG9wRXhlY3V0aW9uOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbiA9IGZvY3VzZWRTdG9wRXhlY3V0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsLVwiPlRoZSBjdHJsIHRvIGNoZWNrLiBjYW4gYmUgZnJhbWUgZm9ybSBhbmQgYWxzbyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIG9uVGhlU2FtZVN1YkZvcm1Db250cm9sKGN0cmw6IE1nQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoY3RybCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoc3VwZXIuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpICYmIGN0cmwuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpKSB7XHJcbiAgICAgICAgaWYgKHN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkgPT09IGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKSlcclxuICAgICAgICAgIHJldFZhbHVlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRydWUgaWYgdGhlIGN0cmxzIGFyZSBvbiBkaWZmZXJlbnQgZm9ybXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBvbkRpZmZGb3JtKGN0cmw6IE1nQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzU3ViZm9ybTogYm9vbGVhbiA9IHN1cGVyLmdldEZvcm0oKS5pc1N1YkZvcm0oKSB8fCBjdHJsLmdldEZvcm0oKS5pc1N1YkZvcm0oKTtcclxuICAgIGxldCBpc09uRGlmZkZvcm06IGJvb2xlYW4gPSAoaXNTdWJmb3JtICkgJiYgIXRoaXMub25UaGVTYW1lU3ViRm9ybUNvbnRyb2woY3RybCk7XHJcblxyXG4gICAgcmV0dXJuIGlzT25EaWZmRm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cnVlIGlmIGNvbnRyb2wgaXMgaW4gY29udHJvbCBzdWZmaXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNJbkNvbnRyb2xTdWZmaXgoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5Db250cm9sU3VmZml4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0cnVlIGlmIGNvbnRyb2wgaXMgaW4gY29udHJvbCBzdWZmaXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5Db250cm9sU3VmZml4XCI+PC9wYXJhbT5cclxuICBzZXRJbkNvbnRyb2xTdWZmaXgoaW5Db250cm9sU3VmZml4OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbkNvbnRyb2xTdWZmaXggPSBpbkNvbnRyb2xTdWZmaXg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgdGhlIGNvbnRyb2wgaGFzIHNlbGVjdCBwcm9ncmFtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBIYXNTZWxlY3RQcm9ncmFtKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IEhhc1NlbGVjdFByb2dyYW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBzZWxlY3RQcm9nUHJvcDogUHJvcGVydHkgPSBzdXBlci5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NFTEVDVF9QUk9HUkFNKTtcclxuICAgIGlmIChzZWxlY3RQcm9nUHJvcCAhPT0gbnVsbCAmJiBzZWxlY3RQcm9nUHJvcC5HZXRDb21wdXRlZFZhbHVlKCkgIT09IG51bGwpXHJcbiAgICAgIEhhc1NlbGVjdFByb2dyYW0gPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBIYXNTZWxlY3RQcm9ncmFtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0cnVlIGlmIHRoZSBjb250cm9sIHVzZSB0aGUgaGFuZGxlciBaT09NIChmb3Igc2VsZWN0IHByb2dyYW0gb3IgWm9vbSBoYW5kbGVyKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICB1c2Vab29tSGFuZGxlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLkhhc1pvb21IYW5kbGVyIHx8IChzdXBlci5nZXRGaWVsZCgpICE9PSBudWxsICYmICgoPEZpZWxkPnN1cGVyLmdldEZpZWxkKCkpLmdldEhhc1pvb21IYW5kbGVyKCkgfHwgKHRoaXMuSGFzU2VsZWN0UHJvZ3JhbSgpKSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFVwZGF0ZSBib29sZWFuIHByb3BlcnR5KGV4OnZpc2libGVcXGVuYWJsZSkgb2YgY29udHJvbCBhbmQgaXQncyBjaGlsZHJlblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5wcm9wZXJ0eSBpZCA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tbWFuZFR5cGVcIj5jb21tYW5kIHR5cGUgdGhhdCBiZWxvbmcgdG8gdGhlIHByb3AgaWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInVwZGF0ZVRoaXNcIj48L3BhcmFtPlxyXG4gIGFzeW5jIHVwZGF0ZVByb3BlcnR5TG9naWNOZXN0aW5nKHByb3BJZDogbnVtYmVyLCBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUsIHZhbDogYm9vbGVhbiwgdXBkYXRlVGhpczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHZhbCAmJiBzdXBlci5oYXZlVG9DaGVja1BhcmVudFZhbHVlKCkpXHJcbiAgICAgIHZhbCA9IHN1cGVyLmlzUGFyZW50UHJvcFZhbHVlKHByb3BJZCk7XHJcblxyXG4gICAgLy8gaWYgdGhlIHN1YmZvcm0gbXVzdCBiZSBpbnZpc2libGUgKENUUkxfU1VCRk9STV9OT05FKSB3ZSBjaGFuZ2UgaXRzIHZpc2liaWxpdHkgdG8gZmFsc2VcclxuICAgIGlmICh2YWwgJiYgc3VwZXIuaXNTdWJmb3JtKCkgJiYgY29tbWFuZFR5cGUgPT09IENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUgJiYgdGhpcy5TaG91bGRTZXRTdWJmb3JtSW52aXNpYmxlKCkpXHJcbiAgICAgIHZhbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh1cGRhdGVUaGlzKSB7XHJcbiAgICAgIENvbW1hbmRzLmFkZE9wZXJhdGlvbldpdGhMaW5lKENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWSwgdGhpcywgc3VwZXIuZ2V0RGlzcGxheUxpbmUoZmFsc2UpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kVHlwZSA9PT0gQ29tbWFuZFR5cGUuUFJPUF9TRVRfVklTSUJMRSA/IEh0bWxQcm9wZXJ0aWVzLlZpc2libGUgOiBIdG1sUHJvcGVydGllcy5FbmFibGVkLCB2YWwpO1xyXG5cclxuICAgIH1cclxuICAgIGF3YWl0IHN1cGVyLnVwZGF0ZUNoaWxkcmVuUHJvcFZhbHVlKHByb3BJZCwgY29tbWFuZFR5cGUsIHZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIElmIHRoZSBzdWJmb3JtIG11c3QgYmUgaW52aXNpYmxlIChmb3IgZXhhbXBsZSBDVFJMX1NVQkZPUk1fTk9ORSkgcmV0dXJucyB0cnVlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIFNob3VsZFNldFN1YmZvcm1JbnZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc2V0SW52aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgc3ViZm9ybVR5cGU6IFN1YmZvcm1UeXBlID0gPFN1YmZvcm1UeXBlPnN1cGVyLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU1VCRk9STV9UWVBFKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgaWYgKHN1YmZvcm1UeXBlID09PSBTdWJmb3JtVHlwZS5Ob25lICYmIHRoaXMuZ2V0U3ViZm9ybVRhc2tJZCgpID09PSBudWxsKVxyXG4gICAgICBzZXRJbnZpc2libGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHNldEludmlzaWJsZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBVcGRhdGVzIHZpc2liaWxpdHkgb3IgZW5hYmxlIHByb3BlcnR5IG9mIHN1YmZvcm0gY29udHJvbHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicHJvcElkXCI+SWQgb2YgdmlzaWJpbGl0eSBvciBlbmFibGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tbWFuZFR5cGVcIj50eXBlIG9mIHRoZSBHVUkgY29tbWFuZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj52YWx1ZSBmb3IgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICBhc3luYyB1cGRhdGVTdWJmb3JtQ2hpbGRyZW5Qcm9wVmFsdWUocHJvcElkOiBudW1iZXIsIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgdmFsOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQoc3VwZXIuaXNTdWJmb3JtKCkpO1xyXG5cclxuICAgIGlmICghKDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKS5BZnRlckZpcnN0UmVjb3JkUHJlZml4KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IHN1YmZvcm1UeXBlOiBTdWJmb3JtVHlwZSA9IDxTdWJmb3JtVHlwZT5zdXBlci5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NVQkZPUk1fVFlQRSkuR2V0Q29tcHV0ZWRWYWx1ZUludGVnZXIoKTtcclxuICAgIGlmICh0aGlzLl9zdWJmb3JtVGFza0lkICE9PSBudWxsIHx8IHN1YmZvcm1UeXBlID09PSBTdWJmb3JtVHlwZS5Ob25lKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zdWJmb3JtVGFzayAhPT0gbnVsbCAmJiB0aGlzLl9zdWJmb3JtVGFzay5pc1N0YXJ0ZWQoKSkge1xyXG4gICAgICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNvbW1hbmRUeXBlID09PSBDb21tYW5kVHlwZS5QUk9QX1NFVF9WSVNJQkxFICYmIHZhbCAmJiB0aGlzLlJlZnJlc2hPblZpc2libGUpIHtcclxuICAgICAgICAgIHRoaXMuUmVmcmVzaE9uVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgYXdhaXQgKDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKS5TdWJmb3JtUmVmcmVzaCh0aGlzLl9zdWJmb3JtVGFzaywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3ViZm9ybUZvcm06IE1nRm9ybUJhc2UgPSB0aGlzLl9zdWJmb3JtVGFzay5nZXRGb3JtKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN1YmZvcm1Gb3JtLmdldEN0cmxDb3VudCgpOyBpKyspIHtcclxuICAgICAgICAgIGxldCBjaGlsZDogTWdDb250cm9sQmFzZSA9IHN1YmZvcm1Gb3JtLmdldEN0cmwoaSk7XHJcbiAgICAgICAgICAvLyBRQ1IgIzk4MTU1NSwgV2Ugc2hvdWxkIG5vdCBhZmZlY3QgdmlzaWJpbGl0eSBvZiB0aGUgVGFibGVDb2x1bW5zIHNpbmNlIGl0IGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlLlNldHRpbmcgdmlzaWJpbGl0eVxyXG4gICAgICAgICAgLy8gb2YgYWxsIGNvbHVtbnMgdG8gZmFsc2UgcHJldmVudHMgdGFibGUgcGxhY2VtZW50XHJcbiAgICAgICAgICBpZiAoIWNoaWxkLmlzQ29sdW1uQ29udHJvbCgpKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIGxldCBjaGlsZFZhbHVlOiBib29sZWFuID0gYXdhaXQgY2hpbGQuY2hlY2tQcm9wKHByb3BJZCwgdHJ1ZSkgJiYgdmFsO1xyXG4gICAgICAgICAgaWYgKGNoaWxkVmFsdWUpXHJcbiAgICAgICAgICAgIGNoaWxkVmFsdWUgPSBjaGlsZC5pc1BhcmVudFByb3BWYWx1ZShwcm9wSWQpO1xyXG5cclxuICAgICAgICAgIC8vIGlmICh0aGlzLl9zdWJmb3JtVGFzay5pc1N0YXJ0ZWQoKSlcclxuICAgICAgICAgIC8vICAgQ29tbWFuZHMuYWRkQXN5bmMoY29tbWFuZFR5cGUsIGNoaWxkLCBjaGlsZC5nZXREaXNwbGF5TGluZShmYWxzZSksIGNoaWxkVmFsdWUpO1xyXG4gICAgICAgICAgYXdhaXQgY2hpbGQudXBkYXRlQ2hpbGRyZW5Qcm9wVmFsdWUocHJvcElkLCBjb21tYW5kVHlwZSwgY2hpbGRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgoY29tbWFuZFR5cGUgPT09IENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUgJiYgdmFsKSAmJiAhdGhpcy5TdWJmb3JtTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUludGVybmFsRXZlbnRXaXRoTWdDb250cm9sQmFzZSh0aGlzLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1VCRk9STV9PUEVOKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0IHN1YmZvcm0gdGFzayBpZCBmb3IgYSBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRTdWJmb3JtVGFzaygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIGJlaGF2aW91ciBmb3IgdGhlIHRhYmxlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0VGFibGVCZWhhdmlvdXIoKTogVGFibGVCZWhhdmlvdXIge1xyXG4gICAgcmV0dXJuIFRhYmxlQmVoYXZpb3VyLlVubGltaXRlZEl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHZhbGlkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBhbmQgc2V0IGl0J3MgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiTmV3VmFsdWVcIj50aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlQ3RybFwiPmlmIHRydWUgdGhlbiB0aGUgY29udHJvbCB3aWxsIGJlIHVwZGF0ZWQgdXBvbiBzdWNjZXNzZnVsIGNoZWNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+cmV0dXJucyBpZiB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NmdWw8L3JldHVybnM+XHJcbiAgYXN5bmMgdmFsaWRhdGVBbmRTZXRWYWx1ZShOZXdWYWx1ZTogYW55LCB1cGRhdGVDdHJsOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBzdXBlci5VcGRhdGVNb2RpZmllZEJ5VXNlcihOZXdWYWx1ZSk7XHJcblxyXG4gICAgLy8gaWYgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGlzIG51bGwgb3Igd2FzIGNoYW5nZWRcclxuICAgIC8vIGNoZWNrIHZhbGlkYXRpb24gYW5kIHVwZGF0ZSB0aGUgY29udHJvbCB2YWx1ZVxyXG4gICAgaWYgKHRoaXMuTW9kaWZpZWRCeVVzZXIpIHtcclxuICAgICAgbGV0IGN0cmxDdXJyVmFsdWU6IGFueSA9IHRoaXMuVmFsdWU7XHJcbiAgICAgIGxldCB2ZDogVmFsaWRhdGlvbkRldGFpbHM7XHJcblxyXG4gICAgICBpZiAoc3VwZXIuZ2V0UElDKCkgPT09IG51bGwpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIHZkID0gc3VwZXIuYnVpbGRQaWN0dXJlKGN0cmxDdXJyVmFsdWUsIE5ld1ZhbHVlKTtcclxuXHJcbiAgICAgIHZkLmV2YWx1YXRlKCk7XHJcblxyXG4gICAgICAvLyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRzIHZhbHVlIHdhcyB3cm9uZ1xyXG4gICAgICBpZiAodmQuVmFsaWRhdGlvbkZhaWxlZCkge1xyXG4gICAgICAgIHRoaXMuTW9kaWZpZWRCeVVzZXIgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuSXNJbnRlcmFjdGl2ZVVwZGF0ZSA9IHRydWU7XHJcblxyXG4gICAgICBzdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpLnNldERhdGFTeW5jZWQoZmFsc2UpO1xyXG5cclxuICAgICAgLy8gc2V0IHRoZSB2YWx1ZSAoaGFuZGxlIHJlY29tcHV0ZSwgZXRjLilcclxuICAgICAgaWYgKHVwZGF0ZUN0cmwpIHtcclxuICAgICAgICAvLyBRQ1IjNDQxMDIwOkFmdGVyIHZhbGlkYXRpbmcgZGlzcGxheSB2YWx1ZSwgdGFrZSB0aGUgc2FtZSBjdHJsJ3MgdmFsdWUgZm9yIG1nIHZhbHVlIGNvbnZlcnNpb24uXHJcbiAgICAgICAgLy8gVXNpbmcgZGlzcGxheSB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBNZ1ZhbHVlLCBtaWdodCBoYXZlIHByb2JsZW0gdG8gY29udmVydCBiYWNrIHRvIE1nVmFsIHVzaW5nIHBpY3R1cmUgZHVlIHRvIGFsaWdubWVudCAoY2hhbmdlZCBhbGlnbm1lbnQgKS5cclxuICAgICAgICAvLyBUaGlzIHByb2JsZW0gb2NjdXJzIGZvciBudW1lcmljLlxyXG4gICAgICAgIC8vIFRoZSBmaXggc2hvdWxkIGJlIGFwcGxpY2FibGUgZm9yIG51bWVyaWMgdHlwZSBvbmx5LiBCZWNhdXNlIGRhdGUgYW5kIHRpbWUgZmllbGQgd2l0aCBjb21wbGV4IG1hc2tpbmcgaGF2ZSBwcm9ibGVtIG9uIHVzaW5nIGN0cmwncyB2YWx1ZS5cclxuICAgICAgICAvLyBSZWZlciBkYXRlIHFjcnM6ICMyOTE2NjYsICMzMDczNTMsICM0MzQyNDEgYW5kIGZvciB0aW1lLCBjaGVjayBkZWZhdWx0IHZhbHVlIHdoZW4gZm9ybWF0IGlzICdISC1NTS1TUyBQTVpAJ1xyXG4gICAgICAgIGlmICh0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiB0aGlzLl9maWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyAmJiB0eXBlb2YgTmV3VmFsdWUgPT09ICdzdHJpbmcnICYmIE5ld1ZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgdmQuc2V0VmFsdWUoTmV3VmFsdWUpO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLnNldFZhbHVlKHZkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSB2YWx1ZSByZWNlaXZlZCBmcm9tIHRoZSB1c2VyIGlucHV0IGFmdGVyIHZhbGlkYXRpb24gYW5kIHVwZGF0ZSB0aGUgZmllbGQgY29ubmVjdGVkIHRvIHRoaXNcclxuICAvLy8gICBjb250cm9sIChpZiBleGlzdHMpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZkXCI+dGhlIHZhbGlkYXRpb24gZGV0YWlscyBvYmplY3Q8L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgc2V0VmFsdWUodmQ6IFZhbGlkYXRpb25EZXRhaWxzKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgaXNOdWxsOiBib29sZWFuID0gdmQuZ2V0SXNOdWxsKCk7XHJcbiAgICBsZXQgbmV3VmFsdWU6IGFueSA9IHZkLmdldERpc3BWYWx1ZSgpO1xyXG4gICAgbGV0IG1nVmFsOiBzdHJpbmc7XHJcblxyXG4gICAgaWYgKCFpc051bGwgfHwgIXRoaXMuX2ZpZWxkLmhhc051bGxEaXNwbGF5VmFsdWUoKSlcclxuICAgICAgbWdWYWwgPSBhd2FpdCBzdXBlci5nZXRNZ1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgIC8vIGl0J3MgaW5uZXIgdmFsdWUgLT4gdHJhbnNsYXRlIGl0IHRvIHRoZSBkaXNwbGF5XHJcbiAgICBlbHNlXHJcbiAgICAgIG1nVmFsID0gKCh0aGlzLl9maWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpID8gdGhpcy5fZmllbGQuZ2V0Q2VsbERlZnVhbHRWYWx1ZSgpIDogdGhpcy5fZmllbGQuZ2V0RGVmYXVsdFZhbHVlKCkpO1xyXG4gICAgaWYgKG1nVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiAoIShuZXdWYWx1ZSA9PT0gdGhpcy5WYWx1ZSkgfHwgdGhpcy5LZXlTdHJva2VPbiB8fCB0aGlzLklzTnVsbCAhPT0gaXNOdWxsKSkge1xyXG4gICAgICAgIGF3YWl0ICg8RmllbGQ+dGhpcy5fZmllbGQpLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUobWdWYWwsIGlzTnVsbCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAvLyBkZWZlY3QgMTI3NzM0IDogdmFsdWUgb2YgdGhlIGZpZWxkIG1pZ2h0IGJlIGNoYW5nZWQgYWxyZWFkeSBpbnNpZGUgYSBjb250cm9sIGNoYW5nZSBoYW5kbGVyXHJcbiAgICAgICAgLy8gdG8gYXZvaWQgdXBkYXRpbmcgb2xkIHZhbHVlIGFuZCBvdmVycnVubmluZyB0aGUgdmFsdWUgZnIwbSB0aGUgY29udHJvbCBjaGFuZ2VcclxuICAgICAgICAvLyBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIGZpZWxkLiAobmVlZCB0byBiZSBkb25lIGZvciBjb21ibyBhbmQgbGlzdCBib3gsIGJ1dCBpdCdzIHRvbyByaXNreVxyXG4gICAgICAgIC8vIGFuZCB1bmxpa2VseSB0byBoYXBwZW4sIHNvIHRoZSBmaXggd2lsbCBiZSBmb3IgY2hlY2sgYm94IG9ubHkpXHJcblxyXG4gICAgICAgIGlmIChzdXBlci5pc0NoZWNrQm94KCkpIHtcclxuICAgICAgICAgIHRoaXMuZm9yY2VSZWZyZXNoID0gdHJ1ZTtcclxuICAgICAgICAgIG1nVmFsID0gKDxGaWVsZD50aGlzLl9maWVsZCkuZ2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWYgZmllbGQgdmFsdWUgaXMgbnVsbCAmIGhhcyBudWxsIGRpc3BsYXkgdmFsdWUsIHRha2UgZXZhbHVhdGVkIG51bGwgZGlzcGxheSB2YWx1ZS5cclxuICAgICAgaWYgKCh0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiBpc051bGwpICYmIHRoaXMuX2ZpZWxkLmhhc051bGxEaXNwbGF5VmFsdWUoKSlcclxuICAgICAgICBtZ1ZhbCA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgYXdhaXQgc3VwZXIuU2V0QW5kUmVmcmVzaERpc3BsYXlWYWx1ZShtZ1ZhbCwgaXNOdWxsKTtcclxuICAgICAgdGhpcy5mb3JjZVJlZnJlc2ggPSBmYWxzZTtcclxuICAgICAgLy8gUUNSICM0Mzg3NTMuIFByZXZlbnQgUlAmUlMgY3ljbGUsIHdoZW4gaXQncyBub3QgbmVlZGVkLlxyXG4gICAgICB0aGlzLktleVN0cm9rZU9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlZnJlc2ggdGhlIGl0ZW0gbGlzdCBvZiByYWRpbyBidXR0b24gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImV4ZWNDb21wdXRlQ2hvaWNlXCI+PC9wYXJhbT5cclxuICBhc3luYyByZWZyZXNoQW5kU2V0SXRlbXNMaXN0Rm9yUmFkaW9CdXR0b24obGluZTogbnVtYmVyLCBleGVjQ29tcHV0ZUNob2ljZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgc3VwZXIucmVmcmVzaEFuZFNldEl0ZW1zTGlzdEZvclJhZGlvQnV0dG9uKGxpbmUsIGV4ZWNDb21wdXRlQ2hvaWNlKTtcclxuXHJcbiAgICAvLyBJZiB0aGUgcGFya2luZyB3YXMgb24gdGhlIHJhZGlvIGNvbnRyb2wsIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGZvY3VzIGJlY2F1c2VcclxuICAgIC8vIHRoZSBvbGQgY29udHJvbHMgd2VyZSBkaXNwb3NlZCBhbmQgdGhlIG5ldyBvbmVzIGFyZSBjcmVhdGVkLlxyXG4gICAgLy8gaWYgKGxhc3RGb2N1c2VkVGFzayAhPT0gbnVsbCAmJiB0aGlzID09PSBsYXN0Rm9jdXNlZFRhc2suZ2V0TGFzdFBhcmtlZEN0cmwoKSlcclxuICAgIC8vICAgQ29tbWFuZHMuYWRkQXN5bmMoQ29tbWFuZFR5cGUuU0VUX0ZPQ1VTLCB0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgb2YgdGhpcyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFN1YmZvcm1UYXNrKCk6IFRhc2tCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJmb3JtVGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgb2YgdGhpcyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlc2V0U3ViZm9ybVRhc2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFzayA9IG51bGw7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFza0lkID0gXCIwXCI7XHJcbiAgfVxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyBNZ0Zvcm0gb2YgdGhlIHN1YmZvcm0gY29udHJvbCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRTdWJmb3JtTWdGb3JtKCk6IE1nRm9ybUJhc2Uge1xyXG4gICAgbGV0IGZvcm06IE1nRm9ybUJhc2UgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3N1YmZvcm1UYXNrICE9PSBudWxsKVxyXG4gICAgICBmb3JtID0gdGhpcy5fc3ViZm9ybVRhc2suZ2V0Rm9ybSgpO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENoZWNrIHdoZXRoZXIgdGFibGUgYmVpbmcgdXNlZCB3aXRoIGFic29sdXRlIHNjcm9sbGJhciB0aHVtYi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIElzVGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIERlYnVnLkFzc2VydCh0aGlzLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQkxFLCBcIkluIE1nQ29udHJvbC5Jc1RhYmxlV2l0aEFic29sdXRlU2Nyb2xsYmFyKCk6IE5vdCBhIHRhYmxlIGNvbnRyb2wuXCIpO1xyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIucHJvcEV4aXN0cyhQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TQ1JPTExfQkFSX1RIVU1CKSlcclxuICAgICAgdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIgPSAodGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TQ1JPTExfQkFSX1RIVU1CKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpID09PSA8bnVtYmVyPlNjcm9sbEJhclRodW1iVHlwZS5BYnNvbHV0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHRhYmxlV2l0aEFic29sdXRlU2Nyb2xsYmFyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2hlY2sgaWYgdGhlIHJldHVybi10by1jb250cm9sIHBvaW50cyB0byBhbiBleGlzdGluZyB0YXNrLjwvc3VtbWFyeT5cclxuICBzdGF0aWMgdmFsaWRSZXR1cm5Ub0N0cmwoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoTWdDb250cm9sLlJldHVyblRvQ3RybCAhPT0gbnVsbCAmJiBNZ0NvbnRyb2wuUmV0dXJuVG9DdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuaXNBYm9ydGluZygpKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGNoZWNrIGlmIG9uZSBtYXkgZGlyZWN0bHkgKG5vdCB2aWEgdGhlIGd1aSkgc2V0IGEgdmFsdWUgb24gdGhpcyBjb250cm9sLjwvc3VtbWFyeT5cclxuICBtYXlTZXRWYWx1ZSgpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAodGhpcy5UeXBlKSB7XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ0hFQ0tCT1g6XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEVYVDpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT01CTzpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9MSVNUOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1JBRElPOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQjpcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByZXZlbnQgdmFsdWUgc2V0dGluZyBpZiB0aGUgY29udHJvbCBkb2Vzbid0IGhhdmUgYSBmaWVsZCwgb3IgaWYgaXQgZ2V0cyBpdHMgdmFsdWUgZnJvbSBhbiBleHByZXNzaW9uXHJcbiAgICBpZiAodGhpcy5fZmllbGQgPT09IG51bGwgfHwgdGhpcy5fdmFsRXhwSWQgPiAwKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaXNNb2RpZmlhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2tzIGlmIGEgdmFsdWUgbWF5IGJlIHNldCwgYW5kIHRyaWVzIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiTmV3VmFsdWVcIj50aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlQ3RybFwiPmlmIHRydWUgdGhlbiB0aGUgY29udHJvbCB3aWxsIGJlIHVwZGF0ZWQgdXBvbiBzdWNjZXNzZnVsIGNoZWNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+cmV0dXJucyBpZiB2YWx1ZSBzZXR0aW5nIHdhcyBzdWNjZXNzZnVsIDwvcmV0dXJucz5cclxuICBhc3luYyB2YWxpZGF0ZUFuZFNldFZhbHVlSWZBbGxvd2VkKE5ld1ZhbHVlOiBhbnksIHJlZnJlc2hEaXNwbGF5OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIXRoaXMubWF5U2V0VmFsdWUoKSkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKE5TdHJpbmcuRm9ybWF0KFwiVW5hYmxlIHRvIGNoYW5nZSB2YWx1ZSBvZiBjb250cm9sIHswfTogVGhlIGNvbnRyb2wgaXMgcmVhZC1vbmx5LlwiLCB0aGlzLk5hbWUpKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXRWYWwgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQW5kU2V0VmFsdWUoTmV3VmFsdWUsIHRydWUpO1xyXG4gICAgaWYgKCFyZXRWYWwpXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJWYWx1ZSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgezB9LlwiLCB0aGlzLk5hbWUpKTtcclxuXHJcbiAgICBpZiAocmVmcmVzaERpc3BsYXkpIHtcclxuICAgICAgQ29tbWFuZHMuYWRkTm9QYXJhbWV0ZXJzKENvbW1hbmRUeXBlLlJFRlJFU0hfVEFTSywgdGhpcy5nZXRGb3JtKCkpO1xyXG4gICAgICBDb21tYW5kcy5pbnZva2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL3JlZnJlc2ggdGFza1xyXG4gICAgcmV0dXJuIHJldFZhbDtcclxuICB9XHJcbn1cclxuIl19
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWdDb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ndWkvTWdDb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsYUFBYSxFQUdiLGFBQWEsRUFHZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxjQUFjLEVBRWYsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFJM0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQVE3QyxNQUFNLE9BQU8sU0FBVSxTQUFRLGFBQWE7SUFnQmxDLFVBQVU7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FB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Q0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQy9ILE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE1BQU07WUFDVCxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpHLElBQUksY0FBYyxFQUFFO1lBQ2xCLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNuRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDbkI7UUFHRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztBQS9rQk0sc0JBQVksR0FBYyxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbW1hbmRzLFxyXG4gIENvbW1hbmRUeXBlLFxyXG4gIEd1aURhdGFDb2xsZWN0aW9uLFxyXG4gIEh0bWxQcm9wZXJ0aWVzLFxyXG4gIE1nQ29udHJvbEJhc2UsXHJcbiAgTWdGb3JtQmFzZSxcclxuICBQcm9wZXJ0eSxcclxuICBQcm9wSW50ZXJmYWNlLFxyXG4gIFByb3BQYXJlbnRJbnRlcmZhY2UsXHJcbiAgVmFsaWRhdGlvbkRldGFpbHNcclxufSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcbmltcG9ydCB7XHJcbiAgSW50ZXJuYWxJbnRlcmZhY2UsXHJcbiAgTG9nZ2VyLFxyXG4gIE1nQ29udHJvbFR5cGUsXHJcbiAgU2Nyb2xsQmFyVGh1bWJUeXBlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGUsXHJcbiAgU3ViZm9ybVR5cGUsXHJcbiAgVGFibGVCZWhhdmlvdXIsXHJcbiAgWG1sUGFyc2VyXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7RGVidWcsIE5TdHJpbmd9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtBcmd1bWVudHNMaXN0fSBmcm9tICcuLi9ydC9Bcmd1bWVudHNMaXN0JztcclxuaW1wb3J0IHtUYXNrQmFzZX0gZnJvbSAnLi4vdGFza3MvVGFza0Jhc2UnO1xyXG5pbXBvcnQge01nRm9ybX0gZnJvbSAnLi9NZ0Zvcm0nO1xyXG5pbXBvcnQge0ZpZWxkfSBmcm9tICcuLi9kYXRhL0ZpZWxkJztcclxuaW1wb3J0IHtEYXRhVmlld30gZnJvbSAnLi4vZGF0YS9EYXRhVmlldyc7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gJy4uL0NvbnN0SW50ZXJmYWNlJztcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gJy4uL0FjY2Vzc0hlbHBlcic7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGRhdGEgZm9yIDxjb250cm9sPiAuLi48L2NvbnRyb2w+IHRhZ1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPGF1dGhvcj4gIGVodWRtXHJcbi8vL1xyXG4vLy8gPC9hdXRob3I+XHJcbmV4cG9ydCBjbGFzcyBNZ0NvbnRyb2wgZXh0ZW5kcyBNZ0NvbnRyb2xCYXNlIGltcGxlbWVudHMgUHJvcFBhcmVudEludGVyZmFjZSB7XHJcbiAgcHJpdmF0ZSBfZm9jdXNlZFN0b3BFeGVjdXRpb246IGJvb2xlYW47IC8vIHVzZWQgdG8gcmVtZW1iZXIgc3RvcEV4ZWN1dGlvbiBmbGFnIGluIHRoZSBlbmQgb2ZcclxuICBwcml2YXRlIF9pbkNvbnRyb2xTdWZmaXg6IGJvb2xlYW47IC8vIHRydWUsIGlzIGNvbnRyb2wgaXMgaW4gY29udHJvbCBzdWZmaXhcclxuICBwcml2YXRlIF9ydEV2dFRhc2s6IFRhc2tCYXNlO1xyXG5cclxuICBwcml2YXRlIF9zdWJmb3JtVGFza0lkOiBzdHJpbmc7IC8vIHRoZSB0YXNrIGlkIG9mIHRoZSBzdWIgZm9ybSB0YXNrIChpZiB0aGlzXHJcbiAgcHJpdmF0ZSBfc3ViZm9ybVRhc2s6IFRhc2tCYXNlOyAvLyByZWZlcmVuY2UgdG8gdGFzayBvZiB0aGUgc3ViIGZvcm0gdGFza1xyXG5cclxuICBJc0ludGVyYWN0aXZlVXBkYXRlOiBib29sZWFuOyAvLyB0cnVlIGlmIHRoaXMgY29udHJvbCB3YXMgbW9kaWZpZWQgYnkgdXNlclxyXG4gIHByaXZhdGUgcmVmcmVzaE9uU3RyaW5nOiBzdHJpbmc7IC8vIE9ubHkgZm9yIG9mZmxpbmUuIEdldCBpdCBmcm9tIFhNTCBhbmQgcHV0IGl0IG9uIHRoZSBzdWJmb3JtIHRhc2sgd2hlbiB0aGUgc3ViZm9ybSB0YXNrIGlzIG9wZW5lZFxyXG4gIFN1YmZvcm1Mb2FkZWQ6IGJvb2xlYW47IC8vIHRydWUsIGlmIHRoZSBzdWJmb3JtIHRhc2sgd2FzIGxvYWRlZCBhbHJlYWR5XHJcbiAgSGFzWm9vbUhhbmRsZXI6IGJvb2xlYW47IC8vIGlmIFRSVUUsIHRoZXJlIGlzIGEgem9vbSBoYW5kbGVyIG9uIHRoaXMgY3RybFxyXG4gIEFyZ0xpc3Q6IEFyZ3VtZW50c0xpc3Q7IC8vIGFyZ3VtZW50IGxpc3QgYnVpbHQgZnJvbSB0aGUgcHJvcGVydHlcclxuXHJcbiAgc3RhdGljIFJldHVyblRvQ3RybDogTWdDb250cm9sID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplKCkge1xyXG4gICAgdGhpcy5fZm9jdXNlZFN0b3BFeGVjdXRpb24gPSBmYWxzZTtcclxuICAgIHRoaXMuX2luQ29udHJvbFN1ZmZpeCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcnRFdnRUYXNrID0gbnVsbDtcclxuICAgIHRoaXMuX3N1YmZvcm1UYXNrSWQgPSBudWxsO1xyXG4gICAgdGhpcy5fc3ViZm9ybVRhc2sgPSBudWxsO1xyXG4gICAgdGhpcy5Jc0ludGVyYWN0aXZlVXBkYXRlID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlZnJlc2hPblN0cmluZyA9IG51bGw7XHJcbiAgICB0aGlzLlN1YmZvcm1Mb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuSGFzWm9vbUhhbmRsZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuQXJnTGlzdCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKTtcclxuICBjb25zdHJ1Y3Rvcih0eXBlOiBNZ0NvbnRyb2xUeXBlKTtcclxuICBjb25zdHJ1Y3Rvcih0eXBlOiBNZ0NvbnRyb2xUeXBlLCB0YXNrOiBUYXNrQmFzZSwgcGFyZW50Q29udHJvbDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3Rvcih0eXBlOiBNZ0NvbnRyb2xUeXBlLCBwYXJlbnRNZ0Zvcm06IE1nRm9ybUJhc2UsIHBhcmVudENvbnRyb2xJZHg6IG51bWJlcik7XHJcbiAgY29uc3RydWN0b3IodHlwZT86IE1nQ29udHJvbFR5cGUsIHRhc2tPclBhcmVudE1nRm9ybT86IGFueSwgcGFyZW50Q29udHJvbE9yUGFyZW50Q29udHJvbElkeD86IG51bWJlcikge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXHJcbiAgICAgIHN1cGVyKCk7XHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmICh0eXBlID09PSBudWxsIHx8IHR5cGUuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKHRhc2tPclBhcmVudE1nRm9ybSA9PT0gbnVsbCB8fCB0YXNrT3JQYXJlbnRNZ0Zvcm0gaW5zdGFuY2VvZiBUYXNrQmFzZSkgJiYgKHBhcmVudENvbnRyb2xPclBhcmVudENvbnRyb2xJZHggPT09IG51bGwgfHwgcGFyZW50Q29udHJvbE9yUGFyZW50Q29udHJvbElkeC5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSlcclxuICAgICAgc3VwZXIodHlwZSwgdGFza09yUGFyZW50TWdGb3JtLmdldEZvcm0oKSwgcGFyZW50Q29udHJvbE9yUGFyZW50Q29udHJvbElkeCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHN1cGVyKHR5cGUsIHRhc2tPclBhcmVudE1nRm9ybSwgcGFyZW50Q29udHJvbE9yUGFyZW50Q29udHJvbElkeCk7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBHZXRWYXJJbmRleCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICg8RGF0YVZpZXc+c3VwZXIuZ2V0Rm9ybSgpLmdldFRhc2soKS5EYXRhVmlldykuRHZjb3VudCArIHRoaXMudmVlSW5keDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0IGFyZ3VtZW50cyBmcm9tIHRoZSBwcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWdGb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkaXRJZHhcIj48L3BhcmFtPlxyXG4gIGFzeW5jIGZpbGxEYXRhKG1nRm9ybTogTWdGb3JtQmFzZSwgZGl0SWR4OiBudW1iZXIsIHBhcnNlcjogWG1sUGFyc2VyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBzdXBlci5maWxsRGF0YShtZ0Zvcm0sIGRpdElkeCwgcGFyc2VyKTtcclxuICAgIHRoaXMuQXJnTGlzdCA9IGF3YWl0IHRoaXMuR2V0QXJndW1lbnRMaXN0KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBjb250cm9sIGF0dHJpYnV0ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFNldEF0dHJpYnV0ZShhdHRyaWJ1dGU6IHN0cmluZywgdmFsdWVTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzVGFnUHJvY2Vzc2VkOiBib29sZWFuID0gc3VwZXIuU2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWVTdHIpO1xyXG4gICAgaWYgKCFpc1RhZ1Byb2Nlc3NlZCkge1xyXG4gICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TVUJGT1JNX1RBU0s6XHJcbiAgICAgICAgICBpZiAodmFsdWVTdHIudHJpbSgpICE9IFwiXCIpXHJcbiAgICAgICAgICAgIHRoaXMuX3N1YmZvcm1UYXNrSWQgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRUZSRVNIT046XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hPblN0cmluZyA9IHZhbHVlU3RyLnRyaW0oKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpc1RhZ1Byb2Nlc3NlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKE5TdHJpbmcuRm9ybWF0KFwiVW5yZWNvZ25pemVkIGF0dHJpYnV0ZTogJ3swfSdcIiwgYXR0cmlidXRlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzVGFnUHJvY2Vzc2VkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBidWlsZCBBcmd1bWVudCBsaXN0IGZyb20gdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIEdldEFyZ3VtZW50TGlzdCgpOiBQcm9taXNlPEFyZ3VtZW50c0xpc3Q+IHtcclxuICAgIGxldCBhcmdMaXN0OiBBcmd1bWVudHNMaXN0ID0gbnVsbDtcclxuICAgIGlmICh0aGlzLl9wcm9wVGFiID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gYXJnTGlzdDtcclxuICAgIGxldCBBcmdMaXN0UHJvcDogUHJvcGVydHkgPSB0aGlzLl9wcm9wVGFiLmdldFByb3BCeUlkKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BBUkFNRVRFUlMpO1xyXG4gICAgaWYgKEFyZ0xpc3RQcm9wID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gYXJnTGlzdDtcclxuXHJcbiAgICBsZXQgcGFybXM6IHN0cmluZyA9IGF3YWl0IEFyZ0xpc3RQcm9wLmdldFZhbHVlKCk7XHJcbiAgICBpZiAocGFybXMgIT09IG51bGwpIHtcclxuICAgICAgYXJnTGlzdCA9IG5ldyBBcmd1bWVudHNMaXN0KCk7XHJcbiAgICAgIGFyZ0xpc3QuZmlsbExpc3QocGFybXMsIDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKTtcclxuICAgICAgaWYgKHRoaXMucmVmcmVzaE9uU3RyaW5nICE9PSBudWxsKVxyXG4gICAgICAgIGFyZ0xpc3QuUmVmcmVzaE9uU3RyaW5nID0gdGhpcy5yZWZyZXNoT25TdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJnTGlzdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiB0aGlzIGNvbnRyb2wgaXMgZGVzY2VuZGFudCBvZiB0aGUgcGFyZW50Rm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwYXJlbnRGb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzRGVzY2VuZGVudChwYXJlbnRGb3JtOiBNZ0Zvcm0pOiBib29sZWFuIHtcclxuICAgIGxldCBpc0Rlc2NlbmRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjaGVja0N1cnJlbnRGb3JtOiBNZ0Zvcm0gPSA8TWdGb3JtPnN1cGVyLmdldEZvcm0oKTtcclxuXHJcbiAgICBEZWJ1Zy5Bc3NlcnQocGFyZW50Rm9ybSAhPT0gbnVsbCk7XHJcblxyXG4gICAgd2hpbGUgKCFpc0Rlc2NlbmRlbnQgJiYgY2hlY2tDdXJyZW50Rm9ybSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAocGFyZW50Rm9ybSA9PT0gY2hlY2tDdXJyZW50Rm9ybSlcclxuICAgICAgICBpc0Rlc2NlbmRlbnQgPSB0cnVlO1xyXG5cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGN1cnJUYXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5jaGVja0N1cnJlbnRGb3JtLmdldFRhc2soKTtcclxuICAgICAgICBpZiAoY3VyclRhc2suZ2V0UGFyZW50KCkgIT09IG51bGwpXHJcbiAgICAgICAgICBjaGVja0N1cnJlbnRGb3JtID0gPE1nRm9ybT5jdXJyVGFzay5nZXRQYXJlbnQoKS5nZXRGb3JtKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpc0Rlc2NlbmRlbnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmVmcmVzaCBjb250cm9sIGRpc3BsYXkgaWYgaXQgaGFzIGEgcHJvcGVydHkgd2hpY2ggaXMgYW4gZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2hPbkV4cHJlc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IHNpemU6IG51bWJlciA9ICh0aGlzLl9wcm9wVGFiID09PSBudWxsID8gMCA6IHRoaXMuX3Byb3BUYWIuZ2V0U2l6ZSgpKTtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eTtcclxuICAgIGxldCByZWZyZXNoOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IHNpemUgJiYgIXJlZnJlc2g7IGkrKykge1xyXG4gICAgICBwcm9wID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wKGkpO1xyXG5cclxuICAgICAgc3dpdGNoIChwcm9wLmdldElEKCkpIHtcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RBVEE6XHJcbiAgICAgICAgICBpZiAoIXByb3AuaXNFeHByZXNzaW9uKCkgJiYgdGhpcy5fZmllbGQgIT09IG51bGwgJiYgdGhpcy5fZmllbGQuZ2V0VGFzaygpICE9PSB0aGlzLmdldEZvcm0oKS5nZXRUYXNrKCkpIHtcclxuICAgICAgICAgICAgcmVmcmVzaCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIC8qICBmYWxscyB0aHJvdWdoICovXHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQ6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5BQkxFRDpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JBTkdFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVFJBTlNMQVRPUjpcclxuICAgICAgICAgIGlmIChwcm9wLmlzRXhwcmVzc2lvbigpKVxyXG4gICAgICAgICAgICByZWZyZXNoID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVmcmVzaClcclxuICAgICAgICBhd2FpdCB0aGlzLlJlZnJlc2hEaXNwbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbnZva2UoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgaW52b2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8vIGlmIHRoZSBjb250cm9sIGlzIG5vdCB2aXNpYmxlLCBub3QgZW5hYmxlZCBvciBub3QgcGFya2FibGUgc2tpcCB0aGlzIGNvbnRyb2xcclxuICAgIGlmIChhd2FpdCB0aGlzLmlzUGFya2FibGUodHJ1ZSkpIHtcclxuICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhNZ0NvbnRyb2xCYXNlKHRoaXMsIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWCk7XHJcbiAgICAgIGludm9rZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGludm9rZWQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpc1BhcmthYmxlKGNoZWNrRW5hYmxlZEFuZFZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSAhc3VwZXIuaXNJbWFnZUNvbnRyb2woKTtcclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgYXdhaXQgc3VwZXIuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOQUJMRUQsIHRydWUpO1xyXG5cclxuICAgICAgYXdhaXQgc3VwZXIuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEUsIHRydWUpO1xyXG4gICAgICByZXN1bHQgPSBhd2FpdCBzdXBlci5pc1BhcmthYmxlKGNoZWNrRW5hYmxlZEFuZFZpc2libGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgc3ViZm9ybSB0YXNrIGlkIG9mIHRoZSBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRTdWJmb3JtVGFza0lkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3ViZm9ybVRhc2tJZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmaW5kIHRoZSBzdWJmb3JtIHRhc2sgYWNjb3JkaW5nIHRvIGl0cyBpZCBhbmQgc2F2ZSBpdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaW5pdFN1YmZvcm1UYXNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHN1cGVyLmlzU3ViZm9ybSgpKVxyXG4gICAgICB0aGlzLl9zdWJmb3JtVGFzayA9IDxUYXNrQmFzZT5HdWlEYXRhQ29sbGVjdGlvbi5NR0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh0aGlzLl9zdWJmb3JtVGFza0lkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGNvbnRyb2wncyBwYXJlbnRUYWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0UGFyZW50VGFibGUoKTogTWdDb250cm9sIHtcclxuICAgIHJldHVybiA8TWdDb250cm9sPnRoaXMuX3BhcmVudFRhYmxlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlc3RvcmUgYW5kIGRpc3BsYXkgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgY29udHJvbCB1c2VkIHdoZW4gdGhlIGNvbnRyb2wgaXMgbm90IG1vZGlmaWFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIHJlc3RvcmVPbGRWYWx1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9maWVsZCAhPT0gbnVsbClcclxuICAgICAgYXdhaXQgKDxGaWVsZD50aGlzLl9maWVsZCkudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHN1cGVyLnJlc2V0UHJldlZhbCgpO1xyXG4gICAgICBhd2FpdCBzdXBlci5TZXRBbmRSZWZyZXNoRGlzcGxheVZhbHVlKGF3YWl0IHRoaXMuZ2V0TWdWYWx1ZSh0aGlzLlZhbHVlKSwgdGhpcy5Jc051bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIGV2ZW50IHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFJ0RXZ0VGFzayhjdXJUYXNrOiBUYXNrQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcnRFdnRUYXNrID0gY3VyVGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBldmVudCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRSdEV2dFRhc2soKTogVGFza0Jhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX3J0RXZ0VGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSBzdWJmb3JtIHRhc2sgaWQgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFN1YmZvcm1UYXNrSWQodGFza0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YmZvcm1UYXNrSWQgPSB0YXNrSWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZiBoYW5kbGUgZm9jdXMgb24gdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNGb2N1c2VkU3RvcEV4ZWN1dGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZW1lbWJlciBzdG9wRXhlY3V0aW9uIGZsYWcgaW4gdGhlIGVuZCBvZiBoYW5kbGUgZm9jdXMgb24gdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm9jdXNlZFN0b3BFeGVjdXRpb25cIj48L3BhcmFtPlxyXG4gIHNldEZvY3VzZWRTdG9wRXhlY3V0aW9uKGZvY3VzZWRTdG9wRXhlY3V0aW9uOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mb2N1c2VkU3RvcEV4ZWN1dGlvbiA9IGZvY3VzZWRTdG9wRXhlY3V0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsLVwiPlRoZSBjdHJsIHRvIGNoZWNrLiBjYW4gYmUgZnJhbWUgZm9ybSBhbmQgYWxzbyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIG9uVGhlU2FtZVN1YkZvcm1Db250cm9sKGN0cmw6IE1nQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoY3RybCAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAoc3VwZXIuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpICYmIGN0cmwuZ2V0Rm9ybSgpLmlzU3ViRm9ybSgpKSB7XHJcbiAgICAgICAgaWYgKHN1cGVyLmdldEZvcm0oKS5nZXRUYXNrKCkgPT09IGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKSlcclxuICAgICAgICAgIHJldFZhbHVlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRydWUgaWYgdGhlIGN0cmxzIGFyZSBvbiBkaWZmZXJlbnQgZm9ybXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBvbkRpZmZGb3JtKGN0cmw6IE1nQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzU3ViZm9ybTogYm9vbGVhbiA9IHN1cGVyLmdldEZvcm0oKS5pc1N1YkZvcm0oKSB8fCBjdHJsLmdldEZvcm0oKS5pc1N1YkZvcm0oKTtcclxuICAgIGxldCBpc09uRGlmZkZvcm06IGJvb2xlYW4gPSAoaXNTdWJmb3JtICkgJiYgIXRoaXMub25UaGVTYW1lU3ViRm9ybUNvbnRyb2woY3RybCk7XHJcblxyXG4gICAgcmV0dXJuIGlzT25EaWZmRm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cnVlIGlmIGNvbnRyb2wgaXMgaW4gY29udHJvbCBzdWZmaXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNJbkNvbnRyb2xTdWZmaXgoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5Db250cm9sU3VmZml4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0cnVlIGlmIGNvbnRyb2wgaXMgaW4gY29udHJvbCBzdWZmaXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5Db250cm9sU3VmZml4XCI+PC9wYXJhbT5cclxuICBzZXRJbkNvbnRyb2xTdWZmaXgoaW5Db250cm9sU3VmZml4OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbkNvbnRyb2xTdWZmaXggPSBpbkNvbnRyb2xTdWZmaXg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgdGhlIGNvbnRyb2wgaGFzIHNlbGVjdCBwcm9ncmFtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBIYXNTZWxlY3RQcm9ncmFtKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IEhhc1NlbGVjdFByb2dyYW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBzZWxlY3RQcm9nUHJvcDogUHJvcGVydHkgPSBzdXBlci5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NFTEVDVF9QUk9HUkFNKTtcclxuICAgIGlmIChzZWxlY3RQcm9nUHJvcCAhPT0gbnVsbCAmJiBzZWxlY3RQcm9nUHJvcC5HZXRDb21wdXRlZFZhbHVlKCkgIT09IG51bGwpXHJcbiAgICAgIEhhc1NlbGVjdFByb2dyYW0gPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBIYXNTZWxlY3RQcm9ncmFtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0cnVlIGlmIHRoZSBjb250cm9sIHVzZSB0aGUgaGFuZGxlciBaT09NIChmb3Igc2VsZWN0IHByb2dyYW0gb3IgWm9vbSBoYW5kbGVyKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICB1c2Vab29tSGFuZGxlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLkhhc1pvb21IYW5kbGVyIHx8IChzdXBlci5nZXRGaWVsZCgpICE9PSBudWxsICYmICgoPEZpZWxkPnN1cGVyLmdldEZpZWxkKCkpLmdldEhhc1pvb21IYW5kbGVyKCkgfHwgKHRoaXMuSGFzU2VsZWN0UHJvZ3JhbSgpKSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFVwZGF0ZSBib29sZWFuIHByb3BlcnR5KGV4OnZpc2libGVcXGVuYWJsZSkgb2YgY29udHJvbCBhbmQgaXQncyBjaGlsZHJlblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5wcm9wZXJ0eSBpZCA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tbWFuZFR5cGVcIj5jb21tYW5kIHR5cGUgdGhhdCBiZWxvbmcgdG8gdGhlIHByb3AgaWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInVwZGF0ZVRoaXNcIj48L3BhcmFtPlxyXG4gIGFzeW5jIHVwZGF0ZVByb3BlcnR5TG9naWNOZXN0aW5nKHByb3BJZDogbnVtYmVyLCBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUsIHZhbDogYm9vbGVhbiwgdXBkYXRlVGhpczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHZhbCAmJiBzdXBlci5oYXZlVG9DaGVja1BhcmVudFZhbHVlKCkpXHJcbiAgICAgIHZhbCA9IHN1cGVyLmlzUGFyZW50UHJvcFZhbHVlKHByb3BJZCk7XHJcblxyXG4gICAgLy8gaWYgdGhlIHN1YmZvcm0gbXVzdCBiZSBpbnZpc2libGUgKENUUkxfU1VCRk9STV9OT05FKSB3ZSBjaGFuZ2UgaXRzIHZpc2liaWxpdHkgdG8gZmFsc2VcclxuICAgIGlmICh2YWwgJiYgc3VwZXIuaXNTdWJmb3JtKCkgJiYgY29tbWFuZFR5cGUgPT09IENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUgJiYgdGhpcy5TaG91bGRTZXRTdWJmb3JtSW52aXNpYmxlKCkpXHJcbiAgICAgIHZhbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh1cGRhdGVUaGlzKSB7XHJcbiAgICAgIENvbW1hbmRzLmFkZE9wZXJhdGlvbldpdGhMaW5lKENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWSwgdGhpcywgc3VwZXIuZ2V0RGlzcGxheUxpbmUoZmFsc2UpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kVHlwZSA9PT0gQ29tbWFuZFR5cGUuUFJPUF9TRVRfVklTSUJMRSA/IEh0bWxQcm9wZXJ0aWVzLlZpc2libGUgOiBIdG1sUHJvcGVydGllcy5FbmFibGVkLCB2YWwpO1xyXG5cclxuICAgIH1cclxuICAgIGF3YWl0IHN1cGVyLnVwZGF0ZUNoaWxkcmVuUHJvcFZhbHVlKHByb3BJZCwgY29tbWFuZFR5cGUsIHZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIElmIHRoZSBzdWJmb3JtIG11c3QgYmUgaW52aXNpYmxlIChmb3IgZXhhbXBsZSBDVFJMX1NVQkZPUk1fTk9ORSkgcmV0dXJucyB0cnVlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIFNob3VsZFNldFN1YmZvcm1JbnZpc2libGUoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc2V0SW52aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgc3ViZm9ybVR5cGU6IFN1YmZvcm1UeXBlID0gPFN1YmZvcm1UeXBlPnN1cGVyLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU1VCRk9STV9UWVBFKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgaWYgKHN1YmZvcm1UeXBlID09PSBTdWJmb3JtVHlwZS5Ob25lICYmIHRoaXMuZ2V0U3ViZm9ybVRhc2tJZCgpID09PSBudWxsKVxyXG4gICAgICBzZXRJbnZpc2libGUgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHNldEludmlzaWJsZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBVcGRhdGVzIHZpc2liaWxpdHkgb3IgZW5hYmxlIHByb3BlcnR5IG9mIHN1YmZvcm0gY29udHJvbHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicHJvcElkXCI+SWQgb2YgdmlzaWJpbGl0eSBvciBlbmFibGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tbWFuZFR5cGVcIj50eXBlIG9mIHRoZSBHVUkgY29tbWFuZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj52YWx1ZSBmb3IgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICBhc3luYyB1cGRhdGVTdWJmb3JtQ2hpbGRyZW5Qcm9wVmFsdWUocHJvcElkOiBudW1iZXIsIGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZSwgdmFsOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQoc3VwZXIuaXNTdWJmb3JtKCkpO1xyXG5cclxuICAgIGlmICghKDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKS5BZnRlckZpcnN0UmVjb3JkUHJlZml4KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IHN1YmZvcm1UeXBlOiBTdWJmb3JtVHlwZSA9IDxTdWJmb3JtVHlwZT5zdXBlci5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NVQkZPUk1fVFlQRSkuR2V0Q29tcHV0ZWRWYWx1ZUludGVnZXIoKTtcclxuICAgIGlmICh0aGlzLl9zdWJmb3JtVGFza0lkICE9PSBudWxsIHx8IHN1YmZvcm1UeXBlID09PSBTdWJmb3JtVHlwZS5Ob25lKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zdWJmb3JtVGFzayAhPT0gbnVsbCAmJiB0aGlzLl9zdWJmb3JtVGFzay5pc1N0YXJ0ZWQoKSkge1xyXG4gICAgICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNvbW1hbmRUeXBlID09PSBDb21tYW5kVHlwZS5QUk9QX1NFVF9WSVNJQkxFICYmIHZhbCAmJiB0aGlzLlJlZnJlc2hPblZpc2libGUpIHtcclxuICAgICAgICAgIHRoaXMuUmVmcmVzaE9uVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgYXdhaXQgKDxUYXNrQmFzZT5zdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpKS5TdWJmb3JtUmVmcmVzaCh0aGlzLl9zdWJmb3JtVGFzaywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3ViZm9ybUZvcm06IE1nRm9ybUJhc2UgPSB0aGlzLl9zdWJmb3JtVGFzay5nZXRGb3JtKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN1YmZvcm1Gb3JtLmdldEN0cmxDb3VudCgpOyBpKyspIHtcclxuICAgICAgICAgIGxldCBjaGlsZDogTWdDb250cm9sQmFzZSA9IHN1YmZvcm1Gb3JtLmdldEN0cmwoaSk7XHJcbiAgICAgICAgICAvLyBRQ1IgIzk4MTU1NSwgV2Ugc2hvdWxkIG5vdCBhZmZlY3QgdmlzaWJpbGl0eSBvZiB0aGUgVGFibGVDb2x1bW5zIHNpbmNlIGl0IGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlLlNldHRpbmcgdmlzaWJpbGl0eVxyXG4gICAgICAgICAgLy8gb2YgYWxsIGNvbHVtbnMgdG8gZmFsc2UgcHJldmVudHMgdGFibGUgcGxhY2VtZW50XHJcbiAgICAgICAgICBpZiAoIWNoaWxkLmlzQ29sdW1uQ29udHJvbCgpKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIGxldCBjaGlsZFZhbHVlOiBib29sZWFuID0gYXdhaXQgY2hpbGQuY2hlY2tQcm9wKHByb3BJZCwgdHJ1ZSkgJiYgdmFsO1xyXG4gICAgICAgICAgaWYgKGNoaWxkVmFsdWUpXHJcbiAgICAgICAgICAgIGNoaWxkVmFsdWUgPSBjaGlsZC5pc1BhcmVudFByb3BWYWx1ZShwcm9wSWQpO1xyXG5cclxuICAgICAgICAgIC8vIGlmICh0aGlzLl9zdWJmb3JtVGFzay5pc1N0YXJ0ZWQoKSlcclxuICAgICAgICAgIC8vICAgQ29tbWFuZHMuYWRkQXN5bmMoY29tbWFuZFR5cGUsIGNoaWxkLCBjaGlsZC5nZXREaXNwbGF5TGluZShmYWxzZSksIGNoaWxkVmFsdWUpO1xyXG4gICAgICAgICAgYXdhaXQgY2hpbGQudXBkYXRlQ2hpbGRyZW5Qcm9wVmFsdWUocHJvcElkLCBjb21tYW5kVHlwZSwgY2hpbGRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgoY29tbWFuZFR5cGUgPT09IENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUgJiYgdmFsKSAmJiAhdGhpcy5TdWJmb3JtTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMuU3ViZm9ybUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUludGVybmFsRXZlbnRXaXRoTWdDb250cm9sQmFzZSh0aGlzLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1VCRk9STV9PUEVOKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0IHN1YmZvcm0gdGFzayBpZCBmb3IgYSBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRTdWJmb3JtVGFzaygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIGJlaGF2aW91ciBmb3IgdGhlIHRhYmxlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0VGFibGVCZWhhdmlvdXIoKTogVGFibGVCZWhhdmlvdXIge1xyXG4gICAgcmV0dXJuIFRhYmxlQmVoYXZpb3VyLlVubGltaXRlZEl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHZhbGlkYXRlIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBhbmQgc2V0IGl0J3MgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiTmV3VmFsdWVcIj50aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlQ3RybFwiPmlmIHRydWUgdGhlbiB0aGUgY29udHJvbCB3aWxsIGJlIHVwZGF0ZWQgdXBvbiBzdWNjZXNzZnVsIGNoZWNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+cmV0dXJucyBpZiB2YWxpZGF0aW9uIGlzIHN1Y2Nlc3NmdWw8L3JldHVybnM+XHJcbiAgYXN5bmMgdmFsaWRhdGVBbmRTZXRWYWx1ZShOZXdWYWx1ZTogYW55LCB1cGRhdGVDdHJsOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBzdXBlci5VcGRhdGVNb2RpZmllZEJ5VXNlcihOZXdWYWx1ZSk7XHJcblxyXG4gICAgLy8gaWYgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGlzIG51bGwgb3Igd2FzIGNoYW5nZWRcclxuICAgIC8vIGNoZWNrIHZhbGlkYXRpb24gYW5kIHVwZGF0ZSB0aGUgY29udHJvbCB2YWx1ZVxyXG4gICAgaWYgKHRoaXMuTW9kaWZpZWRCeVVzZXIpIHtcclxuICAgICAgbGV0IGN0cmxDdXJyVmFsdWU6IGFueSA9IHRoaXMuVmFsdWU7XHJcbiAgICAgIGxldCB2ZDogVmFsaWRhdGlvbkRldGFpbHM7XHJcblxyXG4gICAgICBpZiAoc3VwZXIuZ2V0UElDKCkgPT09IG51bGwpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIHZkID0gc3VwZXIuYnVpbGRQaWN0dXJlKGN0cmxDdXJyVmFsdWUsIE5ld1ZhbHVlKTtcclxuXHJcbiAgICAgIHZkLmV2YWx1YXRlKCk7XHJcblxyXG4gICAgICAvLyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRzIHZhbHVlIHdhcyB3cm9uZ1xyXG4gICAgICBpZiAodmQuVmFsaWRhdGlvbkZhaWxlZCkge1xyXG4gICAgICAgIHRoaXMuTW9kaWZpZWRCeVVzZXIgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuSXNJbnRlcmFjdGl2ZVVwZGF0ZSA9IHRydWU7XHJcblxyXG4gICAgICBzdXBlci5nZXRGb3JtKCkuZ2V0VGFzaygpLnNldERhdGFTeW5jZWQoZmFsc2UpO1xyXG5cclxuICAgICAgLy8gc2V0IHRoZSB2YWx1ZSAoaGFuZGxlIHJlY29tcHV0ZSwgZXRjLilcclxuICAgICAgaWYgKHVwZGF0ZUN0cmwpIHtcclxuICAgICAgICAvLyBRQ1IjNDQxMDIwOkFmdGVyIHZhbGlkYXRpbmcgZGlzcGxheSB2YWx1ZSwgdGFrZSB0aGUgc2FtZSBjdHJsJ3MgdmFsdWUgZm9yIG1nIHZhbHVlIGNvbnZlcnNpb24uXHJcbiAgICAgICAgLy8gVXNpbmcgZGlzcGxheSB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBNZ1ZhbHVlLCBtaWdodCBoYXZlIHByb2JsZW0gdG8gY29udmVydCBiYWNrIHRvIE1nVmFsIHVzaW5nIHBpY3R1cmUgZHVlIHRvIGFsaWdubWVudCAoY2hhbmdlZCBhbGlnbm1lbnQgKS5cclxuICAgICAgICAvLyBUaGlzIHByb2JsZW0gb2NjdXJzIGZvciBudW1lcmljLlxyXG4gICAgICAgIC8vIFRoZSBmaXggc2hvdWxkIGJlIGFwcGxpY2FibGUgZm9yIG51bWVyaWMgdHlwZSBvbmx5LiBCZWNhdXNlIGRhdGUgYW5kIHRpbWUgZmllbGQgd2l0aCBjb21wbGV4IG1hc2tpbmcgaGF2ZSBwcm9ibGVtIG9uIHVzaW5nIGN0cmwncyB2YWx1ZS5cclxuICAgICAgICAvLyBSZWZlciBkYXRlIHFjcnM6ICMyOTE2NjYsICMzMDczNTMsICM0MzQyNDEgYW5kIGZvciB0aW1lLCBjaGVjayBkZWZhdWx0IHZhbHVlIHdoZW4gZm9ybWF0IGlzICdISC1NTS1TUyBQTVpAJ1xyXG4gICAgICAgIGlmICh0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiB0aGlzLl9maWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyAmJiB0eXBlb2YgTmV3VmFsdWUgPT09ICdzdHJpbmcnICYmIE5ld1ZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgdmQuc2V0VmFsdWUoTmV3VmFsdWUpO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLnNldFZhbHVlKHZkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSB2YWx1ZSByZWNlaXZlZCBmcm9tIHRoZSB1c2VyIGlucHV0IGFmdGVyIHZhbGlkYXRpb24gYW5kIHVwZGF0ZSB0aGUgZmllbGQgY29ubmVjdGVkIHRvIHRoaXNcclxuICAvLy8gICBjb250cm9sIChpZiBleGlzdHMpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZkXCI+dGhlIHZhbGlkYXRpb24gZGV0YWlscyBvYmplY3Q8L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgc2V0VmFsdWUodmQ6IFZhbGlkYXRpb25EZXRhaWxzKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgaXNOdWxsOiBib29sZWFuID0gdmQuZ2V0SXNOdWxsKCk7XHJcbiAgICBsZXQgbmV3VmFsdWU6IGFueSA9IHZkLmdldERpc3BWYWx1ZSgpO1xyXG4gICAgbGV0IG1nVmFsOiBzdHJpbmc7XHJcblxyXG4gICAgaWYgKCFpc051bGwgfHwgIXRoaXMuX2ZpZWxkLmhhc051bGxEaXNwbGF5VmFsdWUoKSlcclxuICAgICAgbWdWYWwgPSBhd2FpdCBzdXBlci5nZXRNZ1ZhbHVlKG5ld1ZhbHVlKTtcclxuICAgIC8vIGl0J3MgaW5uZXIgdmFsdWUgLT4gdHJhbnNsYXRlIGl0IHRvIHRoZSBkaXNwbGF5XHJcbiAgICBlbHNlXHJcbiAgICAgIG1nVmFsID0gKCh0aGlzLl9maWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpID8gdGhpcy5fZmllbGQuZ2V0Q2VsbERlZnVhbHRWYWx1ZSgpIDogdGhpcy5fZmllbGQuZ2V0RGVmYXVsdFZhbHVlKCkpO1xyXG4gICAgaWYgKG1nVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiAoIShuZXdWYWx1ZSA9PT0gdGhpcy5WYWx1ZSkgfHwgdGhpcy5LZXlTdHJva2VPbiB8fCB0aGlzLklzTnVsbCAhPT0gaXNOdWxsKSkge1xyXG4gICAgICAgIGF3YWl0ICg8RmllbGQ+dGhpcy5fZmllbGQpLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUobWdWYWwsIGlzTnVsbCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpO1xyXG5cclxuICAgICAgICAvLyBkZWZlY3QgMTI3NzM0IDogdmFsdWUgb2YgdGhlIGZpZWxkIG1pZ2h0IGJlIGNoYW5nZWQgYWxyZWFkeSBpbnNpZGUgYSBjb250cm9sIGNoYW5nZSBoYW5kbGVyXHJcbiAgICAgICAgLy8gdG8gYXZvaWQgdXBkYXRpbmcgb2xkIHZhbHVlIGFuZCBvdmVycnVubmluZyB0aGUgdmFsdWUgZnIwbSB0aGUgY29udHJvbCBjaGFuZ2VcclxuICAgICAgICAvLyBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIGZpZWxkLiAobmVlZCB0byBiZSBkb25lIGZvciBjb21ibyBhbmQgbGlzdCBib3gsIGJ1dCBpdCdzIHRvbyByaXNreVxyXG4gICAgICAgIC8vIGFuZCB1bmxpa2VseSB0byBoYXBwZW4sIHNvIHRoZSBmaXggd2lsbCBiZSBmb3IgY2hlY2sgYm94IG9ubHkpXHJcblxyXG4gICAgICAgIGlmIChzdXBlci5pc0NoZWNrQm94KCkpIHtcclxuICAgICAgICAgIHRoaXMuZm9yY2VSZWZyZXNoID0gdHJ1ZTtcclxuICAgICAgICAgIG1nVmFsID0gKDxGaWVsZD50aGlzLl9maWVsZCkuZ2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWYgZmllbGQgdmFsdWUgaXMgbnVsbCAmIGhhcyBudWxsIGRpc3BsYXkgdmFsdWUsIHRha2UgZXZhbHVhdGVkIG51bGwgZGlzcGxheSB2YWx1ZS5cclxuICAgICAgaWYgKCh0aGlzLl9maWVsZCAhPT0gbnVsbCAmJiBpc051bGwpICYmIHRoaXMuX2ZpZWxkLmhhc051bGxEaXNwbGF5VmFsdWUoKSlcclxuICAgICAgICBtZ1ZhbCA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgYXdhaXQgc3VwZXIuU2V0QW5kUmVmcmVzaERpc3BsYXlWYWx1ZShtZ1ZhbCwgaXNOdWxsKTtcclxuICAgICAgdGhpcy5mb3JjZVJlZnJlc2ggPSBmYWxzZTtcclxuICAgICAgLy8gUUNSICM0Mzg3NTMuIFByZXZlbnQgUlAmUlMgY3ljbGUsIHdoZW4gaXQncyBub3QgbmVlZGVkLlxyXG4gICAgICB0aGlzLktleVN0cm9rZU9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlZnJlc2ggdGhlIGl0ZW0gbGlzdCBvZiByYWRpbyBidXR0b24gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImV4ZWNDb21wdXRlQ2hvaWNlXCI+PC9wYXJhbT5cclxuICBhc3luYyByZWZyZXNoQW5kU2V0SXRlbXNMaXN0Rm9yUmFkaW9CdXR0b24obGluZTogbnVtYmVyLCBleGVjQ29tcHV0ZUNob2ljZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgc3VwZXIucmVmcmVzaEFuZFNldEl0ZW1zTGlzdEZvclJhZGlvQnV0dG9uKGxpbmUsIGV4ZWNDb21wdXRlQ2hvaWNlKTtcclxuXHJcbiAgICAvLyBJZiB0aGUgcGFya2luZyB3YXMgb24gdGhlIHJhZGlvIGNvbnRyb2wsIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGZvY3VzIGJlY2F1c2VcclxuICAgIC8vIHRoZSBvbGQgY29udHJvbHMgd2VyZSBkaXNwb3NlZCBhbmQgdGhlIG5ldyBvbmVzIGFyZSBjcmVhdGVkLlxyXG4gICAgLy8gaWYgKGxhc3RGb2N1c2VkVGFzayAhPT0gbnVsbCAmJiB0aGlzID09PSBsYXN0Rm9jdXNlZFRhc2suZ2V0TGFzdFBhcmtlZEN0cmwoKSlcclxuICAgIC8vICAgQ29tbWFuZHMuYWRkQXN5bmMoQ29tbWFuZFR5cGUuU0VUX0ZPQ1VTLCB0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgb2YgdGhpcyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFN1YmZvcm1UYXNrKCk6IFRhc2tCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJmb3JtVGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzdWJmb3JtIHRhc2sgb2YgdGhpcyBzdWJmb3JtIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlc2V0U3ViZm9ybVRhc2soKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFzayA9IG51bGw7XHJcbiAgICB0aGlzLl9zdWJmb3JtVGFza0lkID0gXCIwXCI7XHJcbiAgfVxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyBNZ0Zvcm0gb2YgdGhlIHN1YmZvcm0gY29udHJvbCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRTdWJmb3JtTWdGb3JtKCk6IE1nRm9ybUJhc2Uge1xyXG4gICAgbGV0IGZvcm06IE1nRm9ybUJhc2UgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuX3N1YmZvcm1UYXNrICE9PSBudWxsKVxyXG4gICAgICBmb3JtID0gdGhpcy5fc3ViZm9ybVRhc2suZ2V0Rm9ybSgpO1xyXG4gICAgcmV0dXJuIGZvcm07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENoZWNrIHdoZXRoZXIgdGFibGUgYmVpbmcgdXNlZCB3aXRoIGFic29sdXRlIHNjcm9sbGJhciB0aHVtYi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIElzVGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIERlYnVnLkFzc2VydCh0aGlzLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQkxFLCBcIkluIE1nQ29udHJvbC5Jc1RhYmxlV2l0aEFic29sdXRlU2Nyb2xsYmFyKCk6IE5vdCBhIHRhYmxlIGNvbnRyb2wuXCIpO1xyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIucHJvcEV4aXN0cyhQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TQ1JPTExfQkFSX1RIVU1CKSlcclxuICAgICAgdGFibGVXaXRoQWJzb2x1dGVTY3JvbGxiYXIgPSAodGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TQ1JPTExfQkFSX1RIVU1CKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpID09PSA8bnVtYmVyPlNjcm9sbEJhclRodW1iVHlwZS5BYnNvbHV0ZSk7XHJcblxyXG4gICAgcmV0dXJuIHRhYmxlV2l0aEFic29sdXRlU2Nyb2xsYmFyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2hlY2sgaWYgdGhlIHJldHVybi10by1jb250cm9sIHBvaW50cyB0byBhbiBleGlzdGluZyB0YXNrLjwvc3VtbWFyeT5cclxuICBzdGF0aWMgdmFsaWRSZXR1cm5Ub0N0cmwoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoTWdDb250cm9sLlJldHVyblRvQ3RybCAhPT0gbnVsbCAmJiBNZ0NvbnRyb2wuUmV0dXJuVG9DdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuaXNBYm9ydGluZygpKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGNoZWNrIGlmIG9uZSBtYXkgZGlyZWN0bHkgKG5vdCB2aWEgdGhlIGd1aSkgc2V0IGEgdmFsdWUgb24gdGhpcyBjb250cm9sLjwvc3VtbWFyeT5cclxuICBtYXlTZXRWYWx1ZSgpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAodGhpcy5UeXBlKSB7XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ0hFQ0tCT1g6XHJcbiAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfVEVYVDpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9DT01CTzpcclxuICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9MSVNUOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1JBRElPOlxyXG4gICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQjpcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByZXZlbnQgdmFsdWUgc2V0dGluZyBpZiB0aGUgY29udHJvbCBkb2Vzbid0IGhhdmUgYSBmaWVsZCwgb3IgaWYgaXQgZ2V0cyBpdHMgdmFsdWUgZnJvbSBhbiBleHByZXNzaW9uXHJcbiAgICBpZiAodGhpcy5fZmllbGQgPT09IG51bGwgfHwgdGhpcy5fdmFsRXhwSWQgPiAwKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaXNNb2RpZmlhYmxlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ2hlY2tzIGlmIGEgdmFsdWUgbWF5IGJlIHNldCwgYW5kIHRyaWVzIHRvIHNldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiTmV3VmFsdWVcIj50aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlQ3RybFwiPmlmIHRydWUgdGhlbiB0aGUgY29udHJvbCB3aWxsIGJlIHVwZGF0ZWQgdXBvbiBzdWNjZXNzZnVsIGNoZWNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+cmV0dXJucyBpZiB2YWx1ZSBzZXR0aW5nIHdhcyBzdWNjZXNzZnVsIDwvcmV0dXJucz5cclxuICBhc3luYyB2YWxpZGF0ZUFuZFNldFZhbHVlSWZBbGxvd2VkKE5ld1ZhbHVlOiBhbnksIHJlZnJlc2hEaXNwbGF5OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIXRoaXMubWF5U2V0VmFsdWUoKSkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKE5TdHJpbmcuRm9ybWF0KFwiVW5hYmxlIHRvIGNoYW5nZSB2YWx1ZSBvZiBjb250cm9sIHswfTogVGhlIGNvbnRyb2wgaXMgcmVhZC1vbmx5LlwiLCB0aGlzLk5hbWUpKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXRWYWwgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQW5kU2V0VmFsdWUoTmV3VmFsdWUsIHRydWUpO1xyXG4gICAgaWYgKCFyZXRWYWwpXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJWYWx1ZSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgezB9LlwiLCB0aGlzLk5hbWUpKTtcclxuXHJcbiAgICBpZiAocmVmcmVzaERpc3BsYXkpIHtcclxuICAgICAgQ29tbWFuZHMuYWRkTm9QYXJhbWV0ZXJzKENvbW1hbmRUeXBlLlJFRlJFU0hfVEFTSywgdGhpcy5nZXRGb3JtKCkpO1xyXG4gICAgICBDb21tYW5kcy5pbnZva2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL3JlZnJlc2ggdGFza1xyXG4gICAgcmV0dXJuIHJldFZhbDtcclxuICB9XHJcbn1cclxuIl19