@magic-xpa/engine 4.1100.0-dev4110.252 → 4.1100.0-dev4110.256

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. package/esm2022/src/ClientManager.mjs +2 -2
  2. package/esm2022/src/CommandsProcessorBase.mjs +1 -1
  3. package/esm2022/src/CommandsProcessorManager.mjs +1 -1
  4. package/esm2022/src/CommandsTable.mjs +1 -1
  5. package/esm2022/src/CurrentClientVersion.mjs +2 -2
  6. package/esm2022/src/GUIManager.mjs +1 -1
  7. package/esm2022/src/GuiEventsProcessor.mjs +1 -1
  8. package/esm2022/src/ServerConfig.mjs +1 -1
  9. package/esm2022/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +1 -1
  10. package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +1 -1
  11. package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +1 -1
  12. package/esm2022/src/commands/ClientToServer/EvaluateCommand.mjs +1 -1
  13. package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +1 -1
  14. package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +1 -1
  15. package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +1 -1
  16. package/esm2022/src/commands/ServerToClient/AddRangeCommand.mjs +1 -1
  17. package/esm2022/src/commands/ServerToClient/AddSortCommand.mjs +1 -1
  18. package/esm2022/src/commands/ServerToClient/ClientRefreshCommand.mjs +1 -1
  19. package/esm2022/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +1 -1
  20. package/esm2022/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +1 -1
  21. package/esm2022/src/commands/ServerToClient/OpenURLCommand.mjs +1 -1
  22. package/esm2022/src/commands/ServerToClient/ResultCommand.mjs +1 -1
  23. package/esm2022/src/commands/ServerToClient/VerifyCommand.mjs +1 -1
  24. package/esm2022/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +1 -1
  25. package/esm2022/src/data/DataView.mjs +1 -1
  26. package/esm2022/src/data/DvCache.mjs +1 -1
  27. package/esm2022/src/data/Field.mjs +1 -1
  28. package/esm2022/src/data/FieldsTable.mjs +1 -1
  29. package/esm2022/src/data/Key.mjs +1 -1
  30. package/esm2022/src/data/Record.mjs +2 -2
  31. package/esm2022/src/data/RecordsTable.mjs +1 -1
  32. package/esm2022/src/data/TaskTransactionManager.mjs +1 -1
  33. package/esm2022/src/data/XMLBasedDcValuesBuilder.mjs +1 -1
  34. package/esm2022/src/env/EnvVariablesTable.mjs +1 -1
  35. package/esm2022/src/env/Environment.mjs +1 -1
  36. package/esm2022/src/env/LanguageData.mjs +1 -1
  37. package/esm2022/src/env/MirrorString.mjs +1 -1
  38. package/esm2022/src/event/ActionManager.mjs +1 -1
  39. package/esm2022/src/event/Event.mjs +1 -1
  40. package/esm2022/src/event/EventHandler.mjs +1 -1
  41. package/esm2022/src/event/EventHandlerPosition.mjs +1 -1
  42. package/esm2022/src/event/EventsManager.mjs +1 -1
  43. package/esm2022/src/event/RunTimeEvent.mjs +1 -1
  44. package/esm2022/src/event/UserEventsTable.mjs +1 -1
  45. package/esm2022/src/exp/ExpTable.mjs +1 -1
  46. package/esm2022/src/exp/Expression.mjs +1 -1
  47. package/esm2022/src/exp/ExpressionEvaluator.mjs +1 -1
  48. package/esm2022/src/exp/ExpressionLocalJpn.mjs +1 -1
  49. package/esm2022/src/exp/GlobalParamsTable.mjs +1 -1
  50. package/esm2022/src/exp/YesNoExp.mjs +1 -1
  51. package/esm2022/src/gui/FormsTable.mjs +1 -1
  52. package/esm2022/src/gui/MgControl.mjs +1 -1
  53. package/esm2022/src/gui/MgForm.mjs +1 -1
  54. package/esm2022/src/http/HttpManager.mjs +1 -1
  55. package/esm2022/src/http/client/HttpClientAsync.mjs +1 -1
  56. package/esm2022/src/http/client/HttpClientBase.mjs +1 -1
  57. package/esm2022/src/http/client/HttpClientEvents.mjs +1 -1
  58. package/esm2022/src/http/client/HttpClientSync.mjs +1 -1
  59. package/esm2022/src/http/client/HttpUtility.mjs +1 -1
  60. package/esm2022/src/remote/AddUserLocateRemoteDataViewCommand.mjs +1 -1
  61. package/esm2022/src/remote/AddUserRangeRemoteDataViewCommand.mjs +1 -1
  62. package/esm2022/src/remote/AddUserSortRemoteDataViewCommand.mjs +1 -1
  63. package/esm2022/src/remote/RemoteCommandsProcessor.mjs +1 -1
  64. package/esm2022/src/remote/RemoteControlItemsRefreshCommand.mjs +1 -1
  65. package/esm2022/src/remote/RemoteDataViewCommandBase.mjs +1 -1
  66. package/esm2022/src/remote/RemoteDataViewCommandFactory.mjs +1 -1
  67. package/esm2022/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +1 -1
  68. package/esm2022/src/remote/ResetUserSortRemoteDataviewCommand.mjs +1 -1
  69. package/esm2022/src/remote/ServerError.mjs +1 -1
  70. package/esm2022/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +1 -1
  71. package/esm2022/src/rt/Argument.mjs +1 -1
  72. package/esm2022/src/rt/ArgumentsList.mjs +1 -1
  73. package/esm2022/src/rt/Boundary.mjs +1 -1
  74. package/esm2022/src/rt/CompMainPrgTable.mjs +1 -1
  75. package/esm2022/src/rt/DataviewHeaderBase.mjs +1 -1
  76. package/esm2022/src/rt/DataviewHeaders.mjs +1 -1
  77. package/esm2022/src/rt/DataviewHeadersSaxHandler.mjs +1 -1
  78. package/esm2022/src/rt/ExecutionStack.mjs +1 -1
  79. package/esm2022/src/rt/HandlersTable.mjs +1 -1
  80. package/esm2022/src/rt/LastFocusedManager.mjs +1 -1
  81. package/esm2022/src/rt/Operation.mjs +1 -1
  82. package/esm2022/src/rt/OperationTable.mjs +1 -1
  83. package/esm2022/src/rt/Recompute.mjs +1 -1
  84. package/esm2022/src/rt/RecomputeTable.mjs +1 -1
  85. package/esm2022/src/rt/RemoteDataviewHeader.mjs +1 -1
  86. package/esm2022/src/rt/TableCache.mjs +1 -1
  87. package/esm2022/src/rt/TableCacheManager.mjs +1 -1
  88. package/esm2022/src/rt/Transaction.mjs +1 -1
  89. package/esm2022/src/security/UserDetails.mjs +1 -1
  90. package/esm2022/src/tasks/MGData.mjs +1 -1
  91. package/esm2022/src/tasks/MGDataCollection.mjs +1 -1
  92. package/esm2022/src/tasks/RCTimer.mjs +1 -1
  93. package/esm2022/src/tasks/RemoteTaskService.mjs +1 -1
  94. package/esm2022/src/tasks/Task.mjs +1 -1
  95. package/esm2022/src/tasks/TaskBase.mjs +1 -1
  96. package/esm2022/src/tasks/TaskServiceBase.mjs +1 -1
  97. package/esm2022/src/tasks/TasksTable.mjs +1 -1
  98. package/esm2022/src/tasks/sort/SortCollection.mjs +1 -1
  99. package/esm2022/src/util/ConstUtils.mjs +1 -1
  100. package/esm2022/src/util/FlowMonitorQueue.mjs +1 -1
  101. package/esm2022/src/util/HeapSort.mjs +1 -1
  102. package/esm2022/src/util/MgPriorityBlockingQueue.mjs +1 -1
  103. package/esm2022/src/util/MgPriorityQueue.mjs +1 -1
  104. package/esm2022/src/util/PrmMap.mjs +1 -1
  105. package/esm2022/src/util/Scrambler.mjs +1 -1
  106. package/esm2022/src/util/UniqueIDUtils.mjs +1 -1
  107. package/esm2022/src/util/cookie.service.mjs +1 -1
  108. package/fesm2022/magic-xpa-engine.mjs +3 -3
  109. package/fesm2022/magic-xpa-engine.mjs.map +1 -1
  110. package/package.json +4 -4
@@ -68,4 +68,4 @@ export class UserDetails {
68
68
  return isSuccess;
69
69
  }
70
70
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlckRldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3NlY3VyaXR5L1VzZXJEZXRhaWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzFDLE1BQU0sT0FBTyxXQUFXO0lBQ2QsTUFBTSxDQUFDLFNBQVMsR0FBaUIsSUFBSSxDQUFDO0lBQzlDLFFBQVEsR0FBVyxJQUFJLENBQUM7SUFDeEIsTUFBTSxHQUFXLElBQUksQ0FBQztJQUN0QixRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQ3hCLFFBQVEsR0FBVyxJQUFJLENBQUM7SUFDeEIsVUFBVSxHQUFXLEtBQUssQ0FBQztJQUVuQixhQUFhLENBQUMsS0FBYztRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQWU7UUFFL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDOztZQUVDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELE1BQU0sS0FBSyxRQUFRO1FBQ2pCLElBQUksV0FBVyxDQUFDLFNBQVMsS0FBSyxJQUFJO1lBQ2hDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM1QyxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUdEO1FBQ0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBS00sUUFBUSxDQUFDLE1BQWlCO1FBRS9CLElBQUksWUFBMEIsQ0FBQztRQUUvQixJQUFJLFVBQVUsR0FBVyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkcsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUVqRSxJQUFJLEdBQUcsR0FBVyxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsR0FBRyxjQUFjLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEgsWUFBWSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLENBQUM7O1lBRUMsTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFPTyxZQUFZLENBQUMsWUFBMEI7UUFDN0MsSUFBSSxTQUFpQixFQUFFLFFBQVEsQ0FBQztRQUNoQyxJQUFJLFNBQVMsR0FBWSxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFTLENBQUM7UUFFZCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzVDLFNBQVMsR0FBWSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSxDQUFDO1lBQy9DLFFBQVEsR0FBWSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUUsQ0FBQztZQUVsRCxRQUFRLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixLQUFLLGNBQWMsQ0FBQyxtQkFBbUI7b0JBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUN4QyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO29CQUU3QyxNQUFNO2dCQTBCUjtvQkFDRSxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLG9EQUFvRCxHQUFHLFNBQVMsQ0FBQyxDQUFDO29CQUM3RyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUNsQixNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGlzdCwgTlN0cmluZyB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgTG9nZ2VyLCBYTUxDb25zdGFudHMsIFhtbFBhcnNlciB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBDb25zdEludGVyZmFjZSB9IGZyb20gJy4uL0NvbnN0SW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29tbWFuZHMgfSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcblxyXG4vLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gbWFuYWdlIHRoZSB1c2VyIGRldGFpbHMgb24gdGhlIGNsaWVudCBzaWRlLlxyXG4vLyBUaGUgdXNlciBkZXRhaWxzIGFyZSBzZW50IGZyb20gdGhlIHNlcnZlci5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIFVzZXJEZXRhaWxzIHtcclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFVzZXJEZXRhaWxzICA9IG51bGw7XHJcbiAgVXNlck5hbWU6IHN0cmluZyA9IG51bGw7ICAvLyB1c2VyIG5hbWUgb2J0YWluZWQgZnJvbSB0aGUgc2VydmVyLlxyXG4gIFVzZXJJRDogc3RyaW5nID0gbnVsbDsgLy8gdXNlcklEIG9idGFpbmVkIGZyb20gdGhlIHNlcnZlclxyXG4gIFVzZXJJbmZvOiBzdHJpbmcgPSBudWxsOyAvLyB1c2VyIGluZm8gb2J0YWluZWQgZnJvbSB0aGUgc2VydmVyXHJcbiAgUGFzc3dvcmQ6IHN0cmluZyA9IG51bGw7IC8vIFBhc3N3b3JkIG9idGFpbmVkIGZyb20gc2VydmVyLlxyXG4gIElzTG9nZ2VkSW46IGJvb2xlYW49IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHNldElzTG9nZ2VkSW4odmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuSXNMb2dnZWRJbiA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXNMb2dnZWRJbigpIHtcclxuICAgIHJldHVybiB0aGlzLklzTG9nZ2VkSW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFVzZXJJRCh1c2VySWQgOiBzdHJpbmcpXHJcbiAge1xyXG4gICAgdGhpcy5Vc2VySUQgPSB1c2VySWQ7XHJcbiAgICBpZiAoIHRoaXMuVXNlcklELmxlbmd0aCA9PSAwIHx8IHRoaXMuVXNlcklEID09PSBOU3RyaW5nLkVtcHR5KXtcclxuICAgICAgdGhpcy5zZXRJc0xvZ2dlZEluKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zZXRJc0xvZ2dlZEluKHRydWUpO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFVzZXJEZXRhaWxzIHtcclxuICAgIGlmIChVc2VyRGV0YWlscy5faW5zdGFuY2UgPT09IG51bGwpXHJcbiAgICAgIFVzZXJEZXRhaWxzLl9pbnN0YW5jZSA9IG5ldyBVc2VyRGV0YWlscygpO1xyXG4gICAgcmV0dXJuIFVzZXJEZXRhaWxzLl9pbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5Qcml2YXRlIENUT1IgYXMgcGFydCBvZiBtYWtpbmcgdGhpcyBjbGFzcyBhIHNpbmdsZXRvbi8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLlVzZXJOYW1lID0gTlN0cmluZy5FbXB0eTtcclxuICAgIHRoaXMuVXNlckluZm8gPSBOU3RyaW5nLkVtcHR5O1xyXG4gICAgdGhpcy5Jc0xvZ2dlZEluID0gZmFsc2U7XHJcbiAgICB0aGlzLnNldFVzZXJJRChOU3RyaW5nLkVtcHR5KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSB4bWwgdGFnIGNvbnRhaW5pbmcgdXNlciBpbmZvLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGZpbGxEYXRhKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICAvL2xldCBwYXJzZXI6IFhtbFBhcnNlciA9IENsaWVudE1hbmFnZXIuSW5zdGFuY2UuUnVudGltZUN0eC5QYXJzZXI7XHJcbiAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz47XHJcblxyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX1RFUk0sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBTdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfVVNFUl9ERVRBSUxTKSArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19VU0VSX0RFVEFJTFMubGVuZ3RoKTtcclxuICAgICAgdG9rZW5zVmVjdG9yID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgICB0aGlzLmluaXRFbGVtZW50cyh0b2tlbnNWZWN0b3IpO1xyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyBYTUxDb25zdGFudHMuVEFHX1RFUk0ubGVuZ3RoKTsgLy8gdG8gZGVsZXRlIFwiPlwiIHRvb1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBVc2VyRGV0YWlscy5maWxsRGF0YSgpOiBvdXQgb2YgYm91bmRzXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9rZW5zVmVjdG9yXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvcjogTGlzdDxTdHJpbmc+KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgYXR0cmlidXRlOiBTdHJpbmcsIHZhbHVlU3RyO1xyXG4gICAgbGV0IGlzU3VjY2VzczogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgajogbnVtYmVyO1xyXG5cclxuICAgIGZvciAoaiA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgYXR0cmlidXRlID0gKDxTdHJpbmc+dG9rZW5zVmVjdG9yLmdldF9JdGVtKGopKTtcclxuICAgICAgdmFsdWVTdHIgPSAoPFN0cmluZz50b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaiArIDEpKTtcclxuXHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfSVNfTE9HR0VEX0lOOlxyXG4gICAgICAgICAgdGhpcy5zZXRJc0xvZ2dlZEluKHZhbHVlU3RyWzBdID09PSAnMScpO1xyXG4gICAgICAgICAgQ29tbWFuZHMuYWRkSXNMb2dnZWRJbih0aGlzLmdldElzTG9nZ2VkSW4oKSk7XHJcbiAgICAgICAgICAvL3RoaXMuc2V0SXNMb2dnZWRJbihYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cikpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8gY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVVNFUk5BTUU6XHJcbiAgICAgICAgLy8gICB0aGlzLlVzZXJOYW1lID0gdmFsdWVTdHI7XHJcbiAgICAgICAgLy8gICBicmVhaztcclxuICAgICAgICAvLyBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVNFUklEOlxyXG4gICAgICAgIC8vICAgdmFsdWVTdHIgPSBTdHJVdGlsLnJ0cmltKHZhbHVlU3RyKTtcclxuICAgICAgICAvLyAgIHRoaXMuc2V0VXNlcklEKHZhbHVlU3RyKTtcclxuICAgICAgICAvLyAgIC8vQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5zZXRVc2VybmFtZSh0aGlzLlVzZXJJRCk7XHJcbiAgICAgICAgLy8gICBicmVhaztcclxuICAgICAgICAvLyBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVNFUklORk86XHJcbiAgICAgICAgLy8gICB0aGlzLlVzZXJJbmZvID0gdmFsdWVTdHI7XHJcbiAgICAgICAgLy8gICBicmVhaztcclxuICAgICAgICAvLyBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19QQVNTV09SRDpcclxuICAgICAgICAvLyAgIHRoaXMuUGFzc3dvcmQgPSB2YWx1ZVN0cjtcclxuICAgICAgICAvLyAgIGxldCBwYXNzd29yZERlY29kZWQ6IFVpbnQ4QXJyYXkgPSBCYXNlNjQuZGVjb2RlVG9CeXRlKHRoaXMuUGFzc3dvcmQpO1xyXG4gICAgICAgIC8vICAgbGV0IGVuY3J5cHRlZFBhc3N3b3JkOiBzdHJpbmcgPSBFbmNvZGluZy5VVEY4LkdldFN0cmluZyhwYXNzd29yZERlY29kZWQsIDAsIHBhc3N3b3JkRGVjb2RlZC5sZW5ndGgpO1xyXG4gICAgICAgIC8vICAgbGV0IGRlY3J5cHRlZFBhc3N3b3JkOiBzdHJpbmcgPSBTY3JhbWJsZXIuVW5TY3JhbWJsZShlbmNyeXB0ZWRQYXNzd29yZCwgMCwgZW5jcnlwdGVkUGFzc3dvcmQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgLy8gICAvLyBBdCBzZXJ2ZXIgc2lkZSBzcGFjZXMgYXJlIGFkZGVkIGF0IHRoZSBlbmQgaWYgdGhlIGxlbmd0aCBvZiBwYXNzd29yZCBpcyBsZXNzIHRoYW4gNCBjaGFyYWN0ZXJzLlxyXG4gICAgICAgIC8vICAgLy8gUmVtb3ZlIHRoZXNlIGV4dHJhIHNwYWNlcyBiZWZvcmUgc2V0dGluZyB0aGUgcGFzc3dvcmQuXHJcbiAgICAgICAgLy8gICBkZWNyeXB0ZWRQYXNzd29yZCA9IFN0clV0aWwucnRyaW0oZGVjcnlwdGVkUGFzc3dvcmQpO1xyXG4gICAgICAgIC8vICAgLy8gaWYgdGhlIHBhc3N3b3JkIGlzIGVtcHR5IHNldCBhIHBhc3N3b3JkIGNvbnRhaW5pbmcgb25lIFwiIFwiLCBhcyBmb3IgdXNlcklkLCB3aGVyZSBpZiBubyB1c2VySWRcclxuICAgICAgICAvLyAgIC8vIHRoZW4gYSBcIiBcIiBzZXQgdG8gdXNlcklkLlxyXG4gICAgICAgIC8vICAgaWYgKE5TdHJpbmcuSXNOdWxsT3JFbXB0eShkZWNyeXB0ZWRQYXNzd29yZCkpXHJcbiAgICAgICAgLy8gICAgIGRlY3J5cHRlZFBhc3N3b3JkID0gXCIgXCI7XHJcbiAgICAgICAgLy8gICAvL0NsaWVudE1hbmFnZXIuSW5zdGFuY2Uuc2V0UGFzc3dvcmQoZGVjcnlwdGVkUGFzc3dvcmQpO1xyXG4gICAgICAgIC8vICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIFVzZXJEZXRhaWxzLmluaXRFbGVtZW50cygpOiB1bmtub3duIGF0dHJpYnV0ZTogXCIgKyBhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzU3VjY2VzcztcclxuICB9XHJcbn1cclxuIl19
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlckRldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3NlY3VyaXR5L1VzZXJEZXRhaWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzFDLE1BQU0sT0FBTyxXQUFXO0lBQ2QsTUFBTSxDQUFDLFNBQVMsR0FBaUIsSUFBSSxDQUFDO0lBQzlDLFFBQVEsR0FBVyxJQUFJLENBQUM7SUFDeEIsTUFBTSxHQUFXLElBQUksQ0FBQztJQUN0QixRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQ3hCLFFBQVEsR0FBVyxJQUFJLENBQUM7SUFDeEIsVUFBVSxHQUFXLEtBQUssQ0FBQztJQUVuQixhQUFhLENBQUMsS0FBYztRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQWU7UUFFL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFDO1lBQzVELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7O1lBRUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsTUFBTSxLQUFLLFFBQVE7UUFDakIsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLElBQUk7WUFDaEMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVDLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBR0Q7UUFDRSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFLTSxRQUFRLENBQUMsTUFBaUI7UUFFL0IsSUFBSSxZQUEwQixDQUFDO1FBRS9CLElBQUksVUFBVSxHQUFXLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNuRyxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUVoRSxJQUFJLEdBQUcsR0FBVyxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsR0FBRyxjQUFjLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEgsWUFBWSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hFOztZQUVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsMENBQTBDLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBT08sWUFBWSxDQUFDLFlBQTBCO1FBQzdDLElBQUksU0FBaUIsRUFBRSxRQUFRLENBQUM7UUFDaEMsSUFBSSxTQUFTLEdBQVksSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBUyxDQUFDO1FBRWQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0MsU0FBUyxHQUFZLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFFLENBQUM7WUFDL0MsUUFBUSxHQUFZLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBRSxDQUFDO1lBRWxELFFBQVEsU0FBUyxFQUFFO2dCQUNqQixLQUFLLGNBQWMsQ0FBQyxtQkFBbUI7b0JBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUN4QyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO29CQUU3QyxNQUFNO2dCQTBCUjtvQkFDRSxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLG9EQUFvRCxHQUFHLFNBQVMsQ0FBQyxDQUFDO29CQUM3RyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUNsQixNQUFNO2FBQ1Q7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaXN0LCBOU3RyaW5nIH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQgeyBMb2dnZXIsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyIH0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7IENvbnN0SW50ZXJmYWNlIH0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBDb21tYW5kcyB9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuXHJcbi8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIHVzZXIgZGV0YWlscyBvbiB0aGUgY2xpZW50IHNpZGUuXHJcbi8vIFRoZSB1c2VyIGRldGFpbHMgYXJlIHNlbnQgZnJvbSB0aGUgc2VydmVyLlxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgVXNlckRldGFpbHMge1xyXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXNlckRldGFpbHMgID0gbnVsbDtcclxuICBVc2VyTmFtZTogc3RyaW5nID0gbnVsbDsgIC8vIHVzZXIgbmFtZSBvYnRhaW5lZCBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgVXNlcklEOiBzdHJpbmcgPSBudWxsOyAvLyB1c2VySUQgb2J0YWluZWQgZnJvbSB0aGUgc2VydmVyXHJcbiAgVXNlckluZm86IHN0cmluZyA9IG51bGw7IC8vIHVzZXIgaW5mbyBvYnRhaW5lZCBmcm9tIHRoZSBzZXJ2ZXJcclxuICBQYXNzd29yZDogc3RyaW5nID0gbnVsbDsgLy8gUGFzc3dvcmQgb2J0YWluZWQgZnJvbSBzZXJ2ZXIuXHJcbiAgSXNMb2dnZWRJbjogYm9vbGVhbj0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgc2V0SXNMb2dnZWRJbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5Jc0xvZ2dlZEluID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXRJc0xvZ2dlZEluKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuSXNMb2dnZWRJbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VXNlcklEKHVzZXJJZCA6IHN0cmluZylcclxuICB7XHJcbiAgICB0aGlzLlVzZXJJRCA9IHVzZXJJZDtcclxuICAgIGlmICggdGhpcy5Vc2VySUQubGVuZ3RoID09IDAgfHwgdGhpcy5Vc2VySUQgPT09IE5TdHJpbmcuRW1wdHkpe1xyXG4gICAgICB0aGlzLnNldElzTG9nZ2VkSW4oZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnNldElzTG9nZ2VkSW4odHJ1ZSk7XHJcbiAgfVxyXG4gIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogVXNlckRldGFpbHMge1xyXG4gICAgaWYgKFVzZXJEZXRhaWxzLl9pbnN0YW5jZSA9PT0gbnVsbClcclxuICAgICAgVXNlckRldGFpbHMuX2luc3RhbmNlID0gbmV3IFVzZXJEZXRhaWxzKCk7XHJcbiAgICByZXR1cm4gVXNlckRldGFpbHMuX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlByaXZhdGUgQ1RPUiBhcyBwYXJ0IG9mIG1ha2luZyB0aGlzIGNsYXNzIGEgc2luZ2xldG9uLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuVXNlck5hbWUgPSBOU3RyaW5nLkVtcHR5O1xyXG4gICAgdGhpcy5Vc2VySW5mbyA9IE5TdHJpbmcuRW1wdHk7XHJcbiAgICB0aGlzLklzTG9nZ2VkSW4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2V0VXNlcklEKE5TdHJpbmcuRW1wdHkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHhtbCB0YWcgY29udGFpbmluZyB1c2VyIGluZm8uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZmlsbERhdGEocGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIC8vbGV0IHBhcnNlcjogWG1sUGFyc2VyID0gQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5SdW50aW1lQ3R4LlBhcnNlcjtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPjtcclxuXHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IFN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19VU0VSX0RFVEFJTFMpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1VTRVJfREVUQUlMUy5sZW5ndGgpO1xyXG4gICAgICB0b2tlbnNWZWN0b3IgPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIHRoaXMuaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3Rvcik7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpOyAvLyB0byBkZWxldGUgXCI+XCIgdG9vXHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIFVzZXJEZXRhaWxzLmZpbGxEYXRhKCk6IG91dCBvZiBib3VuZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0b2tlbnNWZWN0b3JcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBpbml0RWxlbWVudHModG9rZW5zVmVjdG9yOiBMaXN0PFN0cmluZz4pOiBib29sZWFuIHtcclxuICAgIGxldCBhdHRyaWJ1dGU6IFN0cmluZywgdmFsdWVTdHI7XHJcbiAgICBsZXQgaXNTdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBqOiBudW1iZXI7XHJcblxyXG4gICAgZm9yIChqID0gMDsgaiA8IHRva2Vuc1ZlY3Rvci5sZW5ndGg7IGogKz0gMikge1xyXG4gICAgICBhdHRyaWJ1dGUgPSAoPFN0cmluZz50b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaikpO1xyXG4gICAgICB2YWx1ZVN0ciA9ICg8U3RyaW5nPnRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19JU19MT0dHRURfSU46XHJcbiAgICAgICAgICB0aGlzLnNldElzTG9nZ2VkSW4odmFsdWVTdHJbMF0gPT09ICcxJyk7XHJcbiAgICAgICAgICBDb21tYW5kcy5hZGRJc0xvZ2dlZEluKHRoaXMuZ2V0SXNMb2dnZWRJbigpKTtcclxuICAgICAgICAgIC8vdGhpcy5zZXRJc0xvZ2dlZEluKFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19VU0VSTkFNRTpcclxuICAgICAgICAvLyAgIHRoaXMuVXNlck5hbWUgPSB2YWx1ZVN0cjtcclxuICAgICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICAgIC8vIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VSSUQ6XHJcbiAgICAgICAgLy8gICB2YWx1ZVN0ciA9IFN0clV0aWwucnRyaW0odmFsdWVTdHIpO1xyXG4gICAgICAgIC8vICAgdGhpcy5zZXRVc2VySUQodmFsdWVTdHIpO1xyXG4gICAgICAgIC8vICAgLy9DbGllbnRNYW5hZ2VyLkluc3RhbmNlLnNldFVzZXJuYW1lKHRoaXMuVXNlcklEKTtcclxuICAgICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICAgIC8vIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VSSU5GTzpcclxuICAgICAgICAvLyAgIHRoaXMuVXNlckluZm8gPSB2YWx1ZVN0cjtcclxuICAgICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICAgIC8vIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1BBU1NXT1JEOlxyXG4gICAgICAgIC8vICAgdGhpcy5QYXNzd29yZCA9IHZhbHVlU3RyO1xyXG4gICAgICAgIC8vICAgbGV0IHBhc3N3b3JkRGVjb2RlZDogVWludDhBcnJheSA9IEJhc2U2NC5kZWNvZGVUb0J5dGUodGhpcy5QYXNzd29yZCk7XHJcbiAgICAgICAgLy8gICBsZXQgZW5jcnlwdGVkUGFzc3dvcmQ6IHN0cmluZyA9IEVuY29kaW5nLlVURjguR2V0U3RyaW5nKHBhc3N3b3JkRGVjb2RlZCwgMCwgcGFzc3dvcmREZWNvZGVkLmxlbmd0aCk7XHJcbiAgICAgICAgLy8gICBsZXQgZGVjcnlwdGVkUGFzc3dvcmQ6IHN0cmluZyA9IFNjcmFtYmxlci5VblNjcmFtYmxlKGVuY3J5cHRlZFBhc3N3b3JkLCAwLCBlbmNyeXB0ZWRQYXNzd29yZC5sZW5ndGggLSAxKTtcclxuICAgICAgICAvLyAgIC8vIEF0IHNlcnZlciBzaWRlIHNwYWNlcyBhcmUgYWRkZWQgYXQgdGhlIGVuZCBpZiB0aGUgbGVuZ3RoIG9mIHBhc3N3b3JkIGlzIGxlc3MgdGhhbiA0IGNoYXJhY3RlcnMuXHJcbiAgICAgICAgLy8gICAvLyBSZW1vdmUgdGhlc2UgZXh0cmEgc3BhY2VzIGJlZm9yZSBzZXR0aW5nIHRoZSBwYXNzd29yZC5cclxuICAgICAgICAvLyAgIGRlY3J5cHRlZFBhc3N3b3JkID0gU3RyVXRpbC5ydHJpbShkZWNyeXB0ZWRQYXNzd29yZCk7XHJcbiAgICAgICAgLy8gICAvLyBpZiB0aGUgcGFzc3dvcmQgaXMgZW1wdHkgc2V0IGEgcGFzc3dvcmQgY29udGFpbmluZyBvbmUgXCIgXCIsIGFzIGZvciB1c2VySWQsIHdoZXJlIGlmIG5vIHVzZXJJZFxyXG4gICAgICAgIC8vICAgLy8gdGhlbiBhIFwiIFwiIHNldCB0byB1c2VySWQuXHJcbiAgICAgICAgLy8gICBpZiAoTlN0cmluZy5Jc051bGxPckVtcHR5KGRlY3J5cHRlZFBhc3N3b3JkKSlcclxuICAgICAgICAvLyAgICAgZGVjcnlwdGVkUGFzc3dvcmQgPSBcIiBcIjtcclxuICAgICAgICAvLyAgIC8vQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5zZXRQYXNzd29yZChkZWNyeXB0ZWRQYXNzd29yZCk7XHJcbiAgICAgICAgLy8gICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gVXNlckRldGFpbHMuaW5pdEVsZW1lbnRzKCk6IHVua25vd24gYXR0cmlidXRlOiBcIiArIGF0dHJpYnV0ZSk7XHJcbiAgICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNTdWNjZXNzO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -549,4 +549,4 @@ export class MGData {
549
549
  }
550
550
  }
551
551
  }
552
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUdEYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy90YXNrcy9NR0RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFeEQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBUSxPQUFPLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFDLGtCQUFrQixFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9CQUFvQixDQUFD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RSxVQUFVLENBQUMsQ0FBQztZQUNoRSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBRTlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SGFuZGxlcnNUYWJsZX0gZnJvbSBcIi4uL3J0L0hhbmRsZXJzVGFibGVcIjtcclxuaW1wb3J0IHtUYXNrc1RhYmxlfSBmcm9tIFwiLi9UYXNrc1RhYmxlXCI7XHJcbmltcG9ydCB7SUNvbW1hbmRzVGFibGV9IGZyb20gXCIuLi9JQ29tbWFuZHNUYWJsZVwiO1xyXG5pbXBvcnQge0NvbXBNYWluUHJnVGFibGV9IGZyb20gXCIuLi9ydC9Db21wTWFpblByZ1RhYmxlXCI7XHJcbmltcG9ydCB7TWdGb3JtfSBmcm9tIFwiLi4vZ3VpL01nRm9ybVwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuL1Rhc2tcIjtcclxuaW1wb3J0IHtPcGVuaW5nVGFza0RldGFpbHN9IGZyb20gXCIuL1Rhc2tCYXNlXCI7XHJcbmltcG9ydCB7TG9nZ2VyLCBYTUxDb25zdGFudHMsIFhtbFBhcnNlcn0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtSZWNvbXB1dGVUYWJsZX0gZnJvbSBcIi4uL3J0L1JlY29tcHV0ZVRhYmxlXCI7XHJcbmltcG9ydCB7RGVidWcsIExpc3QsIE5OdW1iZXIsIFN0cmluZ0J1aWxkZXJ9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1J1bnRpbWVDb250ZXh0QmFzZSwgVGFza0RlZmluaXRpb25JZH0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7RXZlbnRIYW5kbGVyfSBmcm9tIFwiLi4vZXZlbnQvRXZlbnRIYW5kbGVyXCI7XHJcbmltcG9ydCB7R1VJTWFuYWdlcn0gZnJvbSBcIi4uL0dVSU1hbmFnZXJcIjtcclxuaW1wb3J0IHtJQ2xpZW50Q29tbWFuZH0gZnJvbSBcIi4uL2NvbW1hbmRzL0lDbGllbnRDb21tYW5kXCI7XHJcbmltcG9ydCB7SHR0cE1hbmFnZXJ9IGZyb20gXCIuLi9odHRwL0h0dHBNYW5hZ2VyXCI7XHJcbmltcG9ydCB7Rmxvd01vbml0b3JRdWV1ZX0gZnJvbSBcIi4uL3V0aWwvRmxvd01vbml0b3JRdWV1ZVwiO1xyXG5pbXBvcnQge1J1blRpbWVFdmVudH0gZnJvbSBcIi4uL2V2ZW50L1J1blRpbWVFdmVudFwiO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tIFwiLi4vQ29uc3RJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtMYW5ndWFnZURhdGF9IGZyb20gXCIuLi9lbnYvTGFuZ3VhZ2VEYXRhXCI7XHJcbmltcG9ydCB7RW52UGFyYW1zVGFibGV9IGZyb20gXCIuLi9lbnYvRW52VmFyaWFibGVzVGFibGVcIjtcclxuaW1wb3J0IHtHbG9iYWxQYXJhbXN9IGZyb20gXCIuLi9leHAvR2xvYmFsUGFyYW1zVGFibGVcIjtcclxuaW1wb3J0IHtFbnZpcm9ubWVudH0gZnJvbSBcIi4uL2Vudi9FbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQge0dsb2JhbENvbW1hbmRzTWFuYWdlcn0gZnJvbSBcIi4uL0dsb2JhbENvbW1hbmRzTWFuYWdlclwiO1xyXG5pbXBvcnQge1NlcnZlckNvbmZpZ30gZnJvbSBcIi4uL1NlcnZlckNvbmZpZ1wiO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5pbXBvcnQge1VzZXJEZXRhaWxzfSBmcm9tIFwiLi4vc2VjdXJpdHkvVXNlckRldGFpbHNcIjtcclxuaW1wb3J0IHtSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvcn0gZnJvbSBcIi4uL3JlbW90ZS9SZW1vdGVDb21tYW5kc1Byb2Nlc3NvclwiO1xyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tIFwiLi4vLi5cIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgUmVwcmVzZW50cyBhbGwgZGV0YWlscyByZWxldmFudCB0byBhIHNwZWNpZmljIHRhc2sgLSByZWxhdGVkIHRhc2tzLCBjb21tYW5kcywgaGFuZGxlcnMsIGV0Yy4uXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBNR0RhdGEge1xyXG4gIHByaXZhdGUgX2V4cEhhbmRsZXJzOiBIYW5kbGVyc1RhYmxlID0gbnVsbDtcclxuICBwcml2YXRlIF9pZDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9wYXJlbnQ6IE1HRGF0YSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbXByZ1RhYjogVGFza3NUYWJsZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdGFza3NUYWI6IFRhc2tzVGFibGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX3RpbWVySGFuZGxlcnM6IEhhbmRsZXJzVGFibGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX3RpbWVyc1N0YXJ0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGZvcmNlTW9kYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBDbWRzVG9DbGllbnQ6IElDb21tYW5kc1RhYmxlID0gbnVsbDtcclxuICBDbWRzVG9TZXJ2ZXI6IElDb21tYW5kc1RhYmxlID0gbnVsbDtcclxuICBJc01vZGFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgSXNBYm9ydGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBnZXQgRm9yY2VNb2RhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZvcmNlTW9kYWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IodG9DbGllbnQ6IElDb21tYW5kc1RhYmxlLCB0b1NlcnZlcjogSUNvbW1hbmRzVGFibGUsIGlkOiBudW1iZXIsIHBhcmVudDogTUdEYXRhLCBpc01vZGFsOiBib29sZWFuKTtcclxuICBjb25zdHJ1Y3Rvcih0b0NsaWVudDogSUNvbW1hbmRzVGFibGUsIHRvU2VydmVyOiBJQ29tbWFuZHNUYWJsZSwgaWQ6IG51bWJlciwgcGFyZW50OiBNR0RhdGEsIGlzTW9kYWw6IGJvb2xlYW4sIGZvcmNlTW9kYWw6IGJvb2xlYW4pO1xyXG4gIGNvbnN0cnVjdG9yKHRvQ2xpZW50OiBJQ29tbWFuZHNUYWJsZSwgdG9TZXJ2ZXI6IElDb21tYW5kc1RhYmxlLCBpZDogbnVtYmVyLCBwYXJlbnQ6IE1HRGF0YSwgaXNNb2RhbDogYm9vbGVhbiwgZm9yY2VNb2RhbD86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuQ21kc1RvU2VydmVyID0gdG9DbGllbnQ7XHJcbiAgICB0aGlzLkNtZHNUb0NsaWVudCA9IHRvU2VydmVyO1xyXG5cclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA1KVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAoaWQsIHBhcmVudCwgaXNNb2RhbCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMShpZCwgcGFyZW50LCBpc01vZGFsLCBmb3JjZU1vZGFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkXCI+dGhlIGlkIG9mIHRoaXMgbWdkYXRhIG9iamVjdDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwYXJlbnRcIj50aGUgcGFyZW50IE1HRGF0YTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpc01vZGFsXCI+dHJ1ZSBmb3IgbW9kYWwgd2luZG93czwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8wKGlkOiBudW1iZXIsIHBhcmVudDogTUdEYXRhLCBpc01vZGFsOiBib29sZWFuKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5fdGltZXJIYW5kbGVycyA9IG5ldyBIYW5kbGVyc1RhYmxlKCk7XHJcbiAgICB0aGlzLl9leHBIYW5kbGVycyA9IG5ldyBIYW5kbGVyc1RhYmxlKCk7XHJcbiAgICB0aGlzLl9tcHJnVGFiID0gbmV3IFRhc2tzVGFibGUoKTtcclxuICAgIHRoaXMuX3Rhc2tzVGFiID0gbmV3IFRhc2tzVGFibGUoKTtcclxuICAgIHRoaXMuX2lkID0gaWQ7XHJcbiAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICBpZiAoQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0Q29tcE1haW5QcmdUYWIoKSA9PT0gbnVsbCkge1xyXG4gICAgICBsZXQgY29tcE1haW5QcmdUYWI6IENvbXBNYWluUHJnVGFibGUgPSBuZXcgQ29tcE1haW5QcmdUYWJsZSgpO1xyXG4gICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5zZXRDb21wTWFpblByZ1RhYihjb21wTWFpblByZ1RhYik7XHJcbiAgICB9XHJcbiAgICB0aGlzLklzTW9kYWwgPSBpc01vZGFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDVE9SIHRvIGJlIHVzZWQgd2hlbiBydW5uaW5nIG9mZmxpbmUgdGFza3MgLSBob2xkIHRoZSBjb21tYW5kIHRvIGVuYWJsZSByaWdodCBzZXR0aW5nIG9mIG1vZGFsaXR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpZFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicGFyZW50XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc01vZGFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3JjZU1vZGFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEoaWQ6IG51bWJlciwgcGFyZW50OiBNR0RhdGEsIGlzTW9kYWw6IGJvb2xlYW4sIGZvcmNlTW9kYWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfMChpZCwgcGFyZW50LCBpc01vZGFsKTtcclxuICAgIHRoaXMuZm9yY2VNb2RhbCA9IGZvcmNlTW9kYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgaWQgb2YgdGhpcyBNR0RhdGEgb2JqZWN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRJZCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybnMgdHJ1ZSBpZiBhbHJlYWR5IG1vdmVkIHRvIHRoZSBmaXJzdCBjb250cm9sIG9uIG9uZSBvZiB0aGUgTWdEYXRhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBBbHJlYWR5TW92ZWRUb0ZpcnN0Q29udHJvbCgpOiBib29sZWFuIHtcclxuICAgIGxldCBhbHJlYWR5TW92ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCB0YXNrc0NvdW50OiBudW1iZXIgPSB0aGlzLmdldFRhc2tzQ291bnQoKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0YXNrc0NvdW50OyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IG1nRm9ybTogTWdGb3JtID0gPE1nRm9ybT50aGlzLmdldFRhc2soaSkuZ2V0Rm9ybSgpO1xyXG4gICAgICBpZiAobWdGb3JtICE9PSBudWxsICYmIG1nRm9ybS5Nb3ZlZFRvRmlyc3RDb250cm9sKSB7XHJcbiAgICAgICAgYWxyZWFkeU1vdmVkID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFscmVhZHlNb3ZlZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzdGFydCB0aGUgdGltZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBTdGFydFRpbWVycygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl90aW1lckhhbmRsZXJzICE9PSBudWxsICYmICF0aGlzLl90aW1lcnNTdGFydGVkKSB7XHJcbiAgICAgIHRoaXMuX3RpbWVySGFuZGxlcnMuc3RhcnRUaW1lcnModGhpcyk7XHJcbiAgICAgIHRoaXMuX3RpbWVyc1N0YXJ0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZ1bmN0aW9uIGZvciBmaWxsaW5nIG93biBmaWVsZHMsIGFsbG9jYXRlIG1lbW9yeSBmb3IgaW5uZXIgb2JqZWN0cy4gUGFyc2luZyB0aGUgaW5wdXQgU3RyaW5nLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgZmlsbERhdGEob3BlbmluZ1Rhc2tEZXRhaWxzOiBPcGVuaW5nVGFza0RldGFpbHMsIHBhcnNlcjogWG1sUGFyc2VyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBUbyBhdm9pZCB0aGUgbmVlZCB0byBzZW5kIGRhdGEgdGhhdCBzZXRzIGRlZmF1bHQgdmFsdWVzLCB3ZSdsbCBhc3N1bWUgd2Ugd2FudCB0aGUgZGVmYXVsdCB2YWx1ZXNcclxuICAgIC8vIHVubGVzcyBkaWZmZXJlbnQgaW5mbyB3YXMgc2VudC4gaS5lLiBpZiB0aGUgcmVsZXZhbnQgdGFncyBhcmUgbm90IGluIHRoZSBYTUwsIHNldCB0aGUgZGVmYXVsdCB2YWx1ZXMuXHJcbiAgICBsZXQgY2FuQ29udGludWU6IGJvb2xlYW47XHJcbiAgICBkbyB7XHJcbiAgICAgIGxldCBuZXh0VGFnOiBzdHJpbmcgPSBwYXJzZXIuZ2V0TmV4dFRhZygpO1xyXG4gICAgICBjYW5Db250aW51ZSA9IGF3YWl0IHRoaXMuaW5pdElubmVyT2JqZWN0cyhwYXJzZXIsIG5leHRUYWcsIG9wZW5pbmdUYXNrRGV0YWlscyk7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoY2FuQ29udGludWUpO1xyXG4gICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJNR0RhdGEuRmlsbERhdGEoKTogVEhFIEVORCBvZiB0aGUgcGFyc2luZyBcIiArIHBhcnNlci5nZXRDdXJySW5kZXgoKSArIFwiIGNoYXJhY3RlcnNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVG8gYWxsb2NhdGUgYW5kIGZpbGwgaW5uZXIgb2JqZWN0cyBvZiB0aGUgY2xhc3NcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm91bmRUYWdOYW1lXCI+cG9zc2libGUgdGFnIG5hbWUsIG5hbWUgb2Ygb2JqZWN0LCB3aGljaCBuZWVkIGJlIGFsbG9jYXRlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib3BlbmluZ1Rhc2tEZXRhaWxzXCI+YWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiBvcGVuaW5nIHRhc2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4geG1sUGFyc2VyLmdldEN1cnJJbmRleCgpLCB0aGUgZm91bmQgb2JqZWN0IHRhZyBhbmQgQUxMIGl0cyBzdWJ0YWdzIGZpbmlzaDwvcmV0dXJucz5cclxuICBwcml2YXRlIGFzeW5jIGluaXRJbm5lck9iamVjdHMocGFyc2VyOiBYbWxQYXJzZXIsIGZvdW5kVGFnTmFtZTogc3RyaW5nLCBvcGVuaW5nVGFza0RldGFpbHM6IE9wZW5pbmdUYXNrRGV0YWlscyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKGZvdW5kVGFnTmFtZSA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICBzd2l0Y2ggKGZvdW5kVGFnTmFtZSkge1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19UQUdfWE1MOlxyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTsgLy8gZG9cclxuICAgICAgICAvLyBub3RoaW5nXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RBVEFWSUVXOlxyXG4gICAgICAgIGlmICghIGF3YWl0IHRoaXMuaW5zZXJ0RGF0YVZpZXcocGFyc2VyKSkge1xyXG4gICAgICAgICAgLy8gdGhlIHRhc2sgb2YgaW5zZXJ0IGRhdGEgdmlldyBub3QgZm91bmQgLT4gc2V0IHBhcnNlcnMgY291bnRlciB0byB0aGVcclxuICAgICAgICAgIC8vIGVuZCBvZiB0aGUgZGF0YSB2aWV3XHJcbiAgICAgICAgICAvLyB0aGUgZGF0YSB2aWV3LCBnb3QgZnJvbSBzZXJ2ZXIgYW5kIHRoZXJlIGlzIG5vIHRhc2sgdG8gdGhlIGRhdGEgdmlldyAsIHlldC5cclxuICAgICAgICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoJy8nICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RBVEFWSUVXLFxyXG4gICAgICAgICAgICBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0KTtcclxuICAgICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTVBMRVRFX0RWOiB7XHJcbiAgICAgICAgbGV0IHRhc2s6IFRhc2sgPSBudWxsO1xyXG4gICAgICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgICAgICBsZXQgaW5kZXg6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfQ09NUExFVEVfRFYsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyBDb25zdEludGVyZmFjZS5NR19UQUdfQ09NUExFVEVfRFYubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTGRhdGEoKS5zdWJzdHIoaW5kZXgsIGVuZENvbnRleHQgLSBpbmRleCksICdcIicpO1xyXG4gICAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZyA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oMCkpO1xyXG4gICAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nO1xyXG4gICAgICAgIGlmIChhdHRyaWJ1dGUgPT09IFhNTENvbnN0YW50cy5NR19BVFRSX1RBU0tJRCkge1xyXG4gICAgICAgICAgdmFsdWVTdHIgPSAodG9rZW5zVmVjdG9yLmdldF9JdGVtKDEpKTtcclxuICAgICAgICAgIGxldCB0YXNrSWQ6IHN0cmluZyA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZ2V0VGFzayh0YXNrSWQpID09PSBudWxsKVxyXG4gICAgICAgICAgICB0YXNrID0gPFRhc2s+QWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLkdldFRhc2tCeUlEKHRhc2tJZCk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRhc2sgPSB0aGlzLmdldFRhc2sodGFza0lkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0YXJ0OiBudW1iZXIgPSBlbmRDb250ZXh0ICsgMTtcclxuICAgICAgICBlbmRDb250ZXh0ID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5FTkRfVEFHICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTVBMRVRFX0RWLFxyXG4gICAgICAgICAgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgICAgICBsZXQgZGF0YVZpZXdDb250ZW50OiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLnN1YnN0cihzdGFydCwgZW5kQ29udGV4dCAtIHN0YXJ0KTtcclxuICAgICAgICB0YXNrLmRhdGFWaWV3Q29udGVudCA9IGRhdGFWaWV3Q29udGVudDtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT05URVhUOiB7XHJcbiAgICAgICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX1RFUk0sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgaWYgKGVuZENvbnRleHQgIT09IC0xICYmIGVuZENvbnRleHQgPCBwYXJzZXIuZ2V0WE1MZGF0YSgpLmxlbmd0aCkge1xyXG4gICAgICAgICAgbGV0IHRhZzogc3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT05URVhUKSArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT05URVhULmxlbmd0aCk7XHJcbiAgICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyBYTUxDb25zdGFudHMuVEFHX1RFUk0ubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX1JFQ09NUFVURTpcclxuICAgICAgICBsZXQgcmVjb21wVGFiID0gbmV3IFJlY29tcHV0ZVRhYmxlKCk7XHJcbiAgICAgICAgcmVjb21wVGFiLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTU1BTkQ6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIGNvbW1hbmRcIik7XHJcbiAgICAgICAgdGhpcy5DbWRzVG9DbGllbnQuZmlsbERhdGEocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfTEFOR1VBR0U6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIGxhbmd1YWdlIGRhdGFcIik7XHJcbiAgICAgICAgYXdhaXQgTGFuZ3VhZ2VEYXRhLkluc3RhbmNlLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0tCRE1BUF9VUkw6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIGtleUJvYXJkXCIpO1xyXG4gICAgICAgIGF3YWl0IEVudmlyb25tZW50Lkluc3RhbmNlLmZpbGxGcm9tVXJsKGZvdW5kVGFnTmFtZSwgcGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfS0JETUFQOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT01QTUFJTlBSRzpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImdvZXMgdG8gY29tcG1haW5wcmdcIik7XHJcbiAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0Q29tcE1haW5QcmdUYWIoKS5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FVkVOVFNfUVVFVUU6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIGV2ZW50c3F1ZXVlXCIpO1xyXG4gICAgICAgIHRoaXMuZmlsbEV2ZW50c1F1ZXVlKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1RBU0tVUkw6XHJcbiAgICAgICAgYXdhaXQgVGFzay5Qcm9jZXNzVGFza1VSTCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19UQUdfVEFTSzpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImdvZXMgdG8gdGFza1wiKTtcclxuICAgICAgICBsZXQgdGFza0NvdW50QmVmb3JlOiBudW1iZXIgPSB0aGlzLl9tcHJnVGFiLmdldFNpemUoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9tcHJnVGFiLmZpbGxEYXRhKHRoaXMsIG9wZW5pbmdUYXNrRGV0YWlscywgcGFyc2VyKTtcclxuICAgICAgICAvLyBRQ1IgIzc1OTkxMTogbXByZyBtdXN0IGJlbG9uZyB0byB0aGUgbWFpbiBhcHBsaWNhdGlvbidzIE1HRGF0YS5cclxuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgaXQgd2lsbCBub3QgYmUgZGlzY2FyZGVkIHVudGlsIHRoZSBlbmQgb2YgZXhlY3V0aW9uLlxyXG4gICAgICAgIC8vIFRoZXJlIGNvdWxkIGJlIG1vcmUgdGhlbiAxIG1wcmdzIHRoYXQgYXJlIGFkZGVkIChRY3IgIzE2ODU0OSlcclxuICAgICAgICBpZiAodGhpcy5faWQgIT09IDApIHtcclxuICAgICAgICAgIGxldCB0YXNrQ291bnRBZnRlcjogbnVtYmVyID0gdGhpcy5fbXByZ1RhYi5nZXRTaXplKCk7XHJcbiAgICAgICAgICBsZXQgbWdkMDogTUdEYXRhID0gQWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLmdldE1HRGF0YSgwKTtcclxuICAgICAgICAgIC8vIGNoZWNrIGFsbCB0aGUgbmV3IG1haW4gcHJncy5cclxuICAgICAgICAgIGZvciAobGV0IHRhc2tJbmRleDogbnVtYmVyID0gdGFza0NvdW50QmVmb3JlOyB0YXNrSW5kZXggPCB0YXNrQ291bnRBZnRlcjsgdGFza0luZGV4KyspIHtcclxuICAgICAgICAgICAgbGV0IG5ld1Rhc2s6IFRhc2sgPSA8VGFzaz50aGlzLl9tcHJnVGFiLmdldFRhc2sodGFza0luZGV4KTtcclxuICAgICAgICAgICAgaWYgKG5ld1Rhc2suaXNNYWluUHJvZygpICYmIG1nZDAuX21wcmdUYWIuZ2V0VGFzayhuZXdUYXNrLmdldFRhc2tUYWcoKSkgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIG1nZDAuX21wcmdUYWIuYWRkVGFzayhuZXdUYXNrKTtcclxuICAgICAgICAgICAgICBtZ2QwLmFkZFRhc2sobmV3VGFzayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VOVjpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImdvZXMgdG8gZW52aXJvbm1lbnRcIik7XHJcbiAgICAgICAgRW52aXJvbm1lbnQuSW5zdGFuY2UuZmlsbERhdGEocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRkxXTVRSX0NPTkZJRzpcclxuICAgICAgICBGbG93TW9uaXRvclF1ZXVlLkluc3RhbmNlLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX1RBR19YTUxfRU5EOlxyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19VU0VSX0RFVEFJTFM6XHJcbiAgICAgICAgVXNlckRldGFpbHMuSW5zdGFuY2UuZmlsbERhdGEocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RCSF9SRUFMX0lEWFM6XHJcbiAgICAgICAgLy8gV2ViY2xpZW50IFRPRE8gOiByZW1vdmUgc2VyaWFsaXphdGlvbiBvZiB0aGlzIGZyb20gc2VydmVyXHJcbiAgICAgICAgcGFyc2VyLlNraXBYTUxFbGVtZW50KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0dMT0JBTFBBUkFNU0NIQU5HRVM6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJhcHBseWluZyBnbG9iYWwgcGFyYW1zIGNoYW5nZXMgZnJvbSB0aGUgc2VydmVyIChTZXQvR2V0UGFyYW1zKVwiKTtcclxuICAgICAgICBHbG9iYWxQYXJhbXMuSW5zdGFuY2UuZmlsbERhdGEocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfR0xPQkFMUEFSQU1TOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwicHJvY2Vzc2luZyBiYXNlNjQgZW5jb2RlZCBpbWFnZSBvZiBhbGwgZ2xvYmFsIHBhcmFtcyBmcm9tIHRoZSBzZXJ2ZXJcIik7XHJcbiAgICAgICAgdGhpcy5maWxsR2xvYmFsUGFyYW1zKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VOVl9QQVJBTV9VUkw6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIGVudiBwYXJhbXMgbmFtZSBcIik7XHJcbiAgICAgICAgYXdhaXQgRW52aXJvbm1lbnQuSW5zdGFuY2UuZmlsbEZyb21VcmwoZm91bmRUYWdOYW1lLCBwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlZfUEFSQU06XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIGVudiBwYXJhbXMgbmFtZSBcIik7XHJcbiAgICAgICAgRW52UGFyYW1zVGFibGUuSW5zdGFuY2UuZmlsbERhdGEocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfQ09OVEVYVF9JRDoge1xyXG4gICAgICAgIGxldCBjdHhJZDogc3RyaW5nO1xyXG4gICAgICAgIGxldCBjdHhFbmRJZHg6IG51bWJlcjtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAgICAgY3R4RW5kSWR4ID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfT1BFTiwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgICAgICBjdHhJZCA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoY3R4RW5kSWR4KS50cmltKCk7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChjdHhFbmRJZHgpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgICBSdW50aW1lQ29udGV4dEJhc2UuSW5zdGFuY2UuQ29udGV4dElEID0gY3R4SWQ7XHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfU0VTU0lPTl9JRDpcclxuICAgICAgICAvLyBwYXJzZSBzZXNzaW9uIGlkIHJlY2VpdmVkIGluIDFzdCByZXNwb25zZSBmcm9tIHNlcnZlciBmb3Igb2ZmbGluZSBjbGllbnRcclxuICAgICAgICAvLyBhbmQgc2F2ZSBzZXNzaW9uaWQgb24gY2xpZW50LlxyXG4gICAgICAgIGxldCBzZXNzaW9uSWRFbmRJZHg6IG51bWJlcjtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAgICAgc2Vzc2lvbklkRW5kSWR4ID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfT1BFTiwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgICAgICBSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvci5HZXRJbnN0YW5jZSgpLlNlc3Npb25JZCA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoc2Vzc2lvbklkRW5kSWR4KS50cmltKCk7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChzZXNzaW9uSWRFbmRJZHgpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfSFRUUF9DT01NVU5JQ0FUSU9OX1RJTUVPVVQ6IHtcclxuICAgICAgICBsZXQgaHR0cENvbW11bmljYXRpb25UaW1lb3V0OiBudW1iZXI7IC8vIGNvbW11bmljYXRpb24tbGV2ZWwgdGltZW91dCAoaS5lLiB0aGUgYWNjZXNzIHRvIHRoZSB3ZWIgc2VydmVyLCBOT1QgdGhlIGVudGlyZSByZXF1ZXN0L3Jlc3BvbnNlIHJvdW5kLXRyaXApLCBpbiBzZWNvbmRzLlxyXG4gICAgICAgIGxldCBodHRwQ29tbXVuaWNhdGlvblRpbWVvdXRJZHg6IG51bWJlcjtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAgICAgaHR0cENvbW11bmljYXRpb25UaW1lb3V0SWR4ID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfT1BFTiwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgICAgICBodHRwQ29tbXVuaWNhdGlvblRpbWVvdXQgPSBOTnVtYmVyLlBhcnNlKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoaHR0cENvbW11bmljYXRpb25UaW1lb3V0SWR4KSk7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChodHRwQ29tbXVuaWNhdGlvblRpbWVvdXRJZHgpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgICBIdHRwTWFuYWdlci5HZXRJbnN0YW5jZSgpLkh0dHBDb21tdW5pY2F0aW9uVGltZW91dE1TID0gaHR0cENvbW11bmljYXRpb25UaW1lb3V0ICogMTAwMDtcclxuICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQVRBQkFTRV9VUkw6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RBVEFCQVNFU19IRUFERVI6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1RBU0tERUZJTklUSU9OX0lEU19VUkw6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RCSF9EQVRBX0lEU19VUkw6XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RCSFNfRU5EOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19PRkZMSU5FX1NOSVBQRVRTX1VSTDpcclxuICAgICAgICAvLyBUT0RPOiBzZXJ2ZXIgc2hvdWxkIG5vdCBzZXJpYWxpemUgdGhlc2UgZWxlbWVudHMuXHJcbiAgICAgICAgcGFyc2VyLlNraXBYTUxFbGVtZW50KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQkhTOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19TVEFSVFVQX1BST0dSQU06XHJcbiAgICAgICAgLy8gVE9ETzogc2VydmVyIHNob3VsZCBub3Qgc2VyaWFsaXplIHRoZXNlIGVsZW1lbnRzLlxyXG4gICAgICAgIHBhcnNlci5SZWFkQ29udGVudE9mQ3VycmVudEVsZW1lbnQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX1RBR19NRU5VU19PUEVOOlxyXG4gICAgICAgIC8vIFRPRE8gLSBub3QgdG8gc2VyaWFsaXplIFtTdG9yeSAxNTQ1NDddXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIG5hbWUgaW4gTUdEYXRhLCBhZGQgY2FzZSB0byBNR0RhdGEuaW5pdElubmVyT2JqZWN0cyBhbmQgY2FzZSB0byB3aGlsZSBvZiBNR0RhdGEuRmlsbERhdGEgIFwiICsgZm91bmRUYWdOYW1lKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBJbnNlcnQgUmVjb3JkcyBUYWJsZSB0byBEYXRhVmlldyBvZiB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBpZiB0aGUgdGFzayBvZiBkYXRhdmlldyBmb3VuZDwvcmV0dXJucz5cclxuICBwcml2YXRlIGFzeW5jIGluc2VydERhdGFWaWV3KHBhcnNlcjogWG1sUGFyc2VyKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IG51bGw7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfREFUQVZJRVcsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyBDb25zdEludGVyZmFjZS5NR19UQUdfREFUQVZJRVcubGVuZ3RoO1xyXG4gICAgbGV0IHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1MZGF0YSgpLnN1YnN0cihpbmRleCwgZW5kQ29udGV4dCAtIGluZGV4KSwgJ1wiJykvKidcIicqLztcclxuICAgIGxldCBpbnZhbGlkYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvLyBsb29rIGZvciB0aGUgdGFzayBpZFxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRva2Vuc1ZlY3Rvci5sZW5ndGg7IGkgPSBpICsgMikge1xyXG4gICAgICBsZXQgYXR0cmlidXRlOiBzdHJpbmcgPSB0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgIGlmIChhdHRyaWJ1dGUgPT09IFhNTENvbnN0YW50cy5NR19BVFRSX1RBU0tJRCkge1xyXG4gICAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gdG9rZW5zVmVjdG9yLmdldF9JdGVtKGkgKyAxKTtcclxuICAgICAgICBsZXQgdGFza0lkOiBzdHJpbmcgPSB2YWx1ZVN0cjtcclxuICAgICAgICB0YXNrID0gKHRoaXMuZ2V0VGFzayh0YXNrSWQpIHx8ICg8VGFzaz5BY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuR2V0VGFza0J5SUQodGFza0lkKSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhdHRyaWJ1dGUgPT09IENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSU5WQUxJREFURSkge1xyXG4gICAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gdG9rZW5zVmVjdG9yLmdldF9JdGVtKGkgKyAxKTtcclxuICAgICAgICBpbnZhbGlkYXRlID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuO1xyXG4gICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgLy8gYWRkIHRoZSByZWNvcmRzIGFuZCB1cGRhdGUgdGhlIGN1cnJlbnQgcmVjb3JkIGluIHRoZSBkYXRhdmlld1xyXG4gICAgICBhd2FpdCB0YXNrLmluc2VydFJlY29yZFRhYmxlKGludmFsaWRhdGUsIHBhcnNlcik7XHJcbiAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gZmFsc2U7IC8vIHRoZSB0YXNrIG5vdCBmb3VuZFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZGQgdGFzayB0byB0YXNrVGFiXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1Rhc2tcIj50byBiZSBhZGRlZDwvcGFyYW0+XHJcbiAgYWRkVGFzayhuZXdUYXNrOiBUYXNrKTogdm9pZCB7XHJcbiAgICB0aGlzLl90YXNrc1RhYi5hZGRUYXNrKG5ld1Rhc2spO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlbW92ZSBhIHRhc2sgZnJvbSB0aGUgdGFza3MgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPjwvcGFyYW0+XHJcbiAgcmVtb3ZlVGFzayh0YXNrOiBUYXNrKTogdm9pZCB7XHJcbiAgICB0aGlzLl90YXNrc1RhYi5yZW1vdmVUYXNrKHRhc2spO1xyXG4gICAgdGhpcy5fbXByZ1RhYi5yZW1vdmVUYXNrKHRhc2spO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG51bWJlciBvZiB0YXNrcyBpbiB0aGUgdGFza3MgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0VGFza3NDb3VudCgpOiBudW1iZXIge1xyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyO1xyXG4gICAgaWYgKHRoaXMuX3Rhc2tzVGFiICE9PSBudWxsKSB7XHJcbiAgICAgIHJlc3VsdCA9IHRoaXMuX3Rhc2tzVGFiLmdldFNpemUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXN1bHQgPSAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGdldFRhc2sodGFza0lkOiBzdHJpbmcpOiBUYXNrO1xyXG4gIGdldFRhc2soaWR4OiBudW1iZXIpOiBUYXNrO1xyXG4gIGdldFRhc2sodGFza0lkT3JJZHg6IGFueSk6IFRhc2sge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKHRhc2tJZE9ySWR4ID09PSBudWxsIHx8IHR5cGVvZiB0YXNrSWRPcklkeCA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0YXNrSWRPcklkeC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRUYXNrXzAodGFza0lkT3JJZHgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VGFza18xKHRhc2tJZE9ySWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGEgdGFzayBieSBpdHMgaWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza0lkXCI+dGFzayBJRDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBnZXRUYXNrXzAodGFza0lkOiBzdHJpbmcpOiBUYXNrIHtcclxuICAgIGxldCByZXN1bHQ6IFRhc2s7XHJcbiAgICBpZiAodGhpcy5fdGFza3NUYWIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuX3Rhc2tzVGFiICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIHJlc3VsdCA9IDxUYXNrPnRoaXMuX3Rhc2tzVGFiLmdldFRhc2sodGFza0lkKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXN1bHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGEgdGFzayBieSBpdHMgaW5kZXggaW4gdGhlIHRhc2tzIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPmluZGV4IG9mIHRoZSB0YXNrIGluIHRoZSB0YXNrcyB0YWJsZTwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBnZXRUYXNrXzEoaWR4OiBudW1iZXIpOiBUYXNrIHtcclxuICAgIHJldHVybiA8VGFzaz50aGlzLl90YXNrc1RhYi5nZXRUYXNrKGlkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYnVpbGQgWE1MIHN0cmluZyBvZiB0aGUgTUdEYXRhIG9iamVjdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWVzc2FnZVwiPmEgbWVzc2FnZSBiZWluZyBwcmVwYXJlZC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNlcmlhbGl6ZVRhc2tzXCI+aWYgdHJ1ZSwgdGFza3MgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIHdpbGwgYWxzbyBiZSBzZXJpYWxpemVkLjwvcGFyYW0+XHJcbiAgYXN5bmMgYnVpbGRYTUwobWVzc2FnZTogU3RyaW5nQnVpbGRlciwgc2VyaWFsaXplVGFza3M6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLkNtZHNUb1NlcnZlciAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLkNtZHNUb1NlcnZlci5idWlsZFhNTChtZXNzYWdlKTtcclxuICAgIH1cclxuICAgIGlmIChzZXJpYWxpemVUYXNrcyAmJiB0aGlzLl90YXNrc1RhYiAhPT0gbnVsbCkge1xyXG4gICAgICBhd2FpdCB0aGlzLl90YXNrc1RhYi5idWlsZFhNTChtZXNzYWdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGZpcnN0IHRhc2sgd2hpY2ggaXMgbm90IGEgbWFpbiBwcm9ncmFtIGluIHRoZSB0YXNrIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRGaXJzdFRhc2soKTogVGFzayB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IG51bGw7XHJcbiAgICBsZXQgTURJRnJhbWVUYXNrOiBUYXNrID0gbnVsbDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl90YXNrc1RhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICB0YXNrID0gPFRhc2s+dGhpcy5fdGFza3NUYWIuZ2V0VGFzayhpKTtcclxuICAgICAgaWYgKCF0YXNrLmlzTWFpblByb2coKSkge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0YXNrID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0YXNrID09PSBudWxsICYmIHRoaXMuX2lkID09PSAwKSB7XHJcbiAgICAgIHRhc2sgPSBNRElGcmFtZVRhc2s7IC8vIHJldHVybiBNREkgZnJhbWUgcHJvZ3JhbVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhc2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGEgbWFpbiBwcm9ncmFtIG9mIGEgY29tcG9uZW50IGJ5IGl0cyBjdGwgaWR4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0bElkeFwiPnRoZSBjdGwgaWR4PC9wYXJhbT5cclxuICBnZXRNYWluUHJvZyhjdGxJZHg6IG51bWJlcik6IFRhc2sge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX21wcmdUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2sgPSA8VGFzaz50aGlzLl9tcHJnVGFiLmdldFRhc2soaSk7XHJcbiAgICAgIGlmICh0YXNrLmdldEN0bElkeCgpID09PSBjdGxJZHggJiYgdGFzay5pc01haW5Qcm9nKCkpIHtcclxuICAgICAgICByZXR1cm4gdGFzaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbmV4dCBtYWluIHByb2dyYW0gaW4gdGhlIHNlYXJjaCBvcmRlciBBRlRFUiB0aGUgY3RsSWR4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0bElkeFwiPnRoZSBjdXJyZW50IGN0bCBpZHg8L3BhcmFtPlxyXG4gIGdldE5leHRNYWluUHJvZyhjdGxJZHg6IG51bWJlcik6IFRhc2sge1xyXG4gICAgbGV0IGNvbXBNYWluUHJnVGFiOiBDb21wTWFpblByZ1RhYmxlID0gQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0Q29tcE1haW5QcmdUYWIoKTtcclxuICAgIGxldCBjdXJyU2VhcmNoSW5kZXg6IG51bWJlciA9IGNvbXBNYWluUHJnVGFiLmdldEluZGV4T2YoY3RsSWR4KTtcclxuICAgIGxldCBuZXh0Q3RsSWR4OiBudW1iZXIgPSBjb21wTWFpblByZ1RhYi5nZXRDdGxJZHgoY3VyclNlYXJjaEluZGV4ICsgMSk7XHJcbiAgICBsZXQgcmVzdWx0OiBUYXNrO1xyXG4gICAgaWYgKG5leHRDdGxJZHggPT09IC0xKSB7XHJcbiAgICAgIHJlc3VsdCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gdGhpcy5nZXRNYWluUHJvZyhuZXh0Q3RsSWR4KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB3aGV0aGVyIGFueSBvZiB0aGUgdGFzayBoYXMgcGVuZGluZyBjbGllbnQgc2lkZSB0cmFuc2FjdGlvbiBjYWNoZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY2xpZW50VHJhbnNhY3Rpb25DYWNoZUV4aXN0cygpOiBib29sZWFuIHtcclxuICAgIGxldCB0YXNrOiBUYXNrO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3Rhc2tzVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIHRhc2sgPSA8VGFzaz50aGlzLl90YXNrc1RhYi5nZXRUYXNrKGkpO1xyXG4gICAgICBpZiAoIXRhc2suaXNNYWluUHJvZygpICYmICg8RGF0YVZpZXc+dGFzay5EYXRhVmlldykubW9kaWZpZWRSZWNvcmRzTnVtYmVyKCkgPiAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgd2hldGhlciBhbnkgb2YgdGhlIHRhc2sgaGFzIHBlbmRpbmcgc2VydmVyIHNpZGVcclxuICAvLy8gICB0cmFuc2FjdGlvbiBjYWNoZSB3aGljaCBpcyBub3QgeWV0IGNvbW1pdHRlZCB0byBEQlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2VydmVyVHJhbnNhY3Rpb25DYWNoZUV4aXN0cygpOiBib29sZWFuIHtcclxuICAgIGxldCB0YXNrOiBUYXNrO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3Rhc2tzVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIHRhc2sgPSA8VGFzaz50aGlzLl90YXNrc1RhYi5nZXRUYXNrKGkpO1xyXG4gICAgICBpZiAoIXRhc2suaXNNYWluUHJvZygpICYmICEoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLlNlcnZlclRyYW5zYWN0aW9uQ2FjaGVFbXB0eSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNlYXJjaCB0YXNrIHRoYXQgbWF0Y2hlcyBieSBUYXNrRGVmaW5pdGlvbklkLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0VGFza0J5VGFza0RlZmluaXRpb25JRCh0YXNrRGVmaW5pdGlvbklEOiBUYXNrRGVmaW5pdGlvbklkKTogVGFzayB7XHJcbiAgICBsZXQgdGFzazogVGFzaztcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl90YXNrc1RhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICB0YXNrID0gPFRhc2s+dGhpcy5fdGFza3NUYWIuZ2V0VGFzayhpKTtcclxuICAgICAgaWYgKHRhc2suVGFza0RlZmluaXRpb25JZC5FcXVhbHModGFza0RlZmluaXRpb25JRCkpIHtcclxuICAgICAgICByZXR1cm4gdGFzaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSB0aW1lciBldmVudCBoYW5kbGVyc1xyXG4gIGdldFRpbWVySGFuZGxlcnMoKTogSGFuZGxlcnNUYWJsZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZXJIYW5kbGVycztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZGQgYSB0aW1lciBldmVudCBoYW5kbGVyIHRvIHRoZSB0aW1lciBldmVudCBoYW5kbGVycyB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJoYW5kbGVyXCI+YSByZWZlcmVuY2UgdG8gYSB0aW1lciBldmVudCBoYW5kbGVyPC9wYXJhbT5cclxuICBhZGRUaW1lckhhbmRsZXIoaGFuZGxlcjogRXZlbnRIYW5kbGVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl90aW1lckhhbmRsZXJzLmFkZChoYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZW1vdmVzIHRpbWVyIGhhbmRsZXJzIGZvciB0aGUgc3BlY2lmaWMgdGFza1xyXG4gIC8vLyAgIGl0IGlzIG5lZWRlZCBmb3IgZGVzdGluYXRpb24gY2FsbCBmb3IgZXhpdCBmcm9tIHRoZSBwcmV2aW91cyBzdWJmb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICByZW1vdmVUaW1lckhhbmRsZXIodGFzazogVGFzayk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90aW1lckhhbmRsZXJzLmdldFNpemUoKTspIHtcclxuICAgICAgbGV0IHRpbWVyVGFzazogVGFzayA9IHRoaXMuX3RpbWVySGFuZGxlcnMuZ2V0SGFuZGxlcihpKS5nZXRUYXNrKCk7XHJcbiAgICAgIGlmICh0aW1lclRhc2suaXNEZXNjZW5kZW50T2YodGFzaykgJiYgdGltZXJUYXNrLmdldE1HRGF0YSgpID09PSB0aGlzKVxyXG4gICAgICAgIHRoaXMuX3RpbWVySGFuZGxlcnMucmVtb3ZlKGkpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaSsrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlbW92ZXMgZXhwcmVzc2lvbiBoYW5kbGVycyBmb3IgdGhlIHNwZWNpZmljIHRhc2tcclxuICAvLy8gICBpdCBpcyBuZWVkZWQgZm9yIGRlc3RpbmF0aW9uIGNhbGwgZm9yIGV4aXQgZnJvbSB0aGUgcHJldmlvdXMgc3ViZm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVtb3ZlRXhwcmVzc2lvbkhhbmRsZXIodGFzazogVGFzayk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9leHBIYW5kbGVycy5nZXRTaXplKCk7KSB7XHJcbiAgICAgIGxldCB0aW1lclRhc2s6IFRhc2sgPSB0aGlzLl9leHBIYW5kbGVycy5nZXRIYW5kbGVyKGkpLmdldFRhc2soKTtcclxuICAgICAgaWYgKHRpbWVyVGFzay5pc0Rlc2NlbmRlbnRPZih0YXNrKSAmJiB0aW1lclRhc2suZ2V0TUdEYXRhKCkgPT09IHRoaXMpXHJcbiAgICAgICAgdGhpcy5fZXhwSGFuZGxlcnMucmVtb3ZlKGkpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaSsrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgZXhwcmVzc2lvbiBldmVudCBoYW5kbGVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0RXhwSGFuZGxlcnMoKTogSGFuZGxlcnNUYWJsZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXhwSGFuZGxlcnM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWRkIGEgZXhwcmVzc2lvbiBldmVudCBoYW5kbGVyIHRvIHRoZSBleHByZXNzaW9uIGV2ZW50IGhhbmRsZXJzIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImhhbmRsZXJcIj5hIHJlZmVyZW5jZSB0byBhbiBleHByZXNzaW9uIGV2ZW50IGhhbmRsZXI8L3BhcmFtPlxyXG4gIGFkZEV4cEhhbmRsZXIoaGFuZGxlcjogRXZlbnRIYW5kbGVyLCBpZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fZXhwSGFuZGxlcnMuaW5zZXJ0QWZ0ZXIoaGFuZGxlciwgaWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzdG9wcyB0aW1lcnMgdGhhdCBhbHJlYWR5IG5vIG5lZWRlZCBhbmQgc3RhcnQgbmV3IHRpbWVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvbGRUaW1lcnNcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3VGltZXJzXCI+PC9wYXJhbT5cclxuICBjaGFuZ2VUaW1lcnMob2xkVGltZXJzOiBMaXN0PG51bWJlcj4sIG5ld1RpbWVyczogTGlzdDxudW1iZXI+KTogdm9pZCB7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMDtcclxuICAgIGxldCBqOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGd1aU1hbmFnZXI6IEdVSU1hbmFnZXIgPSBHVUlNYW5hZ2VyLkluc3RhbmNlO1xyXG4gICAgb2xkVGltZXJzLnNvcnQoKTtcclxuICAgIG5ld1RpbWVycy5zb3J0KCk7XHJcbiAgICB3aGlsZSAoaSA8IG9sZFRpbWVycy5sZW5ndGggJiYgaiA8IG5ld1RpbWVycy5sZW5ndGgpIHtcclxuICAgICAgaWYgKG9sZFRpbWVycy5nZXRfSXRlbShpKSA+IG5ld1RpbWVycy5nZXRfSXRlbShqKSkge1xyXG4gICAgICAgIGd1aU1hbmFnZXIuc3RhcnRUaW1lcih0aGlzLCBuZXdUaW1lcnMuZ2V0X0l0ZW0oaiksIGZhbHNlKTtcclxuICAgICAgICBqID0gaiArIDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKG9sZFRpbWVycy5nZXRfSXRlbShpKSA8IG5ld1RpbWVycy5nZXRfSXRlbShqKSkge1xyXG4gICAgICAgICAgZ3VpTWFuYWdlci5zdG9wVGltZXIodGhpcywgb2xkVGltZXJzLmdldF9JdGVtKGkpLCBmYWxzZSk7XHJcbiAgICAgICAgICBpID0gaSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaSA9IGkgKyAxO1xyXG4gICAgICAgICAgaiA9IGogKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2hpbGUgKGkgPCBvbGRUaW1lcnMubGVuZ3RoKSB7XHJcbiAgICAgIGd1aU1hbmFnZXIuc3RvcFRpbWVyKHRoaXMsIG9sZFRpbWVycy5nZXRfSXRlbShpKSwgZmFsc2UpO1xyXG4gICAgICBpID0gaSArIDE7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoaiA8IG5ld1RpbWVycy5sZW5ndGgpIHtcclxuICAgICAgZ3VpTWFuYWdlci5zdGFydFRpbWVyKHRoaXMsIG5ld1RpbWVycy5nZXRfSXRlbShqKSwgZmFsc2UpO1xyXG4gICAgICBqID0gaiArIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWRkIGRhdGEgZnJvbSA8ZXZlbnRzcXVldWU+IHRhZyB0byB0aGUgZXZlbnRzIHF1ZXVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGZpbGxFdmVudHNRdWV1ZShwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgd2hpbGUgKHRoaXMuaW5pdEV2ZW50cyhwYXJzZXIsIHBhcnNlci5nZXROZXh0VGFnKCkpKSB7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWRkIFJ1biBUaW1lIEV2ZW50cyB0byB0aGUgZXZlbnRzIHF1ZXVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvdW5kVGFnTmFtZVwiPnBvc3NpYmxlIHRhZyBuYW1lLCBuYW1lIG9mIG9iamVjdCwgd2hpY2ggbmVlZCBiZSBhbGxvY2F0ZWQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgaW5pdEV2ZW50cyhwYXJzZXI6IFhtbFBhcnNlciwgZm91bmRUYWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW47XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBudWxsKSB7XHJcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IENvbnN0SW50ZXJmYWNlLk1HX1RBR19FVkVOVCkge1xyXG4gICAgICAgIGxldCBldnQ6IFJ1blRpbWVFdmVudCA9IG5ldyBSdW5UaW1lRXZlbnQobnVsbCk7XHJcbiAgICAgICAgZXZ0LmZpbGxEYXRhKHBhcnNlciwgbnVsbCk7XHJcbiAgICAgICAgZXZ0LmNvbnZlcnRQYXJhbXNUb0FyZ3MoKTtcclxuICAgICAgICBldnQuc2V0VGFzayhudWxsKTtcclxuICAgICAgICBldnQuc2V0RnJvbVNlcnZlcigpO1xyXG4gICAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmFkZFRvVGFpbChldnQpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IENvbnN0SW50ZXJmYWNlLk1HX1RBR19FVkVOVFNfUVVFVUUpIHtcclxuICAgICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFwiPlwiLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGZvdW5kVGFnTmFtZSA9PT0gXCIvXCIgKyBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlRTX1FVRVVFKSB7XHJcbiAgICAgICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHRhZyBpbiBFdmVudHNRdWV1ZTogXCIgKyBmb3VuZFRhZ05hbWUpO1xyXG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgZm9yIHRoZSBtYWluIHdpbmRvd3MgTUdEYXRhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc01haW5XaW5kb3coKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50ID09PSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHBhcmVudCBNR0RkYXRhIG9mIHRoaXMgTUdEYXRhIChtaWdodCBiZSBudWxsKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0UGFyZW50TUdkYXRhKCk6IE1HRGF0YSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgYWJvcnRpbmcgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYWJvcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLklzQWJvcnRpbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBhbGwgY29tbWFuZHMgd2hpY2ggYXJlIG5vdCBhdHRhY2hlZCB0byBhbnkgd2luZG93IGludG8gdGhlIGN1cnJlbnQgd2luZG93XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb3B5VW5mcmFtZWRDbWRzKCk6IHZvaWQge1xyXG4gICAgbGV0IHVuZnJhbWVkQ21kczogTGlzdDxJQ2xpZW50Q29tbWFuZD4gPSBHbG9iYWxDb21tYW5kc01hbmFnZXIuSW5zdGFuY2UuZ2V0VW5mcmFtZWRDbWRzKCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdW5mcmFtZWRDbWRzLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIHRoaXMuQ21kc1RvQ2xpZW50LkFkZCh1bmZyYW1lZENtZHMuZ2V0X0l0ZW0oaSkpO1xyXG4gICAgfVxyXG4gICAgdW5mcmFtZWRDbWRzLlNldFNpemUoMCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBhbiBhbmNlc3RvciBvZiB0aGlzIE1HRGF0YSBvYmplY3Qgd2hpY2ggaXMgbm90IHBlbmRpbmcgdW5sb2FkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRWYWxpZEFuY2VzdG9yKCk6IE1HRGF0YSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Q3RsSWR4KCk6IG51bWJlciB7XHJcbiAgICBsZXQgcmM6IG51bWJlciA9IDA7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fdGFza3NUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2sgPSA8VGFzaz50aGlzLl90YXNrc1RhYi5nZXRUYXNrKGkpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJjID0gTWF0aC5tYXgocmMsIHRhc2suZ2V0Q3RsSWR4KCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHNhdmUgdGhlIGdsb2JhbCBwYXJhbXMgKG9uZSBiYXNlNjQgZW5jb2RlZCB2YWx1ZSkgdGhhdCB3YXMgcGFzc2VkIGZyb20gdGhlIHJ1bnRpbWUtZW5naW5lIHRvIHRoZSByaWNoLWNsaWVudDwvc3VtbWFyeT5cclxuICBmaWxsR2xvYmFsUGFyYW1zKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICBsZXQgWE1MZGF0YTogc3RyaW5nID0gcGFyc2VyLmdldFhNTGRhdGEoKTtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19URVJNLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG5cclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgWE1MZGF0YS5sZW5ndGgpIHtcclxuICAgICAgLy8gZmluZCBsYXN0IHBvc2l0aW9uIG9mIGl0cyB0YWdcclxuICAgICAgbGV0IHRhZzogc3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnLmluZGV4T2YoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0dMT0JBTFBBUkFNUykgKyBDb25zdEludGVyZmFjZS5NR19UQUdfR0xPQkFMUEFSQU1TLmxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKFJ1bnRpbWVDb250ZXh0QmFzZS5JbnN0YW5jZS5QYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG5cclxuICAgICAgRGVidWcuQXNzZXJ0KHRva2Vucy5nZXRfSXRlbSgwKSA9PT0gWE1MQ29uc3RhbnRzLk1HX0FUVFJfVkFMVUUpO1xyXG4gICAgICBTZXJ2ZXJDb25maWcuSW5zdGFuY2Uuc2V0R2xvYmFsUGFyYW1zKHRva2Vucy5nZXRfSXRlbSgxKSk7XHJcblxyXG4gICAgICBlbmRDb250ZXh0ID0gWE1MZGF0YS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfT1BFTiwgZW5kQ29udGV4dCk7XHJcbiAgICAgIGlmIChlbmRDb250ZXh0ID09PSAtMSlcclxuICAgICAgICBlbmRDb250ZXh0ID0gWE1MZGF0YS5sZW5ndGg7XHJcblxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
552
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUdEYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy90YXNrcy9NR0RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFeEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFeEQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBUSxPQUFPLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFDLGtCQUFrQixFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9CQUFvQixDQUFD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QUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFNUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNoRSxZQUFZLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFMUQsVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNoRSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBRTlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0hhbmRsZXJzVGFibGV9IGZyb20gXCIuLi9ydC9IYW5kbGVyc1RhYmxlXCI7XHJcbmltcG9ydCB7VGFza3NUYWJsZX0gZnJvbSBcIi4vVGFza3NUYWJsZVwiO1xyXG5pbXBvcnQge0lDb21tYW5kc1RhYmxlfSBmcm9tIFwiLi4vSUNvbW1hbmRzVGFibGVcIjtcclxuaW1wb3J0IHtDb21wTWFpblByZ1RhYmxlfSBmcm9tIFwiLi4vcnQvQ29tcE1haW5QcmdUYWJsZVwiO1xyXG5pbXBvcnQge01nRm9ybX0gZnJvbSBcIi4uL2d1aS9NZ0Zvcm1cIjtcclxuaW1wb3J0IHtUYXNrfSBmcm9tIFwiLi9UYXNrXCI7XHJcbmltcG9ydCB7T3BlbmluZ1Rhc2tEZXRhaWxzfSBmcm9tIFwiLi9UYXNrQmFzZVwiO1xyXG5pbXBvcnQge0xvZ2dlciwgWE1MQ29uc3RhbnRzLCBYbWxQYXJzZXJ9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7UmVjb21wdXRlVGFibGV9IGZyb20gXCIuLi9ydC9SZWNvbXB1dGVUYWJsZVwiO1xyXG5pbXBvcnQge0RlYnVnLCBMaXN0LCBOTnVtYmVyLCBTdHJpbmdCdWlsZGVyfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtSdW50aW1lQ29udGV4dEJhc2UsIFRhc2tEZWZpbml0aW9uSWR9IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge0V2ZW50SGFuZGxlcn0gZnJvbSBcIi4uL2V2ZW50L0V2ZW50SGFuZGxlclwiO1xyXG5pbXBvcnQge0dVSU1hbmFnZXJ9IGZyb20gXCIuLi9HVUlNYW5hZ2VyXCI7XHJcbmltcG9ydCB7SUNsaWVudENvbW1hbmR9IGZyb20gXCIuLi9jb21tYW5kcy9JQ2xpZW50Q29tbWFuZFwiO1xyXG5pbXBvcnQge0h0dHBNYW5hZ2VyfSBmcm9tIFwiLi4vaHR0cC9IdHRwTWFuYWdlclwiO1xyXG5pbXBvcnQge0Zsb3dNb25pdG9yUXVldWV9IGZyb20gXCIuLi91dGlsL0Zsb3dNb25pdG9yUXVldWVcIjtcclxuaW1wb3J0IHtSdW5UaW1lRXZlbnR9IGZyb20gXCIuLi9ldmVudC9SdW5UaW1lRXZlbnRcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7TGFuZ3VhZ2VEYXRhfSBmcm9tIFwiLi4vZW52L0xhbmd1YWdlRGF0YVwiO1xyXG5pbXBvcnQge0VudlBhcmFtc1RhYmxlfSBmcm9tIFwiLi4vZW52L0VudlZhcmlhYmxlc1RhYmxlXCI7XHJcbmltcG9ydCB7R2xvYmFsUGFyYW1zfSBmcm9tIFwiLi4vZXhwL0dsb2JhbFBhcmFtc1RhYmxlXCI7XHJcbmltcG9ydCB7RW52aXJvbm1lbnR9IGZyb20gXCIuLi9lbnYvRW52aXJvbm1lbnRcIjtcclxuaW1wb3J0IHtHbG9iYWxDb21tYW5kc01hbmFnZXJ9IGZyb20gXCIuLi9HbG9iYWxDb21tYW5kc01hbmFnZXJcIjtcclxuaW1wb3J0IHtTZXJ2ZXJDb25maWd9IGZyb20gXCIuLi9TZXJ2ZXJDb25maWdcIjtcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuaW1wb3J0IHtVc2VyRGV0YWlsc30gZnJvbSBcIi4uL3NlY3VyaXR5L1VzZXJEZXRhaWxzXCI7XHJcbmltcG9ydCB7UmVtb3RlQ29tbWFuZHNQcm9jZXNzb3J9IGZyb20gXCIuLi9yZW1vdGUvUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3JcIjtcclxuaW1wb3J0IHtEYXRhVmlld30gZnJvbSBcIi4uLy4uXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFJlcHJlc2VudHMgYWxsIGRldGFpbHMgcmVsZXZhbnQgdG8gYSBzcGVjaWZpYyB0YXNrIC0gcmVsYXRlZCB0YXNrcywgY29tbWFuZHMsIGhhbmRsZXJzLCBldGMuLlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgTUdEYXRhIHtcclxuICBwcml2YXRlIF9leHBIYW5kbGVyczogSGFuZGxlcnNUYWJsZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfcGFyZW50OiBNR0RhdGEgPSBudWxsO1xyXG4gIHByaXZhdGUgX21wcmdUYWI6IFRhc2tzVGFibGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX3Rhc2tzVGFiOiBUYXNrc1RhYmxlID0gbnVsbDtcclxuICBwcml2YXRlIF90aW1lckhhbmRsZXJzOiBIYW5kbGVyc1RhYmxlID0gbnVsbDtcclxuICBwcml2YXRlIF90aW1lcnNTdGFydGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBmb3JjZU1vZGFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQ21kc1RvQ2xpZW50OiBJQ29tbWFuZHNUYWJsZSA9IG51bGw7XHJcbiAgQ21kc1RvU2VydmVyOiBJQ29tbWFuZHNUYWJsZSA9IG51bGw7XHJcbiAgSXNNb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIElzQWJvcnRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IEZvcmNlTW9kYWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JjZU1vZGFsO1xyXG4gIH1cclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHRvQ2xpZW50OiBJQ29tbWFuZHNUYWJsZSwgdG9TZXJ2ZXI6IElDb21tYW5kc1RhYmxlLCBpZDogbnVtYmVyLCBwYXJlbnQ6IE1HRGF0YSwgaXNNb2RhbDogYm9vbGVhbik7XHJcbiAgY29uc3RydWN0b3IodG9DbGllbnQ6IElDb21tYW5kc1RhYmxlLCB0b1NlcnZlcjogSUNvbW1hbmRzVGFibGUsIGlkOiBudW1iZXIsIHBhcmVudDogTUdEYXRhLCBpc01vZGFsOiBib29sZWFuLCBmb3JjZU1vZGFsOiBib29sZWFuKTtcclxuICBjb25zdHJ1Y3Rvcih0b0NsaWVudDogSUNvbW1hbmRzVGFibGUsIHRvU2VydmVyOiBJQ29tbWFuZHNUYWJsZSwgaWQ6IG51bWJlciwgcGFyZW50OiBNR0RhdGEsIGlzTW9kYWw6IGJvb2xlYW4sIGZvcmNlTW9kYWw/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLkNtZHNUb1NlcnZlciA9IHRvQ2xpZW50O1xyXG4gICAgdGhpcy5DbWRzVG9DbGllbnQgPSB0b1NlcnZlcjtcclxuXHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKGlkLCBwYXJlbnQsIGlzTW9kYWwpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzEoaWQsIHBhcmVudCwgaXNNb2RhbCwgZm9yY2VNb2RhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZFwiPnRoZSBpZCBvZiB0aGlzIG1nZGF0YSBvYmplY3Q8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyZW50XCI+dGhlIHBhcmVudCBNR0RhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaXNNb2RhbFwiPnRydWUgZm9yIG1vZGFsIHdpbmRvd3M8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMChpZDogbnVtYmVyLCBwYXJlbnQ6IE1HRGF0YSwgaXNNb2RhbDogYm9vbGVhbik6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuX3RpbWVySGFuZGxlcnMgPSBuZXcgSGFuZGxlcnNUYWJsZSgpO1xyXG4gICAgdGhpcy5fZXhwSGFuZGxlcnMgPSBuZXcgSGFuZGxlcnNUYWJsZSgpO1xyXG4gICAgdGhpcy5fbXByZ1RhYiA9IG5ldyBUYXNrc1RhYmxlKCk7XHJcbiAgICB0aGlzLl90YXNrc1RhYiA9IG5ldyBUYXNrc1RhYmxlKCk7XHJcbiAgICB0aGlzLl9pZCA9IGlkO1xyXG4gICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xyXG4gICAgaWYgKEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldENvbXBNYWluUHJnVGFiKCkgPT09IG51bGwpIHtcclxuICAgICAgbGV0IGNvbXBNYWluUHJnVGFiOiBDb21wTWFpblByZ1RhYmxlID0gbmV3IENvbXBNYWluUHJnVGFibGUoKTtcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuc2V0Q29tcE1haW5QcmdUYWIoY29tcE1haW5QcmdUYWIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5Jc01vZGFsID0gaXNNb2RhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ1RPUiB0byBiZSB1c2VkIHdoZW4gcnVubmluZyBvZmZsaW5lIHRhc2tzIC0gaG9sZCB0aGUgY29tbWFuZCB0byBlbmFibGUgcmlnaHQgc2V0dGluZyBvZiBtb2RhbGl0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaWRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInBhcmVudFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNNb2RhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZm9yY2VNb2RhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKGlkOiBudW1iZXIsIHBhcmVudDogTUdEYXRhLCBpc01vZGFsOiBib29sZWFuLCBmb3JjZU1vZGFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzAoaWQsIHBhcmVudCwgaXNNb2RhbCk7XHJcbiAgICB0aGlzLmZvcmNlTW9kYWwgPSBmb3JjZU1vZGFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGlkIG9mIHRoaXMgTUdEYXRhIG9iamVjdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgR2V0SWQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBSZXR1cm5zIHRydWUgaWYgYWxyZWFkeSBtb3ZlZCB0byB0aGUgZmlyc3QgY29udHJvbCBvbiBvbmUgb2YgdGhlIE1nRGF0YVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgQWxyZWFkeU1vdmVkVG9GaXJzdENvbnRyb2woKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgYWxyZWFkeU1vdmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgdGFza3NDb3VudDogbnVtYmVyID0gdGhpcy5nZXRUYXNrc0NvdW50KCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGFza3NDb3VudDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBtZ0Zvcm06IE1nRm9ybSA9IDxNZ0Zvcm0+dGhpcy5nZXRUYXNrKGkpLmdldEZvcm0oKTtcclxuICAgICAgaWYgKG1nRm9ybSAhPT0gbnVsbCAmJiBtZ0Zvcm0uTW92ZWRUb0ZpcnN0Q29udHJvbCkge1xyXG4gICAgICAgIGFscmVhZHlNb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhbHJlYWR5TW92ZWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc3RhcnQgdGhlIHRpbWVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgU3RhcnRUaW1lcnMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdGltZXJIYW5kbGVycyAhPT0gbnVsbCAmJiAhdGhpcy5fdGltZXJzU3RhcnRlZCkge1xyXG4gICAgICB0aGlzLl90aW1lckhhbmRsZXJzLnN0YXJ0VGltZXJzKHRoaXMpO1xyXG4gICAgICB0aGlzLl90aW1lcnNTdGFydGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGdW5jdGlvbiBmb3IgZmlsbGluZyBvd24gZmllbGRzLCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlubmVyIG9iamVjdHMuIFBhcnNpbmcgdGhlIGlucHV0IFN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIGZpbGxEYXRhKG9wZW5pbmdUYXNrRGV0YWlsczogT3BlbmluZ1Rhc2tEZXRhaWxzLCBwYXJzZXI6IFhtbFBhcnNlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gVG8gYXZvaWQgdGhlIG5lZWQgdG8gc2VuZCBkYXRhIHRoYXQgc2V0cyBkZWZhdWx0IHZhbHVlcywgd2UnbGwgYXNzdW1lIHdlIHdhbnQgdGhlIGRlZmF1bHQgdmFsdWVzXHJcbiAgICAvLyB1bmxlc3MgZGlmZmVyZW50IGluZm8gd2FzIHNlbnQuIGkuZS4gaWYgdGhlIHJlbGV2YW50IHRhZ3MgYXJlIG5vdCBpbiB0aGUgWE1MLCBzZXQgdGhlIGRlZmF1bHQgdmFsdWVzLlxyXG4gICAgbGV0IGNhbkNvbnRpbnVlOiBib29sZWFuO1xyXG4gICAgZG8ge1xyXG4gICAgICBsZXQgbmV4dFRhZzogc3RyaW5nID0gcGFyc2VyLmdldE5leHRUYWcoKTtcclxuICAgICAgY2FuQ29udGludWUgPSBhd2FpdCB0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBuZXh0VGFnLCBvcGVuaW5nVGFza0RldGFpbHMpO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGNhbkNvbnRpbnVlKTtcclxuICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiTUdEYXRhLkZpbGxEYXRhKCk6IFRIRSBFTkQgb2YgdGhlIHBhcnNpbmcgXCIgKyBwYXJzZXIuZ2V0Q3VyckluZGV4KCkgKyBcIiBjaGFyYWN0ZXJzXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRvIGFsbG9jYXRlIGFuZCBmaWxsIGlubmVyIG9iamVjdHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvdW5kVGFnTmFtZVwiPnBvc3NpYmxlIHRhZyBuYW1lLCBuYW1lIG9mIG9iamVjdCwgd2hpY2ggbmVlZCBiZSBhbGxvY2F0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm9wZW5pbmdUYXNrRGV0YWlsc1wiPmFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2Ygb3BlbmluZyB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSwgdGhlIGZvdW5kIG9iamVjdCB0YWcgYW5kIEFMTCBpdHMgc3VidGFncyBmaW5pc2g8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhc3luYyBpbml0SW5uZXJPYmplY3RzKHBhcnNlcjogWG1sUGFyc2VyLCBmb3VuZFRhZ05hbWU6IHN0cmluZywgb3BlbmluZ1Rhc2tEZXRhaWxzOiBPcGVuaW5nVGFza0RldGFpbHMpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgc3dpdGNoIChmb3VuZFRhZ05hbWUpIHtcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX1hNTDpcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7IC8vIGRvXHJcbiAgICAgICAgLy8gbm90aGluZ1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQVRBVklFVzpcclxuICAgICAgICBpZiAoISBhd2FpdCB0aGlzLmluc2VydERhdGFWaWV3KHBhcnNlcikpIHtcclxuICAgICAgICAgIC8vIHRoZSB0YXNrIG9mIGluc2VydCBkYXRhIHZpZXcgbm90IGZvdW5kIC0+IHNldCBwYXJzZXJzIGNvdW50ZXIgdG8gdGhlXHJcbiAgICAgICAgICAvLyBlbmQgb2YgdGhlIGRhdGEgdmlld1xyXG4gICAgICAgICAgLy8gdGhlIGRhdGEgdmlldywgZ290IGZyb20gc2VydmVyIGFuZCB0aGVyZSBpcyBubyB0YXNrIHRvIHRoZSBkYXRhIHZpZXcgLCB5ZXQuXHJcbiAgICAgICAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKCcvJyArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQVRBVklFVyxcclxuICAgICAgICAgICAgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCk7XHJcbiAgICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT01QTEVURV9EVjoge1xyXG4gICAgICAgIGxldCB0YXNrOiBUYXNrID0gbnVsbDtcclxuICAgICAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTVBMRVRFX0RWLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTVBMRVRFX0RWLmxlbmd0aDtcclxuICAgICAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxkYXRhKCkuc3Vic3RyKGluZGV4LCBlbmRDb250ZXh0IC0gaW5kZXgpLCAnXCInKTtcclxuICAgICAgICBsZXQgYXR0cmlidXRlOiBzdHJpbmcgPSAodG9rZW5zVmVjdG9yLmdldF9JdGVtKDApKTtcclxuICAgICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZztcclxuICAgICAgICBpZiAoYXR0cmlidXRlID09PSBYTUxDb25zdGFudHMuTUdfQVRUUl9UQVNLSUQpIHtcclxuICAgICAgICAgIHZhbHVlU3RyID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbSgxKSk7XHJcbiAgICAgICAgICBsZXQgdGFza0lkOiBzdHJpbmcgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGlmICh0aGlzLmdldFRhc2sodGFza0lkKSA9PT0gbnVsbClcclxuICAgICAgICAgICAgdGFzayA9IDxUYXNrPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh0YXNrSWQpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0YXNrID0gdGhpcy5nZXRUYXNrKHRhc2tJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdGFydDogbnVtYmVyID0gZW5kQ29udGV4dCArIDE7XHJcbiAgICAgICAgZW5kQ29udGV4dCA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuRU5EX1RBRyArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT01QTEVURV9EVixcclxuICAgICAgICAgIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgbGV0IGRhdGFWaWV3Q29udGVudDogc3RyaW5nID0gcGFyc2VyLmdldFhNTGRhdGEoKS5zdWJzdHIoc3RhcnQsIGVuZENvbnRleHQgLSBzdGFydCk7XHJcbiAgICAgICAgdGFzay5kYXRhVmlld0NvbnRlbnQgPSBkYXRhVmlld0NvbnRlbnQ7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0KTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfQ09OVEVYVDoge1xyXG4gICAgICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19URVJNLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgICAgIGxldCB0YWc6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfQ09OVEVYVCkgKyBDb25zdEludGVyZmFjZS5NR19UQUdfQ09OVEVYVC5sZW5ndGgpO1xyXG4gICAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgWE1MQ29uc3RhbnRzLlRBR19URVJNLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX1RBR19SRUNPTVBVVEU6XHJcbiAgICAgICAgbGV0IHJlY29tcFRhYiA9IG5ldyBSZWNvbXB1dGVUYWJsZSgpO1xyXG4gICAgICAgIHJlY29tcFRhYi5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19DT01NQU5EOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBjb21tYW5kXCIpO1xyXG4gICAgICAgIHRoaXMuQ21kc1RvQ2xpZW50LmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0xBTkdVQUdFOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBsYW5ndWFnZSBkYXRhXCIpO1xyXG4gICAgICAgIGF3YWl0IExhbmd1YWdlRGF0YS5JbnN0YW5jZS5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19LQkRNQVBfVVJMOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBrZXlCb2FyZFwiKTtcclxuICAgICAgICBhd2FpdCBFbnZpcm9ubWVudC5JbnN0YW5jZS5maWxsRnJvbVVybChmb3VuZFRhZ05hbWUsIHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0tCRE1BUDpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfQ09NUE1BSU5QUkc6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIGNvbXBtYWlucHJnXCIpO1xyXG4gICAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldENvbXBNYWluUHJnVGFiKCkuZmlsbERhdGEocGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlRTX1FVRVVFOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBldmVudHNxdWV1ZVwiKTtcclxuICAgICAgICB0aGlzLmZpbGxFdmVudHNRdWV1ZShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19UQVNLVVJMOlxyXG4gICAgICAgIGF3YWl0IFRhc2suUHJvY2Vzc1Rhc2tVUkwoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX1RBU0s6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIHRhc2tcIik7XHJcbiAgICAgICAgbGV0IHRhc2tDb3VudEJlZm9yZTogbnVtYmVyID0gdGhpcy5fbXByZ1RhYi5nZXRTaXplKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbXByZ1RhYi5maWxsRGF0YSh0aGlzLCBvcGVuaW5nVGFza0RldGFpbHMsIHBhcnNlcik7XHJcbiAgICAgICAgLy8gUUNSICM3NTk5MTE6IG1wcmcgbXVzdCBiZWxvbmcgdG8gdGhlIG1haW4gYXBwbGljYXRpb24ncyBNR0RhdGEuXHJcbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIGl0IHdpbGwgbm90IGJlIGRpc2NhcmRlZCB1bnRpbCB0aGUgZW5kIG9mIGV4ZWN1dGlvbi5cclxuICAgICAgICAvLyBUaGVyZSBjb3VsZCBiZSBtb3JlIHRoZW4gMSBtcHJncyB0aGF0IGFyZSBhZGRlZCAoUWNyICMxNjg1NDkpXHJcbiAgICAgICAgaWYgKHRoaXMuX2lkICE9PSAwKSB7XHJcbiAgICAgICAgICBsZXQgdGFza0NvdW50QWZ0ZXI6IG51bWJlciA9IHRoaXMuX21wcmdUYWIuZ2V0U2l6ZSgpO1xyXG4gICAgICAgICAgbGV0IG1nZDA6IE1HRGF0YSA9IEFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5nZXRNR0RhdGEoMCk7XHJcbiAgICAgICAgICAvLyBjaGVjayBhbGwgdGhlIG5ldyBtYWluIHByZ3MuXHJcbiAgICAgICAgICBmb3IgKGxldCB0YXNrSW5kZXg6IG51bWJlciA9IHRhc2tDb3VudEJlZm9yZTsgdGFza0luZGV4IDwgdGFza0NvdW50QWZ0ZXI7IHRhc2tJbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdUYXNrOiBUYXNrID0gPFRhc2s+dGhpcy5fbXByZ1RhYi5nZXRUYXNrKHRhc2tJbmRleCk7XHJcbiAgICAgICAgICAgIGlmIChuZXdUYXNrLmlzTWFpblByb2coKSAmJiBtZ2QwLl9tcHJnVGFiLmdldFRhc2sobmV3VGFzay5nZXRUYXNrVGFnKCkpID09IG51bGwpIHtcclxuICAgICAgICAgICAgICBtZ2QwLl9tcHJnVGFiLmFkZFRhc2sobmV3VGFzayk7XHJcbiAgICAgICAgICAgICAgbWdkMC5hZGRUYXNrKG5ld1Rhc2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlY6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coXCJnb2VzIHRvIGVudmlyb25tZW50XCIpO1xyXG4gICAgICAgIEVudmlyb25tZW50Lkluc3RhbmNlLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0ZMV01UUl9DT05GSUc6XHJcbiAgICAgICAgRmxvd01vbml0b3JRdWV1ZS5JbnN0YW5jZS5maWxsRGF0YShwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19UQUdfWE1MX0VORDpcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVVNFUl9ERVRBSUxTOlxyXG4gICAgICAgIFVzZXJEZXRhaWxzLkluc3RhbmNlLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQkhfUkVBTF9JRFhTOlxyXG4gICAgICAgIC8vIFdlYmNsaWVudCBUT0RPIDogcmVtb3ZlIHNlcmlhbGl6YXRpb24gb2YgdGhpcyBmcm9tIHNlcnZlclxyXG4gICAgICAgIHBhcnNlci5Ta2lwWE1MRWxlbWVudCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19HTE9CQUxQQVJBTVNDSEFOR0VTOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiYXBwbHlpbmcgZ2xvYmFsIHBhcmFtcyBjaGFuZ2VzIGZyb20gdGhlIHNlcnZlciAoU2V0L0dldFBhcmFtcylcIik7XHJcbiAgICAgICAgR2xvYmFsUGFyYW1zLkluc3RhbmNlLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0dMT0JBTFBBUkFNUzpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcInByb2Nlc3NpbmcgYmFzZTY0IGVuY29kZWQgaW1hZ2Ugb2YgYWxsIGdsb2JhbCBwYXJhbXMgZnJvbSB0aGUgc2VydmVyXCIpO1xyXG4gICAgICAgIHRoaXMuZmlsbEdsb2JhbFBhcmFtcyhwYXJzZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlZfUEFSQU1fVVJMOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBlbnYgcGFyYW1zIG5hbWUgXCIpO1xyXG4gICAgICAgIGF3YWl0IEVudmlyb25tZW50Lkluc3RhbmNlLmZpbGxGcm9tVXJsKGZvdW5kVGFnTmFtZSwgcGFyc2VyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRU5WX1BBUkFNOlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiZ29lcyB0byBlbnYgcGFyYW1zIG5hbWUgXCIpO1xyXG4gICAgICAgIEVudlBhcmFtc1RhYmxlLkluc3RhbmNlLmZpbGxEYXRhKHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0NPTlRFWFRfSUQ6IHtcclxuICAgICAgICBsZXQgY3R4SWQ6IHN0cmluZztcclxuICAgICAgICBsZXQgY3R4RW5kSWR4OiBudW1iZXI7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIGN0eEVuZElkeCA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgY3R4SWQgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGN0eEVuZElkeCkudHJpbSgpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoY3R4RW5kSWR4KTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgUnVudGltZUNvbnRleHRCYXNlLkluc3RhbmNlLkNvbnRleHRJRCA9IGN0eElkO1xyXG4gICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX1NFU1NJT05fSUQ6XHJcbiAgICAgICAgLy8gcGFyc2Ugc2Vzc2lvbiBpZCByZWNlaXZlZCBpbiAxc3QgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgZm9yIG9mZmxpbmUgY2xpZW50XHJcbiAgICAgICAgLy8gYW5kIHNhdmUgc2Vzc2lvbmlkIG9uIGNsaWVudC5cclxuICAgICAgICBsZXQgc2Vzc2lvbklkRW5kSWR4OiBudW1iZXI7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIHNlc3Npb25JZEVuZElkeCA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgUmVtb3RlQ29tbWFuZHNQcm9jZXNzb3IuR2V0SW5zdGFuY2UoKS5TZXNzaW9uSWQgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKHNlc3Npb25JZEVuZElkeCkudHJpbSgpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoc2Vzc2lvbklkRW5kSWR4KTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0hUVFBfQ09NTVVOSUNBVElPTl9USU1FT1VUOiB7XHJcbiAgICAgICAgbGV0IGh0dHBDb21tdW5pY2F0aW9uVGltZW91dDogbnVtYmVyOyAvLyBjb21tdW5pY2F0aW9uLWxldmVsIHRpbWVvdXQgKGkuZS4gdGhlIGFjY2VzcyB0byB0aGUgd2ViIHNlcnZlciwgTk9UIHRoZSBlbnRpcmUgcmVxdWVzdC9yZXNwb25zZSByb3VuZC10cmlwKSwgaW4gc2Vjb25kcy5cclxuICAgICAgICBsZXQgaHR0cENvbW11bmljYXRpb25UaW1lb3V0SWR4OiBudW1iZXI7XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIGh0dHBDb21tdW5pY2F0aW9uVGltZW91dElkeCA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgICAgaHR0cENvbW11bmljYXRpb25UaW1lb3V0ID0gTk51bWJlci5QYXJzZShwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGh0dHBDb21tdW5pY2F0aW9uVGltZW91dElkeCkpO1xyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoaHR0cENvbW11bmljYXRpb25UaW1lb3V0SWR4KTtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgSHR0cE1hbmFnZXIuR2V0SW5zdGFuY2UoKS5IdHRwQ29tbXVuaWNhdGlvblRpbWVvdXRNUyA9IGh0dHBDb21tdW5pY2F0aW9uVGltZW91dCAqIDEwMDA7XHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfREFUQUJBU0VfVVJMOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQVRBQkFTRVNfSEVBREVSOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19UQVNLREVGSU5JVElPTl9JRFNfVVJMOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQkhfREFUQV9JRFNfVVJMOlxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19EQkhTX0VORDpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfT0ZGTElORV9TTklQUEVUU19VUkw6XHJcbiAgICAgICAgLy8gVE9ETzogc2VydmVyIHNob3VsZCBub3Qgc2VyaWFsaXplIHRoZXNlIGVsZW1lbnRzLlxyXG4gICAgICAgIHBhcnNlci5Ta2lwWE1MRWxlbWVudCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfREJIUzpcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfU1RBUlRVUF9QUk9HUkFNOlxyXG4gICAgICAgIC8vIFRPRE86IHNlcnZlciBzaG91bGQgbm90IHNlcmlhbGl6ZSB0aGVzZSBlbGVtZW50cy5cclxuICAgICAgICBwYXJzZXIuUmVhZENvbnRlbnRPZkN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19UQUdfTUVOVVNfT1BFTjpcclxuICAgICAgICAvLyBUT0RPIC0gbm90IHRvIHNlcmlhbGl6ZSBbU3RvcnkgMTU0NTQ3XVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHRhZyBuYW1lIGluIE1HRGF0YSwgYWRkIGNhc2UgdG8gTUdEYXRhLmluaXRJbm5lck9iamVjdHMgYW5kIGNhc2UgdG8gd2hpbGUgb2YgTUdEYXRhLkZpbGxEYXRhICBcIiArIGZvdW5kVGFnTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSW5zZXJ0IFJlY29yZHMgVGFibGUgdG8gRGF0YVZpZXcgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gaWYgdGhlIHRhc2sgb2YgZGF0YXZpZXcgZm91bmQ8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhc3luYyBpbnNlcnREYXRhVmlldyhwYXJzZXI6IFhtbFBhcnNlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSBudWxsO1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgbGV0IGluZGV4OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RBVEFWSUVXLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0RBVEFWSUVXLmxlbmd0aDtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTGRhdGEoKS5zdWJzdHIoaW5kZXgsIGVuZENvbnRleHQgLSBpbmRleCksICdcIicpLyonXCInKi87XHJcbiAgICBsZXQgaW52YWxpZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLy8gbG9vayBmb3IgdGhlIHRhc2sgaWRcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBpID0gaSArIDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gdG9rZW5zVmVjdG9yLmdldF9JdGVtKGkpO1xyXG4gICAgICBpZiAoYXR0cmlidXRlID09PSBYTUxDb25zdGFudHMuTUdfQVRUUl9UQVNLSUQpIHtcclxuICAgICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZyA9IHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShpICsgMSk7XHJcbiAgICAgICAgbGV0IHRhc2tJZDogc3RyaW5nID0gdmFsdWVTdHI7XHJcbiAgICAgICAgdGFzayA9ICh0aGlzLmdldFRhc2sodGFza0lkKSB8fCAoPFRhc2s+QWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLkdldFRhc2tCeUlEKHRhc2tJZCkpKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXR0cmlidXRlID09PSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lOVkFMSURBVEUpIHtcclxuICAgICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZyA9IHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShpICsgMSk7XHJcbiAgICAgICAgaW52YWxpZGF0ZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbjtcclxuICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgIC8vIGFkZCB0aGUgcmVjb3JkcyBhbmQgdXBkYXRlIHRoZSBjdXJyZW50IHJlY29yZCBpbiB0aGUgZGF0YXZpZXdcclxuICAgICAgYXdhaXQgdGFzay5pbnNlcnRSZWNvcmRUYWJsZShpbnZhbGlkYXRlLCBwYXJzZXIpO1xyXG4gICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IGZhbHNlOyAvLyB0aGUgdGFzayBub3QgZm91bmRcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWRkIHRhc2sgdG8gdGFza1RhYlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdUYXNrXCI+dG8gYmUgYWRkZWQ8L3BhcmFtPlxyXG4gIGFkZFRhc2sobmV3VGFzazogVGFzayk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGFza3NUYWIuYWRkVGFzayhuZXdUYXNrKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZW1vdmUgYSB0YXNrIGZyb20gdGhlIHRhc2tzIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj48L3BhcmFtPlxyXG4gIHJlbW92ZVRhc2sodGFzazogVGFzayk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGFza3NUYWIucmVtb3ZlVGFzayh0YXNrKTtcclxuICAgIHRoaXMuX21wcmdUYWIucmVtb3ZlVGFzayh0YXNrKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGFza3MgaW4gdGhlIHRhc2tzIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFRhc2tzQ291bnQoKTogbnVtYmVyIHtcclxuICAgIGxldCByZXN1bHQ6IG51bWJlcjtcclxuICAgIGlmICh0aGlzLl90YXNrc1RhYiAhPT0gbnVsbCkge1xyXG4gICAgICByZXN1bHQgPSB0aGlzLl90YXNrc1RhYi5nZXRTaXplKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gMDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRUYXNrKHRhc2tJZDogc3RyaW5nKTogVGFzaztcclxuICBnZXRUYXNrKGlkeDogbnVtYmVyKTogVGFzaztcclxuICBnZXRUYXNrKHRhc2tJZE9ySWR4OiBhbnkpOiBUYXNrIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmICh0YXNrSWRPcklkeCA9PT0gbnVsbCB8fCB0eXBlb2YgdGFza0lkT3JJZHggPT09IFwidW5kZWZpbmVkXCIgfHwgdGFza0lkT3JJZHguY29uc3RydWN0b3IgPT09IFN0cmluZykpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFza18wKHRhc2tJZE9ySWR4KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmdldFRhc2tfMSh0YXNrSWRPcklkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBhIHRhc2sgYnkgaXRzIGlkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tJZFwiPnRhc2sgSUQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgZ2V0VGFza18wKHRhc2tJZDogc3RyaW5nKTogVGFzayB7XHJcbiAgICBsZXQgcmVzdWx0OiBUYXNrO1xyXG4gICAgaWYgKHRoaXMuX3Rhc2tzVGFiICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLl90YXNrc1RhYiAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICByZXN1bHQgPSA8VGFzaz50aGlzLl90YXNrc1RhYi5nZXRUYXNrKHRhc2tJZCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBhIHRhc2sgYnkgaXRzIGluZGV4IGluIHRoZSB0YXNrcyB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZHhcIj5pbmRleCBvZiB0aGUgdGFzayBpbiB0aGUgdGFza3MgdGFibGU8L3BhcmFtPlxyXG4gIHByaXZhdGUgZ2V0VGFza18xKGlkeDogbnVtYmVyKTogVGFzayB7XHJcbiAgICByZXR1cm4gPFRhc2s+dGhpcy5fdGFza3NUYWIuZ2V0VGFzayhpZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGJ1aWxkIFhNTCBzdHJpbmcgb2YgdGhlIE1HRGF0YSBvYmplY3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1lc3NhZ2VcIj5hIG1lc3NhZ2UgYmVpbmcgcHJlcGFyZWQuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzZXJpYWxpemVUYXNrc1wiPmlmIHRydWUsIHRhc2tzIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiB3aWxsIGFsc28gYmUgc2VyaWFsaXplZC48L3BhcmFtPlxyXG4gIGFzeW5jIGJ1aWxkWE1MKG1lc3NhZ2U6IFN0cmluZ0J1aWxkZXIsIHNlcmlhbGl6ZVRhc2tzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5DbWRzVG9TZXJ2ZXIgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5DbWRzVG9TZXJ2ZXIuYnVpbGRYTUwobWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2VyaWFsaXplVGFza3MgJiYgdGhpcy5fdGFza3NUYWIgIT09IG51bGwpIHtcclxuICAgICAgYXdhaXQgdGhpcy5fdGFza3NUYWIuYnVpbGRYTUwobWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBmaXJzdCB0YXNrIHdoaWNoIGlzIG5vdCBhIG1haW4gcHJvZ3JhbSBpbiB0aGUgdGFzayB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Rmlyc3RUYXNrKCk6IFRhc2sge1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSBudWxsO1xyXG4gICAgbGV0IE1ESUZyYW1lVGFzazogVGFzayA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fdGFza3NUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgdGFzayA9IDxUYXNrPnRoaXMuX3Rhc2tzVGFiLmdldFRhc2soaSk7XHJcbiAgICAgIGlmICghdGFzay5pc01haW5Qcm9nKCkpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgdGFzayA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGFzayA9PT0gbnVsbCAmJiB0aGlzLl9pZCA9PT0gMCkge1xyXG4gICAgICB0YXNrID0gTURJRnJhbWVUYXNrOyAvLyByZXR1cm4gTURJIGZyYW1lIHByb2dyYW1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhIG1haW4gcHJvZ3JhbSBvZiBhIGNvbXBvbmVudCBieSBpdHMgY3RsIGlkeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdGxJZHhcIj50aGUgY3RsIGlkeDwvcGFyYW0+XHJcbiAgZ2V0TWFpblByb2coY3RsSWR4OiBudW1iZXIpOiBUYXNrIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9tcHJnVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrID0gPFRhc2s+dGhpcy5fbXByZ1RhYi5nZXRUYXNrKGkpO1xyXG4gICAgICBpZiAodGFzay5nZXRDdGxJZHgoKSA9PT0gY3RsSWR4ICYmIHRhc2suaXNNYWluUHJvZygpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhc2s7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG5leHQgbWFpbiBwcm9ncmFtIGluIHRoZSBzZWFyY2ggb3JkZXIgQUZURVIgdGhlIGN0bElkeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdGxJZHhcIj50aGUgY3VycmVudCBjdGwgaWR4PC9wYXJhbT5cclxuICBnZXROZXh0TWFpblByb2coY3RsSWR4OiBudW1iZXIpOiBUYXNrIHtcclxuICAgIGxldCBjb21wTWFpblByZ1RhYjogQ29tcE1haW5QcmdUYWJsZSA9IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldENvbXBNYWluUHJnVGFiKCk7XHJcbiAgICBsZXQgY3VyclNlYXJjaEluZGV4OiBudW1iZXIgPSBjb21wTWFpblByZ1RhYi5nZXRJbmRleE9mKGN0bElkeCk7XHJcbiAgICBsZXQgbmV4dEN0bElkeDogbnVtYmVyID0gY29tcE1haW5QcmdUYWIuZ2V0Q3RsSWR4KGN1cnJTZWFyY2hJbmRleCArIDEpO1xyXG4gICAgbGV0IHJlc3VsdDogVGFzaztcclxuICAgIGlmIChuZXh0Q3RsSWR4ID09PSAtMSkge1xyXG4gICAgICByZXN1bHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IHRoaXMuZ2V0TWFpblByb2cobmV4dEN0bElkeCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgd2hldGhlciBhbnkgb2YgdGhlIHRhc2sgaGFzIHBlbmRpbmcgY2xpZW50IHNpZGUgdHJhbnNhY3Rpb24gY2FjaGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNsaWVudFRyYW5zYWN0aW9uQ2FjaGVFeGlzdHMoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdGFzazogVGFzaztcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl90YXNrc1RhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICB0YXNrID0gPFRhc2s+dGhpcy5fdGFza3NUYWIuZ2V0VGFzayhpKTtcclxuICAgICAgaWYgKCF0YXNrLmlzTWFpblByb2coKSAmJiAoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLm1vZGlmaWVkUmVjb3Jkc051bWJlcigpID4gMCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHdoZXRoZXIgYW55IG9mIHRoZSB0YXNrIGhhcyBwZW5kaW5nIHNlcnZlciBzaWRlXHJcbiAgLy8vICAgdHJhbnNhY3Rpb24gY2FjaGUgd2hpY2ggaXMgbm90IHlldCBjb21taXR0ZWQgdG8gREJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNlcnZlclRyYW5zYWN0aW9uQ2FjaGVFeGlzdHMoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdGFzazogVGFzaztcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl90YXNrc1RhYi5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICB0YXNrID0gPFRhc2s+dGhpcy5fdGFza3NUYWIuZ2V0VGFzayhpKTtcclxuICAgICAgaWYgKCF0YXNrLmlzTWFpblByb2coKSAmJiAhKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3KS5TZXJ2ZXJUcmFuc2FjdGlvbkNhY2hlRW1wdHkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZWFyY2ggdGFzayB0aGF0IG1hdGNoZXMgYnkgVGFza0RlZmluaXRpb25JZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFRhc2tCeVRhc2tEZWZpbml0aW9uSUQodGFza0RlZmluaXRpb25JRDogVGFza0RlZmluaXRpb25JZCk6IFRhc2sge1xyXG4gICAgbGV0IHRhc2s6IFRhc2s7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fdGFza3NUYWIuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgdGFzayA9IDxUYXNrPnRoaXMuX3Rhc2tzVGFiLmdldFRhc2soaSk7XHJcbiAgICAgIGlmICh0YXNrLlRhc2tEZWZpbml0aW9uSWQuRXF1YWxzKHRhc2tEZWZpbml0aW9uSUQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhc2s7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgdGltZXIgZXZlbnQgaGFuZGxlcnNcclxuICBnZXRUaW1lckhhbmRsZXJzKCk6IEhhbmRsZXJzVGFibGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVySGFuZGxlcnM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWRkIGEgdGltZXIgZXZlbnQgaGFuZGxlciB0byB0aGUgdGltZXIgZXZlbnQgaGFuZGxlcnMgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaGFuZGxlclwiPmEgcmVmZXJlbmNlIHRvIGEgdGltZXIgZXZlbnQgaGFuZGxlcjwvcGFyYW0+XHJcbiAgYWRkVGltZXJIYW5kbGVyKGhhbmRsZXI6IEV2ZW50SGFuZGxlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fdGltZXJIYW5kbGVycy5hZGQoaGFuZGxlcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmVtb3ZlcyB0aW1lciBoYW5kbGVycyBmb3IgdGhlIHNwZWNpZmljIHRhc2tcclxuICAvLy8gICBpdCBpcyBuZWVkZWQgZm9yIGRlc3RpbmF0aW9uIGNhbGwgZm9yIGV4aXQgZnJvbSB0aGUgcHJldmlvdXMgc3ViZm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVtb3ZlVGltZXJIYW5kbGVyKHRhc2s6IFRhc2spOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdGltZXJIYW5kbGVycy5nZXRTaXplKCk7KSB7XHJcbiAgICAgIGxldCB0aW1lclRhc2s6IFRhc2sgPSB0aGlzLl90aW1lckhhbmRsZXJzLmdldEhhbmRsZXIoaSkuZ2V0VGFzaygpO1xyXG4gICAgICBpZiAodGltZXJUYXNrLmlzRGVzY2VuZGVudE9mKHRhc2spICYmIHRpbWVyVGFzay5nZXRNR0RhdGEoKSA9PT0gdGhpcylcclxuICAgICAgICB0aGlzLl90aW1lckhhbmRsZXJzLnJlbW92ZShpKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGkrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZW1vdmVzIGV4cHJlc3Npb24gaGFuZGxlcnMgZm9yIHRoZSBzcGVjaWZpYyB0YXNrXHJcbiAgLy8vICAgaXQgaXMgbmVlZGVkIGZvciBkZXN0aW5hdGlvbiBjYWxsIGZvciBleGl0IGZyb20gdGhlIHByZXZpb3VzIHN1YmZvcm1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlbW92ZUV4cHJlc3Npb25IYW5kbGVyKHRhc2s6IFRhc2spOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZXhwSGFuZGxlcnMuZ2V0U2l6ZSgpOykge1xyXG4gICAgICBsZXQgdGltZXJUYXNrOiBUYXNrID0gdGhpcy5fZXhwSGFuZGxlcnMuZ2V0SGFuZGxlcihpKS5nZXRUYXNrKCk7XHJcbiAgICAgIGlmICh0aW1lclRhc2suaXNEZXNjZW5kZW50T2YodGFzaykgJiYgdGltZXJUYXNrLmdldE1HRGF0YSgpID09PSB0aGlzKVxyXG4gICAgICAgIHRoaXMuX2V4cEhhbmRsZXJzLnJlbW92ZShpKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGkrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGV4cHJlc3Npb24gZXZlbnQgaGFuZGxlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEV4cEhhbmRsZXJzKCk6IEhhbmRsZXJzVGFibGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V4cEhhbmRsZXJzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBhIGV4cHJlc3Npb24gZXZlbnQgaGFuZGxlciB0byB0aGUgZXhwcmVzc2lvbiBldmVudCBoYW5kbGVycyB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJoYW5kbGVyXCI+YSByZWZlcmVuY2UgdG8gYW4gZXhwcmVzc2lvbiBldmVudCBoYW5kbGVyPC9wYXJhbT5cclxuICBhZGRFeHBIYW5kbGVyKGhhbmRsZXI6IEV2ZW50SGFuZGxlciwgaWR4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2V4cEhhbmRsZXJzLmluc2VydEFmdGVyKGhhbmRsZXIsIGlkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc3RvcHMgdGltZXJzIHRoYXQgYWxyZWFkeSBubyBuZWVkZWQgYW5kIHN0YXJ0IG5ldyB0aW1lcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib2xkVGltZXJzXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1RpbWVyc1wiPjwvcGFyYW0+XHJcbiAgY2hhbmdlVGltZXJzKG9sZFRpbWVyczogTGlzdDxudW1iZXI+LCBuZXdUaW1lcnM6IExpc3Q8bnVtYmVyPik6IHZvaWQge1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgajogbnVtYmVyID0gMDtcclxuICAgIGxldCBndWlNYW5hZ2VyOiBHVUlNYW5hZ2VyID0gR1VJTWFuYWdlci5JbnN0YW5jZTtcclxuICAgIG9sZFRpbWVycy5zb3J0KCk7XHJcbiAgICBuZXdUaW1lcnMuc29ydCgpO1xyXG4gICAgd2hpbGUgKGkgPCBvbGRUaW1lcnMubGVuZ3RoICYmIGogPCBuZXdUaW1lcnMubGVuZ3RoKSB7XHJcbiAgICAgIGlmIChvbGRUaW1lcnMuZ2V0X0l0ZW0oaSkgPiBuZXdUaW1lcnMuZ2V0X0l0ZW0oaikpIHtcclxuICAgICAgICBndWlNYW5hZ2VyLnN0YXJ0VGltZXIodGhpcywgbmV3VGltZXJzLmdldF9JdGVtKGopLCBmYWxzZSk7XHJcbiAgICAgICAgaiA9IGogKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChvbGRUaW1lcnMuZ2V0X0l0ZW0oaSkgPCBuZXdUaW1lcnMuZ2V0X0l0ZW0oaikpIHtcclxuICAgICAgICAgIGd1aU1hbmFnZXIuc3RvcFRpbWVyKHRoaXMsIG9sZFRpbWVycy5nZXRfSXRlbShpKSwgZmFsc2UpO1xyXG4gICAgICAgICAgaSA9IGkgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgICAgIGogPSBqICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHdoaWxlIChpIDwgb2xkVGltZXJzLmxlbmd0aCkge1xyXG4gICAgICBndWlNYW5hZ2VyLnN0b3BUaW1lcih0aGlzLCBvbGRUaW1lcnMuZ2V0X0l0ZW0oaSksIGZhbHNlKTtcclxuICAgICAgaSA9IGkgKyAxO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKGogPCBuZXdUaW1lcnMubGVuZ3RoKSB7XHJcbiAgICAgIGd1aU1hbmFnZXIuc3RhcnRUaW1lcih0aGlzLCBuZXdUaW1lcnMuZ2V0X0l0ZW0oaiksIGZhbHNlKTtcclxuICAgICAgaiA9IGogKyAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBkYXRhIGZyb20gPGV2ZW50c3F1ZXVlPiB0YWcgdG8gdGhlIGV2ZW50cyBxdWV1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBmaWxsRXZlbnRzUXVldWUocGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIHdoaWxlICh0aGlzLmluaXRFdmVudHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBSdW4gVGltZSBFdmVudHMgdG8gdGhlIGV2ZW50cyBxdWV1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmb3VuZFRhZ05hbWVcIj5wb3NzaWJsZSB0YWcgbmFtZSwgbmFtZSBvZiBvYmplY3QsIHdoaWNoIG5lZWQgYmUgYWxsb2NhdGVkPC9wYXJhbT5cclxuICBwcml2YXRlIGluaXRFdmVudHMocGFyc2VyOiBYbWxQYXJzZXIsIGZvdW5kVGFnTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuO1xyXG4gICAgaWYgKGZvdW5kVGFnTmFtZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZm91bmRUYWdOYW1lID09PSBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlQpIHtcclxuICAgICAgICBsZXQgZXZ0OiBSdW5UaW1lRXZlbnQgPSBuZXcgUnVuVGltZUV2ZW50KG51bGwpO1xyXG4gICAgICAgIGV2dC5maWxsRGF0YShwYXJzZXIsIG51bGwpO1xyXG4gICAgICAgIGV2dC5jb252ZXJ0UGFyYW1zVG9BcmdzKCk7XHJcbiAgICAgICAgZXZ0LnNldFRhc2sobnVsbCk7XHJcbiAgICAgICAgZXZ0LnNldEZyb21TZXJ2ZXIoKTtcclxuICAgICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5hZGRUb1RhaWwoZXZ0KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZm91bmRUYWdOYW1lID09PSBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlRTX1FVRVVFKSB7XHJcbiAgICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihcIj5cIiwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IFwiL1wiICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5UU19RVUVVRSkge1xyXG4gICAgICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiVGhlcmUgaXMgbm8gc3VjaCB0YWcgaW4gRXZlbnRzUXVldWU6IFwiICsgZm91bmRUYWdOYW1lKTtcclxuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGZvciB0aGUgbWFpbiB3aW5kb3dzIE1HRGF0YVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNNYWluV2luZG93KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudCA9PT0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBwYXJlbnQgTUdEZGF0YSBvZiB0aGlzIE1HRGF0YSAobWlnaHQgYmUgbnVsbClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFBhcmVudE1HZGF0YSgpOiBNR0RhdGEge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGFib3J0aW5nIGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFib3J0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5Jc0Fib3J0aW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZGQgYWxsIGNvbW1hbmRzIHdoaWNoIGFyZSBub3QgYXR0YWNoZWQgdG8gYW55IHdpbmRvdyBpbnRvIHRoZSBjdXJyZW50IHdpbmRvd1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29weVVuZnJhbWVkQ21kcygpOiB2b2lkIHtcclxuICAgIGxldCB1bmZyYW1lZENtZHM6IExpc3Q8SUNsaWVudENvbW1hbmQ+ID0gR2xvYmFsQ29tbWFuZHNNYW5hZ2VyLkluc3RhbmNlLmdldFVuZnJhbWVkQ21kcygpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHVuZnJhbWVkQ21kcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICB0aGlzLkNtZHNUb0NsaWVudC5BZGQodW5mcmFtZWRDbWRzLmdldF9JdGVtKGkpKTtcclxuICAgIH1cclxuICAgIHVuZnJhbWVkQ21kcy5TZXRTaXplKDApO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgYW4gYW5jZXN0b3Igb2YgdGhpcyBNR0RhdGEgb2JqZWN0IHdoaWNoIGlzIG5vdCBwZW5kaW5nIHVubG9hZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0VmFsaWRBbmNlc3RvcigpOiBNR0RhdGEge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICB9XHJcblxyXG4gIGdldE1heEN0bElkeCgpOiBudW1iZXIge1xyXG4gICAgbGV0IHJjOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3Rhc2tzVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrID0gPFRhc2s+dGhpcy5fdGFza3NUYWIuZ2V0VGFzayhpKTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgICByYyA9IE1hdGgubWF4KHJjLCB0YXNrLmdldEN0bElkeCgpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJjO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBzYXZlIHRoZSBnbG9iYWwgcGFyYW1zIChvbmUgYmFzZTY0IGVuY29kZWQgdmFsdWUpIHRoYXQgd2FzIHBhc3NlZCBmcm9tIHRoZSBydW50aW1lLWVuZ2luZSB0byB0aGUgcmljaC1jbGllbnQ8L3N1bW1hcnk+XHJcbiAgZmlsbEdsb2JhbFBhcmFtcyhwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IFhNTGRhdGE6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxkYXRhKCk7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuXHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IFhNTGRhdGEubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGZpbmQgbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19HTE9CQUxQQVJBTVMpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0dMT0JBTFBBUkFNUy5sZW5ndGgpO1xyXG5cclxuICAgICAgbGV0IHRva2VuczogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2VucyhSdW50aW1lQ29udGV4dEJhc2UuSW5zdGFuY2UuUGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuXHJcbiAgICAgIERlYnVnLkFzc2VydCh0b2tlbnMuZ2V0X0l0ZW0oMCkgPT09IFhNTENvbnN0YW50cy5NR19BVFRSX1ZBTFVFKTtcclxuICAgICAgU2VydmVyQ29uZmlnLkluc3RhbmNlLnNldEdsb2JhbFBhcmFtcyh0b2tlbnMuZ2V0X0l0ZW0oMSkpO1xyXG5cclxuICAgICAgZW5kQ29udGV4dCA9IFhNTGRhdGEuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX09QRU4sIGVuZENvbnRleHQpO1xyXG4gICAgICBpZiAoZW5kQ29udGV4dCA9PT0gLTEpXHJcbiAgICAgICAgZW5kQ29udGV4dCA9IFhNTGRhdGEubGVuZ3RoO1xyXG5cclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -249,4 +249,4 @@ export class MGDataCollection {
249
249
  }
250
250
  }
251
251
  }
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUdEYXRhQ29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvdGFza3MvTUdEYXRhQ29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFDLFFBQVEsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUsxRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsd0NBQXdDLEVBQUUsa0NBQWtDLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUd0SCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBTWpELE1BQU0sT0FBTyxnQkFBZ0I7SUFDbkIsTUFBTSxDQUFDLFNBQVMsR0FBcUIsSUFBSSxDQUFDO0lBQzFDLFVBQVUsR0FBaUIsSUFBSSxJQUFJLEVBQVUsQ0FBQztJQUc5QyxlQUFlLEdBQVcsQ0FBQyxDQUFDO0lBQzVCLGdCQUFnQixHQUFXLENBQUMsQ0FBQztJQUNyQyxTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQ3RCLGFBQWEsR0FBVyxJQUFJLENBQUM7SUFFckIsc0JBQXNCLEdBQVcsRUFBRSxDQUFDO0lBSzVDO0lBQ0EsQ0FBQztJQU1ELFdBQVcsQ0FBQyxFQUFVO1FBQ3BCLElBQUksSUFBSSxHQUFTLElBQUksQ0FBQztR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O1lBQzdDLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxJQUFJLEdBQVMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUdqRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO29CQUN2QyxZQUFZLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQy9DLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyw0Q0FBNEMsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBRS9ILElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFO3dCQUNwRCxNQUFNLFlBQVksQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBRTFHLFlBQVksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBwbGljYXRpb25FeGNlcHRpb24sIERlYnVnLCBMaXN0LCBTdHJpbmdCdWlsZGVyfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtJbnRlcm5hbEludGVyZmFjZSwgWE1MQ29uc3RhbnRzfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge0NvbW1hbmRzLCBJVGFzaywgTWdGb3JtQmFzZX0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7TUdEYXRhfSBmcm9tIFwiLi9NR0RhdGFcIjtcclxuaW1wb3J0IHtGbG93TW9uaXRvclF1ZXVlfSBmcm9tIFwiLi4vdXRpbC9GbG93TW9uaXRvclF1ZXVlXCI7XHJcbmltcG9ydCB7VGFza30gZnJvbSBcIi4vVGFza1wiXHJcbmltcG9ydCB7RGF0YVZpZXd9IGZyb20gXCIuLi9kYXRhL0RhdGFWaWV3XCJcclxuaW1wb3J0IHtJTUdEYXRhQ29sbGVjdGlvbn0gZnJvbSBcIi4vSU1HRGF0YUNvbGxlY3Rpb25cIjtcclxuaW1wb3J0IHtDb21tYW5kc1RhYmxlfSBmcm9tIFwiLi4vQ29tbWFuZHNUYWJsZVwiO1xyXG5pbXBvcnQge0xhc3RGb2N1c2VkTWFuYWdlcn0gZnJvbSBcIi4uL3J0L0xhc3RGb2N1c2VkTWFuYWdlclwiO1xyXG5pbXBvcnQge0NvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb24sIENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZXNzaW9uU3RhZ2V9IGZyb20gXCIuLi9Db21tYW5kc1Byb2Nlc3NvckJhc2VcIjtcclxuaW1wb3J0IHtJQ2xpZW50Q29tbWFuZH0gZnJvbSBcIi4uL2NvbW1hbmRzL0lDbGllbnRDb21tYW5kXCI7XHJcbmltcG9ydCB7RXhwcmVzc2lvbn0gZnJvbSBcIi4uL2V4cC9FeHByZXNzaW9uXCI7XHJcbmltcG9ydCB7Q29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyfSBmcm9tIFwiLi4vQ29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyXCI7XHJcbmltcG9ydCB7QWNjZXNzSGVscGVyfSBmcm9tIFwiLi4vQWNjZXNzSGVscGVyXCI7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gXCIuLi9Db25zdEludGVyZmFjZVwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICB0aGlzIGNsYXNzIGhhbmRsZXMgYSB0YWJsZSBvZiBNR0RhdGEgb2JqZWN0c1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgTUdEYXRhQ29sbGVjdGlvbiBpbXBsZW1lbnRzIElNR0RhdGFDb2xsZWN0aW9uIHtcclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IE1HRGF0YUNvbGxlY3Rpb24gPSBudWxsOyAgICAgIC8vIHNpbmdsZXRvblxyXG4gIHByaXZhdGUgX21nRGF0YVRhYjogTGlzdDxNR0RhdGE+ID0gbmV3IExpc3Q8TUdEYXRhPigpO1xyXG5cclxuICAvLyB0aGUgY3VycmVudCBNR0RBVEFcclxuICBwcml2YXRlIF9pdGVyYXRvck1nZElkeDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9pdGVyYXRvclRhc2tJZHg6IG51bWJlciA9IDA7XHJcbiAgY3Vyck1nZElEOiBudW1iZXIgPSAwO1xyXG4gIFN0YXJ0dXBNZ0RhdGE6IE1HRGF0YSA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX2xhc3RSb3V0ZVNlbnRUb1NlcnZlcjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzaW5nbGV0b25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNlYXJjaGVzIGFsbCB0aGUgTUdEYXRhIG9iamVjdHMgdGlsbCBpdCBmaW5kcyB0aGUgdGFzayB3aXRoIHRoZSBnaXZlbiBpZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZFwiPnRoZSBpZCBvZiB0aGUgcmVxdWVzdGVkIHRhc2s8L3BhcmFtPlxyXG4gIEdldFRhc2tCeUlEKGlkOiBzdHJpbmcpOiBJVGFzayB7XHJcbiAgICBsZXQgdGFzazogVGFzayA9IG51bGw7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuZ2V0U2l6ZSgpICYmIHRhc2sgPT0gbnVsbDsgaSsrKSB7XHJcbiAgICAgIGxldCBtZ2Q6IE1HRGF0YSA9IHRoaXMuZ2V0TUdEYXRhKGkpO1xyXG5cclxuICAgICAgaWYgKG1nZCA9PSBudWxsKVxyXG4gICAgICAvLyB0aGUgd2luZG93IGNvbm5lY3RlZCB0byB0aGUgTUdEYXRhIHdhcyBjbG9zZWRcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIHRhc2sgPSBtZ2QuZ2V0VGFzayhpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhc2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNpbmdsZXRvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBNR0RhdGFDb2xsZWN0aW9uIHtcclxuICAgIGlmIChNR0RhdGFDb2xsZWN0aW9uLl9pbnN0YW5jZSA9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKE1HRGF0YUNvbGxlY3Rpb24uX2luc3RhbmNlID09IG51bGwpXHJcbiAgICAgICAgICBNR0RhdGFDb2xsZWN0aW9uLl9pbnN0YW5jZSA9IG5ldyBNR0RhdGFDb2xsZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE1HRGF0YUNvbGxlY3Rpb24uX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBNR0RhdGEgb2JqZWN0IHRvIHRoZSB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtZ2RcIj50aGUgTUdEYXRhIG9iamVjdCB0byBhZGQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+dGhlIGluZGV4IHdpdGhpbiB0aGUgdGFibGUgZm9yIHRoZSBuZXcgTUdEYXRhPC9wYXJhbT5cclxuICBhc3luYyBhZGRNR0RhdGEobWdkOiBNR0RhdGEsIGlkeDogbnVtYmVyLCBpc1N0YXJ0dXA6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChpZHggPCAwIHx8IGlkeCA+IHRoaXMuZ2V0U2l6ZSgpKVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJJbGxlZ2FsIE1HRGF0YSByZXF1ZXN0ZWRcIik7XHJcblxyXG4gICAgaWYgKGlzU3RhcnR1cClcclxuICAgICAgdGhpcy5TdGFydHVwTWdEYXRhID0gbWdkO1xyXG5cclxuICAgIGlmIChpZHggPT09IHRoaXMuZ2V0U2l6ZSgpKVxyXG4gICAgICB0aGlzLl9tZ0RhdGFUYWIucHVzaChtZ2QpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBvbGRNZ2Q6IE1HRGF0YSA9IHRoaXMuZ2V0TUdEYXRhKGlkeCk7XHJcblxyXG4gICAgICBpZiAob2xkTWdkICE9IG51bGwgJiYgIW9sZE1nZC5Jc0Fib3J0aW5nKSB7XHJcbiAgICAgICAgYXdhaXQgb2xkTWdkLmdldEZpcnN0VGFzaygpLnN0b3AoKTtcclxuICAgICAgICBvbGRNZ2QuYWJvcnQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fbWdEYXRhVGFiLnNldF9JdGVtKGlkeCwgbWdkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIE1HRGF0YSBvYmplY3QgYnkgaXRzIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRNR0RhdGEoaWR4OiBudW1iZXIpOiBNR0RhdGEge1xyXG4gICAgbGV0IG1nZDogTUdEYXRhID0gbnVsbDtcclxuXHJcbiAgICBpZiAoaWR4ID49IDAgJiYgaWR4IDwgdGhpcy5nZXRTaXplKCkpIHtcclxuICAgICAgbWdkID0gdGhpcy5fbWdEYXRhVGFiLmdldF9JdGVtKGlkeCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1nZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGF2YWlsYWJsZSBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0QXZhaWxhYmxlSWR4KCk6IG51bWJlciB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLl9tZ0RhdGFUYWIubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgaWYgKHRoaXMuX21nRGF0YVRhYi5nZXRfSXRlbShpKSA9PT0gbnVsbClcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBpbmRleCBvZiBNR0RhdGEgaW4gTUdEYXRhVGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWdkXCI+dG8gZmluZCBpbnRvIHRhYmxlPC9wYXJhbT5cclxuICBnZXRNZ0RhdGFJZHgobWdkOiBNR0RhdGEpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX21nRGF0YVRhYi5pbmRleE9mKG1nZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZnJlZSBtZW1vcnkgZnJvbSB1bm5lZWRlZCBNR0RhdGEgYW5kIGl0cyBkZXNjZW5kYW50IE1HRHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5kZXhcIj5udW1iZXIgb2YgTUdEYXRhL3dpbmRvdyB0byBiZSBkZWxldGVkPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGRlbGV0ZU1HRGF0YVRyZWUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IG1nZDogTUdEYXRhLCBjaGlsZE1nZDtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmdldFNpemUoKSlcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gZGVsZXRlTUdEYXRhKCkgaWxsZWdhbCBpbmRleDogXCIgKyBpbmRleCk7XHJcblxyXG4gICAgbWdkID0gdGhpcy5nZXRNR0RhdGEoaW5kZXgpO1xyXG4gICAgaWYgKG1nZCAhPSBudWxsKSB7XHJcbiAgICAgIC8vIFRPRE86IHdoZW4gY2xvc2luZyBhIGZyYW1lc2V0IHdlIHNob3VsZCBjbGVhciB0aGUgTUdEcyBvZiB0aGUgZnJhbWVzXHJcbiAgICAgIC8vIGZyb20gdGhlIE1HRFRhYlxyXG4gICAgICBpZiAoaW5kZXggPiAwICYmIG1nZC5nZXRQYXJlbnRNR2RhdGEoKSAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fbWdEYXRhVGFiLnNldF9JdGVtKGluZGV4LCBudWxsKTtcclxuICAgICAgfVxyXG4gICAgICBMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuY2xlYW4oaW5kZXgpO1xyXG5cclxuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZ2V0U2l6ZSgpOyBpKyspIHtcclxuICAgICAgICBjaGlsZE1nZCA9IHRoaXMuZ2V0TUdEYXRhKGkpO1xyXG4gICAgICAgIGlmIChjaGlsZE1nZCAhPSBudWxsICYmIGNoaWxkTWdkLmdldFBhcmVudE1HZGF0YSgpID09PSBtZ2QpXHJcbiAgICAgICAgICB0aGlzLmRlbGV0ZU1HRGF0YVRyZWUoaSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGN1cnJlbnQgTUdEYXRhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IE1HRGF0YSBvYmplY3Q8L3JldHVybnM+XHJcbiAgZ2V0Q3Vyck1HRGF0YSgpOiBNR0RhdGEge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TUdEYXRhKHRoaXMuY3Vyck1nZElEKTtcclxuICB9XHJcblxyXG4gIEdldE1haW5Qcm9nQnlDdGxJZHgoY29udGV4dElET3JDdGxJZHg6IGFueSwgY3RsSWR4PzogbnVtYmVyKTogVGFzayB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMilcclxuICAgICAgcmV0dXJuIHRoaXMuR2V0TWFpblByb2dCeUN0bElkeF8wKGN0bElkeCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLkdldE1haW5Qcm9nQnlDdGxJZHhfMShjb250ZXh0SURPckN0bElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2VhcmNoZXMgYWxsIHRoZSBNR0RhdGEgb2JqZWN0cyB0aWxsIGl0IGZpbmRzIGEgbWFpbiBwcm9ncmFtIHdpdGggdGhlIGdpdmVuIGN0bCBpZHhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29udGV4dElEXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0bElkeFwiPnRoZSBpZHggb2YgdGhlIHJlcXVlc3RlZCBjb21wb25lbnQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgR2V0TWFpblByb2dCeUN0bElkeF8wKCBjdGxJZHg6IG51bWJlcik6IFRhc2sge1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSBudWxsO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLmdldFNpemUoKSAmJiB0YXNrID09IG51bGw7IGkrKykge1xyXG4gICAgICBsZXQgbWdkOiBNR0RhdGEgPSB0aGlzLmdldE1HRGF0YShpKTtcclxuXHJcbiAgICAgIGlmIChtZ2QgPT0gbnVsbClcclxuICAgICAgICAvLyB0aGUgd2luZG93IGNvbm5lY3RlZCB0byB0aGUgTUdEYXRhIHdhcyBjbG9zZWRcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIHRhc2sgPSBtZ2QuZ2V0TWFpblByb2coY3RsSWR4KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGFzaztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgR2V0TWFpblByb2dCeUN0bElkeF8xKGN0bElkeDogbnVtYmVyKTogVGFzayB7XHJcbiAgICByZXR1cm4gdGhpcy5HZXRNYWluUHJvZ0J5Q3RsSWR4KC0xLCBjdGxJZHgpOyAgICAvLyBUT0RPICgtMSk6IFJDIGlzIHVuYXdhcmUgdG8gY29udGV4dCBpZHMgYXQgdGhlIG1vbWVudFxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHN0YXJ0IHRoZSB0YXNrcyBpdGVyYXRvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhcnRUYXNrc0l0ZXJhdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2l0ZXJhdG9yTWdkSWR4ID0gMDtcclxuICAgIHRoaXMuX2l0ZXJhdG9yVGFza0lkeCA9IDA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBuZXh0IHRhc2sgdXNpbmcgdGhlIHRhc2tzIGl0ZXJhdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXROZXh0VGFzaygpOiBJVGFzayB7XHJcbiAgICBsZXQgdGFzazogVGFzaztcclxuXHJcbiAgICBsZXQgbWdkOiBNR0RhdGEgPSB0aGlzLmdldE1HRGF0YSh0aGlzLl9pdGVyYXRvck1nZElkeCk7XHJcbiAgICBpZiAobWdkID09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIHRhc2sgPSBtZ2QuZ2V0VGFzayh0aGlzLl9pdGVyYXRvclRhc2tJZHgpO1xyXG5cclxuICAgIGlmICh0YXNrID09IG51bGwpIHtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIHRoaXMuX2l0ZXJhdG9yTWdkSWR4Kys7XHJcbiAgICAgIH1cclxuICAgICAgd2hpbGUgKHRoaXMuX2l0ZXJhdG9yTWdkSWR4IDwgdGhpcy5nZXRTaXplKCkgJiYgdGhpcy5nZXRNR0RhdGEodGhpcy5faXRlcmF0b3JNZ2RJZHgpID09IG51bGwpO1xyXG4gICAgICB0aGlzLl9pdGVyYXRvclRhc2tJZHggPSAwO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXROZXh0VGFzaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2l0ZXJhdG9yVGFza0lkeCsrO1xyXG4gICAgcmV0dXJuIHRhc2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYnVpbGQgWE1MIHN0cmluZyBvZiB0aGUgTUdEYXRhVEFCTEUgb2JqZWN0LFxyXG4gIC8vLyAgIEFMTCBNR0RhdGEgaW4gdGhlIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtZXNzYWdlXCI+YSBtZXNzYWdlIGJlaW5nIHByZXBhcmVkLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2VyaWFsaXplVGFza3NcIj5pZiB0cnVlLCB0YXNrcyBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gd2lsbCBhbHNvIGJlIHNlcmlhbGl6ZWQuPC9wYXJhbT5cclxuICBhc3luYyBidWlsZFhNTChtZXNzYWdlOiBTdHJpbmdCdWlsZGVyLCBzZXJpYWxpemVUYXNrczogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGxhc3RSb3V0ZTogc3RyaW5nID0gQ29tbWFuZHMuZ2V0TGFzdFJvdXRlKCk7XHJcbiAgICAvLyBvcHRpbWl6YXRpb246IERvIG5vdCBzZW5kIHRoZSBsYXN0Um91dGUsIGlmIGl0IGlzIHRoZSBzYW1lIHdoaWNoIHdhcyBsYXN0IHNlbnQgdG8gdGhlIHNlcnZlclxyXG4gICAgaWYgKGxhc3RSb3V0ZSAhPT0gdGhpcy5fbGFzdFJvdXRlU2VudFRvU2VydmVyKSB7XHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFhNTENvbnN0YW50cy5TVEFSVF9UQUcgKyBDb25zdEludGVyZmFjZS5NR19UQUdfTEFTVF9ST1VURSk7XHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FTlZfVkFMVUUgKyBcIj1cXFwiXCIgKyBsYXN0Um91dGUgKyBcIlxcXCJcIik7XHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFhNTENvbnN0YW50cy5UQUdfVEVSTSk7XHJcblxyXG4gICAgICB0aGlzLl9sYXN0Um91dGVTZW50VG9TZXJ2ZXIgPSBsYXN0Um91dGU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IG1nZDogTUdEYXRhID0gdGhpcy5nZXRNR0RhdGEoaSk7XHJcblxyXG4gICAgICBpZiAobWdkICE9PSBudWxsICYmICFtZ2QuSXNBYm9ydGluZykge1xyXG4gICAgICAgIGF3YWl0IG1nZC5idWlsZFhNTChtZXNzYWdlLCBzZXJpYWxpemVUYXNrcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBGbG93TW9uaXRvclF1ZXVlLkluc3RhbmNlLmJ1aWxkWE1MKG1lc3NhZ2UpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHNpemUgb2YgTUdEYXRhIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHNpemUgb2YgdGFibGU8L3JldHVybnM+XHJcbiAgZ2V0U2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX21nRGF0YVRhYi5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGVyZm9ybSBhbnkgZGF0YSBlcnJvciByZWNvdmVyeSBhY3Rpb24gb24gYWxsIGRhdGF2aWV3c1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgcHJvY2Vzc1JlY292ZXJ5KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IG1nZDogTUdEYXRhID0gdGhpcy5nZXRNR0RhdGEoaSk7XHJcblxyXG4gICAgICBpZiAobWdkICE9PSBudWxsKSB7XHJcbiAgICAgICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IG1nZC5nZXRUYXNrc0NvdW50KCk7IGogPSBqICsgMSkge1xyXG4gICAgICAgICAgbGV0IHRhc2s6IFRhc2sgPSBtZ2QuZ2V0VGFzayhqKTtcclxuICAgICAgICAgIGlmICh0YXNrICE9PSBudWxsKVxyXG4gICAgICAgICAgICBhd2FpdCAoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLnByb2Nlc3NSZWNvdmVyeSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZpbmQgYWxsIHRhc2tzIHdoaWNoIHdlcmUgdHJpZ2dlcmVkIGJ5IGEgc3BlY2lmaWMgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0cmlnZ2VyaW5nVGFza1wiPnRoZSB0YXNrIHdobyB0cmlnZ2VyZWQgYWxsIG90aGVyIHRhc2tzLjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB2ZWN0b3IgY29udGFpbmluZyBhbGwgdGFza3Mgd2hpY2ggd2VyZSB0cmlnZ2VyZWQgYnkgdGhlIHBhcmFtZXRlciB0YXNrPC9yZXR1cm5zPlxyXG4gIGdldFRyaWdnZXJlZFRhc2tzKHRyaWdnZXJpbmdUYXNrOiBUYXNrKTogTGlzdDxUYXNrPiB7XHJcbiAgICBsZXQgbGlzdDogTGlzdDxUYXNrPiA9IG5ldyBMaXN0PFRhc2s+KCk7XHJcbiAgICBsZXQgdGFzazogVGFzaztcclxuICAgIGxldCB0YWc6IHN0cmluZyA9IHRyaWdnZXJpbmdUYXNrLmdldFRhc2tUYWcoKTtcclxuXHJcbiAgICB0aGlzLnN0YXJ0VGFza3NJdGVyYXRpb24oKTtcclxuXHJcbiAgICB3aGlsZSAoKHRhc2sgPSA8VGFzaz50aGlzLmdldE5leHRUYXNrKCkpICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0YWcgPT09IHRhc2suUHJldmlvdXNseUFjdGl2ZVRhc2tJZClcclxuICAgICAgICBsaXN0LnB1c2godGFzayk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxpc3Q7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybnMgdGFzayBsaXN0IGFjY29yZGluZyB0byB0aGUgcHJlZGljYXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFRhc2tzKHA6IChvYmo6IFRhc2spID0+IGJvb2xlYW4pOiBMaXN0PFRhc2s+IHtcclxuICAgIGxldCB0YXNrTGlzdDogTGlzdDxUYXNrPiA9IG5ldyBMaXN0PFRhc2s+KCk7XHJcblxyXG4gICAgdGhpcy5fbWdEYXRhVGFiLmZvckVhY2gobWdkID0+IHtcclxuICAgICAgaWYgKG1nZCAhPT0gbnVsbCAmJiAhbWdkLklzQWJvcnRpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbWdkLmdldFRhc2tzQ291bnQoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgICBsZXQgdGFzazogVGFzayA9IG1nZC5nZXRUYXNrKGkpO1xyXG4gICAgICAgICAgaWYgKHRhc2sgIT09IG51bGwgJiYgcCh0YXNrKSkge1xyXG4gICAgICAgICAgICB0YXNrTGlzdC5wdXNoKHRhc2spO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRhc2tMaXN0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGN1cnJlbnQgaWQgb2YgYSB0YXNrIGFjY29yZGluZyB0byBpdHMgb3JpZ2luYWwgaWRcclxuICAvLy8gICBpdCB3aWxsIHVzdWFsbHkgcmV0dXJuIHRoZSBzYW1lIGlkIGFzIHNlbnQgdG8gaXQsIGJ1dCBmb3Igc3ViZm9ybSBhZnRlciBlcnJvciBhbmQgcmV0cnkgaXQgd2lsbFxyXG4gIC8vLyAgIGNvbnZlcnQgdGhlIG9yaWdpbmFsIGlkIHRvIHRoZSBjdXJyZW50LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrSWRcIj4tIG9yaWdpbmFsIHRhc2sgaWQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGN1cnJlbnQgdGFza2lkIGZvciB0aGlzIHRhc2s8L3JldHVybnM+XHJcbiAgZ2V0VGFza0lkQnlJZCh0YXNrSWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAvLyBRQ1IgIzk4MDQ1NCAtIHRoZSB0YXNrIGlkIG1heSBjaGFuZ2UgZHVyaW5nIHRoZSB0YXNrJ3MgbGlmZXRpbWUsIHNvIHRhc2tJZCBtaWdodFxyXG4gICAgLy8gYmUgaG9sZGluZyB0aGUgb2xkIG9uZSAtIGZpbmQgdGhlIHRhc2sgYW5kIHJlZmV0Y2ggaXRzIGN1cnJlbnQgSUQuXHJcbiAgICBsZXQgdGFzazogSVRhc2sgPSB0aGlzLkdldFRhc2tCeUlEKHRhc2tJZCk7XHJcbiAgICBsZXQgdGFnOiBzdHJpbmcgPSB0YXNrSWQ7XHJcblxyXG4gICAgaWYgKHRhc2sgIT0gbnVsbClcclxuICAgICAgdGFnID0gdGFzay5nZXRUYXNrVGFnKCk7XHJcblxyXG4gICAgcmV0dXJuIHRhZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gYWxsIHRvcCBsZXZlbCBmb3JtcyB0aGF0IGV4aXN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRUb3BNb3N0Rm9ybXMoKTogTGlzdDxNZ0Zvcm1CYXNlPiB7XHJcbiAgICBsZXQgdGFzazogVGFzaztcclxuICAgIGxldCBmb3JtcyA9IG5ldyBMaXN0PE1nRm9ybUJhc2U+KCk7XHJcblxyXG4gICAgLy8gbW92ZSBvbiB0aGUgdGFza3MgYW5kIGFkZCB0aGUgZm9ybXMgdG8gdGhlIGFycmF5TGlzdFxyXG4gICAgdGhpcy5zdGFydFRhc2tzSXRlcmF0aW9uKCk7XHJcblxyXG4gICAgd2hpbGUgKCh0YXNrID0gPFRhc2s+dGhpcy5nZXROZXh0VGFzaygpKSAhPSBudWxsKSB7XHJcbiAgICAgIGxldCBmb3JtOiBNZ0Zvcm1CYXNlID0gdGFzay5nZXRGb3JtKCk7XHJcblxyXG4gICAgICBpZiAoIXRhc2suaXNBYm9ydGluZygpICYmIGZvcm0gIT0gbnVsbCAmJiAhZm9ybS5pc1N1YkZvcm0oKSlcclxuICAgICAgICBmb3Jtcy5wdXNoKGZvcm0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXRzIHRoZSBNR0RhdGEgdGhhdCBob2xkcy9zaG91bGQgaG9sZCB0aGUgc3RhcnR1cCBwcm9ncmFtLlxyXG4gIC8vLyBUaGUgbWV0aG9kIHRha2VzIGludG8gY29uc2lkZXJhdGlvbiB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbiB1c2VzIE1ESSBvciBub3QuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldE1HRGF0YUZvclN0YXJ0dXBQcm9ncmFtKCk6IE1HRGF0YSB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQodGhpcy5fbWdEYXRhVGFiLmxlbmd0aCA+IDAsIFwiVGhlIG1haW4gcHJvZ3JhbSBtdXN0IGJlIHByb2Nlc3NlZCBiZWZvcmUgaW52b2tpbmcgdGhpcyBtZXRob2QuXCIpO1xyXG5cclxuICAgIGxldCBtYWluUHJvZ0J5Q3RsSWR4OiBUYXNrID0gdGhpcy5HZXRNYWluUHJvZ0J5Q3RsSWR4KDApO1xyXG4gICAgRGVidWcuQXNzZXJ0KG1haW5Qcm9nQnlDdGxJZHggIT09IG51bGwsIFwiVGhlIG1haW4gcHJvZ3JhbSBtdXN0IGJlIHByb2Nlc3NlZCBiZWZvcmUgaW52b2tpbmcgdGhpcyBtZXRob2QuXCIpO1xyXG5cclxuICAgIERlYnVnLkFzc2VydChtYWluUHJvZ0J5Q3RsSWR4LmdldE1nZElEKCkgPT09IDAsIFwiTWFpbiBwcm9ncmFtIGlzIGV4cGVjdGVkIHRvIGJlIG9uIE1HRGF0YSAwLiBJcyB0aGlzIGFuIGVycm9yP1wiKTtcclxuXHJcbiAgICAvLyBpZiB0aGUgbWFpbiBwcm9ncmFtIGRvZXMgbm90IGhhdmUgTURJIGZyYW1lLCB0aGUgc3RhcnR1cCBNR0RhdGEgaW5kZXggaXMgMC5cclxuICAgIHJldHVybiB0aGlzLl9tZ0RhdGFUYWIuZ2V0X0l0ZW0oMCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQWRkIGNvbW1hbmQsIGV4ZWN1dGUgcmVxdWVzdCBhbmQgZG8gcmVjb3JkIGN5Y2xlIGZvciBzdWJmb3JtcyB0aGF0IHRoZSBzZXJ2ZXIgc2VudCB0aGVpciBuZXcgZGF0YXZpZXdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNtZHNUb1NlcnZlclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY21kVG9TZXJ2ZXJcIj5hZGRpdGlvbmFsIGNvbW1hbmQgdG8gdGhlIFNlcnZlcjwvcGFyYW0+XHJcbiAgYXN5bmMgZXhlY1JlcXVlc3RXaXRoU3ViZm9ybVJlY29yZEN5Y2xlKGNtZHNUb1NlcnZlcjogQ29tbWFuZHNUYWJsZSwgY21kVG9TZXJ2ZXI6IElDbGllbnRDb21tYW5kLCBleHA6IEV4cHJlc3Npb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuY2xlYW5Eb1N1YmZvcm1QcmVmaXhTdWZmaXgoKTtcclxuICAgIGNtZHNUb1NlcnZlci5BZGQoY21kVG9TZXJ2ZXIpO1xyXG5cclxuICAgIC8vIEF2b2lkIGltbWVkaWF0ZSBleGVjdXRpb24gb2Ygc2VydmVyIG9wZXJhdGlvbiBkdXJpbmcgYnJvd3NlciBjbG9zZSB0byBhbGxvdyBjbG9zaW5nIG9mIGNvbnRleHQgbGF0ZXIgYnkgc2VuZGluZyBCcm93c2VyRXNjIGNvbW1hbmQgdG8gc2VydmVyLlxyXG4gICAgaWYoIShNR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlLlN0YXJ0dXBNZ0RhdGEuZ2V0Rmlyc3RUYXNrKCkuSW5FbmRUYXNrICYmIE1HRGF0YUNvbGxlY3Rpb24uSW5zdGFuY2UuU3RhcnR1cE1nRGF0YS5nZXRGaXJzdFRhc2soKS5DbG9zaW5nRm9ybVVJKSlcclxuICAgICAgYXdhaXQgQ29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyLkdldENvbW1hbmRzUHJvY2Vzc29yKCkuRXhlY3V0ZShDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2VuZGluZ0luc3RydWN0aW9uLlRBU0tTX0FORF9DT01NQU5EUywgQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1Nlc3Npb25TdGFnZS5OT1JNQUwsIGV4cCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5leGVjQWxsU3ViZm9ybVJlY29yZEN5Y2xlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IENsZWFuIGZsYWcgZm9yIFN1YmZvcm0gcmVjb3JkIGN5Y2xlIDwvc3VtbWFyeT5cclxuICBjbGVhbkRvU3ViZm9ybVByZWZpeFN1ZmZpeCgpOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLmdldFNpemUoKTsgaSsrKSB7XHJcbiAgICAgIGxldCBtZ2Q6IE1HRGF0YSA9IHRoaXMuZ2V0TUdEYXRhKGkpO1xyXG5cclxuICAgICAgaWYgKG1nZCA9PT0gbnVsbCB8fCBtZ2QuSXNBYm9ydGluZylcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCB0YXNrc0NvdW50OiBudW1iZXIgPSBtZ2QuZ2V0VGFza3NDb3VudCgpO1xyXG4gICAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgdGFza3NDb3VudDsgaisrKSB7XHJcbiAgICAgICAgbGV0IHRhc2s6IFRhc2sgPSBtZ2QuZ2V0VGFzayhqKTtcclxuICAgICAgICB0YXNrLkRvU3ViZm9ybVByZWZpeFN1ZmZpeCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBFeGVjdXRlIFJlY29yZCBjeWNsZSBmb3IgYWxsIHN1YmZvcm1zIHRoYXQgdGhlaXIgZmxhZyBpcyBvbiA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgZXhlY0FsbFN1YmZvcm1SZWNvcmRDeWNsZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5nZXRTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICBsZXQgbWdkOiBNR0RhdGEgPSB0aGlzLmdldE1HRGF0YShpKTtcclxuXHJcbiAgICAgIGlmIChtZ2QgPT09IG51bGwgfHwgbWdkLklzQWJvcnRpbmcpXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICBsZXQgdGFza3NDb3VudDogbnVtYmVyID0gbWdkLmdldFRhc2tzQ291bnQoKTtcclxuICAgICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHRhc2tzQ291bnQ7IGogPSBqICsgMSkge1xyXG4gICAgICAgIGxldCB0YXNrOiBUYXNrID0gbWdkLmdldFRhc2soaik7XHJcbiAgICAgICAgaWYgKHRhc2suSXNTdWJGb3JtICYmIHRhc2suRG9TdWJmb3JtUHJlZml4U3VmZml4KSB7XHJcbiAgICAgICAgICAvLyBJbiB0aGUgcmVjb3JkIHByZWZpeCBvZiB0aGUgY3VycmVudCB0YXNrIChjb21tb25IYW5kbGVyQmVmb3JlKSB3ZSBleGVjdXRlIHJlY29yZCBwcmVmaXggb2YgYWxsIGZhdGhlcnMuXHJcbiAgICAgICAgICAvLyBCdXQgd2hlbiB3ZSByZXR1cm4gZnJvbSB0aGUgc2VydmVyIHdlIGRvIG5vdCBuZWVkIGl0LiBTbyB3ZSBwcmV2ZW50IGZhdGhlciByZWNvcmQgcHJlZml4IGV4ZWN1dGlvbi5cclxuICAgICAgICAgIHRhc2suUGVyZm9ybVBhcmVudFJlY29yZFByZWZpeCA9IGZhbHNlO1xyXG4gICAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIucHVzaE5ld0V4ZWNTdGFja3MoKTtcclxuICAgICAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUludGVybmFsRXZlbnRXaXRoVGFza0FuZFN1YmZvcm1SZWZyZXNoKHRhc2ssIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfUFJFRklYLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICBpZiAoIUFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLkdldFN0b3BFeGVjdXRpb25GbGFnKCkpXHJcbiAgICAgICAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUludGVybmFsRXZlbnRXaXRoVGFzayh0YXNrLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1NVRkZJWCk7XHJcblxyXG4gICAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIucG9wTmV3RXhlY1N0YWNrcygpO1xyXG4gICAgICAgICAgdGFzay5QZXJmb3JtUGFyZW50UmVjb3JkUHJlZml4ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUdEYXRhQ29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvdGFza3MvTUdEYXRhQ29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFDLFFBQVEsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUsxRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsd0NBQXdDLEVBQUUsa0NBQWtDLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUd0SCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBTWpELE1BQU0sT0FBTyxnQkFBZ0I7SUFDbkIsTUFBTSxDQUFDLFNBQVMsR0FBcUIsSUFBSSxDQUFDO0lBQzFDLFVBQVUsR0FBaUIsSUFBSSxJQUFJLEVBQVUsQ0FBQztJQUc5QyxlQUFlLEdBQVcsQ0FBQyxDQUFDO0lBQzVCLGdCQUFnQixHQUFXLENBQUMsQ0FBQztJQUNyQyxTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQ3RCLGFBQWEsR0FBVyxJQUFJLENBQUM7SUFFckIsc0JBQXNCLEdBQVcsRUFBRSxDQUFDO0lBSzVDO0lBQ0EsQ0FBQztJQU1ELFdBQVcsQ0FBQyxFQUFVO1FBQ3BCLElBQUksSUFBSSxHQUFTLElBQUksQ0FBQztR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QWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUMvQyxNQUFNLFlBQVksQ0FBQyxhQUFhLENBQUMsNENBQTRDLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO29CQUUvSCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRTt3QkFDcEQsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUUxRyxZQUFZLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQzlDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7aUJBQ3ZDO2FBQ0Y7U0FDRjtJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FwcGxpY2F0aW9uRXhjZXB0aW9uLCBEZWJ1ZywgTGlzdCwgU3RyaW5nQnVpbGRlcn0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7SW50ZXJuYWxJbnRlcmZhY2UsIFhNTENvbnN0YW50c30gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtDb21tYW5kcywgSVRhc2ssIE1nRm9ybUJhc2V9IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge01HRGF0YX0gZnJvbSBcIi4vTUdEYXRhXCI7XHJcbmltcG9ydCB7Rmxvd01vbml0b3JRdWV1ZX0gZnJvbSBcIi4uL3V0aWwvRmxvd01vbml0b3JRdWV1ZVwiO1xyXG5pbXBvcnQge1Rhc2t9IGZyb20gXCIuL1Rhc2tcIlxyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tIFwiLi4vZGF0YS9EYXRhVmlld1wiXHJcbmltcG9ydCB7SU1HRGF0YUNvbGxlY3Rpb259IGZyb20gXCIuL0lNR0RhdGFDb2xsZWN0aW9uXCI7XHJcbmltcG9ydCB7Q29tbWFuZHNUYWJsZX0gZnJvbSBcIi4uL0NvbW1hbmRzVGFibGVcIjtcclxuaW1wb3J0IHtMYXN0Rm9jdXNlZE1hbmFnZXJ9IGZyb20gXCIuLi9ydC9MYXN0Rm9jdXNlZE1hbmFnZXJcIjtcclxuaW1wb3J0IHtDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2VuZGluZ0luc3RydWN0aW9uLCBDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2Vzc2lvblN0YWdlfSBmcm9tIFwiLi4vQ29tbWFuZHNQcm9jZXNzb3JCYXNlXCI7XHJcbmltcG9ydCB7SUNsaWVudENvbW1hbmR9IGZyb20gXCIuLi9jb21tYW5kcy9JQ2xpZW50Q29tbWFuZFwiO1xyXG5pbXBvcnQge0V4cHJlc3Npb259IGZyb20gXCIuLi9leHAvRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQge0NvbW1hbmRzUHJvY2Vzc29yTWFuYWdlcn0gZnJvbSBcIi4uL0NvbW1hbmRzUHJvY2Vzc29yTWFuYWdlclwiO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tIFwiLi4vQ29uc3RJbnRlcmZhY2VcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgdGhpcyBjbGFzcyBoYW5kbGVzIGEgdGFibGUgb2YgTUdEYXRhIG9iamVjdHNcclxuLy8vIDwvc3VtbWFyeT5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIE1HRGF0YUNvbGxlY3Rpb24gaW1wbGVtZW50cyBJTUdEYXRhQ29sbGVjdGlvbiB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBNR0RhdGFDb2xsZWN0aW9uID0gbnVsbDsgICAgICAvLyBzaW5nbGV0b25cclxuICBwcml2YXRlIF9tZ0RhdGFUYWI6IExpc3Q8TUdEYXRhPiA9IG5ldyBMaXN0PE1HRGF0YT4oKTtcclxuXHJcbiAgLy8gdGhlIGN1cnJlbnQgTUdEQVRBXHJcbiAgcHJpdmF0ZSBfaXRlcmF0b3JNZ2RJZHg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfaXRlcmF0b3JUYXNrSWR4OiBudW1iZXIgPSAwO1xyXG4gIGN1cnJNZ2RJRDogbnVtYmVyID0gMDtcclxuICBTdGFydHVwTWdEYXRhOiBNR0RhdGEgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9sYXN0Um91dGVTZW50VG9TZXJ2ZXI6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2luZ2xldG9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZWFyY2hlcyBhbGwgdGhlIE1HRGF0YSBvYmplY3RzIHRpbGwgaXQgZmluZHMgdGhlIHRhc2sgd2l0aCB0aGUgZ2l2ZW4gaWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWRcIj50aGUgaWQgb2YgdGhlIHJlcXVlc3RlZCB0YXNrPC9wYXJhbT5cclxuICBHZXRUYXNrQnlJRChpZDogc3RyaW5nKTogSVRhc2sge1xyXG4gICAgbGV0IHRhc2s6IFRhc2sgPSBudWxsO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLmdldFNpemUoKSAmJiB0YXNrID09IG51bGw7IGkrKykge1xyXG4gICAgICBsZXQgbWdkOiBNR0RhdGEgPSB0aGlzLmdldE1HRGF0YShpKTtcclxuXHJcbiAgICAgIGlmIChtZ2QgPT0gbnVsbClcclxuICAgICAgLy8gdGhlIHdpbmRvdyBjb25uZWN0ZWQgdG8gdGhlIE1HRGF0YSB3YXMgY2xvc2VkXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICB0YXNrID0gbWdkLmdldFRhc2soaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0YXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzaW5nbGV0b25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogTUdEYXRhQ29sbGVjdGlvbiB7XHJcbiAgICBpZiAoTUdEYXRhQ29sbGVjdGlvbi5faW5zdGFuY2UgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChNR0RhdGFDb2xsZWN0aW9uLl9pbnN0YW5jZSA9PSBudWxsKVxyXG4gICAgICAgICAgTUdEYXRhQ29sbGVjdGlvbi5faW5zdGFuY2UgPSBuZXcgTUdEYXRhQ29sbGVjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBNR0RhdGFDb2xsZWN0aW9uLl9pbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhZGQgTUdEYXRhIG9iamVjdCB0byB0aGUgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWdkXCI+dGhlIE1HRGF0YSBvYmplY3QgdG8gYWRkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnRoZSBpbmRleCB3aXRoaW4gdGhlIHRhYmxlIGZvciB0aGUgbmV3IE1HRGF0YTwvcGFyYW0+XHJcbiAgYXN5bmMgYWRkTUdEYXRhKG1nZDogTUdEYXRhLCBpZHg6IG51bWJlciwgaXNTdGFydHVwOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoaWR4IDwgMCB8fCBpZHggPiB0aGlzLmdldFNpemUoKSlcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiSWxsZWdhbCBNR0RhdGEgcmVxdWVzdGVkXCIpO1xyXG5cclxuICAgIGlmIChpc1N0YXJ0dXApXHJcbiAgICAgIHRoaXMuU3RhcnR1cE1nRGF0YSA9IG1nZDtcclxuXHJcbiAgICBpZiAoaWR4ID09PSB0aGlzLmdldFNpemUoKSlcclxuICAgICAgdGhpcy5fbWdEYXRhVGFiLnB1c2gobWdkKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgb2xkTWdkOiBNR0RhdGEgPSB0aGlzLmdldE1HRGF0YShpZHgpO1xyXG5cclxuICAgICAgaWYgKG9sZE1nZCAhPSBudWxsICYmICFvbGRNZ2QuSXNBYm9ydGluZykge1xyXG4gICAgICAgIGF3YWl0IG9sZE1nZC5nZXRGaXJzdFRhc2soKS5zdG9wKCk7XHJcbiAgICAgICAgb2xkTWdkLmFib3J0KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX21nRGF0YVRhYi5zZXRfSXRlbShpZHgsIG1nZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBNR0RhdGEgb2JqZWN0IGJ5IGl0cyBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TUdEYXRhKGlkeDogbnVtYmVyKTogTUdEYXRhIHtcclxuICAgIGxldCBtZ2Q6IE1HRGF0YSA9IG51bGw7XHJcblxyXG4gICAgaWYgKGlkeCA+PSAwICYmIGlkeCA8IHRoaXMuZ2V0U2l6ZSgpKSB7XHJcbiAgICAgIG1nZCA9IHRoaXMuX21nRGF0YVRhYi5nZXRfSXRlbShpZHgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtZ2Q7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBhdmFpbGFibGUgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEF2YWlsYWJsZUlkeCgpOiBudW1iZXIge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5fbWdEYXRhVGFiLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGlmICh0aGlzLl9tZ0RhdGFUYWIuZ2V0X0l0ZW0oaSkgPT09IG51bGwpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgaW5kZXggb2YgTUdEYXRhIGluIE1HRGF0YVRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1nZFwiPnRvIGZpbmQgaW50byB0YWJsZTwvcGFyYW0+XHJcbiAgZ2V0TWdEYXRhSWR4KG1nZDogTUdEYXRhKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tZ0RhdGFUYWIuaW5kZXhPZihtZ2QpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZyZWUgbWVtb3J5IGZyb20gdW5uZWVkZWQgTUdEYXRhIGFuZCBpdHMgZGVzY2VuZGFudCBNR0RzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImluZGV4XCI+bnVtYmVyIG9mIE1HRGF0YS93aW5kb3cgdG8gYmUgZGVsZXRlZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBkZWxldGVNR0RhdGFUcmVlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBtZ2Q6IE1HRGF0YSwgY2hpbGRNZ2Q7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG5cclxuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5nZXRTaXplKCkpXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIGRlbGV0ZU1HRGF0YSgpIGlsbGVnYWwgaW5kZXg6IFwiICsgaW5kZXgpO1xyXG5cclxuICAgIG1nZCA9IHRoaXMuZ2V0TUdEYXRhKGluZGV4KTtcclxuICAgIGlmIChtZ2QgIT0gbnVsbCkge1xyXG4gICAgICAvLyBUT0RPOiB3aGVuIGNsb3NpbmcgYSBmcmFtZXNldCB3ZSBzaG91bGQgY2xlYXIgdGhlIE1HRHMgb2YgdGhlIGZyYW1lc1xyXG4gICAgICAvLyBmcm9tIHRoZSBNR0RUYWJcclxuICAgICAgaWYgKGluZGV4ID4gMCAmJiBtZ2QuZ2V0UGFyZW50TUdkYXRhKCkgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX21nRGF0YVRhYi5zZXRfSXRlbShpbmRleCwgbnVsbCk7XHJcbiAgICAgIH1cclxuICAgICAgTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmNsZWFuKGluZGV4KTtcclxuXHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmdldFNpemUoKTsgaSsrKSB7XHJcbiAgICAgICAgY2hpbGRNZ2QgPSB0aGlzLmdldE1HRGF0YShpKTtcclxuICAgICAgICBpZiAoY2hpbGRNZ2QgIT0gbnVsbCAmJiBjaGlsZE1nZC5nZXRQYXJlbnRNR2RhdGEoKSA9PT0gbWdkKVxyXG4gICAgICAgICAgdGhpcy5kZWxldGVNR0RhdGFUcmVlKGkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBjdXJyZW50IE1HRGF0YVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBNR0RhdGEgb2JqZWN0PC9yZXR1cm5zPlxyXG4gIGdldEN1cnJNR0RhdGEoKTogTUdEYXRhIHtcclxuICAgIHJldHVybiB0aGlzLmdldE1HRGF0YSh0aGlzLmN1cnJNZ2RJRCk7XHJcbiAgfVxyXG5cclxuICBHZXRNYWluUHJvZ0J5Q3RsSWR4KGNvbnRleHRJRE9yQ3RsSWR4OiBhbnksIGN0bElkeD86IG51bWJlcik6IFRhc2sge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpXHJcbiAgICAgIHJldHVybiB0aGlzLkdldE1haW5Qcm9nQnlDdGxJZHhfMChjdGxJZHgpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5HZXRNYWluUHJvZ0J5Q3RsSWR4XzEoY29udGV4dElET3JDdGxJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNlYXJjaGVzIGFsbCB0aGUgTUdEYXRhIG9iamVjdHMgdGlsbCBpdCBmaW5kcyBhIG1haW4gcHJvZ3JhbSB3aXRoIHRoZSBnaXZlbiBjdGwgaWR4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbnRleHRJRFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdGxJZHhcIj50aGUgaWR4IG9mIHRoZSByZXF1ZXN0ZWQgY29tcG9uZW50PC9wYXJhbT5cclxuICBwcml2YXRlIEdldE1haW5Qcm9nQnlDdGxJZHhfMCggY3RsSWR4OiBudW1iZXIpOiBUYXNrIHtcclxuICAgIGxldCB0YXNrOiBUYXNrID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5nZXRTaXplKCkgJiYgdGFzayA9PSBudWxsOyBpKyspIHtcclxuICAgICAgbGV0IG1nZDogTUdEYXRhID0gdGhpcy5nZXRNR0RhdGEoaSk7XHJcblxyXG4gICAgICBpZiAobWdkID09IG51bGwpXHJcbiAgICAgICAgLy8gdGhlIHdpbmRvdyBjb25uZWN0ZWQgdG8gdGhlIE1HRGF0YSB3YXMgY2xvc2VkXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICB0YXNrID0gbWdkLmdldE1haW5Qcm9nKGN0bElkeCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhc2s7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEdldE1haW5Qcm9nQnlDdGxJZHhfMShjdGxJZHg6IG51bWJlcik6IFRhc2sge1xyXG4gICAgcmV0dXJuIHRoaXMuR2V0TWFpblByb2dCeUN0bElkeCgtMSwgY3RsSWR4KTsgICAgLy8gVE9ETyAoLTEpOiBSQyBpcyB1bmF3YXJlIHRvIGNvbnRleHQgaWRzIGF0IHRoZSBtb21lbnRcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzdGFydCB0aGUgdGFza3MgaXRlcmF0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXJ0VGFza3NJdGVyYXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pdGVyYXRvck1nZElkeCA9IDA7XHJcbiAgICB0aGlzLl9pdGVyYXRvclRhc2tJZHggPSAwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgbmV4dCB0YXNrIHVzaW5nIHRoZSB0YXNrcyBpdGVyYXRvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TmV4dFRhc2soKTogSVRhc2sge1xyXG4gICAgbGV0IHRhc2s6IFRhc2s7XHJcblxyXG4gICAgbGV0IG1nZDogTUdEYXRhID0gdGhpcy5nZXRNR0RhdGEodGhpcy5faXRlcmF0b3JNZ2RJZHgpO1xyXG4gICAgaWYgKG1nZCA9PSBudWxsKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICB0YXNrID0gbWdkLmdldFRhc2sodGhpcy5faXRlcmF0b3JUYXNrSWR4KTtcclxuXHJcbiAgICBpZiAodGFzayA9PSBudWxsKSB7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICB0aGlzLl9pdGVyYXRvck1nZElkeCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlICh0aGlzLl9pdGVyYXRvck1nZElkeCA8IHRoaXMuZ2V0U2l6ZSgpICYmIHRoaXMuZ2V0TUdEYXRhKHRoaXMuX2l0ZXJhdG9yTWdkSWR4KSA9PSBudWxsKTtcclxuICAgICAgdGhpcy5faXRlcmF0b3JUYXNrSWR4ID0gMDtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV4dFRhc2soKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9pdGVyYXRvclRhc2tJZHgrKztcclxuICAgIHJldHVybiB0YXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGJ1aWxkIFhNTCBzdHJpbmcgb2YgdGhlIE1HRGF0YVRBQkxFIG9iamVjdCxcclxuICAvLy8gICBBTEwgTUdEYXRhIGluIHRoZSB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWVzc2FnZVwiPmEgbWVzc2FnZSBiZWluZyBwcmVwYXJlZC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNlcmlhbGl6ZVRhc2tzXCI+aWYgdHJ1ZSwgdGFza3MgaW4gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIHdpbGwgYWxzbyBiZSBzZXJpYWxpemVkLjwvcGFyYW0+XHJcbiAgYXN5bmMgYnVpbGRYTUwobWVzc2FnZTogU3RyaW5nQnVpbGRlciwgc2VyaWFsaXplVGFza3M6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBsYXN0Um91dGU6IHN0cmluZyA9IENvbW1hbmRzLmdldExhc3RSb3V0ZSgpO1xyXG4gICAgLy8gb3B0aW1pemF0aW9uOiBEbyBub3Qgc2VuZCB0aGUgbGFzdFJvdXRlLCBpZiBpdCBpcyB0aGUgc2FtZSB3aGljaCB3YXMgbGFzdCBzZW50IHRvIHRoZSBzZXJ2ZXJcclxuICAgIGlmIChsYXN0Um91dGUgIT09IHRoaXMuX2xhc3RSb3V0ZVNlbnRUb1NlcnZlcikge1xyXG4gICAgICBtZXNzYWdlLkFwcGVuZChYTUxDb25zdGFudHMuU1RBUlRfVEFHICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0xBU1RfUk9VVEUpO1xyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU5WX1ZBTFVFICsgXCI9XFxcIlwiICsgbGFzdFJvdXRlICsgXCJcXFwiXCIpO1xyXG4gICAgICBtZXNzYWdlLkFwcGVuZChYTUxDb25zdGFudHMuVEFHX1RFUk0pO1xyXG5cclxuICAgICAgdGhpcy5fbGFzdFJvdXRlU2VudFRvU2VydmVyID0gbGFzdFJvdXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBtZ2Q6IE1HRGF0YSA9IHRoaXMuZ2V0TUdEYXRhKGkpO1xyXG5cclxuICAgICAgaWYgKG1nZCAhPT0gbnVsbCAmJiAhbWdkLklzQWJvcnRpbmcpIHtcclxuICAgICAgICBhd2FpdCBtZ2QuYnVpbGRYTUwobWVzc2FnZSwgc2VyaWFsaXplVGFza3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgRmxvd01vbml0b3JRdWV1ZS5JbnN0YW5jZS5idWlsZFhNTChtZXNzYWdlKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBzaXplIG9mIE1HRGF0YSB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBzaXplIG9mIHRhYmxlPC9yZXR1cm5zPlxyXG4gIGdldFNpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tZ0RhdGFUYWIubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBlcmZvcm0gYW55IGRhdGEgZXJyb3IgcmVjb3ZlcnkgYWN0aW9uIG9uIGFsbCBkYXRhdmlld3NcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIHByb2Nlc3NSZWNvdmVyeSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGxldCBtZ2Q6IE1HRGF0YSA9IHRoaXMuZ2V0TUdEYXRhKGkpO1xyXG5cclxuICAgICAgaWYgKG1nZCAhPT0gbnVsbCkge1xyXG4gICAgICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCBtZ2QuZ2V0VGFza3NDb3VudCgpOyBqID0gaiArIDEpIHtcclxuICAgICAgICAgIGxldCB0YXNrOiBUYXNrID0gbWdkLmdldFRhc2soaik7XHJcbiAgICAgICAgICBpZiAodGFzayAhPT0gbnVsbClcclxuICAgICAgICAgICAgYXdhaXQgKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3KS5wcm9jZXNzUmVjb3ZlcnkoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmaW5kIGFsbCB0YXNrcyB3aGljaCB3ZXJlIHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHJpZ2dlcmluZ1Rhc2tcIj50aGUgdGFzayB3aG8gdHJpZ2dlcmVkIGFsbCBvdGhlciB0YXNrcy48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdmVjdG9yIGNvbnRhaW5pbmcgYWxsIHRhc2tzIHdoaWNoIHdlcmUgdHJpZ2dlcmVkIGJ5IHRoZSBwYXJhbWV0ZXIgdGFzazwvcmV0dXJucz5cclxuICBnZXRUcmlnZ2VyZWRUYXNrcyh0cmlnZ2VyaW5nVGFzazogVGFzayk6IExpc3Q8VGFzaz4ge1xyXG4gICAgbGV0IGxpc3Q6IExpc3Q8VGFzaz4gPSBuZXcgTGlzdDxUYXNrPigpO1xyXG4gICAgbGV0IHRhc2s6IFRhc2s7XHJcbiAgICBsZXQgdGFnOiBzdHJpbmcgPSB0cmlnZ2VyaW5nVGFzay5nZXRUYXNrVGFnKCk7XHJcblxyXG4gICAgdGhpcy5zdGFydFRhc2tzSXRlcmF0aW9uKCk7XHJcblxyXG4gICAgd2hpbGUgKCh0YXNrID0gPFRhc2s+dGhpcy5nZXROZXh0VGFzaygpKSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGFnID09PSB0YXNrLlByZXZpb3VzbHlBY3RpdmVUYXNrSWQpXHJcbiAgICAgICAgbGlzdC5wdXNoKHRhc2spO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsaXN0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm5zIHRhc2sgbGlzdCBhY2NvcmRpbmcgdG8gdGhlIHByZWRpY2F0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRUYXNrcyhwOiAob2JqOiBUYXNrKSA9PiBib29sZWFuKTogTGlzdDxUYXNrPiB7XHJcbiAgICBsZXQgdGFza0xpc3Q6IExpc3Q8VGFzaz4gPSBuZXcgTGlzdDxUYXNrPigpO1xyXG5cclxuICAgIHRoaXMuX21nRGF0YVRhYi5mb3JFYWNoKG1nZCA9PiB7XHJcbiAgICAgIGlmIChtZ2QgIT09IG51bGwgJiYgIW1nZC5Jc0Fib3J0aW5nKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IG1nZC5nZXRUYXNrc0NvdW50KCk7IGkgPSBpICsgMSkge1xyXG4gICAgICAgICAgbGV0IHRhc2s6IFRhc2sgPSBtZ2QuZ2V0VGFzayhpKTtcclxuICAgICAgICAgIGlmICh0YXNrICE9PSBudWxsICYmIHAodGFzaykpIHtcclxuICAgICAgICAgICAgdGFza0xpc3QucHVzaCh0YXNrKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0YXNrTGlzdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IGlkIG9mIGEgdGFzayBhY2NvcmRpbmcgdG8gaXRzIG9yaWdpbmFsIGlkXHJcbiAgLy8vICAgaXQgd2lsbCB1c3VhbGx5IHJldHVybiB0aGUgc2FtZSBpZCBhcyBzZW50IHRvIGl0LCBidXQgZm9yIHN1YmZvcm0gYWZ0ZXIgZXJyb3IgYW5kIHJldHJ5IGl0IHdpbGxcclxuICAvLy8gICBjb252ZXJ0IHRoZSBvcmlnaW5hbCBpZCB0byB0aGUgY3VycmVudC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza0lkXCI+LSBvcmlnaW5hbCB0YXNrIGlkPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBjdXJyZW50IHRhc2tpZCBmb3IgdGhpcyB0YXNrPC9yZXR1cm5zPlxyXG4gIGdldFRhc2tJZEJ5SWQodGFza0lkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gUUNSICM5ODA0NTQgLSB0aGUgdGFzayBpZCBtYXkgY2hhbmdlIGR1cmluZyB0aGUgdGFzaydzIGxpZmV0aW1lLCBzbyB0YXNrSWQgbWlnaHRcclxuICAgIC8vIGJlIGhvbGRpbmcgdGhlIG9sZCBvbmUgLSBmaW5kIHRoZSB0YXNrIGFuZCByZWZldGNoIGl0cyBjdXJyZW50IElELlxyXG4gICAgbGV0IHRhc2s6IElUYXNrID0gdGhpcy5HZXRUYXNrQnlJRCh0YXNrSWQpO1xyXG4gICAgbGV0IHRhZzogc3RyaW5nID0gdGFza0lkO1xyXG5cclxuICAgIGlmICh0YXNrICE9IG51bGwpXHJcbiAgICAgIHRhZyA9IHRhc2suZ2V0VGFza1RhZygpO1xyXG5cclxuICAgIHJldHVybiB0YWc7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIGFsbCB0b3AgbGV2ZWwgZm9ybXMgdGhhdCBleGlzdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgR2V0VG9wTW9zdEZvcm1zKCk6IExpc3Q8TWdGb3JtQmFzZT4ge1xyXG4gICAgbGV0IHRhc2s6IFRhc2s7XHJcbiAgICBsZXQgZm9ybXMgPSBuZXcgTGlzdDxNZ0Zvcm1CYXNlPigpO1xyXG5cclxuICAgIC8vIG1vdmUgb24gdGhlIHRhc2tzIGFuZCBhZGQgdGhlIGZvcm1zIHRvIHRoZSBhcnJheUxpc3RcclxuICAgIHRoaXMuc3RhcnRUYXNrc0l0ZXJhdGlvbigpO1xyXG5cclxuICAgIHdoaWxlICgodGFzayA9IDxUYXNrPnRoaXMuZ2V0TmV4dFRhc2soKSkgIT0gbnVsbCkge1xyXG4gICAgICBsZXQgZm9ybTogTWdGb3JtQmFzZSA9IHRhc2suZ2V0Rm9ybSgpO1xyXG5cclxuICAgICAgaWYgKCF0YXNrLmlzQWJvcnRpbmcoKSAmJiBmb3JtICE9IG51bGwgJiYgIWZvcm0uaXNTdWJGb3JtKCkpXHJcbiAgICAgICAgZm9ybXMucHVzaChmb3JtKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0cyB0aGUgTUdEYXRhIHRoYXQgaG9sZHMvc2hvdWxkIGhvbGQgdGhlIHN0YXJ0dXAgcHJvZ3JhbS5cclxuICAvLy8gVGhlIG1ldGhvZCB0YWtlcyBpbnRvIGNvbnNpZGVyYXRpb24gd2hldGhlciB0aGUgYXBwbGljYXRpb24gdXNlcyBNREkgb3Igbm90LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRNR0RhdGFGb3JTdGFydHVwUHJvZ3JhbSgpOiBNR0RhdGEge1xyXG4gICAgRGVidWcuQXNzZXJ0KHRoaXMuX21nRGF0YVRhYi5sZW5ndGggPiAwLCBcIlRoZSBtYWluIHByb2dyYW0gbXVzdCBiZSBwcm9jZXNzZWQgYmVmb3JlIGludm9raW5nIHRoaXMgbWV0aG9kLlwiKTtcclxuXHJcbiAgICBsZXQgbWFpblByb2dCeUN0bElkeDogVGFzayA9IHRoaXMuR2V0TWFpblByb2dCeUN0bElkeCgwKTtcclxuICAgIERlYnVnLkFzc2VydChtYWluUHJvZ0J5Q3RsSWR4ICE9PSBudWxsLCBcIlRoZSBtYWluIHByb2dyYW0gbXVzdCBiZSBwcm9jZXNzZWQgYmVmb3JlIGludm9raW5nIHRoaXMgbWV0aG9kLlwiKTtcclxuXHJcbiAgICBEZWJ1Zy5Bc3NlcnQobWFpblByb2dCeUN0bElkeC5nZXRNZ2RJRCgpID09PSAwLCBcIk1haW4gcHJvZ3JhbSBpcyBleHBlY3RlZCB0byBiZSBvbiBNR0RhdGEgMC4gSXMgdGhpcyBhbiBlcnJvcj9cIik7XHJcblxyXG4gICAgLy8gaWYgdGhlIG1haW4gcHJvZ3JhbSBkb2VzIG5vdCBoYXZlIE1ESSBmcmFtZSwgdGhlIHN0YXJ0dXAgTUdEYXRhIGluZGV4IGlzIDAuXHJcbiAgICByZXR1cm4gdGhpcy5fbWdEYXRhVGFiLmdldF9JdGVtKDApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEFkZCBjb21tYW5kLCBleGVjdXRlIHJlcXVlc3QgYW5kIGRvIHJlY29yZCBjeWNsZSBmb3Igc3ViZm9ybXMgdGhhdCB0aGUgc2VydmVyIHNlbnQgdGhlaXIgbmV3IGRhdGF2aWV3XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjbWRzVG9TZXJ2ZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNtZFRvU2VydmVyXCI+YWRkaXRpb25hbCBjb21tYW5kIHRvIHRoZSBTZXJ2ZXI8L3BhcmFtPlxyXG4gIGFzeW5jIGV4ZWNSZXF1ZXN0V2l0aFN1YmZvcm1SZWNvcmRDeWNsZShjbWRzVG9TZXJ2ZXI6IENvbW1hbmRzVGFibGUsIGNtZFRvU2VydmVyOiBJQ2xpZW50Q29tbWFuZCwgZXhwOiBFeHByZXNzaW9uKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmNsZWFuRG9TdWJmb3JtUHJlZml4U3VmZml4KCk7XHJcbiAgICBjbWRzVG9TZXJ2ZXIuQWRkKGNtZFRvU2VydmVyKTtcclxuXHJcbiAgICAvLyBBdm9pZCBpbW1lZGlhdGUgZXhlY3V0aW9uIG9mIHNlcnZlciBvcGVyYXRpb24gZHVyaW5nIGJyb3dzZXIgY2xvc2UgdG8gYWxsb3cgY2xvc2luZyBvZiBjb250ZXh0IGxhdGVyIGJ5IHNlbmRpbmcgQnJvd3NlckVzYyBjb21tYW5kIHRvIHNlcnZlci5cclxuICAgIGlmKCEoTUdEYXRhQ29sbGVjdGlvbi5JbnN0YW5jZS5TdGFydHVwTWdEYXRhLmdldEZpcnN0VGFzaygpLkluRW5kVGFzayAmJiBNR0RhdGFDb2xsZWN0aW9uLkluc3RhbmNlLlN0YXJ0dXBNZ0RhdGEuZ2V0Rmlyc3RUYXNrKCkuQ2xvc2luZ0Zvcm1VSSkpXHJcbiAgICAgIGF3YWl0IENvbW1hbmRzUHJvY2Vzc29yTWFuYWdlci5HZXRDb21tYW5kc1Byb2Nlc3NvcigpLkV4ZWN1dGUoQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbi5UQVNLU19BTkRfQ09NTUFORFMsIENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZXNzaW9uU3RhZ2UuTk9STUFMLCBleHApO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuZXhlY0FsbFN1YmZvcm1SZWNvcmRDeWNsZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDbGVhbiBmbGFnIGZvciBTdWJmb3JtIHJlY29yZCBjeWNsZSA8L3N1bW1hcnk+XHJcbiAgY2xlYW5Eb1N1YmZvcm1QcmVmaXhTdWZmaXgoKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5nZXRTaXplKCk7IGkrKykge1xyXG4gICAgICBsZXQgbWdkOiBNR0RhdGEgPSB0aGlzLmdldE1HRGF0YShpKTtcclxuXHJcbiAgICAgIGlmIChtZ2QgPT09IG51bGwgfHwgbWdkLklzQWJvcnRpbmcpXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICBsZXQgdGFza3NDb3VudDogbnVtYmVyID0gbWdkLmdldFRhc2tzQ291bnQoKTtcclxuICAgICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHRhc2tzQ291bnQ7IGorKykge1xyXG4gICAgICAgIGxldCB0YXNrOiBUYXNrID0gbWdkLmdldFRhc2soaik7XHJcbiAgICAgICAgdGFzay5Eb1N1YmZvcm1QcmVmaXhTdWZmaXggPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gRXhlY3V0ZSBSZWNvcmQgY3ljbGUgZm9yIGFsbCBzdWJmb3JtcyB0aGF0IHRoZWlyIGZsYWcgaXMgb24gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIGV4ZWNBbGxTdWJmb3JtUmVjb3JkQ3ljbGUoKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuZ2V0U2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgbGV0IG1nZDogTUdEYXRhID0gdGhpcy5nZXRNR0RhdGEoaSk7XHJcblxyXG4gICAgICBpZiAobWdkID09PSBudWxsIHx8IG1nZC5Jc0Fib3J0aW5nKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgbGV0IHRhc2tzQ291bnQ6IG51bWJlciA9IG1nZC5nZXRUYXNrc0NvdW50KCk7XHJcbiAgICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0YXNrc0NvdW50OyBqID0gaiArIDEpIHtcclxuICAgICAgICBsZXQgdGFzazogVGFzayA9IG1nZC5nZXRUYXNrKGopO1xyXG4gICAgICAgIGlmICh0YXNrLklzU3ViRm9ybSAmJiB0YXNrLkRvU3ViZm9ybVByZWZpeFN1ZmZpeCkge1xyXG4gICAgICAgICAgLy8gSW4gdGhlIHJlY29yZCBwcmVmaXggb2YgdGhlIGN1cnJlbnQgdGFzayAoY29tbW9uSGFuZGxlckJlZm9yZSkgd2UgZXhlY3V0ZSByZWNvcmQgcHJlZml4IG9mIGFsbCBmYXRoZXJzLlxyXG4gICAgICAgICAgLy8gQnV0IHdoZW4gd2UgcmV0dXJuIGZyb20gdGhlIHNlcnZlciB3ZSBkbyBub3QgbmVlZCBpdC4gU28gd2UgcHJldmVudCBmYXRoZXIgcmVjb3JkIHByZWZpeCBleGVjdXRpb24uXHJcbiAgICAgICAgICB0YXNrLlBlcmZvcm1QYXJlbnRSZWNvcmRQcmVmaXggPSBmYWxzZTtcclxuICAgICAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLnB1c2hOZXdFeGVjU3RhY2tzKCk7XHJcbiAgICAgICAgICBhd2FpdCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5oYW5kbGVJbnRlcm5hbEV2ZW50V2l0aFRhc2tBbmRTdWJmb3JtUmVmcmVzaCh0YXNrLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1BSRUZJWCwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgaWYgKCFBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5HZXRTdG9wRXhlY3V0aW9uRmxhZygpKVxyXG4gICAgICAgICAgICBhd2FpdCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5oYW5kbGVJbnRlcm5hbEV2ZW50V2l0aFRhc2sodGFzaywgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19TVUZGSVgpO1xyXG5cclxuICAgICAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLnBvcE5ld0V4ZWNTdGFja3MoKTtcclxuICAgICAgICAgIHRhc2suUGVyZm9ybVBhcmVudFJlY29yZFByZWZpeCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
@@ -60,4 +60,4 @@ export class RCTimer extends MgTimer {
60
60
  }
61
61
  }
62
62
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkNUaW1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvdGFza3MvUkNUaW1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl6QyxNQUFNLHFCQUFxQjtJQUN6QixNQUFNLENBQUMsb0JBQW9CLEdBQThCLElBQUksVUFBVSxFQUFpQixDQUFDOztBQUczRixNQUFNLE9BQU8sT0FBUSxTQUFRLE9BQU87SUFDMUIsT0FBTyxHQUFXLElBQUksQ0FBQztJQUN2QixPQUFPLEdBQVksS0FBSyxDQUFDO0lBR2pDLElBQUksd0JBQXdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDO0lBQ3pDLENBQUM7SUFHRCxJQUFJLFdBQVcsQ0FBQyxLQUFjO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQVksTUFBYyxFQUFFLFlBQW9CLEVBQUUsTUFBZTtRQUMvRCxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFFMUIsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV2RCxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUNuRSxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFXLENBQUMsQ0FBQztRQUVoRixxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFJRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFNRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQWMsRUFBRSxZQUFvQixFQUFFLE1BQWU7UUFDcEUsSUFBSSxNQUFNLEdBQWtCLElBQUksQ0FBQztRQUNqQyxJQUFJLEtBQUssR0FBWSxJQUFJLENBQUM7UUFDMUIsSUFBSSxRQUFRLEdBQVcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpELElBQUkscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDckUsTUFBTSxHQUFHLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV2RSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDNUIsT0FBTyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFFLE9BQU8sQ0FBQywwQkFBMEIsS0FBSyxZQUFZLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsQ0FBQTtZQUNuSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUVsQixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRWIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQ3JCLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUlELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBYztRQUMzQixJQUFJLE1BQU0sR0FBa0IsSUFBSSxDQUFDO1FBQ2pDLElBQUksUUFBUSxHQUFXLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqRCxJQUFJLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDbEUsTUFBTSxHQUFHLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV6RSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN2QixJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFFckIsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNqQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFHZixxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3Rpb25hcnksIExpc3QgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IE1nVGltZXIgfSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcbmltcG9ydCB7IE1HRGF0YSB9IGZyb20gJy4vTUdEYXRhJztcclxuXHJcbi8vLzxzdW1tYXJ5Pm1hcHBpbmcgYmV0d2VlbiBlYWNoIE1nRGF0YSB0byBpdHMgbGlzdCBvZiB0aW1lciBvYmplY3RzLjwvc3VtbWFyeT5cclxuY2xhc3MgVGltZXJPYmplY3RDb2xsZWN0aW9uIHtcclxuICBzdGF0aWMgTWdEYXRhVG9UaW1lck9iakxpc3Q6IERpY3Rpb25hcnk8TGlzdDxSQ1RpbWVyPj4gPSBuZXcgRGljdGlvbmFyeTxMaXN0PFJDVGltZXI+PigpO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUkNUaW1lciBleHRlbmRzIE1nVGltZXIge1xyXG4gIHByaXZhdGUgX21nRGF0YTogTUdEYXRhID0gbnVsbDtcclxuICBwcml2YXRlIF9pc0lkbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8vPHN1bW1hcnk+UHVibGljIHByb3BlcnR5OiBzZXRcXGdldCBUaW1lckludGVydmFsIGluIHNlY29uZHM8L3N1bW1hcnk+XHJcbiAgZ2V0IFRpbWVySW50ZXJ2YWxNaWxpU2Vjb25kcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVySW50ZXJ2YWxNaWxsaVNlY29uZHM7XHJcbiAgfVxyXG5cclxuICAvLy88c3VtbWFyeT5QdWJsaWMgcHJvcGVydHkgcmV0dXJuaW5nIHRydWUgaWYgdGltZXIgaXMgaWRsZSBlbHNlIGZhbHNlLjwvc3VtbWFyeT5cclxuICBzZXQgSXNJZGxlVGltZXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzSWRsZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IElzSWRsZVRpbWVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzSWRsZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKG1nRGF0YTogTUdEYXRhLCBtaWxsaXNlY29uZHM6IG51bWJlciwgaXNJZGxlOiBib29sZWFuKSB7XHJcbiAgICBzdXBlcihtaWxsaXNlY29uZHMpO1xyXG4gICAgdGhpcy5fbWdEYXRhID0gbWdEYXRhO1xyXG4gICAgdGhpcy5Jc0lkbGVUaW1lciA9IGlzSWRsZTtcclxuXHJcbiAgICBsZXQgbWdEYXRhSWQ6IHN0cmluZyA9IHRoaXMuX21nRGF0YS5HZXRJZCgpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgaWYgKCFUaW1lck9iamVjdENvbGxlY3Rpb24uTWdEYXRhVG9UaW1lck9iakxpc3QuQ29udGFpbnNLZXkobWdEYXRhSWQpKVxyXG4gICAgICBUaW1lck9iamVjdENvbGxlY3Rpb24uTWdEYXRhVG9UaW1lck9iakxpc3QuQWRkKG1nRGF0YUlkLCBuZXcgTGlzdDxSQ1RpbWVyPigpKTtcclxuXHJcbiAgICBUaW1lck9iamVjdENvbGxlY3Rpb24uTWdEYXRhVG9UaW1lck9iakxpc3QuZ2V0X0l0ZW0obWdEYXRhSWQpLnB1c2godGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+cmV0dXJucyBNZ0RhdGEuPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0TWdkYXRhKCk6IE1HRGF0YSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdEYXRhO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlN0b3BzIHRoZSB0aW1lciBjb3JyZXNwb25kaW5nIHRvIE1HRGF0YSBwYXNzZWQgd2l0aCB0aGUgaW50ZXJ2YWwgc3BlY2lmaWVkIGluIHNlY29uZHMuPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1nRGF0YVwiPk1nRGF0YSBvYmplY3Q8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNlY29uZHNcIj5UaW1lciBpbnRlcnZhbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNJZGxlXCI+SXMgaWRsZSB0aW1lciBvciBub3Q8L3BhcmFtPlxyXG4gIHN0YXRpYyBTdG9wVGltZXIobWdEYXRhOiBNR0RhdGEsIG1pbGxpc2Vjb25kczogbnVtYmVyLCBpc0lkbGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGxldCB0aW1lcnM6IExpc3Q8UkNUaW1lcj4gPSBudWxsO1xyXG4gICAgbGV0IHRpbWVyOiBSQ1RpbWVyID0gbnVsbDtcclxuICAgIGxldCBtZ0RhdGFJZDogc3RyaW5nID0gbWdEYXRhLkdldElkKCkudG9TdHJpbmcoKTtcclxuXHJcbiAgICBpZiAoVGltZXJPYmplY3RDb2xsZWN0aW9uLk1nRGF0YVRvVGltZXJPYmpMaXN0LkNvbnRhaW5zS2V5KG1nRGF0YUlkKSkge1xyXG4gICAgICB0aW1lcnMgPSBUaW1lck9iamVjdENvbGxlY3Rpb24uTWdEYXRhVG9UaW1lck9iakxpc3QuZ2V0X0l0ZW0obWdEYXRhSWQpO1xyXG5cclxuICAgICAgdGltZXIgPSB0aW1lcnMuZmluZChyY1RpbWVyID0+IHtcclxuICAgICAgICByZXR1cm4gKHJjVGltZXIgIT09IG51bGwpICYmICggcmNUaW1lci5fdGltZXJJbnRlcnZhbE1pbGxpU2Vjb25kcyA9PT0gbWlsbGlzZWNvbmRzICYmIHJjVGltZXIuX2lzSWRsZSA9PT0gaXNJZGxlKVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aW1lciAhPSBudWxsKSB7XHJcbiAgICAgICAgLy8gUGxhY2luZyBTVE9QX1RJTUVSIGNvbW1hbmQgaW4gcXVldWUuXHJcbiAgICAgICAgdGltZXIuU3RvcCgpO1xyXG5cclxuICAgICAgICB0aW1lcnMuUmVtb3ZlKHRpbWVyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRpbWVycy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgVGltZXJPYmplY3RDb2xsZWN0aW9uLk1nRGF0YVRvVGltZXJPYmpMaXN0LlJlbW92ZShtZ0RhdGFJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+U3RvcHMgYWxsIHRoZSB0aW1lcnMuPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIk1nRGF0YVwiPjwvcGFyYW0+XHJcbiAgc3RhdGljIFN0b3BBbGwobWdEYXRhOiBNR0RhdGEpOiB2b2lkIHtcclxuICAgIGxldCB0aW1lcnM6IExpc3Q8UkNUaW1lcj4gPSBudWxsO1xyXG4gICAgbGV0IG1nRGF0YUlkOiBzdHJpbmcgPSBtZ0RhdGEuR2V0SWQoKS50b1N0cmluZygpO1xyXG5cclxuICAgIGlmIChUaW1lck9iamVjdENvbGxlY3Rpb24uTWdEYXRhVG9UaW1lck9iakxpc3QuQ29udGFpbnNLZXkobWdEYXRhSWQpKVxyXG4gICAgICB0aW1lcnMgPSBUaW1lck9iamVjdENvbGxlY3Rpb24uTWdEYXRhVG9UaW1lck9iakxpc3QuZ2V0X0l0ZW0obWdEYXRhSWQpO1xyXG5cclxuICAgIGlmICh0aW1lcnMgIT09IG51bGwpIHtcclxuICAgICAgdGltZXJzLmZvckVhY2gocmNUaW1lciA9PiB7XHJcbiAgICAgICAgaWYgKHJjVGltZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgIC8vIFBsYWNpbmcgU1RPUF9USU1FUiBjb21tYW5kIGluIHF1ZXVlLlxyXG4gICAgICAgICAgcmNUaW1lci5TdG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRpbWVycy5DbGVhcigpO1xyXG5cclxuICAgICAgLy8gUmVtb3ZpbmcgdGhlIGtleSBmcm9tIHRoZSBoYXNoIHRhYmxlLCBhZnRlciB0aGUgbGlzdCBvZiB0aW1lciBvYmplY3RzIGFyZSBjbGVhcmVkLlxyXG4gICAgICBUaW1lck9iamVjdENvbGxlY3Rpb24uTWdEYXRhVG9UaW1lck9iakxpc3QuUmVtb3ZlKG1nRGF0YUlkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkNUaW1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvdGFza3MvUkNUaW1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl6QyxNQUFNLHFCQUFxQjtJQUN6QixNQUFNLENBQUMsb0JBQW9CLEdBQThCLElBQUksVUFBVSxFQUFpQixDQUFDOztBQUczRixNQUFNLE9BQU8sT0FBUSxTQUFRLE9BQU87SUFDMUIsT0FBTyxHQUFXLElBQUksQ0FBQztJQUN2QixPQUFPLEdBQVksS0FBSyxDQUFDO0lBR2pDLElBQUksd0JBQXdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDO0lBQ3pDLENBQUM7SUFHRCxJQUFJLFdBQVcsQ0FBQyxLQUFjO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQVksTUFBYyxFQUFFLFlBQW9CLEVBQUUsTUFBZTtRQUMvRCxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFFMUIsSUFBSSxRQUFRLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV2RCxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUNuRSxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFXLENBQUMsQ0FBQztRQUVoRixxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFJRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFNRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQWMsRUFBRSxZQUFvQixFQUFFLE1BQWU7UUFDcEUsSUFBSSxNQUFNLEdBQWtCLElBQUksQ0FBQztRQUNqQyxJQUFJLEtBQUssR0FBWSxJQUFJLENBQUM7UUFDMUIsSUFBSSxRQUFRLEdBQVcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpELElBQUkscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BFLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdkUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzVCLE9BQU8sQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBRSxPQUFPLENBQUMsMEJBQTBCLEtBQUssWUFBWSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUE7WUFDbkgsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0JBRWpCLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFFYixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RCO1lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQ3JCLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7SUFJRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWM7UUFDM0IsSUFBSSxNQUFNLEdBQWtCLElBQUksQ0FBQztRQUNqQyxJQUFJLFFBQVEsR0FBVyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakQsSUFBSSxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQ2xFLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekUsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3ZCLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtvQkFFcEIsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNoQjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBR2YscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdGlvbmFyeSwgTGlzdCB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgTWdUaW1lciB9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHsgTUdEYXRhIH0gZnJvbSAnLi9NR0RhdGEnO1xyXG5cclxuLy8vPHN1bW1hcnk+bWFwcGluZyBiZXR3ZWVuIGVhY2ggTWdEYXRhIHRvIGl0cyBsaXN0IG9mIHRpbWVyIG9iamVjdHMuPC9zdW1tYXJ5PlxyXG5jbGFzcyBUaW1lck9iamVjdENvbGxlY3Rpb24ge1xyXG4gIHN0YXRpYyBNZ0RhdGFUb1RpbWVyT2JqTGlzdDogRGljdGlvbmFyeTxMaXN0PFJDVGltZXI+PiA9IG5ldyBEaWN0aW9uYXJ5PExpc3Q8UkNUaW1lcj4+KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSQ1RpbWVyIGV4dGVuZHMgTWdUaW1lciB7XHJcbiAgcHJpdmF0ZSBfbWdEYXRhOiBNR0RhdGEgPSBudWxsO1xyXG4gIHByaXZhdGUgX2lzSWRsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLy88c3VtbWFyeT5QdWJsaWMgcHJvcGVydHk6IHNldFxcZ2V0IFRpbWVySW50ZXJ2YWwgaW4gc2Vjb25kczwvc3VtbWFyeT5cclxuICBnZXQgVGltZXJJbnRlcnZhbE1pbGlTZWNvbmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZXJJbnRlcnZhbE1pbGxpU2Vjb25kcztcclxuICB9XHJcblxyXG4gIC8vLzxzdW1tYXJ5PlB1YmxpYyBwcm9wZXJ0eSByZXR1cm5pbmcgdHJ1ZSBpZiB0aW1lciBpcyBpZGxlIGVsc2UgZmFsc2UuPC9zdW1tYXJ5PlxyXG4gIHNldCBJc0lkbGVUaW1lcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNJZGxlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgSXNJZGxlVGltZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNJZGxlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IobWdEYXRhOiBNR0RhdGEsIG1pbGxpc2Vjb25kczogbnVtYmVyLCBpc0lkbGU6IGJvb2xlYW4pIHtcclxuICAgIHN1cGVyKG1pbGxpc2Vjb25kcyk7XHJcbiAgICB0aGlzLl9tZ0RhdGEgPSBtZ0RhdGE7XHJcbiAgICB0aGlzLklzSWRsZVRpbWVyID0gaXNJZGxlO1xyXG5cclxuICAgIGxldCBtZ0RhdGFJZDogc3RyaW5nID0gdGhpcy5fbWdEYXRhLkdldElkKCkudG9TdHJpbmcoKTtcclxuXHJcbiAgICBpZiAoIVRpbWVyT2JqZWN0Q29sbGVjdGlvbi5NZ0RhdGFUb1RpbWVyT2JqTGlzdC5Db250YWluc0tleShtZ0RhdGFJZCkpXHJcbiAgICAgIFRpbWVyT2JqZWN0Q29sbGVjdGlvbi5NZ0RhdGFUb1RpbWVyT2JqTGlzdC5BZGQobWdEYXRhSWQsIG5ldyBMaXN0PFJDVGltZXI+KCkpO1xyXG5cclxuICAgIFRpbWVyT2JqZWN0Q29sbGVjdGlvbi5NZ0RhdGFUb1RpbWVyT2JqTGlzdC5nZXRfSXRlbShtZ0RhdGFJZCkucHVzaCh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5yZXR1cm5zIE1nRGF0YS48L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRNZ2RhdGEoKTogTUdEYXRhIHtcclxuICAgIHJldHVybiB0aGlzLl9tZ0RhdGE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+U3RvcHMgdGhlIHRpbWVyIGNvcnJlc3BvbmRpbmcgdG8gTUdEYXRhIHBhc3NlZCB3aXRoIHRoZSBpbnRlcnZhbCBzcGVjaWZpZWQgaW4gc2Vjb25kcy48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWdEYXRhXCI+TWdEYXRhIG9iamVjdDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2Vjb25kc1wiPlRpbWVyIGludGVydmFsPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc0lkbGVcIj5JcyBpZGxlIHRpbWVyIG9yIG5vdDwvcGFyYW0+XHJcbiAgc3RhdGljIFN0b3BUaW1lcihtZ0RhdGE6IE1HRGF0YSwgbWlsbGlzZWNvbmRzOiBudW1iZXIsIGlzSWRsZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IHRpbWVyczogTGlzdDxSQ1RpbWVyPiA9IG51bGw7XHJcbiAgICBsZXQgdGltZXI6IFJDVGltZXIgPSBudWxsO1xyXG4gICAgbGV0IG1nRGF0YUlkOiBzdHJpbmcgPSBtZ0RhdGEuR2V0SWQoKS50b1N0cmluZygpO1xyXG5cclxuICAgIGlmIChUaW1lck9iamVjdENvbGxlY3Rpb24uTWdEYXRhVG9UaW1lck9iakxpc3QuQ29udGFpbnNLZXkobWdEYXRhSWQpKSB7XHJcbiAgICAgIHRpbWVycyA9IFRpbWVyT2JqZWN0Q29sbGVjdGlvbi5NZ0RhdGFUb1RpbWVyT2JqTGlzdC5nZXRfSXRlbShtZ0RhdGFJZCk7XHJcblxyXG4gICAgICB0aW1lciA9IHRpbWVycy5maW5kKHJjVGltZXIgPT4ge1xyXG4gICAgICAgIHJldHVybiAocmNUaW1lciAhPT0gbnVsbCkgJiYgKCByY1RpbWVyLl90aW1lckludGVydmFsTWlsbGlTZWNvbmRzID09PSBtaWxsaXNlY29uZHMgJiYgcmNUaW1lci5faXNJZGxlID09PSBpc0lkbGUpXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRpbWVyICE9IG51bGwpIHtcclxuICAgICAgICAvLyBQbGFjaW5nIFNUT1BfVElNRVIgY29tbWFuZCBpbiBxdWV1ZS5cclxuICAgICAgICB0aW1lci5TdG9wKCk7XHJcblxyXG4gICAgICAgIHRpbWVycy5SZW1vdmUodGltZXIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGltZXJzLmxlbmd0aCA9PT0gMClcclxuICAgICAgICBUaW1lck9iamVjdENvbGxlY3Rpb24uTWdEYXRhVG9UaW1lck9iakxpc3QuUmVtb3ZlKG1nRGF0YUlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5TdG9wcyBhbGwgdGhlIHRpbWVycy48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiTWdEYXRhXCI+PC9wYXJhbT5cclxuICBzdGF0aWMgU3RvcEFsbChtZ0RhdGE6IE1HRGF0YSk6IHZvaWQge1xyXG4gICAgbGV0IHRpbWVyczogTGlzdDxSQ1RpbWVyPiA9IG51bGw7XHJcbiAgICBsZXQgbWdEYXRhSWQ6IHN0cmluZyA9IG1nRGF0YS5HZXRJZCgpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgaWYgKFRpbWVyT2JqZWN0Q29sbGVjdGlvbi5NZ0RhdGFUb1RpbWVyT2JqTGlzdC5Db250YWluc0tleShtZ0RhdGFJZCkpXHJcbiAgICAgIHRpbWVycyA9IFRpbWVyT2JqZWN0Q29sbGVjdGlvbi5NZ0RhdGFUb1RpbWVyT2JqTGlzdC5nZXRfSXRlbShtZ0RhdGFJZCk7XHJcblxyXG4gICAgaWYgKHRpbWVycyAhPT0gbnVsbCkge1xyXG4gICAgICB0aW1lcnMuZm9yRWFjaChyY1RpbWVyID0+IHtcclxuICAgICAgICBpZiAocmNUaW1lciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgLy8gUGxhY2luZyBTVE9QX1RJTUVSIGNvbW1hbmQgaW4gcXVldWUuXHJcbiAgICAgICAgICByY1RpbWVyLlN0b3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGltZXJzLkNsZWFyKCk7XHJcblxyXG4gICAgICAvLyBSZW1vdmluZyB0aGUga2V5IGZyb20gdGhlIGhhc2ggdGFibGUsIGFmdGVyIHRoZSBsaXN0IG9mIHRpbWVyIG9iamVjdHMgYXJlIGNsZWFyZWQuXHJcbiAgICAgIFRpbWVyT2JqZWN0Q29sbGVjdGlvbi5NZ0RhdGFUb1RpbWVyT2JqTGlzdC5SZW1vdmUobWdEYXRhSWQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=