testcafe 1.20.2-alpha.1 → 2.0.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/lib/api/request-hooks/assert-type.js +2 -2
  2. package/lib/api/request-hooks/hook.js +2 -2
  3. package/lib/api/request-hooks/request-logger.js +2 -2
  4. package/lib/api/skip-js-errors/index.js +62 -0
  5. package/lib/api/structure/base-unit.js +2 -2
  6. package/lib/api/structure/fixture.js +13 -13
  7. package/lib/api/structure/test.js +18 -17
  8. package/lib/api/structure/testing-unit.js +26 -16
  9. package/lib/api/test-controller/assertion.js +5 -5
  10. package/lib/api/test-controller/execution-context.js +2 -2
  11. package/lib/api/test-controller/index.js +33 -30
  12. package/lib/api/test-controller/proxy.js +2 -2
  13. package/lib/api/test-page-url.js +4 -4
  14. package/lib/api/test-run-tracker.js +2 -2
  15. package/lib/api/wrap-test-function.js +3 -3
  16. package/lib/assertions/executor.js +4 -4
  17. package/lib/assertions/get-fn.js +3 -3
  18. package/lib/browser/connection/gateway.js +18 -18
  19. package/lib/browser/connection/get-hints.js +8 -8
  20. package/lib/browser/connection/index.js +11 -11
  21. package/lib/browser/connection/remotes-queue.js +4 -4
  22. package/lib/browser/provider/built-in/dedicated/base.js +6 -6
  23. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +10 -10
  24. package/lib/browser/provider/built-in/dedicated/chrome/config.js +17 -17
  25. package/lib/browser/provider/built-in/dedicated/chrome/create-temp-profile.js +4 -4
  26. package/lib/browser/provider/built-in/dedicated/chrome/index.js +6 -6
  27. package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +6 -6
  28. package/lib/browser/provider/built-in/dedicated/chrome/runtime-info.js +4 -4
  29. package/lib/browser/provider/built-in/dedicated/edge/runtime-info.js +2 -2
  30. package/lib/browser/provider/built-in/dedicated/firefox/config.js +8 -8
  31. package/lib/browser/provider/built-in/dedicated/firefox/create-temp-profile.js +3 -3
  32. package/lib/browser/provider/built-in/dedicated/firefox/index.js +5 -5
  33. package/lib/browser/provider/built-in/dedicated/firefox/local-firefox.js +2 -2
  34. package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/index.js +7 -7
  35. package/lib/browser/provider/built-in/dedicated/firefox/runtime-info.js +3 -3
  36. package/lib/browser/provider/built-in/path.js +2 -2
  37. package/lib/browser/provider/built-in/remote.js +3 -3
  38. package/lib/browser/provider/index.js +5 -5
  39. package/lib/browser/provider/plugin-host.js +5 -6
  40. package/lib/browser/provider/pool.js +4 -4
  41. package/lib/browser/provider/utils/argument-parsing.js +3 -3
  42. package/lib/browser/provider/utils/browser-starter.js +2 -2
  43. package/lib/cli/argument-parser/index.js +52 -41
  44. package/lib/cli/argument-parser/parse-utils.js +2 -2
  45. package/lib/cli/authentication-helper.js +3 -3
  46. package/lib/cli/cli.js +8 -8
  47. package/lib/cli/correct-browsers-and-sources.js +2 -2
  48. package/lib/cli/index.js +2 -2
  49. package/lib/cli/log.js +3 -3
  50. package/lib/cli/remotes-wizard.js +3 -3
  51. package/lib/client/automation/index.js +120 -34
  52. package/lib/client/automation/index.min.js +1 -1
  53. package/lib/client/browser/idle-page/index.js +321 -317
  54. package/lib/client/browser/service-worker.js +244 -290
  55. package/lib/client/core/deps/hammerhead.js +12 -4
  56. package/lib/client/core/index.js +145 -55
  57. package/lib/client/core/index.min.js +1 -1
  58. package/lib/client/core/utils/dom.js +33 -28
  59. package/lib/client/core/utils/position.js +18 -14
  60. package/lib/client/core/utils/style.js +8 -4
  61. package/lib/client/driver/command-executors/client-functions/selector-executor/filter.js +5 -5
  62. package/lib/client/driver/command-executors/client-functions/selector-executor/utils.js +3 -3
  63. package/lib/client/driver/deps/hammerhead.js +12 -4
  64. package/lib/client/driver/deps/testcafe-core.js +12 -4
  65. package/lib/client/driver/deps/testcafe-ui.js +12 -4
  66. package/lib/client/driver/index.js +654 -630
  67. package/lib/client/driver/index.min.js +1 -1
  68. package/lib/client/driver/status.js +2 -2
  69. package/lib/client/ui/index.js +10 -8
  70. package/lib/client/ui/index.min.js +1 -1
  71. package/lib/client-functions/builder-symbol.js +1 -2
  72. package/lib/client-functions/client-function-builder.js +12 -12
  73. package/lib/client-functions/replicator.js +2 -2
  74. package/lib/client-functions/selector-api-execution-mode.js +2 -2
  75. package/lib/client-functions/selectors/add-api.js +48 -48
  76. package/lib/client-functions/selectors/selector-builder.js +17 -17
  77. package/lib/compiler/compile-client-function.js +6 -6
  78. package/lib/compiler/index.js +9 -9
  79. package/lib/compiler/test-file/api-based.js +8 -8
  80. package/lib/compiler/test-file/base.js +6 -6
  81. package/lib/compiler/test-file/exportble-lib-path.js +2 -2
  82. package/lib/compiler/test-file/formats/coffeescript/compiler.js +2 -2
  83. package/lib/compiler/test-file/formats/coffeescript/get-test-list.js +2 -2
  84. package/lib/compiler/test-file/formats/es-next/compiler.js +4 -4
  85. package/lib/compiler/test-file/formats/es-next/get-test-list.js +4 -4
  86. package/lib/compiler/test-file/formats/raw.js +2 -2
  87. package/lib/compiler/test-file/formats/typescript/compiler.js +11 -11
  88. package/lib/compiler/test-file/formats/typescript/get-test-list.js +3 -3
  89. package/lib/compiler/test-file/test-file-parser-base.js +3 -3
  90. package/lib/configuration/configuration-base.js +15 -15
  91. package/lib/configuration/interfaces.js +1 -1
  92. package/lib/configuration/skip-js-errors-option-names.js +11 -0
  93. package/lib/configuration/testcafe-configuration.js +21 -16
  94. package/lib/configuration/types.js +1 -1
  95. package/lib/configuration/typescript-configuration.js +4 -4
  96. package/lib/custom-client-scripts/assert-type.js +2 -2
  97. package/lib/custom-client-scripts/client-script.js +6 -6
  98. package/lib/custom-client-scripts/get-code.js +2 -2
  99. package/lib/custom-client-scripts/routing.js +3 -3
  100. package/lib/custom-client-scripts/utils.js +3 -3
  101. package/lib/dashboard/connector.js +4 -4
  102. package/lib/dashboard/get-default-project-link.js +2 -2
  103. package/lib/dashboard/index.js +26 -26
  104. package/lib/errors/create-stack-filter.js +2 -2
  105. package/lib/errors/error-list.js +2 -2
  106. package/lib/errors/get-callsite.js +2 -2
  107. package/lib/errors/is-internal-stack-frame.js +5 -5
  108. package/lib/errors/process-test-fn-error.js +2 -2
  109. package/lib/errors/runtime/index.js +10 -10
  110. package/lib/errors/runtime/templates.js +5 -2
  111. package/lib/errors/runtime/type-assertions.js +6 -6
  112. package/lib/errors/stack-cleaning-hook.js +2 -2
  113. package/lib/errors/test-run/formattable-adapter.js +7 -7
  114. package/lib/errors/test-run/index.js +25 -5
  115. package/lib/errors/test-run/render-error-template/index.js +6 -6
  116. package/lib/errors/test-run/render-error-template/utils.js +2 -2
  117. package/lib/errors/test-run/templates.js +40 -31
  118. package/lib/errors/test-run/utils.js +7 -7
  119. package/lib/errors/types.js +5 -1
  120. package/lib/index.js +1 -1
  121. package/lib/live/file-watcher/index.js +2 -2
  122. package/lib/live/keyboard-observer.js +3 -3
  123. package/lib/live/test-run-controller.js +3 -3
  124. package/lib/live/test-run.js +3 -2
  125. package/lib/live/test-runner.js +2 -2
  126. package/lib/load-assets.js +2 -2
  127. package/lib/notifications/add-rendered-warning.js +4 -4
  128. package/lib/notifications/debug-logger.js +6 -6
  129. package/lib/notifications/deprecated.js +2 -2
  130. package/lib/notifications/information-message.js +4 -3
  131. package/lib/proxyless/resource-injector.js +4 -4
  132. package/lib/reporter/command/command-formatter.js +4 -4
  133. package/lib/reporter/index.js +10 -10
  134. package/lib/reporter/plugin-host.js +7 -7
  135. package/lib/role/index.js +8 -8
  136. package/lib/role/role.js +2 -2
  137. package/lib/runner/bootstrapper.js +20 -20
  138. package/lib/runner/browser-job.js +3 -3
  139. package/lib/runner/browser-set.js +12 -12
  140. package/lib/runner/fixture-hook-controller.js +5 -5
  141. package/lib/runner/index.js +43 -33
  142. package/lib/runner/task/index.js +10 -6
  143. package/lib/runner/test-run-hook-controller.js +5 -5
  144. package/lib/runner/tested-app.js +7 -7
  145. package/lib/screenshots/capturer.js +17 -17
  146. package/lib/screenshots/crop.js +8 -8
  147. package/lib/screenshots/index.js +6 -10
  148. package/lib/screenshots/utils.js +4 -4
  149. package/lib/services/compiler/host.js +8 -8
  150. package/lib/services/compiler/service.js +13 -13
  151. package/lib/services/compiler/test-run-proxy.js +8 -8
  152. package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +2 -2
  153. package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +2 -1
  154. package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +3 -3
  155. package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +2 -2
  156. package/lib/services/serialization/test-structure.js +4 -4
  157. package/lib/services/utils/ipc/interfaces.js +1 -3
  158. package/lib/services/utils/ipc/io.js +3 -3
  159. package/lib/services/utils/ipc/message.js +2 -2
  160. package/lib/services/utils/ipc/proxy.js +4 -4
  161. package/lib/services/utils/ipc/transport.js +2 -2
  162. package/lib/shared/errors/index.js +9 -2
  163. package/lib/shared/errors/selector-error-ctor-callback.js +7 -3
  164. package/lib/test-run/bookmark.js +1 -1
  165. package/lib/test-run/browser-manipulation-queue.js +3 -3
  166. package/lib/test-run/commands/actions.js +66 -46
  167. package/lib/test-run/commands/assertion.js +3 -3
  168. package/lib/test-run/commands/base.js +2 -2
  169. package/lib/test-run/commands/browser-manipulation.js +8 -8
  170. package/lib/test-run/commands/observation.js +4 -4
  171. package/lib/test-run/commands/options.js +27 -12
  172. package/lib/test-run/commands/type.js +2 -1
  173. package/lib/test-run/commands/utils.js +3 -2
  174. package/lib/test-run/commands/validations/argument.js +19 -10
  175. package/lib/test-run/commands/validations/factories.js +10 -2
  176. package/lib/test-run/commands/validations/initializers.js +4 -4
  177. package/lib/test-run/debug-log.js +4 -4
  178. package/lib/test-run/execute-js-expression/index.js +4 -4
  179. package/lib/test-run/index.js +48 -41
  180. package/lib/test-run/request/create-request-options.js +9 -9
  181. package/lib/test-run/request/process-response-data.js +2 -2
  182. package/lib/test-run/request/send.js +5 -5
  183. package/lib/testcafe.js +8 -4
  184. package/lib/utils/check-file-path.js +2 -2
  185. package/lib/utils/check-url.js +2 -2
  186. package/lib/utils/correct-file-path.js +4 -4
  187. package/lib/utils/delegated-api.js +1 -1
  188. package/lib/utils/detect-ffmpeg.js +3 -3
  189. package/lib/utils/diff/colors.js +2 -2
  190. package/lib/utils/diff/index.js +11 -7
  191. package/lib/utils/diff/util.js +5 -5
  192. package/lib/utils/diff.js +4 -4
  193. package/lib/utils/escape-user-agent.js +2 -2
  194. package/lib/utils/execute-fn-with-timeout.js +2 -2
  195. package/lib/utils/get-browser.js +2 -2
  196. package/lib/utils/get-filter-fn.js +4 -4
  197. package/lib/utils/get-options/base.js +2 -2
  198. package/lib/utils/get-options/compiler.js +2 -2
  199. package/lib/utils/get-options/dashboard.js +2 -2
  200. package/lib/utils/get-options/get-assertion-timeout.js +1 -1
  201. package/lib/utils/get-options/index.js +4 -2
  202. package/lib/utils/get-options/meta.js +2 -2
  203. package/lib/utils/get-options/quarantine.js +8 -6
  204. package/lib/utils/get-options/screenshot.js +2 -2
  205. package/lib/utils/get-options/skip-js-errors.js +35 -0
  206. package/lib/utils/get-options/ssl.js +6 -6
  207. package/lib/utils/get-options/video.js +2 -2
  208. package/lib/utils/is-password-input.js +1 -1
  209. package/lib/utils/log-entry.js +2 -2
  210. package/lib/utils/make-reg-exp.js +19 -6
  211. package/lib/utils/moment-loader.js +2 -2
  212. package/lib/utils/parse-file-list.js +7 -7
  213. package/lib/utils/path-pattern.js +4 -4
  214. package/lib/utils/prepare-reporters.js +2 -2
  215. package/lib/utils/prerender-callsite.js +6 -6
  216. package/lib/utils/process.js +7 -7
  217. package/lib/utils/promisified-functions.js +14 -14
  218. package/lib/utils/raw-command-callsite-record.js +2 -2
  219. package/lib/utils/resolve-path-relatively-cwd.js +2 -2
  220. package/lib/utils/string.js +3 -3
  221. package/lib/utils/temp-directory/cleanup-process/index.js +6 -6
  222. package/lib/utils/temp-directory/cleanup-process/worker.js +4 -4
  223. package/lib/utils/temp-directory/index.js +6 -6
  224. package/lib/utils/temp-directory/lockfile.js +2 -2
  225. package/lib/video-recorder/process.js +6 -6
  226. package/lib/video-recorder/recorder.js +9 -9
  227. package/lib/video-recorder/test-run-video-recorder.js +2 -2
  228. package/package.json +8 -7
  229. package/ts-defs/index.d.ts +46 -7
  230. package/ts-defs/selectors.d.ts +39 -0
  231. package/ts-defs/testcafe-scripts.d.ts +39 -0
@@ -105,7 +105,7 @@ class CommandFormatter {
105
105
  formattedCommand[key] = this._prepareSelector(property, key);
106
106
  else if (isCommandOptions(property)) {
107
107
  const modifiedOptions = CommandFormatter._getModifiedOptions(property);
108
- if (!lodash_1.isEmpty(modifiedOptions))
108
+ if (!(0, lodash_1.isEmpty)(modifiedOptions))
109
109
  formattedCommand[key] = modifiedOptions;
110
110
  }
111
111
  else
@@ -115,14 +115,14 @@ class CommandFormatter {
115
115
  _ensureSelectorElements() {
116
116
  if (!this._result || this._elements.length)
117
117
  return;
118
- const decoded = replicator_1.createReplicator(new replicator_1.SelectorNodeTransform()).decode(this._result);
118
+ const decoded = (0, replicator_1.createReplicator)(new replicator_1.SelectorNodeTransform()).decode(this._result);
119
119
  this._elements = Array.isArray(decoded) ? decoded : [decoded];
120
120
  }
121
121
  static _getModifiedOptions(commandOptions) {
122
122
  const constructor = commandOptions.constructor;
123
123
  const defaultOptions = new constructor();
124
- return diff_1.default(defaultOptions, commandOptions);
124
+ return (0, diff_1.default)(defaultOptions, commandOptions);
125
125
  }
126
126
  }
127
127
  exports.CommandFormatter = CommandFormatter;
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVwb3J0ZXIvY29tbWFuZC9jb21tYW5kLWZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBaUM7QUFDakMscUVBQTJHO0FBQzNHLDZEQU15QztBQUV6QyxrRUFBNEY7QUFJNUYsNERBQW9DO0FBRXBDLDZEQUl5QztBQUd6Qyx3RUFBdUQ7QUFDdkQsaUVBQXFFO0FBR3JFLE1BQU0sNkJBQTZCLEdBQUcsVUFBVSxDQUFDO0FBRWpELFNBQVMsZ0JBQWdCLENBQUUsR0FBVztJQUNsQyxPQUFPLEdBQUcsWUFBWSx1QkFBYSxJQUFJLEdBQUcsWUFBWSxrQ0FBd0IsSUFBSSxHQUFHLFlBQVksMEJBQWdCLENBQUM7QUFDdEgsQ0FBQztBQUVELE1BQWEsZ0JBQWdCO0lBS3pCLFlBQW9CLE9BQW9CLEVBQUUsTUFBZTtRQUpqRCxjQUFTLEdBQWtCLEVBQUUsQ0FBQztRQUtsQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRU0sTUFBTTtRQUNULE1BQU0sZ0JBQWdCLEdBQXFCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTFHLElBQUksSUFBSSxDQUFDLFFBQVEsWUFBWSxvQ0FBc0I7WUFDL0MsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQzVFLElBQUksSUFBSSxDQUFDLFFBQVEsWUFBWSwwQ0FBNEI7WUFDMUQsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENB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QU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLFFBQWtCLENBQUMsQ0FBQztnQkFFakYsSUFBSSxDQUFDLGdCQUFPLENBQUMsZUFBZSxDQUFDO29CQUN6QixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUM7YUFDL0M7O2dCQUVHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQ3RDLE9BQU87UUFFWCxNQUFNLE9BQU8sR0FBRyw2QkFBZ0IsQ0FBQyxJQUFJLGtDQUFxQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5GLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxNQUFNLENBQUMsbUJBQW1CLENBQUUsY0FBc0I7UUFDdEQsTUFBTSxXQUFXLEdBQU0sY0FBYyxDQUFDLFdBQWdDLENBQUM7UUFDdkUsTUFBTSxjQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUV6QyxPQUFPLGNBQUksQ0FBQyxjQUFvQyxFQUFFLGNBQW9DLENBQUMsQ0FBQztJQUM1RixDQUFDO0NBQ0o7QUEvSUQsNENBK0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBFeGVjdXRlU2VsZWN0b3JDb21tYW5kLCBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb2JzZXJ2YXRpb24nO1xuaW1wb3J0IHtcbiAgICBOYXZpZ2F0ZVRvQ29tbWFuZCxcbiAgICBQcmVzc0tleUNvbW1hbmQsXG4gICAgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQsXG4gICAgVHlwZVRleHRDb21tYW5kLFxuICAgIFVzZVJvbGVDb21tYW5kLFxufSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hY3Rpb25zJztcblxuaW1wb3J0IHsgY3JlYXRlUmVwbGljYXRvciwgU2VsZWN0b3JOb2RlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vY2xpZW50LWZ1bmN0aW9ucy9yZXBsaWNhdG9yJztcbmltcG9ydCB7IEZvcm1hdHRlZENvbW1hbmQsIFNlbGVjdG9ySW5mbyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IGRpZmYgZnJvbSAnLi4vLi4vdXRpbHMvZGlmZic7XG5cbmltcG9ydCB7XG4gICAgQWN0aW9uT3B0aW9ucyxcbiAgICBSZXNpemVUb0ZpdERldmljZU9wdGlvbnMsXG4gICAgQXNzZXJ0aW9uT3B0aW9ucyxcbn0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb3B0aW9ucyc7XG5cbmltcG9ydCB7IENvbW1hbmRCYXNlIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYmFzZSc7XG5pbXBvcnQgQ29tbWFuZFR5cGUgZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvdHlwZSc7XG5pbXBvcnQgeyBBc3NlcnRpb25Db21tYW5kIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYXNzZXJ0aW9uJztcblxuXG5jb25zdCBDT05GSURFTlRJQUxfSU5GT19QTEFDRUhPTERFUiA9ICcqKioqKioqKic7XG5cbmZ1bmN0aW9uIGlzQ29tbWFuZE9wdGlvbnMgKG9iajogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEFjdGlvbk9wdGlvbnMgfHwgb2JqIGluc3RhbmNlb2YgUmVzaXplVG9GaXREZXZpY2VPcHRpb25zIHx8IG9iaiBpbnN0YW5jZW9mIEFzc2VydGlvbk9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kRm9ybWF0dGVyIHtcbiAgICBwcml2YXRlIF9lbGVtZW50czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbW1hbmQ6IENvbW1hbmRCYXNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Jlc3VsdDogdW5rbm93bjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoY29tbWFuZDogQ29tbWFuZEJhc2UsIHJlc3VsdDogdW5rbm93bikge1xuICAgICAgICB0aGlzLl9jb21tYW5kID0gY29tbWFuZDtcbiAgICAgICAgdGhpcy5fcmVzdWx0ID0gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JtYXQgKCk6IEZvcm1hdHRlZENvbW1hbmQge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRDb21tYW5kOiBGb3JtYXR0ZWRDb21tYW5kID0geyB0eXBlOiB0aGlzLl9jb21tYW5kLnR5cGUsIGFjdGlvbklkOiB0aGlzLl9jb21tYW5kLmFjdGlvbklkIH07XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbW1hbmQgaW5zdGFuY2VvZiBFeGVjdXRlU2VsZWN0b3JDb21tYW5kKVxuICAgICAgICAgICAgZm9ybWF0dGVkQ29tbWFuZC5zZWxlY3RvciA9IHRoaXMuX3ByZXBhcmVTZWxlY3Rvcih0aGlzLl9jb21tYW5kLCAnc2VsZWN0b3InKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY29tbWFuZCBpbnN0YW5jZW9mIEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQpXG4gICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kLmNsaWVudEZuID0gdGhpcy5fcHJlcGFyZUNsaWVudEZ1bmN0aW9uKHRoaXMuX2NvbW1hbmQpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb21tYW5kIGluc3RhbmNlb2YgVXNlUm9sZUNvbW1hbmQpXG4gICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kLnJvbGUgPSB0aGlzLl9wcmVwYXJlUm9sZSh0aGlzLl9jb21tYW5kKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY29tbWFuZCBpbnN0YW5jZW9mIE5hdmlnYXRlVG9Db21tYW5kKVxuICAgICAgICAgICAgZm9ybWF0dGVkQ29tbWFuZC51cmwgPSB0aGlzLl9wcmVwYXJlVXJsKHRoaXMuX2NvbW1hbmQpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb21tYW5kIGluc3RhbmNlb2YgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQpXG4gICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kLmRpYWxvZ0hhbmRsZXIgPSB0aGlzLl9wcmVwYXJlRGlhbG9nSGFuZGxlcih0aGlzLl9jb21tYW5kKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5fYXNzaWduUHJvcGVydGllcyh0aGlzLl9jb21tYW5kLCBmb3JtYXR0ZWRDb21tYW5kKTtcblxuICAgICAgICB0aGlzLl9tYXNrQ29uZmlkZW50aWFsSW5mbyhmb3JtYXR0ZWRDb21tYW5kKTtcblxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkQ29tbWFuZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYXNrQ29uZmlkZW50aWFsSW5mbyAoY29tbWFuZDogRm9ybWF0dGVkQ29tbWFuZCk6IHZvaWQge1xuICAgICAgICBpZiAoIShjb21tYW5kLm9wdGlvbnMgYXMgYW55KT8uY29uZmlkZW50aWFsKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLl9jb21tYW5kIGluc3RhbmNlb2YgVHlwZVRleHRDb21tYW5kKVxuICAgICAgICAgICAgY29tbWFuZC50ZXh0ID0gQ09ORklERU5USUFMX0lORk9fUExBQ0VIT0xERVI7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbW1hbmQgaW5zdGFuY2VvZiBQcmVzc0tleUNvbW1hbmQpXG4gICAgICAgICAgICBjb21tYW5kLmtleXMgPSBDT05GSURFTlRJQUxfSU5GT19QTEFDRUhPTERFUjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRFbGVtZW50QnlQcm9wZXJ0eU5hbWUgKHByb3BlcnR5TmFtZTogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICAgICAgICB0aGlzLl9lbnN1cmVTZWxlY3RvckVsZW1lbnRzKCk7XG5cbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdG9yJzpcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0U2VsZWN0b3InOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50c1swXTtcbiAgICAgICAgICAgIGNhc2UgJ2VuZFNlbGVjdG9yJzpcbiAgICAgICAgICAgIGNhc2UgJ2Rlc3RpbmF0aW9uU2VsZWN0b3InOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50c1sxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50c1swXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlU2VsZWN0b3IgKGNvbW1hbmQ6IEV4ZWN1dGVTZWxlY3RvckNvbW1hbmQsIHByb3BlcnR5TmFtZTogc3RyaW5nKTogU2VsZWN0b3JJbmZvIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3JDaGFpbiA9IGNvbW1hbmQuYXBpRm5DaGFpbiBhcyBzdHJpbmdbXTtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiAgICA9IHNlbGVjdG9yQ2hhaW4uam9pbignJyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBTZWxlY3RvckluZm8gPSB7IGV4cHJlc3Npb24gfTtcblxuICAgICAgICBsZXQgZWxlbWVudCA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuX3Jlc3VsdClcbiAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLl9nZXRFbGVtZW50QnlQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKTtcblxuICAgICAgICBpZiAoZWxlbWVudClcbiAgICAgICAgICAgIHJlc3VsdC5lbGVtZW50ID0gZWxlbWVudDtcblxuICAgICAgICBpZiAoY29tbWFuZC50aW1lb3V0KVxuICAgICAgICAgICAgcmVzdWx0LnRpbWVvdXQgPSBjb21tYW5kLnRpbWVvdXQgYXMgbnVtYmVyO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZUNsaWVudEZ1bmN0aW9uIChjb21tYW5kOiBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvZGU6IGNvbW1hbmQuZm5Db2RlLFxuICAgICAgICAgICAgYXJnczogY29tbWFuZC5hcmdzWzBdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVEaWFsb2dIYW5kbGVyIChjb21tYW5kOiBTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29tbWFuZCk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVwYXJlQ2xpZW50RnVuY3Rpb24oY29tbWFuZC5kaWFsb2dIYW5kbGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlUm9sZSAoY29tbWFuZDogVXNlUm9sZUNvbW1hbmQpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB7IGxvZ2luVXJsLCBvcHRzLCBwaGFzZSB9ID0gY29tbWFuZC5yb2xlO1xuXG4gICAgICAgIHJldHVybiB7IGxvZ2luVXJsLCBvcHRpb25zOiBvcHRzLCBwaGFzZSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVVcmwgKGNvbW1hbmQ6IE5hdmlnYXRlVG9Db21tYW5kKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGNvbW1hbmQudXJsO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpbHRlck5vdFJlcG9ydGVkUHJvcGVydGllcyAocHJvcGVydGllczogc3RyaW5nW10sIGNvbW1hbmRUeXBlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmIChjb21tYW5kVHlwZSAhPT0gQ29tbWFuZFR5cGUuYXNzZXJ0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMuZmlsdGVyKHByb3AgPT4gIUFzc2VydGlvbkNvbW1hbmQuTk9UX1JFUE9SVEVEX1BST1BFUlRJRVMuaW5jbHVkZXMocHJvcCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Fzc2lnblByb3BlcnRpZXMgKGNvbW1hbmQ6IENvbW1hbmRCYXNlLCBmb3JtYXR0ZWRDb21tYW5kOiBGb3JtYXR0ZWRDb21tYW5kKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fY29tbWFuZC5fZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgbGV0IHNvdXJjZVByb3BlcnRpZXMgPSB0aGlzLl9jb21tYW5kLl9nZXRBc3NpZ25hYmxlUHJvcGVydGllcygpLm1hcChwcm9wID0+IHByb3AubmFtZSk7XG5cbiAgICAgICAgc291cmNlUHJvcGVydGllcyA9IHRoaXMuX2ZpbHRlck5vdFJlcG9ydGVkUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0aWVzLCB0aGlzLl9jb21tYW5kLnR5cGUpO1xuXG4gICAgICAgIHNvdXJjZVByb3BlcnRpZXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5fY29tbWFuZFtrZXldO1xuXG4gICAgICAgICAgICBpZiAocHJvcGVydHkgaW5zdGFuY2VvZiBFeGVjdXRlU2VsZWN0b3JDb21tYW5kKVxuICAgICAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmRba2V5XSA9IHRoaXMuX3ByZXBhcmVTZWxlY3Rvcihwcm9wZXJ0eSwga2V5KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZE9wdGlvbnMocHJvcGVydHkgYXMgb2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVkT3B0aW9ucyA9IENvbW1hbmRGb3JtYXR0ZXIuX2dldE1vZGlmaWVkT3B0aW9ucyhwcm9wZXJ0eSBhcyBvYmplY3QpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5KG1vZGlmaWVkT3B0aW9ucykpXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmRba2V5XSA9IG1vZGlmaWVkT3B0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kW2tleV0gPSBwcm9wZXJ0eTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW5zdXJlU2VsZWN0b3JFbGVtZW50cyAoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fcmVzdWx0IHx8IHRoaXMuX2VsZW1lbnRzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBkZWNvZGVkID0gY3JlYXRlUmVwbGljYXRvcihuZXcgU2VsZWN0b3JOb2RlVHJhbnNmb3JtKCkpLmRlY29kZSh0aGlzLl9yZXN1bHQpO1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnRzID0gQXJyYXkuaXNBcnJheShkZWNvZGVkKSA/IGRlY29kZWQgOiBbZGVjb2RlZF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dldE1vZGlmaWVkT3B0aW9ucyAoY29tbWFuZE9wdGlvbnM6IG9iamVjdCk6IERpY3Rpb25hcnk8b2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IGNvbnN0cnVjdG9yICAgID0gY29tbWFuZE9wdGlvbnMuY29uc3RydWN0b3IgYXMgT2JqZWN0Q29uc3RydWN0b3I7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gbmV3IGNvbnN0cnVjdG9yKCk7XG5cbiAgICAgICAgcmV0dXJuIGRpZmYoZGVmYXVsdE9wdGlvbnMgYXMgRGljdGlvbmFyeTxvYmplY3Q+LCBjb21tYW5kT3B0aW9ucyBhcyBEaWN0aW9uYXJ5PG9iamVjdD4pO1xuICAgIH1cbn1cbiJdfQ==
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVwb3J0ZXIvY29tbWFuZC9jb21tYW5kLWZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBaUM7QUFDakMscUVBQTJHO0FBQzNHLDZEQU15QztBQUV6QyxrRUFBNEY7QUFJNUYsNERBQW9DO0FBRXBDLDZEQUl5QztBQUd6Qyx3RUFBdUQ7QUFDdkQsaUVBQXFFO0FBR3JFLE1BQU0sNkJBQTZCLEdBQUcsVUFBVSxDQUFDO0FBRWpELFNBQVMsZ0JBQWdCLENBQUUsR0FBVztJQUNsQyxPQUFPLEdBQUcsWUFBWSx1QkFBYSxJQUFJLEdBQUcsWUFBWSxrQ0FBd0IsSUFBSSxHQUFHLFlBQVksMEJBQWdCLENBQUM7QUFDdEgsQ0FBQztBQUVELE1BQWEsZ0JBQWdCO0lBS3pCLFlBQW9CLE9BQW9CLEVBQUUsTUFBZTtRQUpqRCxjQUFTLEdBQWtCLEVBQUUsQ0FBQztRQUtsQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRU0sTUFBTTtRQUNULE1BQU0sZ0JBQWdCLEdBQXFCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTFHLElBQUksSUFBSSxDQUFDLFFBQVEsWUFBWSxvQ0FBc0I7WUFDL0MsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQzVFLElBQUksSUFBSSxDQUFDLFFBQVEsWUFBWSwwQ0FBNEI7WUFDMUQsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENB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O2dCQUMzQyxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFrQixDQUFDLENBQUM7Z0JBRWpGLElBQUksQ0FBQyxJQUFBLGdCQUFPLEVBQUMsZUFBZSxDQUFDO29CQUN6QixnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUM7YUFDL0M7O2dCQUVHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQ3RDLE9BQU87UUFFWCxNQUFNLE9BQU8sR0FBRyxJQUFBLDZCQUFnQixFQUFDLElBQUksa0NBQXFCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkYsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBRSxjQUFzQjtRQUN0RCxNQUFNLFdBQVcsR0FBTSxjQUFjLENBQUMsV0FBZ0MsQ0FBQztRQUN2RSxNQUFNLGNBQWMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRXpDLE9BQU8sSUFBQSxjQUFJLEVBQUMsY0FBb0MsRUFBRSxjQUFvQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztDQUNKO0FBL0lELDRDQStJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCwgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL29ic2VydmF0aW9uJztcbmltcG9ydCB7XG4gICAgTmF2aWdhdGVUb0NvbW1hbmQsXG4gICAgUHJlc3NLZXlDb21tYW5kLFxuICAgIFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kLFxuICAgIFR5cGVUZXh0Q29tbWFuZCxcbiAgICBVc2VSb2xlQ29tbWFuZCxcbn0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYWN0aW9ucyc7XG5cbmltcG9ydCB7IGNyZWF0ZVJlcGxpY2F0b3IsIFNlbGVjdG9yTm9kZVRyYW5zZm9ybSB9IGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvcmVwbGljYXRvcic7XG5pbXBvcnQgeyBGb3JtYXR0ZWRDb21tYW5kLCBTZWxlY3RvckluZm8gfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9pbnRlcmZhY2VzJztcbmltcG9ydCBkaWZmIGZyb20gJy4uLy4uL3V0aWxzL2RpZmYnO1xuXG5pbXBvcnQge1xuICAgIEFjdGlvbk9wdGlvbnMsXG4gICAgUmVzaXplVG9GaXREZXZpY2VPcHRpb25zLFxuICAgIEFzc2VydGlvbk9wdGlvbnMsXG59IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL29wdGlvbnMnO1xuXG5pbXBvcnQgeyBDb21tYW5kQmFzZSB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Jhc2UnO1xuaW1wb3J0IENvbW1hbmRUeXBlIGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL3R5cGUnO1xuaW1wb3J0IHsgQXNzZXJ0aW9uQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Fzc2VydGlvbic7XG5cblxuY29uc3QgQ09ORklERU5USUFMX0lORk9fUExBQ0VIT0xERVIgPSAnKioqKioqKionO1xuXG5mdW5jdGlvbiBpc0NvbW1hbmRPcHRpb25zIChvYmo6IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBBY3Rpb25PcHRpb25zIHx8IG9iaiBpbnN0YW5jZW9mIFJlc2l6ZVRvRml0RGV2aWNlT3B0aW9ucyB8fCBvYmogaW5zdGFuY2VvZiBBc3NlcnRpb25PcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tbWFuZEZvcm1hdHRlciB7XG4gICAgcHJpdmF0ZSBfZWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb21tYW5kOiBDb21tYW5kQmFzZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZXN1bHQ6IHVua25vd247XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGNvbW1hbmQ6IENvbW1hbmRCYXNlLCByZXN1bHQ6IHVua25vd24pIHtcbiAgICAgICAgdGhpcy5fY29tbWFuZCA9IGNvbW1hbmQ7XG4gICAgICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9ybWF0ICgpOiBGb3JtYXR0ZWRDb21tYW5kIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkQ29tbWFuZDogRm9ybWF0dGVkQ29tbWFuZCA9IHsgdHlwZTogdGhpcy5fY29tbWFuZC50eXBlLCBhY3Rpb25JZDogdGhpcy5fY29tbWFuZC5hY3Rpb25JZCB9O1xuXG4gICAgICAgIGlmICh0aGlzLl9jb21tYW5kIGluc3RhbmNlb2YgRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZClcbiAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmQuc2VsZWN0b3IgPSB0aGlzLl9wcmVwYXJlU2VsZWN0b3IodGhpcy5fY29tbWFuZCwgJ3NlbGVjdG9yJyk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbW1hbmQgaW5zdGFuY2VvZiBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kKVxuICAgICAgICAgICAgZm9ybWF0dGVkQ29tbWFuZC5jbGllbnRGbiA9IHRoaXMuX3ByZXBhcmVDbGllbnRGdW5jdGlvbih0aGlzLl9jb21tYW5kKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY29tbWFuZCBpbnN0YW5jZW9mIFVzZVJvbGVDb21tYW5kKVxuICAgICAgICAgICAgZm9ybWF0dGVkQ29tbWFuZC5yb2xlID0gdGhpcy5fcHJlcGFyZVJvbGUodGhpcy5fY29tbWFuZCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbW1hbmQgaW5zdGFuY2VvZiBOYXZpZ2F0ZVRvQ29tbWFuZClcbiAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmQudXJsID0gdGhpcy5fcHJlcGFyZVVybCh0aGlzLl9jb21tYW5kKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY29tbWFuZCBpbnN0YW5jZW9mIFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kKVxuICAgICAgICAgICAgZm9ybWF0dGVkQ29tbWFuZC5kaWFsb2dIYW5kbGVyID0gdGhpcy5fcHJlcGFyZURpYWxvZ0hhbmRsZXIodGhpcy5fY29tbWFuZCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuX2Fzc2lnblByb3BlcnRpZXModGhpcy5fY29tbWFuZCwgZm9ybWF0dGVkQ29tbWFuZCk7XG5cbiAgICAgICAgdGhpcy5fbWFza0NvbmZpZGVudGlhbEluZm8oZm9ybWF0dGVkQ29tbWFuZCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZENvbW1hbmQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFza0NvbmZpZGVudGlhbEluZm8gKGNvbW1hbmQ6IEZvcm1hdHRlZENvbW1hbmQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCEoY29tbWFuZC5vcHRpb25zIGFzIGFueSk/LmNvbmZpZGVudGlhbClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5fY29tbWFuZCBpbnN0YW5jZW9mIFR5cGVUZXh0Q29tbWFuZClcbiAgICAgICAgICAgIGNvbW1hbmQudGV4dCA9IENPTkZJREVOVElBTF9JTkZPX1BMQUNFSE9MREVSO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb21tYW5kIGluc3RhbmNlb2YgUHJlc3NLZXlDb21tYW5kKVxuICAgICAgICAgICAgY29tbWFuZC5rZXlzID0gQ09ORklERU5USUFMX0lORk9fUExBQ0VIT0xERVI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0RWxlbWVudEJ5UHJvcGVydHlOYW1lIChwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgdGhpcy5fZW5zdXJlU2VsZWN0b3JFbGVtZW50cygpO1xuXG4gICAgICAgIHN3aXRjaCAocHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdzZWxlY3Rvcic6XG4gICAgICAgICAgICBjYXNlICdzdGFydFNlbGVjdG9yJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudHNbMF07XG4gICAgICAgICAgICBjYXNlICdlbmRTZWxlY3Rvcic6XG4gICAgICAgICAgICBjYXNlICdkZXN0aW5hdGlvblNlbGVjdG9yJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudHNbMV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudHNbMF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVNlbGVjdG9yIChjb21tYW5kOiBFeGVjdXRlU2VsZWN0b3JDb21tYW5kLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFNlbGVjdG9ySW5mbyB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yQ2hhaW4gPSBjb21tYW5kLmFwaUZuQ2hhaW4gYXMgc3RyaW5nW107XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gICAgPSBzZWxlY3RvckNoYWluLmpvaW4oJycpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogU2VsZWN0b3JJbmZvID0geyBleHByZXNzaW9uIH07XG5cbiAgICAgICAgbGV0IGVsZW1lbnQgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLl9yZXN1bHQpXG4gICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudEJ5UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQpXG4gICAgICAgICAgICByZXN1bHQuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQudGltZW91dClcbiAgICAgICAgICAgIHJlc3VsdC50aW1lb3V0ID0gY29tbWFuZC50aW1lb3V0IGFzIG51bWJlcjtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVDbGllbnRGdW5jdGlvbiAoY29tbWFuZDogRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZCk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2RlOiBjb21tYW5kLmZuQ29kZSxcbiAgICAgICAgICAgIGFyZ3M6IGNvbW1hbmQuYXJnc1swXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlRGlhbG9nSGFuZGxlciAoY29tbWFuZDogU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlcGFyZUNsaWVudEZ1bmN0aW9uKGNvbW1hbmQuZGlhbG9nSGFuZGxlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVJvbGUgKGNvbW1hbmQ6IFVzZVJvbGVDb21tYW5kKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgeyBsb2dpblVybCwgb3B0cywgcGhhc2UgfSA9IGNvbW1hbmQucm9sZTtcblxuICAgICAgICByZXR1cm4geyBsb2dpblVybCwgb3B0aW9uczogb3B0cywgcGhhc2UgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlVXJsIChjb21tYW5kOiBOYXZpZ2F0ZVRvQ29tbWFuZCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBjb21tYW5kLnVybDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9maWx0ZXJOb3RSZXBvcnRlZFByb3BlcnRpZXMgKHByb3BlcnRpZXM6IHN0cmluZ1tdLCBjb21tYW5kVHlwZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICBpZiAoY29tbWFuZFR5cGUgIT09IENvbW1hbmRUeXBlLmFzc2VydGlvbilcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuXG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLmZpbHRlcihwcm9wID0+ICFBc3NlcnRpb25Db21tYW5kLk5PVF9SRVBPUlRFRF9QUk9QRVJUSUVTLmluY2x1ZGVzKHByb3ApKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hc3NpZ25Qcm9wZXJ0aWVzIChjb21tYW5kOiBDb21tYW5kQmFzZSwgZm9ybWF0dGVkQ29tbWFuZDogRm9ybWF0dGVkQ29tbWFuZCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbW1hbmQuX2dldEFzc2lnbmFibGVQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGxldCBzb3VyY2VQcm9wZXJ0aWVzID0gdGhpcy5fY29tbWFuZC5fZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMoKS5tYXAocHJvcCA9PiBwcm9wLm5hbWUpO1xuXG4gICAgICAgIHNvdXJjZVByb3BlcnRpZXMgPSB0aGlzLl9maWx0ZXJOb3RSZXBvcnRlZFByb3BlcnRpZXMoc291cmNlUHJvcGVydGllcywgdGhpcy5fY29tbWFuZC50eXBlKTtcblxuICAgICAgICBzb3VyY2VQcm9wZXJ0aWVzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuX2NvbW1hbmRba2V5XTtcblxuICAgICAgICAgICAgaWYgKHByb3BlcnR5IGluc3RhbmNlb2YgRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZClcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kW2tleV0gPSB0aGlzLl9wcmVwYXJlU2VsZWN0b3IocHJvcGVydHksIGtleSk7XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRPcHRpb25zKHByb3BlcnR5IGFzIG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RpZmllZE9wdGlvbnMgPSBDb21tYW5kRm9ybWF0dGVyLl9nZXRNb2RpZmllZE9wdGlvbnMocHJvcGVydHkgYXMgb2JqZWN0KTtcblxuICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eShtb2RpZmllZE9wdGlvbnMpKVxuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kW2tleV0gPSBtb2RpZmllZE9wdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkQ29tbWFuZFtrZXldID0gcHJvcGVydHk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Vuc3VyZVNlbGVjdG9yRWxlbWVudHMgKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3Jlc3VsdCB8fCB0aGlzLl9lbGVtZW50cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGNyZWF0ZVJlcGxpY2F0b3IobmV3IFNlbGVjdG9yTm9kZVRyYW5zZm9ybSgpKS5kZWNvZGUodGhpcy5fcmVzdWx0KTtcblxuICAgICAgICB0aGlzLl9lbGVtZW50cyA9IEFycmF5LmlzQXJyYXkoZGVjb2RlZCkgPyBkZWNvZGVkIDogW2RlY29kZWRdO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZXRNb2RpZmllZE9wdGlvbnMgKGNvbW1hbmRPcHRpb25zOiBvYmplY3QpOiBEaWN0aW9uYXJ5PG9iamVjdD4ge1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3RvciAgICA9IGNvbW1hbmRPcHRpb25zLmNvbnN0cnVjdG9yIGFzIE9iamVjdENvbnN0cnVjdG9yO1xuICAgICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IG5ldyBjb25zdHJ1Y3RvcigpO1xuXG4gICAgICAgIHJldHVybiBkaWZmKGRlZmF1bHRPcHRpb25zIGFzIERpY3Rpb25hcnk8b2JqZWN0PiwgY29tbWFuZE9wdGlvbnMgYXMgRGljdGlvbmFyeTxvYmplY3Q+KTtcbiAgICB9XG59XG4iXX0=
@@ -83,7 +83,7 @@ class Reporter {
83
83
  if (this.disposed)
84
84
  return Promise.resolve();
85
85
  this.disposed = true;
86
- if (!this.outStream || Reporter._isSpecialStream(this.outStream) || !is_stream_1.writable(this.outStream))
86
+ if (!this.outStream || Reporter._isSpecialStream(this.outStream) || !(0, is_stream_1.writable)(this.outStream))
87
87
  return Promise.resolve();
88
88
  const streamFinishedPromise = new Promise(resolve => {
89
89
  this.outStream.once('finish', resolve);
@@ -95,8 +95,8 @@ class Reporter {
95
95
  static async _ensureOutStream(outStream) {
96
96
  if (typeof outStream !== 'string')
97
97
  return outStream;
98
- const fullReporterOutputPath = resolve_path_relatively_cwd_1.default(outStream);
99
- await make_dir_1.default(path_1.default.dirname(fullReporterOutputPath));
98
+ const fullReporterOutputPath = (0, resolve_path_relatively_cwd_1.default)(outStream);
99
+ await (0, make_dir_1.default)(path_1.default.dirname(fullReporterOutputPath));
100
100
  return fs_1.default.createWriteStream(fullReporterOutputPath);
101
101
  }
102
102
  static _addDefaultReporter(reporters) {
@@ -109,8 +109,8 @@ class Reporter {
109
109
  if (!reporters.length)
110
110
  Reporter._addDefaultReporter(reporters);
111
111
  return Promise.all(reporters.map(async ({ name, output, options }) => {
112
- const pluginFactory = reporter_1.getPluginFactory(name);
113
- const processedName = reporter_1.processReporterName(name);
112
+ const pluginFactory = (0, reporter_1.getPluginFactory)(name);
113
+ const processedName = (0, reporter_1.processReporterName)(name);
114
114
  const outStream = output ? await Reporter._ensureOutStream(output) : void 0;
115
115
  return {
116
116
  plugin: pluginFactory(options),
@@ -160,7 +160,7 @@ class Reporter {
160
160
  }
161
161
  static _createTestRunInfo(reportItem) {
162
162
  return {
163
- errs: lodash_1.sortBy(reportItem.errs, ['userAgent', 'code']),
163
+ errs: (0, lodash_1.sortBy)(reportItem.errs, ['userAgent', 'code']),
164
164
  warnings: reportItem.warnings,
165
165
  durationMs: +new Date() - reportItem.startTime,
166
166
  unstable: reportItem.unstable,
@@ -180,7 +180,7 @@ class Reporter {
180
180
  };
181
181
  }
182
182
  _getTestItemForTestRun(taskInfo, testRun) {
183
- return lodash_1.find(taskInfo.testQueue, i => i.test === testRun.test);
183
+ return (0, lodash_1.find)(taskInfo.testQueue, i => i.test === testRun.test);
184
184
  }
185
185
  async _shiftTestQueue() {
186
186
  if (!this.taskInfo)
@@ -266,7 +266,7 @@ class Reporter {
266
266
  name: testFixture.name,
267
267
  id: testFixture.id,
268
268
  },
269
- command: format_command_1.default(command, result),
269
+ command: (0, format_command_1.default)(command, result),
270
270
  browser: testRun.browser,
271
271
  });
272
272
  }
@@ -354,7 +354,7 @@ class Reporter {
354
354
  reportItem.pendingRuns = isTestRunStoppedTaskExecution ? 0 : reportItem.pendingRuns - 1;
355
355
  reportItem.unstable = reportItem.unstable || testRun.unstable;
356
356
  reportItem.errs = reportItem.errs.concat(testRun.errs);
357
- reportItem.warnings = testRun.warningLog ? lodash_1.union(reportItem.warnings, testRun.warningLog.messages) : [];
357
+ reportItem.warnings = testRun.warningLog ? (0, lodash_1.union)(reportItem.warnings, testRun.warningLog.messages) : [];
358
358
  if (testRun.quarantine) {
359
359
  reportItem.quarantine = reportItem.quarantine || {};
360
360
  const reportItemQuarantine = testRun.quarantine.attempts.reduce((result, { errors, testRunId }) => {
@@ -429,4 +429,4 @@ class Reporter {
429
429
  }
430
430
  exports.default = Reporter;
431
431
  module.exports = exports.default;
432
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVwb3J0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUlnQjtBQUVoQix5Q0FBeUQ7QUFDekQsZ0VBQStDO0FBQy9DLHNFQUFvRDtBQUNwRCw4RUFBcUQ7QUFDckQsK0NBQXdEO0FBZ0J4RCxnREFBMEU7QUFDMUUsdUdBQTRFO0FBQzVFLHdEQUErQjtBQUMvQixnREFBd0I7QUFDeEIsNENBQW9CO0FBNkZwQixNQUFxQixRQUFRO0lBT3pCLFlBQW9CLE1BQXNCLEVBQUUsVUFBc0IsRUFBRSxTQUFtQixFQUFFLElBQVk7UUFDakcsSUFBSSxDQUFDLE1BQU0sR0FBTyxJQUFJLHFCQUFrQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFN0IsSUFBSSxDQUFDLFFBQVEsR0FBSSxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBSSxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFFM0IsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBRSxNQUFnQjtRQUM3QyxPQUFRLE1BQXNCLENBQUMsS0FBSyxJQUFJLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxJQUFJLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ25HLENBQUM7SUFFTyxNQUFNLENBQUMscUJBQXFCO1FBQ2hDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUVwQixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLENBQUMsQ0FBOEIsQ0FBQztRQUVoQyxP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QUFXO2dCQUNYLE9BQU87Z0JBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO3NCQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksMENBQUUsVUFBVSxDQUFDLFFBQVE7Z0JBQ3ZDLE1BQU07YUFDVDtTQUNKLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsT0FBb0IsRUFBRSxDQUFDO0lBQ2pFLENBQUM7Q0FDSjtBQXZmRCwyQkF1ZkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGZpbmQsXG4gICAgc29ydEJ5LFxuICAgIHVuaW9uLFxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyB3cml0YWJsZSBhcyBpc1dyaXRhYmxlU3RyZWFtIH0gZnJvbSAnaXMtc3RyZWFtJztcbmltcG9ydCBSZXBvcnRlclBsdWdpbkhvc3QgZnJvbSAnLi9wbHVnaW4taG9zdCc7XG5pbXBvcnQgUmVwb3J0ZXJQbHVnaW5NZXRob2QgZnJvbSAnLi9wbHVnaW4tbWV0aG9kcyc7XG5pbXBvcnQgZm9ybWF0Q29tbWFuZCBmcm9tICcuL2NvbW1hbmQvZm9ybWF0LWNvbW1hbmQnO1xuaW1wb3J0IHsgUmVwb3J0ZXJQbHVnaW5FcnJvciB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCBUYXNrIGZyb20gJy4uL3J1bm5lci90YXNrJztcbmltcG9ydCB7IFdyaXRhYmxlIGFzIFdyaXRhYmxlU3RyZWFtLCBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBXcml0ZVN0cmVhbSB9IGZyb20gJ3R0eSc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi90ZXN0LXJ1bic7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IEZpeHR1cmUgZnJvbSAnLi4vYXBpL3N0cnVjdHVyZS9maXh0dXJlJztcbmltcG9ydCBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIgZnJvbSAnLi4vZXJyb3JzL3Rlc3QtcnVuL2Zvcm1hdHRhYmxlLWFkYXB0ZXInO1xuaW1wb3J0IHsgQ29tbWFuZEJhc2UgfSBmcm9tICcuLi90ZXN0LXJ1bi9jb21tYW5kcy9iYXNlJztcblxuaW1wb3J0IHtcbiAgICBSZXBvcnRlclBsdWdpbixcbiAgICBSZXBvcnRlclBsdWdpblNvdXJjZSxcbiAgICBSZXBvcnRlclNvdXJjZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgZ2V0UGx1Z2luRmFjdG9yeSwgcHJvY2Vzc1JlcG9ydGVyTmFtZSB9IGZyb20gJy4uL3V0aWxzL3JlcG9ydGVyJztcbmltcG9ydCByZXNvbHZlUGF0aFJlbGF0aXZlbHlDd2QgZnJvbSAnLi4vdXRpbHMvcmVzb2x2ZS1wYXRoLXJlbGF0aXZlbHktY3dkJztcbmltcG9ydCBtYWtlRGlyIGZyb20gJ21ha2UtZGlyJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBNZXNzYWdlQnVzIGZyb20gJy4uL3V0aWxzL21lc3NhZ2UtYnVzJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbiBmcm9tICcuLi9icm93c2VyL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5cbmludGVyZmFjZSBQZW5kaW5nUHJvbWlzZSB7XG4gICAgcmVzb2x2ZTogRnVuY3Rpb24gfCBudWxsO1xuICAgIHRoZW46IEZ1bmN0aW9uO1xufVxuXG5pbnRlcmZhY2UgVGFza0luZm8ge1xuICAgIHRhc2s6IFRhc2sgfCBudWxsO1xuICAgIHBhc3NlZDogbnVtYmVyO1xuICAgIGZhaWxlZDogbnVtYmVyO1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICB0ZXN0Q291bnQ6IG51bWJlcjtcbiAgICB0ZXN0UXVldWU6IFRlc3RJbmZvW107XG4gICAgcmVhZG9ubHkgc3RvcE9uRmlyc3RGYWlsOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHBlbmRpbmdUYXNrRG9uZVByb21pc2U6IFBlbmRpbmdQcm9taXNlO1xufVxuXG5pbnRlcmZhY2UgVGVzdEluZm8ge1xuICAgIGZpeHR1cmU6IEZpeHR1cmU7XG4gICAgdGVzdDogVGVzdDtcbiAgICB0ZXN0UnVuSWRzOiBzdHJpbmdbXTtcbiAgICBzY3JlZW5zaG90UGF0aDogbnVsbCB8IHN0cmluZztcbiAgICBzY3JlZW5zaG90czogdW5rbm93bltdO1xuICAgIHZpZGVvczogdW5rbm93bltdO1xuICAgIHF1YXJhbnRpbmU6IG51bGwgfCBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuICAgIGVycnM6IFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlcltdO1xuICAgIHdhcm5pbmdzOiBzdHJpbmdbXTtcbiAgICB1bnN0YWJsZTogYm9vbGVhbjtcbiAgICBzdGFydFRpbWU6IG51bGwgfCBudW1iZXI7XG4gICAgdGVzdFJ1bkluZm86IG51bGwgfCBUZXN0UnVuSW5mbztcbiAgICBwZW5kaW5nUnVuczogbnVtYmVyO1xuICAgIHBlbmRpbmdTdGFydHM6IG51bWJlcjtcbiAgICBwZW5kaW5nVGVzdFJ1bkRvbmVQcm9taXNlOiBQZW5kaW5nUHJvbWlzZTtcbiAgICBwZW5kaW5nVGVzdFJ1blN0YXJ0UHJvbWlzZTogUGVuZGluZ1Byb21pc2U7XG4gICAgYnJvd3NlcnM6IEJyb3dzZXJSdW5JbmZvW107XG59XG5cbmludGVyZmFjZSBGaXh0dXJlSW5mbyB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBtZXRhOiBEaWN0aW9uYXJ5PHN0cmluZz47XG59XG5cbmludGVyZmFjZSBCcm93c2VyUnVuSW5mbyBleHRlbmRzIEJyb3dzZXIge1xuICAgIHRlc3RSdW5JZDogc3RyaW5nO1xuICAgIHF1YXJhbnRpbmVBdHRlbXB0c1Rlc3RSdW5JZHM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIFRlc3RSdW5JbmZvIHtcbiAgICBlcnJzOiBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXJbXTtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gICAgZHVyYXRpb25NczogbnVtYmVyO1xuICAgIHVuc3RhYmxlOiBib29sZWFuO1xuICAgIHNjcmVlbnNob3RQYXRoOiBzdHJpbmc7XG4gICAgc2NyZWVuc2hvdHM6IHVua25vd247XG4gICAgdmlkZW9zOiB1bmtub3duO1xuICAgIHF1YXJhbnRpbmU6IHVua25vd247XG4gICAgc2tpcHBlZDogYm9vbGVhbjtcbiAgICBicm93c2VyczogdW5rbm93bltdO1xuICAgIHRlc3RJZDogc3RyaW5nO1xuICAgIGZpeHR1cmU6IEZpeHR1cmVJbmZvO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTWV0aG9kQXJndW1lbnRzIHtcbiAgICBpbml0aWFsT2JqZWN0OiBUYXNrIHwgTWVzc2FnZUJ1cyB8IG51bGw7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgYXJnczogdW5rbm93bltdO1xufVxuXG5pbnRlcmZhY2UgUmVwb3J0VGVzdEFjdGlvbkV2ZW50QXJndW1lbnRzIHtcbiAgICBjb21tYW5kOiBDb21tYW5kQmFzZTtcbiAgICBkdXJhdGlvbjogbnVtYmVyO1xuICAgIHJlc3VsdDogdW5rbm93bjtcbiAgICB0ZXN0UnVuOiBUZXN0UnVuO1xuICAgIGVycjogVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyO1xufVxuXG5pbnRlcmZhY2UgUmVwb3J0VGFza0FjdGlvbkV2ZW50QXJndW1lbnRzIHtcbiAgICBhcGlBY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgcmVzdEFyZ3M6IG9iamVjdDtcbn1cblxuaW50ZXJmYWNlIFJlcG9ydFdhcm5pbmdFdmVudEFyZ3VtZW50cyB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIHRlc3RSdW4/OiBUZXN0UnVuO1xuICAgIGFjdGlvbklkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBvcnRlciB7XG4gICAgcHVibGljIHJlYWRvbmx5IHBsdWdpbjogUmVwb3J0ZXJQbHVnaW5Ib3N0O1xuICAgIHB1YmxpYyByZWFkb25seSBtZXNzYWdlQnVzOiBNZXNzYWdlQnVzO1xuICAgIHB1YmxpYyBkaXNwb3NlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgdGFza0luZm86IFRhc2tJbmZvIHwgbnVsbDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3V0U3RyZWFtOiBXcml0YWJsZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAocGx1Z2luOiBSZXBvcnRlclBsdWdpbiwgbWVzc2FnZUJ1czogTWVzc2FnZUJ1cywgb3V0U3RyZWFtOiBXcml0YWJsZSwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGx1Z2luICAgICA9IG5ldyBSZXBvcnRlclBsdWdpbkhvc3QocGx1Z2luLCBvdXRTdHJlYW0sIG5hbWUpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VCdXMgPSBtZXNzYWdlQnVzO1xuXG4gICAgICAgIHRoaXMuZGlzcG9zZWQgID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGFza0luZm8gID0gbnVsbDtcbiAgICAgICAgdGhpcy5vdXRTdHJlYW0gPSBvdXRTdHJlYW07XG5cbiAgICAgICAgdGhpcy5fYXNzaWduTWVzc2FnZUJ1c0V2ZW50SGFuZGxlcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfaXNTcGVjaWFsU3RyZWFtIChzdHJlYW06IFdyaXRhYmxlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoc3RyZWFtIGFzIFdyaXRlU3RyZWFtKS5pc1RUWSB8fCBzdHJlYW0gPT09IHByb2Nlc3Muc3Rkb3V0IHx8IHN0cmVhbSA9PT0gcHJvY2Vzcy5zdGRlcnI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2NyZWF0ZVBlbmRpbmdQcm9taXNlICgpOiBQZW5kaW5nUHJvbWlzZSB7XG4gICAgICAgIGxldCByZXNvbHZlciA9IG51bGw7XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZXIgPSByZXNvbHZlO1xuICAgICAgICB9KSBhcyB1bmtub3duIGFzIFBlbmRpbmdQcm9taXNlO1xuXG4gICAgICAgIHByb21pc2UucmVzb2x2ZSA9IHJlc29sdmVyO1xuXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbml0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaFRvUGx1Z2luKHtcbiAgICAgICAgICAgIG1ldGhvZDogICAgICAgIFJlcG9ydGVyUGx1Z2luTWV0aG9kLmluaXQsXG4gICAgICAgICAgICBpbml0aWFsT2JqZWN0OiBudWxsLFxuICAgICAgICAgICAgYXJnczogICAgICAgICAgW3t9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRpc3BhdGNoVG9QbHVnaW4gKHsgbWV0aG9kLCBpbml0aWFsT2JqZWN0LCBhcmdzID0gW10gfTogUGx1Z2luTWV0aG9kQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpblttZXRob2RdKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChvcmlnaW5hbEVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCB1bmNhdWdodEVycm9yID0gbmV3IFJlcG9ydGVyUGx1Z2luRXJyb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMucGx1Z2luLm5hbWUsXG4gICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXJyb3IsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGluaXRpYWxPYmplY3QpXG4gICAgICAgICAgICAgICAgYXdhaXQgaW5pdGlhbE9iamVjdC5lbWl0KCdlcnJvcicsIHVuY2F1Z2h0RXJyb3IpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IHVuY2F1Z2h0RXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hc3NpZ25NZXNzYWdlQnVzRXZlbnRIYW5kbGVycyAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VCdXMgPSB0aGlzLm1lc3NhZ2VCdXM7XG5cbiAgICAgICAgbWVzc2FnZUJ1cy5vbignd2FybmluZy1hZGQnLCBhc3luYyBlID0+IGF3YWl0IHRoaXMuX29uV2FybmluZ0FkZEhhbmRsZXIoZSkpO1xuXG4gICAgICAgIG1lc3NhZ2VCdXMub25jZSgnc3RhcnQnLCBhc3luYyAodGFzazogVGFzaykgPT4gYXdhaXQgdGhpcy5fb25jZVRhc2tTdGFydEhhbmRsZXIodGFzaykpO1xuXG4gICAgICAgIG1lc3NhZ2VCdXMub24oJ3Rlc3QtcnVuLXN0YXJ0JywgYXN5bmMgdGVzdFJ1biA9PiBhd2FpdCB0aGlzLl9vblRhc2tUZXN0UnVuU3RhcnRIYW5kbGVyKHRlc3RSdW4pKTtcblxuICAgICAgICBtZXNzYWdlQnVzLm9uKCd0ZXN0LXJ1bi1kb25lJywgYXN5bmMgdGVzdFJ1biA9PiBhd2FpdCB0aGlzLl9vblRhc2tUZXN0UnVuRG9uZUhhbmRsZXIodGVzdFJ1bikpO1xuXG4gICAgICAgIG1lc3NhZ2VCdXMub24oJ3Rlc3QtYWN0aW9uLXN0YXJ0JywgYXN5bmMgZSA9PiBhd2FpdCB0aGlzLl9vblRhc2tUZXN0QWN0aW9uU3RhcnQoZSkpO1xuXG4gICAgICAgIG1lc3NhZ2VCdXMub24oJ3Rlc3QtYWN0aW9uLWRvbmUnLCBhc3luYyBlID0+IGF3YWl0IHRoaXMuX29uVGFza1Rlc3RBY3Rpb25Eb25lKGUpKTtcblxuICAgICAgICBtZXNzYWdlQnVzLm9uY2UoJ2RvbmUnLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLl9vbmNlVGFza0RvbmVIYW5kbGVyKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkaXNwb3NlICgpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKCF0aGlzLm91dFN0cmVhbSB8fCBSZXBvcnRlci5faXNTcGVjaWFsU3RyZWFtKHRoaXMub3V0U3RyZWFtKSB8fCAhaXNXcml0YWJsZVN0cmVhbSh0aGlzLm91dFN0cmVhbSkpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgY29uc3Qgc3RyZWFtRmluaXNoZWRQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLm91dFN0cmVhbS5vbmNlKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICAgICAgICAgIHRoaXMub3V0U3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVzb2x2ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub3V0U3RyZWFtLmVuZCgpO1xuXG4gICAgICAgIHJldHVybiBzdHJlYW1GaW5pc2hlZFByb21pc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgX2Vuc3VyZU91dFN0cmVhbSAob3V0U3RyZWFtOiBzdHJpbmcgfCBXcml0YWJsZVN0cmVhbSk6IFByb21pc2U8V3JpdGFibGVTdHJlYW0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvdXRTdHJlYW0gIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIG91dFN0cmVhbTtcblxuICAgICAgICBjb25zdCBmdWxsUmVwb3J0ZXJPdXRwdXRQYXRoID0gcmVzb2x2ZVBhdGhSZWxhdGl2ZWx5Q3dkKG91dFN0cmVhbSk7XG5cbiAgICAgICAgYXdhaXQgbWFrZURpcihwYXRoLmRpcm5hbWUoZnVsbFJlcG9ydGVyT3V0cHV0UGF0aCkpO1xuXG4gICAgICAgIHJldHVybiBmcy5jcmVhdGVXcml0ZVN0cmVhbShmdWxsUmVwb3J0ZXJPdXRwdXRQYXRoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfYWRkRGVmYXVsdFJlcG9ydGVyIChyZXBvcnRlcnM6IFJlcG9ydGVyU291cmNlW10pOiB2b2lkIHtcbiAgICAgICAgcmVwb3J0ZXJzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogICAnc3BlYycsXG4gICAgICAgICAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFzeW5jIGdldFJlcG9ydGVyUGx1Z2lucyAocmVwb3J0ZXJzOiBSZXBvcnRlclNvdXJjZVtdID0gW10pOiBQcm9taXNlPFJlcG9ydGVyUGx1Z2luU291cmNlW10+IHtcbiAgICAgICAgaWYgKCFyZXBvcnRlcnMubGVuZ3RoKVxuICAgICAgICAgICAgUmVwb3J0ZXIuX2FkZERlZmF1bHRSZXBvcnRlcihyZXBvcnRlcnMpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXBvcnRlcnMubWFwKGFzeW5jICh7IG5hbWUsIG91dHB1dCwgb3B0aW9ucyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5GYWN0b3J5ID0gZ2V0UGx1Z2luRmFjdG9yeShuYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZE5hbWUgPSBwcm9jZXNzUmVwb3J0ZXJOYW1lKG5hbWUpO1xuICAgICAgICAgICAgY29uc3Qgb3V0U3RyZWFtICAgICA9IG91dHB1dCA/IGF3YWl0IFJlcG9ydGVyLl9lbnN1cmVPdXRTdHJlYW0ob3V0cHV0KSA6IHZvaWQgMDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwbHVnaW46IHBsdWdpbkZhY3Rvcnkob3B0aW9ucyksXG4gICAgICAgICAgICAgICAgbmFtZTogICBwcm9jZXNzZWROYW1lLFxuICAgICAgICAgICAgICAgIG91dFN0cmVhbSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vbldhcm5pbmdBZGRIYW5kbGVyICh7IG1lc3NhZ2UsIHRlc3RSdW4sIGFjdGlvbklkIH06IFJlcG9ydFdhcm5pbmdFdmVudEFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoVG9QbHVnaW4oe1xuICAgICAgICAgICAgbWV0aG9kOiAgICAgICAgUmVwb3J0ZXJQbHVnaW5NZXRob2QucmVwb3J0V2FybmluZ3MgYXMgc3RyaW5nLFxuICAgICAgICAgICAgaW5pdGlhbE9iamVjdDogdGhpcy5tZXNzYWdlQnVzLFxuICAgICAgICAgICAgYXJnczogICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bklkOiB0ZXN0UnVuPy5pZCxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uSWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vVGFza1xuICAgIHByaXZhdGUgc3RhdGljIF9jcmVhdGVUZXN0SXRlbSAodGVzdDogVGVzdCwgcnVuc1BlclRlc3Q6IG51bWJlcik6IFRlc3RJbmZvIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpeHR1cmU6ICAgICAgICAgICAgICAgICAgICB0ZXN0LmZpeHR1cmUgYXMgRml4dHVyZSxcbiAgICAgICAgICAgIHRlc3Q6ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LFxuICAgICAgICAgICAgdGVzdFJ1bklkczogICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgc2NyZWVuc2hvdFBhdGg6ICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBzY3JlZW5zaG90czogICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICB2aWRlb3M6ICAgICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBxdWFyYW50aW5lOiAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGVycnM6ICAgICAgICAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIHdhcm5pbmdzOiAgICAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIHVuc3RhYmxlOiAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIHN0YXJ0VGltZTogICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgdGVzdFJ1bkluZm86ICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBwZW5kaW5nUnVuczogICAgICAgICAgICAgICAgcnVuc1BlclRlc3QsXG4gICAgICAgICAgICBwZW5kaW5nU3RhcnRzOiAgICAgICAgICAgICAgcnVuc1BlclRlc3QsXG4gICAgICAgICAgICBwZW5kaW5nVGVzdFJ1bkRvbmVQcm9taXNlOiAgUmVwb3J0ZXIuX2NyZWF0ZVBlbmRpbmdQcm9taXNlKCksXG4gICAgICAgICAgICBwZW5kaW5nVGVzdFJ1blN0YXJ0UHJvbWlzZTogUmVwb3J0ZXIuX2NyZWF0ZVBlbmRpbmdQcm9taXNlKCksXG4gICAgICAgICAgICBicm93c2VyczogICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2NyZWF0ZVRlc3RRdWV1ZSAodGFzazogVGFzayk6IFRlc3RJbmZvW10ge1xuICAgICAgICBjb25zdCBydW5zUGVyVGVzdCA9IHRhc2suYnJvd3NlckNvbm5lY3Rpb25Hcm91cHMubGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiB0YXNrLnRlc3RzLm1hcCh0ZXN0ID0+IFJlcG9ydGVyLl9jcmVhdGVUZXN0SXRlbSh0ZXN0LCBydW5zUGVyVGVzdCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9jcmVhdGVUZXN0UnVuSW5mbyAocmVwb3J0SXRlbTogVGVzdEluZm8pOiBUZXN0UnVuSW5mbyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJzOiAgICAgICAgICAgc29ydEJ5KHJlcG9ydEl0ZW0uZXJycywgWyd1c2VyQWdlbnQnLCAnY29kZSddKSxcbiAgICAgICAgICAgIHdhcm5pbmdzOiAgICAgICByZXBvcnRJdGVtLndhcm5pbmdzLFxuICAgICAgICAgICAgZHVyYXRpb25NczogICAgICtuZXcgRGF0ZSgpIC0gKHJlcG9ydEl0ZW0uc3RhcnRUaW1lIGFzIG51bWJlciksIC8vZXNsaW50LWRpc2FibGUtbGluZSAgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4dHJhLXBhcmVuc1xuICAgICAgICAgICAgdW5zdGFibGU6ICAgICAgIHJlcG9ydEl0ZW0udW5zdGFibGUsXG4gICAgICAgICAgICBzY3JlZW5zaG90UGF0aDogcmVwb3J0SXRlbS5zY3JlZW5zaG90UGF0aCBhcyBzdHJpbmcsXG4gICAgICAgICAgICBzY3JlZW5zaG90czogICAgcmVwb3J0SXRlbS5zY3JlZW5zaG90cyxcbiAgICAgICAgICAgIHZpZGVvczogICAgICAgICByZXBvcnRJdGVtLnZpZGVvcyxcbiAgICAgICAgICAgIHF1YXJhbnRpbmU6ICAgICByZXBvcnRJdGVtLnF1YXJhbnRpbmUsXG4gICAgICAgICAgICBza2lwcGVkOiAgICAgICAgcmVwb3J0SXRlbS50ZXN0LnNraXAsXG4gICAgICAgICAgICBicm93c2VyczogICAgICAgcmVwb3J0SXRlbS5icm93c2VycyxcbiAgICAgICAgICAgIHRlc3RJZDogICAgICAgICByZXBvcnRJdGVtLnRlc3QuaWQsXG4gICAgICAgICAgICBmaXh0dXJlOiAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiAgIHJlcG9ydEl0ZW0uZml4dHVyZS5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiByZXBvcnRJdGVtLmZpeHR1cmUubmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiByZXBvcnRJdGVtLmZpeHR1cmUucGF0aCxcbiAgICAgICAgICAgICAgICBtZXRhOiByZXBvcnRJdGVtLmZpeHR1cmUubWV0YSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0VGVzdEl0ZW1Gb3JUZXN0UnVuICh0YXNrSW5mbzogVGFza0luZm8sIHRlc3RSdW46IFRlc3RSdW4pOiBUZXN0SW5mbyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBmaW5kKHRhc2tJbmZvLnRlc3RRdWV1ZSwgaSA9PiBpLnRlc3QgPT09IHRlc3RSdW4udGVzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2hpZnRUZXN0UXVldWUgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMudGFza0luZm8pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgbGV0IGN1cnJlbnRGaXh0dXJlID0gbnVsbDtcbiAgICAgICAgbGV0IG5leHRSZXBvcnRJdGVtID0gbnVsbDtcbiAgICAgICAgbGV0IHRlc3RJdGVtICAgICAgID0gbnVsbDtcbiAgICAgICAgY29uc3QgdGVzdFF1ZXVlICAgID0gdGhpcy50YXNrSW5mby50ZXN0UXVldWU7XG5cbiAgICAgICAgd2hpbGUgKHRlc3RRdWV1ZS5sZW5ndGggJiYgdGVzdFF1ZXVlWzBdLnRlc3RSdW5JbmZvKSB7XG4gICAgICAgICAgICB0ZXN0SXRlbSAgICAgICA9IHRlc3RRdWV1ZS5zaGlmdCgpIGFzIFRlc3RJbmZvO1xuICAgICAgICAgICAgY3VycmVudEZpeHR1cmUgPSB0ZXN0SXRlbS5maXh0dXJlO1xuXG4gICAgICAgICAgICAvLyBOT1RFOiBoZXJlIHdlIGFzc3VtZSB0aGF0IHRlc3RzIGFyZSBzb3J0ZWQgYnkgZml4dHVyZS5cbiAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgaWYgdGhlIG5leHQgcmVwb3J0IGl0ZW0gaGFzIGEgZGlmZmVyZW50XG4gICAgICAgICAgICAvLyBmaXh0dXJlLCB3ZSBjYW4gcmVwb3J0IHRoaXMgZml4dHVyZSBzdGFydC5cbiAgICAgICAgICAgIG5leHRSZXBvcnRJdGVtID0gdGVzdFF1ZXVlWzBdO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoVG9QbHVnaW4oe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogICAgICAgIFJlcG9ydGVyUGx1Z2luTWV0aG9kLnJlcG9ydFRlc3REb25lLFxuICAgICAgICAgICAgICAgIGluaXRpYWxPYmplY3Q6IHRoaXMudGFza0luZm8udGFzayxcbiAgICAgICAgICAgICAgICBhcmdzOiAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHRlc3RJdGVtLnRlc3QubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdGVzdEl0ZW0udGVzdFJ1bkluZm8sXG4gICAgICAgICAgICAgICAgICAgIHRlc3RJdGVtLnRlc3QubWV0YSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghbmV4dFJlcG9ydEl0ZW0gfHwgbmV4dFJlcG9ydEl0ZW0uZml4dHVyZSA9PT0gY3VycmVudEZpeHR1cmUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hUb1BsdWdpbih7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAgICAgICAgUmVwb3J0ZXJQbHVnaW5NZXRob2QucmVwb3J0Rml4dHVyZVN0YXJ0LFxuICAgICAgICAgICAgICAgIGluaXRpYWxPYmplY3Q6IHRoaXMudGFza0luZm8udGFzayxcbiAgICAgICAgICAgICAgICBhcmdzOiAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIG5leHRSZXBvcnRJdGVtLmZpeHR1cmUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFJlcG9ydEl0ZW0uZml4dHVyZS5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBuZXh0UmVwb3J0SXRlbS5maXh0dXJlLm1ldGEsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcmVzb2x2ZVRlc3RJdGVtICh0YXNrSW5mbzogVGFza0luZm8sIHRlc3RJdGVtOiBUZXN0SW5mbywgdGVzdFJ1bjogVGVzdFJ1bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRhc2tJbmZvLnRhc2spXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHRhc2tJbmZvLnRhc2suc2NyZWVuc2hvdHMuaGFzQ2FwdHVyZWRGb3IodGVzdFJ1bi50ZXN0KSkge1xuICAgICAgICAgICAgdGVzdEl0ZW0uc2NyZWVuc2hvdFBhdGggPSB0YXNrSW5mby50YXNrLnNjcmVlbnNob3RzLmdldFBhdGhGb3IodGVzdFJ1bi50ZXN0KTtcbiAgICAgICAgICAgIHRlc3RJdGVtLnNjcmVlbnNob3RzICAgID0gdGFza0luZm8udGFzay5zY3JlZW5zaG90cy5nZXRTY3JlZW5zaG90c0luZm8odGVzdFJ1bi50ZXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXNrSW5mby50YXNrLnZpZGVvcylcbiAgICAgICAgICAgIHRlc3RJdGVtLnZpZGVvcyA9IHRhc2tJbmZvLnRhc2sudmlkZW9zLmdldFRlc3RWaWRlb3ModGVzdEl0ZW0udGVzdC5pZCk7XG5cbiAgICAgICAgaWYgKHRlc3RSdW4ucXVhcmFudGluZSkge1xuICAgICAgICAgICAgY29uc3QgdGVzdEl0ZW1RdWFyYW50aW5lID0gdGVzdFJ1bi5xdWFyYW50aW5lLmF0dGVtcHRzLnJlZHVjZSgocmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+LCB7IGVycm9ycyB9LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFzc2VkICAgICAgICAgICAgPSAhZXJyb3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWFyYW50aW5lQXR0ZW1wdCA9IGluZGV4ICsgMTtcblxuICAgICAgICAgICAgICAgIHJlc3VsdFtxdWFyYW50aW5lQXR0ZW1wdF0gPSB7IHBhc3NlZCB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIHsgfSk7XG5cbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGVzdEl0ZW0ucXVhcmFudGluZSwgdGVzdEl0ZW1RdWFyYW50aW5lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGVzdEl0ZW0udGVzdFJ1bkluZm8pIHtcbiAgICAgICAgICAgIHRlc3RJdGVtLnRlc3RSdW5JbmZvID0gUmVwb3J0ZXIuX2NyZWF0ZVRlc3RSdW5JbmZvKHRlc3RJdGVtKTtcblxuICAgICAgICAgICAgaWYgKHRlc3RJdGVtLnRlc3Quc2tpcClcbiAgICAgICAgICAgICAgICB0YXNrSW5mby5za2lwcGVkKys7XG4gICAgICAgICAgICBlbHNlIGlmICh0ZXN0SXRlbS5lcnJzLmxlbmd0aClcbiAgICAgICAgICAgICAgICB0YXNrSW5mby5mYWlsZWQrKztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0YXNrSW5mby5wYXNzZWQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuX3NoaWZ0VGVzdFF1ZXVlKCk7XG5cbiAgICAgICAgKHRlc3RJdGVtLnBlbmRpbmdUZXN0UnVuRG9uZVByb21pc2UucmVzb2x2ZSBhcyBGdW5jdGlvbikoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlUmVwb3J0VGVzdEFjdGlvbkV2ZW50QXJncyAoeyBjb21tYW5kLCBkdXJhdGlvbiwgcmVzdWx0LCB0ZXN0UnVuLCBlcnIgfTogUmVwb3J0VGVzdEFjdGlvbkV2ZW50QXJndW1lbnRzKTogYW55IHtcbiAgICAgICAgY29uc3QgYXJnczogYW55ID0ge307XG5cbiAgICAgICAgaWYgKGVycilcbiAgICAgICAgICAgIGFyZ3MuZXJyID0gZXJyO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInKVxuICAgICAgICAgICAgYXJncy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuXG4gICAgICAgIGNvbnN0IHRlc3RGaXh0dXJlID0gdGVzdFJ1bi50ZXN0LmZpeHR1cmUgYXMgRml4dHVyZTtcblxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhcmdzLCB7XG4gICAgICAgICAgICB0ZXN0UnVuSWQ6IHRlc3RSdW4uaWQsXG4gICAgICAgICAgICB0ZXN0OiAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogICAgdGVzdFJ1bi50ZXN0LmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6ICB0ZXN0UnVuLnRlc3QubmFtZSxcbiAgICAgICAgICAgICAgICBwaGFzZTogdGVzdFJ1bi5waGFzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogdGVzdEZpeHR1cmUubmFtZSxcbiAgICAgICAgICAgICAgICBpZDogICB0ZXN0Rml4dHVyZS5pZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb21tYW5kOiBmb3JtYXRDb21tYW5kKGNvbW1hbmQsIHJlc3VsdCksXG4gICAgICAgICAgICBicm93c2VyOiB0ZXN0UnVuLmJyb3dzZXIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBhc3luYyBfb25jZVRhc2tTdGFydEhhbmRsZXIgKHRhc2s6IFRhc2spOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy50YXNrSW5mbyA9IHtcbiAgICAgICAgICAgIHRhc2s6ICAgICAgICAgICAgICAgICAgIHRhc2ssXG4gICAgICAgICAgICBwYXNzZWQ6ICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgZmFpbGVkOiAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHNraXBwZWQ6ICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0ZXN0Q291bnQ6ICAgICAgICAgICAgICB0YXNrLnRlc3RzLmZpbHRlcih0ZXN0ID0+ICF0ZXN0LnNraXApLmxlbmd0aCxcbiAgICAgICAgICAgIHRlc3RRdWV1ZTogICAgICAgICAgICAgIFJlcG9ydGVyLl9jcmVhdGVUZXN0UXVldWUodGFzayksXG4gICAgICAgICAgICBzdG9wT25GaXJzdEZhaWw6ICAgICAgICB0YXNrLm9wdHMuc3RvcE9uRmlyc3RGYWlsIGFzIGJvb2xlYW4sXG4gICAgICAgICAgICBwZW5kaW5nVGFza0RvbmVQcm9taXNlOiBSZXBvcnRlci5fY3JlYXRlUGVuZGluZ1Byb21pc2UoKSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzdGFydFRpbWUgICAgICAgICAgICAgID0gdGFzay5zdGFydFRpbWU7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJDb25uZWN0aW9uc0luZm8gPSAoW10gYXMgQnJvd3NlckNvbm5lY3Rpb25bXSlcbiAgICAgICAgICAgIC5jb25jYXQoLi4udGFzay5icm93c2VyQ29ubmVjdGlvbkdyb3VwcylcbiAgICAgICAgICAgIC5tYXAoY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmNvbm5lY3Rpb25JbmZvKTtcbiAgICAgICAgY29uc3QgZmlyc3QgICAgICAgICAgICAgICAgICA9IHRoaXMudGFza0luZm8udGVzdFF1ZXVlWzBdO1xuXG4gICAgICAgIGNvbnN0IHRhc2tQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogdGFzay5vcHRzLFxuICAgICAgICAgICAgZGFzaGJvYXJkVXJsOiAgdGFzay5vcHRzLmRhc2hib2FyZFVybCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoVG9QbHVnaW4oe1xuICAgICAgICAgICAgbWV0aG9kOiAgICAgICAgUmVwb3J0ZXJQbHVnaW5NZXRob2QucmVwb3J0VGFza1N0YXJ0LFxuICAgICAgICAgICAgaW5pdGlhbE9iamVjdDogdGFzayxcbiAgICAgICAgICAgIGFyZ3M6ICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgYnJvd3NlckNvbm5lY3Rpb25zSW5mbyxcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tJbmZvLnRlc3RDb3VudCxcbiAgICAgICAgICAgICAgICB0YXNrLnRlc3RTdHJ1Y3R1cmUsXG4gICAgICAgICAgICAgICAgdGFza1Byb3BlcnRpZXMsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hUb1BsdWdpbih7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAgICAgICAgUmVwb3J0ZXJQbHVnaW5NZXRob2QucmVwb3J0Rml4dHVyZVN0YXJ0LFxuICAgICAgICAgICAgICAgIGluaXRpYWxPYmplY3Q6IHRhc2ssXG4gICAgICAgICAgICAgICAgYXJnczogICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBmaXJzdC5maXh0dXJlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0LmZpeHR1cmUucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgZmlyc3QuZml4dHVyZS5tZXRhLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX29uVGFza1Rlc3RSdW5TdGFydEhhbmRsZXIgKHRlc3RSdW46IFRlc3RSdW4pOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgaWYgKCF0aGlzLnRhc2tJbmZvKVxuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcblxuICAgICAgICBjb25zdCB0ZXN0SXRlbSA9IHRoaXMuX2dldFRlc3RJdGVtRm9yVGVzdFJ1bih0aGlzLnRhc2tJbmZvLCB0ZXN0UnVuKSBhcyBUZXN0SW5mbztcblxuICAgICAgICB0ZXN0SXRlbS50ZXN0UnVuSWRzLnB1c2godGVzdFJ1bi5pZCk7XG5cbiAgICAgICAgaWYgKCF0ZXN0SXRlbS5zdGFydFRpbWUpXG4gICAgICAgICAgICB0ZXN0SXRlbS5zdGFydFRpbWUgPSArbmV3IERhdGUoKTtcblxuICAgICAgICB0ZXN0SXRlbS5wZW5kaW5nU3RhcnRzLS07XG5cbiAgICAgICAgaWYgKCF0ZXN0SXRlbS5wZW5kaW5nU3RhcnRzKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAodGhpcy5wbHVnaW4ucmVwb3J0VGVzdFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdFN0YXJ0SW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bklkczogdGVzdEl0ZW0udGVzdFJ1bklkcyxcbiAgICAgICAgICAgICAgICAgICAgdGVzdElkOiAgICAgdGVzdEl0ZW0udGVzdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiAgbmV3IERhdGUodGVzdEl0ZW0uc3RhcnRUaW1lKSxcbiAgICAgICAgICAgICAgICAgICAgc2tpcHBlZDogICAgdGVzdEl0ZW0udGVzdC5za2lwLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoVG9QbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICAgICAgICBSZXBvcnRlclBsdWdpbk1ldGhvZC5yZXBvcnRUZXN0U3RhcnQgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsT2JqZWN0OiB0aGlzLnRhc2tJbmZvLnRhc2ssXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6ICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RJdGVtLnRlc3QubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RJdGVtLnRlc3QubWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RTdGFydEluZm8sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICh0ZXN0SXRlbS5wZW5kaW5nVGVzdFJ1blN0YXJ0UHJvbWlzZS5yZXNvbHZlIGFzIEZ1bmN0aW9uKSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRlc3RJdGVtLnBlbmRpbmdUZXN0UnVuU3RhcnRQcm9taXNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX29uVGFza1Rlc3RSdW5Eb25lSGFuZGxlciAodGVzdFJ1bjogVGVzdFJ1bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMudGFza0luZm8pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcmVwb3J0SXRlbSAgICAgICAgICAgICAgICAgICAgPSB0aGlzLl9nZXRUZXN0SXRlbUZvclRlc3RSdW4odGhpcy50YXNrSW5mbywgdGVzdFJ1bikgYXMgVGVzdEluZm87XG4gICAgICAgIGNvbnN0IGlzVGVzdFJ1blN0b3BwZWRUYXNrRXhlY3V0aW9uID0gISF0ZXN0UnVuLmVycnMubGVuZ3RoICYmIHRoaXMudGFza0luZm8uc3RvcE9uRmlyc3RGYWlsO1xuICAgICAgICBjb25zdCBicm93c2VyOiBCcm93c2VyUnVuSW5mbyAgICAgICA9IE9iamVjdC5hc3NpZ24oeyB0ZXN0UnVuSWQ6IHRlc3RSdW4uaWQgfSwgdGVzdFJ1bi5icm93c2VyKTtcblxuICAgICAgICByZXBvcnRJdGVtLmJyb3dzZXJzLnB1c2goYnJvd3Nlcik7XG5cbiAgICAgICAgcmVwb3J0SXRlbS5wZW5kaW5nUnVucyA9IGlzVGVzdFJ1blN0b3BwZWRUYXNrRXhlY3V0aW9uID8gMCA6IHJlcG9ydEl0ZW0ucGVuZGluZ1J1bnMgLSAxO1xuICAgICAgICByZXBvcnRJdGVtLnVuc3RhYmxlICAgID0gcmVwb3J0SXRlbS51bnN0YWJsZSB8fCB0ZXN0UnVuLnVuc3RhYmxlO1xuICAgICAgICByZXBvcnRJdGVtLmVycnMgICAgICAgID0gcmVwb3J0SXRlbS5lcnJzLmNvbmNhdCh0ZXN0UnVuLmVycnMpO1xuICAgICAgICByZXBvcnRJdGVtLndhcm5pbmdzICAgID0gdGVzdFJ1bi53YXJuaW5nTG9nID8gdW5pb24ocmVwb3J0SXRlbS53YXJuaW5ncywgdGVzdFJ1bi53YXJuaW5nTG9nLm1lc3NhZ2VzKSA6IFtdO1xuXG4gICAgICAgIGlmICh0ZXN0UnVuLnF1YXJhbnRpbmUpIHtcbiAgICAgICAgICAgIHJlcG9ydEl0ZW0ucXVhcmFudGluZSA9IHJlcG9ydEl0ZW0ucXVhcmFudGluZSB8fCB7fTtcblxuICAgICAgICAgICAgY29uc3QgcmVwb3J0SXRlbVF1YXJhbnRpbmUgPSB0ZXN0UnVuLnF1YXJhbnRpbmUuYXR0ZW1wdHMucmVkdWNlKChyZXN1bHQ6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4sIHsgZXJyb3JzLCB0ZXN0UnVuSWQgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhc3NlZCA9ICFlcnJvcnMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0W3Rlc3RSdW5JZF0gICAgICAgICAgICAgICAgICAgID0geyBwYXNzZWQsIGVycm9ycyB9O1xuICAgICAgICAgICAgICAgIGJyb3dzZXIucXVhcmFudGluZUF0dGVtcHRzVGVzdFJ1bklkcyA9IGJyb3dzZXIucXVhcmFudGluZUF0dGVtcHRzVGVzdFJ1bklkcyB8fCBbXTtcblxuICAgICAgICAgICAgICAgIGJyb3dzZXIucXVhcmFudGluZUF0dGVtcHRzVGVzdFJ1bklkcy5wdXNoKHRlc3RSdW5JZCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwge30pO1xuXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlcG9ydEl0ZW0ucXVhcmFudGluZSwgcmVwb3J0SXRlbVF1YXJhbnRpbmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXBvcnRJdGVtLnBlbmRpbmdSdW5zKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb2x2ZVRlc3RJdGVtKHRoaXMudGFza0luZm8sIHJlcG9ydEl0ZW0sIHRlc3RSdW4pO1xuXG4gICAgICAgIGF3YWl0IHJlcG9ydEl0ZW0ucGVuZGluZ1Rlc3RSdW5Eb25lUHJvbWlzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vblRhc2tUZXN0QWN0aW9uU3RhcnQgKHsgYXBpQWN0aW9uTmFtZSwgLi4ucmVzdEFyZ3MgfTogUmVwb3J0VGFza0FjdGlvbkV2ZW50QXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy50YXNrSW5mbylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbi5yZXBvcnRUZXN0QWN0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgIHJlc3RBcmdzID0gdGhpcy5fcHJlcGFyZVJlcG9ydFRlc3RBY3Rpb25FdmVudEFyZ3MocmVzdEFyZ3MgYXMgdW5rbm93biBhcyBSZXBvcnRUZXN0QWN0aW9uRXZlbnRBcmd1bWVudHMpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoVG9QbHVnaW4oe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogICAgICAgIFJlcG9ydGVyUGx1Z2luTWV0aG9kLnJlcG9ydFRlc3RBY3Rpb25TdGFydCBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgaW5pdGlhbE9iamVjdDogdGhpcy50YXNrSW5mby50YXNrLFxuICAgICAgICAgICAgICAgIGFyZ3M6ICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYXBpQWN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdEFyZ3MsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfb25UYXNrVGVzdEFjdGlvbkRvbmUgKHsgYXBpQWN0aW9uTmFtZSwgLi4ucmVzdEFyZ3MgfTogUmVwb3J0VGFza0FjdGlvbkV2ZW50QXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy50YXNrSW5mbylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbi5yZXBvcnRUZXN0QWN0aW9uRG9uZSkge1xuICAgICAgICAgICAgcmVzdEFyZ3MgPSB0aGlzLl9wcmVwYXJlUmVwb3J0VGVzdEFjdGlvbkV2ZW50QXJncyhyZXN0QXJncyBhcyB1bmtub3duIGFzIFJlcG9ydFRlc3RBY3Rpb25FdmVudEFyZ3VtZW50cyk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hUb1BsdWdpbih7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAgICAgICAgUmVwb3J0ZXJQbHVnaW5NZXRob2QucmVwb3J0VGVzdEFjdGlvbkRvbmUgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIGluaXRpYWxPYmplY3Q6IHRoaXMudGFza0luZm8udGFzayxcbiAgICAgICAgICAgICAgICBhcmdzOiAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIGFwaUFjdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHJlc3RBcmdzLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX29uY2VUYXNrRG9uZUhhbmRsZXIgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMudGFza0luZm8pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgICAgcGFzc2VkQ291bnQ6ICB0aGlzLnRhc2tJbmZvLnBhc3NlZCxcbiAgICAgICAgICAgIGZhaWxlZENvdW50OiAgdGhpcy50YXNrSW5mby5mYWlsZWQsXG4gICAgICAgICAgICBza2lwcGVkQ291bnQ6IHRoaXMudGFza0luZm8uc2tpcHBlZCxcbiAgICAgICAgfTtcblxuICAgICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoVG9QbHVnaW4oe1xuICAgICAgICAgICAgbWV0aG9kOiAgICAgICAgUmVwb3J0ZXJQbHVnaW5NZXRob2QucmVwb3J0VGFza0RvbmUsXG4gICAgICAgICAgICBpbml0aWFsT2JqZWN0OiB0aGlzLnRhc2tJbmZvLnRhc2ssXG4gICAgICAgICAgICBhcmdzOiAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgZW5kVGltZSxcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tJbmZvLnBhc3NlZCxcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tJbmZvLnRhc2s/Lndhcm5pbmdMb2cubWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgKHRoaXMudGFza0luZm8ucGVuZGluZ1Rhc2tEb25lUHJvbWlzZS5yZXNvbHZlIGFzIEZ1bmN0aW9uKSgpO1xuICAgIH1cbn1cbiJdfQ==
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVwb3J0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUlnQjtBQUVoQix5Q0FBeUQ7QUFDekQsZ0VBQStDO0FBQy9DLHNFQUFvRDtBQUNwRCw4RUFBcUQ7QUFDckQsK0NBQXdEO0FBZ0J4RCxnREFBMEU7QUFDMUUsdUdBQTRFO0FBQzVFLHdEQUErQjtBQUMvQixnREFBd0I7QUFDeEIsNENBQW9CO0FBNkZwQixNQUFxQixRQUFRO0lBT3pCLFlBQW9CLE1BQXNCLEVBQUUsVUFBc0IsRUFBRSxTQUFtQixFQUFFLElBQVk7UUFDakcsSUFBSSxDQUFDLE1BQU0sR0FBTyxJQUFJLHFCQUFrQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFN0IsSUFBSSxDQUFDLFFBQVEsR0FBSSxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBSSxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFFM0IsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBRSxNQUFnQjtRQUM3QyxPQUFRLE1BQXNCLENBQUMsS0FBSyxJQUFJLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxJQUFJLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ25HLENBQUM7SUFFTyxNQUFNLENBQUMscUJBQXFCO1FBQ2hDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUVwQixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLENBQUMsQ0FBOEIsQ0FBQztRQUVoQyxP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QUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ2pDLElBQUksRUFBVztnQkFDWCxPQUFPO2dCQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtnQkFDcEIsTUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksMENBQUUsVUFBVSxDQUFDLFFBQVE7Z0JBQ3ZDLE1BQU07YUFDVDtTQUNKLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsT0FBb0IsRUFBRSxDQUFDO0lBQ2pFLENBQUM7Q0FDSjtBQXZmRCwyQkF1ZkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGZpbmQsXG4gICAgc29ydEJ5LFxuICAgIHVuaW9uLFxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyB3cml0YWJsZSBhcyBpc1dyaXRhYmxlU3RyZWFtIH0gZnJvbSAnaXMtc3RyZWFtJztcbmltcG9ydCBSZXBvcnRlclBsdWdpbkhvc3QgZnJvbSAnLi9wbHVnaW4taG9zdCc7XG5pbXBvcnQgUmVwb3J0ZXJQbHVnaW5NZXRob2QgZnJvbSAnLi9wbHVnaW4tbWV0aG9kcyc7XG5pbXBvcnQgZm9ybWF0Q29tbWFuZCBmcm9tICcuL2NvbW1hbmQvZm9ybWF0LWNvbW1hbmQnO1xuaW1wb3J0IHsgUmVwb3J0ZXJQbHVnaW5FcnJvciB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCBUYXNrIGZyb20gJy4uL3J1bm5lci90YXNrJztcbmltcG9ydCB7IFdyaXRhYmxlIGFzIFdyaXRhYmxlU3RyZWFtLCBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBXcml0ZVN0cmVhbSB9IGZyb20gJ3R0eSc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi90ZXN0LXJ1bic7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IEZpeHR1cmUgZnJvbSAnLi4vYXBpL3N0cnVjdHVyZS9maXh0dXJlJztcbmltcG9ydCBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIgZnJvbSAnLi4vZXJyb3JzL3Rlc3QtcnVuL2Zvcm1hdHRhYmxlLWFkYXB0ZXInO1xuaW1wb3J0IHsgQ29tbWFuZEJhc2UgfSBmcm9tICcuLi90ZXN0LXJ1bi9jb21tYW5kcy9iYXNlJztcblxuaW1wb3J0IHtcbiAgICBSZXBvcnRlclBsdWdpbixcbiAgICBSZXBvcnRlclBsdWdpblNvdXJjZSxcbiAgICBSZXBvcnRlclNvdXJjZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgZ2V0UGx1Z2luRmFjdG9yeSwgcHJvY2Vzc1JlcG9ydGVyTmFtZSB9IGZyb20gJy4uL3V0aWxzL3JlcG9ydGVyJztcbmltcG9ydCByZXNvbHZlUGF0aFJlbGF0aXZlbHlDd2QgZnJvbSAnLi4vdXRpbHMvcmVzb2x2ZS1wYXRoLXJlbGF0aXZlbHktY3dkJztcbmltcG9ydCBtYWtlRGlyIGZyb20gJ21ha2UtZGlyJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBNZXNzYWdlQnVzIGZyb20gJy4uL3V0aWxzL21lc3NhZ2UtYnVzJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbiBmcm9tICcuLi9icm93c2VyL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5cbmludGVyZmFjZSBQZW5kaW5nUHJvbWlzZSB7XG4gICAgcmVzb2x2ZTogRnVuY3Rpb24gfCBudWxsO1xuICAgIHRoZW46IEZ1bmN0aW9uO1xufVxuXG5pbnRlcmZhY2UgVGFza0luZm8ge1xuICAgIHRhc2s6IFRhc2sgfCBudWxsO1xuICAgIHBhc3NlZDogbnVtYmVyO1xuICAgIGZhaWxlZDogbnVtYmVyO1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICB0ZXN0Q291bnQ6IG51bWJlcjtcbiAgICB0ZXN0UXVldWU6IFRlc3RJbmZvW107XG4gICAgcmVhZG9ubHkgc3RvcE9uRmlyc3RGYWlsOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHBlbmRpbmdUYXNrRG9uZVByb21pc2U6IFBlbmRpbmdQcm9taXNlO1xufVxuXG5pbnRlcmZhY2UgVGVzdEluZm8ge1xuICAgIGZpeHR1cmU6IEZpeHR1cmU7XG4gICAgdGVzdDogVGVzdDtcbiAgICB0ZXN0UnVuSWRzOiBzdHJpbmdbXTtcbiAgICBzY3JlZW5zaG90UGF0aDogbnVsbCB8IHN0cmluZztcbiAgICBzY3JlZW5zaG90czogdW5rbm93bltdO1xuICAgIHZpZGVvczogdW5rbm93bltdO1xuICAgIHF1YXJhbnRpbmU6IG51bGwgfCBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuICAgIGVycnM6IFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlcltdO1xuICAgIHdhcm5pbmdzOiBzdHJpbmdbXTtcbiAgICB1bnN0YWJsZTogYm9vbGVhbjtcbiAgICBzdGFydFRpbWU6IG51bGwgfCBudW1iZXI7XG4gICAgdGVzdFJ1bkluZm86IG51bGwgfCBUZXN0UnVuSW5mbztcbiAgICBwZW5kaW5nUnVuczogbnVtYmVyO1xuICAgIHBlbmRpbmdTdGFydHM6IG51bWJlcjtcbiAgICBwZW5kaW5nVGVzdFJ1bkRvbmVQcm9taXNlOiBQZW5kaW5nUHJvbWlzZTtcbiAgICBwZW5kaW5nVGVzdFJ1blN0YXJ0UHJvbWlzZTogUGVuZGluZ1Byb21pc2U7XG4gICAgYnJvd3NlcnM6IEJyb3dzZXJSdW5JbmZvW107XG59XG5cbmludGVyZmFjZSBGaXh0dXJlSW5mbyB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBtZXRhOiBEaWN0aW9uYXJ5PHN0cmluZz47XG59XG5cbmludGVyZmFjZSBCcm93c2VyUnVuSW5mbyBleHRlbmRzIEJyb3dzZXIge1xuICAgIHRlc3RSdW5JZDogc3RyaW5nO1xuICAgIHF1YXJhbnRpbmVBdHRlbXB0c1Rlc3RSdW5JZHM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIFRlc3RSdW5JbmZvIHtcbiAgICBlcnJzOiBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXJbXTtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gICAgZHVyYXRpb25NczogbnVtYmVyO1xuICAgIHVuc3RhYmxlOiBib29sZWFuO1xuICAgIHNjcmVlbnNob3RQYXRoOiBzdHJpbmc7XG4gICAgc2NyZWVuc2hvdHM6IHVua25vd247XG4gICAgdmlkZW9zOiB1bmtub3duO1xuICAgIHF1YXJhbnRpbmU6IHVua25vd247XG4gICAgc2tpcHBlZDogYm9vbGVhbjtcbiAgICBicm93c2VyczogdW5rbm93bltdO1xuICAgIHRlc3RJZDogc3RyaW5nO1xuICAgIGZpeHR1cmU6IEZpeHR1cmVJbmZvO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTWV0aG9kQXJndW1lbnRzIHtcbiAgICBpbml0aWFsT2JqZWN0OiBUYXNrIHwgTWVzc2FnZUJ1cyB8IG51bGw7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgYXJnczogdW5rbm93bltdO1xufVxuXG5pbnRlcmZhY2UgUmVwb3J0VGVzdEFjdGlvbkV2ZW50QXJndW1lbnRzIHtcbiAgICBjb21tYW5kOiBDb21tYW5kQmFzZTtcbiAgICBkdXJhdGlvbjogbnVtYmVyO1xuICAgIHJlc3VsdDogdW5rbm93bjtcbiAgICB0ZXN0UnVuOiBUZXN0UnVuO1xuICAgIGVycjogVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyO1xufVxuXG5pbnRlcmZhY2UgUmVwb3J0VGFza0FjdGlvbkV2ZW50QXJndW1lbnRzIHtcbiAgICBhcGlBY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgcmVzdEFyZ3M6IG9iamVjdDtcbn1cblxuaW50ZXJmYWNlIFJlcG9ydFdhcm5pbmdFdmVudEFyZ3VtZW50cyB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIHRlc3RSdW4/OiBUZXN0UnVuO1xuICAgIGFjdGlvbklkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBvcnRlciB7XG4gICAgcHVibGljIHJlYWRvbmx5IHBsdWdpbjogUmVwb3J0ZXJQbHVnaW5Ib3N0O1xuICAgIHB1YmxpYyByZWFkb25seSBtZXNzYWdlQnVzOiBNZXNzYWdlQnVzO1xuICAgIHB1YmxpYyBkaXNwb3NlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgdGFza0luZm86IFRhc2tJbmZvIHwgbnVsbDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3V0U3RyZWFtOiBXcml0YWJsZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAocGx1Z2luOiBSZXBvcnRlclBsdWdpbiwgbWVzc2FnZUJ1czogTWVzc2FnZUJ1cywgb3V0U3RyZWFtOiBXcml0YWJsZSwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucGx1Z2luICAgICA9IG5ldyBSZXBvcnRlclBsdWdpbkhvc3QocGx1Z2luLCBvdXRTdHJlYW0sIG5hbWUpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VCdXMgPSBtZXNzYWdlQnVzO1xuXG4gICAgICAgIHRoaXMuZGlzcG9zZWQgID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGFza0luZm8gID0gbnVsbDtcbiAgICAgICAgdGhpcy5vdXRTdHJlYW0gPSBvdXRTdHJlYW07XG5cbiAgICAgICAgdGhpcy5fYXNzaWduTWVzc2FnZUJ1c0V2ZW50SGFuZGxlcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfaXNTcGVjaWFsU3RyZWFtIChzdHJlYW06IFdyaXRhYmxlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoc3RyZWFtIGFzIFdyaXRlU3RyZWFtKS5pc1RUWSB8fCBzdHJlYW0gPT09IHByb2Nlc3Muc3Rkb3V0IHx8IHN0cmVhbSA9PT0gcHJvY2Vzcy5zdGRlcnI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2NyZWF0ZVBlbmRpbmdQcm9taXNlICgpOiBQZW5kaW5nUHJvbWlzZSB7XG4gICAgICAgIGxldCByZXNvbHZlciA9IG51bGw7XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZXIgPSByZXNvbHZlO1xuICAgICAgICB9KSBhcyB1bmtub3duIGFzIFBlbmRpbmdQcm9taXNlO1xuXG4gICAgICAgIHByb21pc2UucmVzb2x2ZSA9IHJlc29sdmVyO1xuXG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbml0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaFRvUGx1Z2luKHtcbiAgICAgICAgICAgIG1ldGhvZDogICAgICAgIFJlcG9ydGVyUGx1Z2luTWV0aG9kLmluaXQsXG4gICAgICAgICAgICBpbml0aWFsT2JqZWN0OiBudWxsLFxuICAgICAgICAgICAgYXJnczogICAgICAgICAgW3t9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRpc3BhdGNoVG9QbHVnaW4gKHsgbWV0aG9kLCBpbml0aWFsT2JqZWN0LCBhcmdzID0gW10gfTogUGx1Z2luTWV0aG9kQXJndW1lbnRzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpblttZXRob2RdKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChvcmlnaW5hbEVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCB1bmNhdWdodEVycm9yID0gbmV3IFJlcG9ydGVyUGx1Z2luRXJyb3Ioe1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMucGx1Z2luLm5hbWUsXG4gICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXJyb3IsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGluaXRpYWxPYmplY3QpXG4gICAgICAgICAgICAgICAgYXdhaXQgaW5pdGlhbE9iamVjdC5lbWl0KCdlcnJvcicsIHVuY2F1Z2h0RXJyb3IpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IHVuY2F1Z2h0RXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hc3NpZ25NZXNzYWdlQnVzRXZlbnRIYW5kbGVycyAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VCdXMgPSB0aGlzLm1lc3NhZ2VCdXM7XG5cbiAgICAgICAgbWVzc2FnZUJ1cy5vbignd2FybmluZy1hZGQnLCBhc3luYyBlID0+IGF3YWl0IHRoaXMuX29uV2FybmluZ0FkZEhhbmRsZXIoZSkpO1xuXG4gICAgICAgIG1lc3NhZ2VCdXMub25jZSgnc3RhcnQnLCBhc3luYyAodGFzazogVGFzaykgPT4gYXdhaXQgdGhpcy5fb25jZVRhc2tTdGFydEhhbmRsZXIodGFzaykpO1xuXG4gICAgICAgIG1lc3NhZ2VCdXMub24oJ3Rlc3QtcnVuLXN0YXJ0JywgYXN5bmMgdGVzdFJ1biA9PiBhd2FpdCB0aGlzLl9vblRhc2tUZXN0UnVuU3RhcnRIYW5kbGVyKHRlc3RSdW4pKTtcblxuICAgICAgICBtZXNzYWdlQnVzLm9uKCd0ZXN0LXJ1bi1kb25lJywgYXN5bmMgdGVzdFJ1biA9PiBhd2FpdCB0aGlzLl9vblRhc2tUZXN0UnVuRG9uZUhhbmRsZXIodGVzdFJ1bikpO1xuXG4gICAgICAgIG1lc3NhZ2VCdXMub24oJ3Rlc3QtYWN0aW9uLXN0YXJ0JywgYXN5bmMgZSA9PiBhd2FpdCB0aGlzLl9vblRhc2tUZXN0QWN0aW9uU3RhcnQoZSkpO1xuXG4gICAgICAgIG1lc3NhZ2VCdXMub24oJ3Rlc3QtYWN0aW9uLWRvbmUnLCBhc3luYyBlID0+IGF3YWl0IHRoaXMuX29uVGFza1Rlc3RBY3Rpb25Eb25lKGUpKTtcblxuICAgICAgICBtZXNzYWdlQnVzLm9uY2UoJ2RvbmUnLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLl9vbmNlVGFza0RvbmVIYW5kbGVyKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkaXNwb3NlICgpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKCF0aGlzLm91dFN0cmVhbSB8fCBSZXBvcnRlci5faXNTcGVjaWFsU3RyZWFtKHRoaXMub3V0U3RyZWFtKSB8fCAhaXNXcml0YWJsZVN0cmVhbSh0aGlzLm91dFN0cmVhbSkpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgY29uc3Qgc3RyZWFtRmluaXNoZWRQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLm91dFN0cmVhbS5vbmNlKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICAgICAgICAgIHRoaXMub3V0U3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVzb2x2ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub3V0U3RyZWFtLmVuZCgpO1xuXG4gICAgICAgIHJldHVybiBzdHJlYW1GaW5pc2hlZFByb21pc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgX2Vuc3VyZU91dFN0cmVhbSAob3V0U3RyZWFtOiBzdHJpbmcgfCBXcml0YWJsZVN0cmVhbSk6IFByb21pc2U8V3JpdGFibGVTdHJlYW0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvdXRTdHJlYW0gIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIG91dFN0cmVhbTtcblxuICAgICAgICBjb25zdCBmdWxsUmVwb3J0ZXJPdXRwdXRQYXRoID0gcmVzb2x2ZVBhdGhSZWxhdGl2ZWx5Q3dkKG91dFN0cmVhbSk7XG5cbiAgICAgICAgYXdhaXQgbWFrZURpcihwYXRoLmRpcm5hbWUoZnVsbFJlcG9ydGVyT3V0cHV0UGF0aCkpO1xuXG4gICAgICAgIHJldHVybiBmcy5jcmVhdGVXcml0ZVN0cmVhbShmdWxsUmVwb3J0ZXJPdXRwdXRQYXRoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfYWRkRGVmYXVsdFJlcG9ydGVyIChyZXBvcnRlcnM6IFJlcG9ydGVyU291cmNlW10pOiB2b2lkIHtcbiAgICAgICAgcmVwb3J0ZXJzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogICAnc3BlYycsXG4gICAgICAgICAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFzeW5jIGdldFJlcG9ydGVyUGx1Z2lucyAocmVwb3J0ZXJzOiBSZXBvcnRlclNvdXJjZVtdID0gW10pOiBQcm9taXNlPFJlcG9ydGVyUGx1Z2luU291cmNlW10+IHtcbiAgICAgICAgaWYgKCFyZXBvcnRlcnMubGVuZ3RoKVxuICAgICAgICAgICAgUmVwb3J0ZXIuX2FkZERlZmF1bHRSZXBvcnRlcihyZXBvcnRlcnMpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXBvcnRlcnMubWFwKGFzeW5jICh7IG5hbWUsIG91dHB1dCwgb3B0aW9ucyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5GYWN0b3J5ID0gZ2V0UGx1Z2luRmFjdG9yeShuYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZE5hbWUgPSBwcm9jZXNzUmVwb3J0ZXJOYW1lKG5hbWUpO1xuICAgICAgICAgICAgY29uc3Qgb3V0U3RyZWFtICAgICA9IG91dHB1dCA/IGF3YWl0IFJlcG9ydGVyLl9lbnN1cmVPdXRTdHJlYW0ob3V0cHV0KSA6IHZvaWQgMDtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwbHVnaW46IHBsdWdpbkZhY3Rvcnkob3B0aW9ucyksXG4gICAgICAgICAgICAgICAgbmFtZTogICBwcm9jZXNzZWROYW1lLFxuICAgICAgICAgICAgICAgIG91dFN0cmVhbSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vbldhcm5pbmdBZGRIYW5kbGVyICh7IG1lc3NhZ2UsIHRlc3RSdW4sIGFjdGlvbklkIH06IFJlcG9ydFdhcm5pbmdFdmVudEFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoVG9QbHVnaW4oe1xuICAgICAgICAgICAgbWV0aG9kOiAgICAgICAgUmVwb3J0ZXJQbHVnaW5NZXRob2QucmVwb3J0V2FybmluZ3MgYXMgc3RyaW5nLFxuICAgICAgICAgICAgaW5pdGlhbE9iamVjdDogdGhpcy5tZXNzYWdlQnVzLFxuICAgICAgICAgICAgYXJnczogICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bklkOiB0ZXN0UnVuPy5pZCxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uSWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vVGFza1xuICAgIHByaXZhdGUgc3RhdGljIF9jcmVhdGVUZXN0SXRlbSAodGVzdDogVGVzdCwgcnVuc1BlclRlc3Q6IG51bWJlcik6IFRlc3RJbmZvIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpeHR1cmU6ICAgICAgICAgICAgICAgICAgICB0ZXN0LmZpeHR1cmUgYXMgRml4dHVyZSxcbiAgICAgICAgICAgIHRlc3Q6ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LFxuICAgICAgICAgICAgdGVzdFJ1bklkczogICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgc2NyZWVuc2hvdFBhdGg6ICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBzY3JlZW5zaG90czogICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICB2aWRlb3M6ICAgICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBxdWFyYW50aW5lOiAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGVycnM6ICAgICAgICAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIHdhcm5pbmdzOiAgICAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIHVuc3RhYmxlOiAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIHN0YXJ0VGltZTogICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgdGVzdFJ1bkluZm86ICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBwZW5kaW5nUnVuczogICAgICAgICAgICAgICAgcnVuc1BlclRlc3QsXG4gICAgICAgICAgICBwZW5kaW5nU3RhcnRzOiAgICAgICAgICAgICAgcnVuc1BlclRlc3QsXG4gICAgICAgICAgICBwZW5kaW5nVGVzdFJ1bkRvbmVQcm9taXNlOiAgUmVwb3J0ZXIuX2NyZWF0ZVBlbmRpbmdQcm9taXNlKCksXG4gICAgICAgICAgICBwZW5kaW5nVGVzdFJ1blN0YXJ0UHJvbWlzZTogUmVwb3J0ZXIuX2NyZWF0ZVBlbmRpbmdQcm9taXNlKCksXG4gICAgICAgICAgICBicm93c2VyczogICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2NyZWF0ZVRlc3RRdWV1ZSAodGFzazogVGFzayk6IFRlc3RJbmZvW10ge1xuICAgICAgICBjb25zdCBydW5zUGVyVGVzdCA9IHRhc2suYnJvd3NlckNvbm5lY3Rpb25Hcm91cHMubGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiB0YXNrLnRlc3RzLm1hcCh0ZXN0ID0+IFJlcG9ydGVyLl9jcmVhdGVUZXN0SXRlbSh0ZXN0LCBydW5zUGVyVGVzdCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9jcmVhdGVUZXN0UnVuSW5mbyAocmVwb3J0SXRlbTogVGVzdEluZm8pOiBUZXN0UnVuSW5mbyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJzOiAgICAgICAgICAgc29ydEJ5KHJlcG9ydEl0ZW0uZXJycywgWyd1c2VyQWdlbnQnLCAnY29kZSddKSxcbiAgICAgICAgICAgIHdhcm5pbmdzOiAgICAgICByZXBvcnRJdGVtLndhcm5pbmdzLFxuICAgICAgICAgICAgZHVyYXRpb25NczogICAgICtuZXcgRGF0ZSgpIC0gKHJlcG9ydEl0ZW0uc3RhcnRUaW1lIGFzIG51bWJlciksIC8vZXNsaW50LWRpc2FibGUtbGluZSAgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4dHJhLXBhcmVuc1xuICAgICAgICAgICAgdW5zdGFibGU6ICAgICAgIHJlcG9ydEl0ZW0udW5zdGFibGUsXG4gICAgICAgICAgICBzY3JlZW5zaG90UGF0aDogcmVwb3J0SXRlbS5zY3JlZW5zaG90UGF0aCBhcyBzdHJpbmcsXG4gICAgICAgICAgICBzY3JlZW5zaG90czogICAgcmVwb3J0SXRlbS5zY3JlZW5zaG90cyxcbiAgICAgICAgICAgIHZpZGVvczogICAgICAgICByZXBvcnRJdGVtLnZpZGVvcyxcbiAgICAgICAgICAgIHF1YXJhbnRpbmU6ICAgICByZXBvcnRJdGVtLnF1YXJhbnRpbmUsXG4gICAgICAgICAgICBza2lwcGVkOiAgICAgICAgcmVwb3J0SXRlbS50ZXN0LnNraXAsXG4gICAgICAgICAgICBicm93c2VyczogICAgICAgcmVwb3J0SXRlbS5icm93c2VycyxcbiAgICAgICAgICAgIHRlc3RJZDogICAgICAgICByZXBvcnRJdGVtLnRlc3QuaWQsXG4gICAgICAgICAgICBmaXh0dXJlOiAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiAgIHJlcG9ydEl0ZW0uZml4dHVyZS5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiByZXBvcnRJdGVtLmZpeHR1cmUubmFtZSxcbiAgICAgICAgICAgICAgICBwYXRoOiByZXBvcnRJdGVtLmZpeHR1cmUucGF0aCxcbiAgICAgICAgICAgICAgICBtZXRhOiByZXBvcnRJdGVtLmZpeHR1cmUubWV0YSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0VGVzdEl0ZW1Gb3JUZXN0UnVuICh0YXNrSW5mbzogVGFza0luZm8sIHRlc3RSdW46IFRlc3RSdW4pOiBUZXN0SW5mbyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBmaW5kKHRhc2tJbmZvLnRlc3RRdWV1ZSwgaSA9PiBpLnRlc3QgPT09IHRlc3RSdW4udGVzdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2hpZnRUZXN0UXVldWUgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMudGFza0luZm8pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgbGV0IGN1cnJlbnRGaXh0dXJlID0gbnVsbDtcbiAgICAgICAgbGV0IG5leHRSZXBvcnRJdGVtID0gbnVsbDtcbiAgICAgICAgbGV0IHRlc3RJdGVtICAgICAgID0gbnVsbDtcbiAgICAgICAgY29uc3QgdGVzdFF1ZXVlICAgID0gdGhpcy50YXNrSW5mby50ZXN0UXVldWU7XG5cbiAgICAgICAgd2hpbGUgKHRlc3RRdWV1ZS5sZW5ndGggJiYgdGVzdFF1ZXVlWzBdLnRlc3RSdW5JbmZvKSB7XG4gICAgICAgICAgICB0ZXN0SXRlbSAgICAgICA9IHRlc3RRdWV1ZS5zaGlmdCgpIGFzIFRlc3RJbmZvO1xuICAgICAgICAgICAgY3VycmVudEZpeHR1cmUgPSB0ZXN0SXRlbS5maXh0dXJlO1xuXG4gICAgICAgICAgICAvLyBOT1RFOiBoZXJlIHdlIGFzc3VtZSB0aGF0IHRlc3RzIGFyZSBzb3J0ZWQgYnkgZml4dHVyZS5cbiAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgaWYgdGhlIG5leHQgcmVwb3J0IGl0ZW0gaGFzIGEgZGlmZmVyZW50XG4gICAgICAgICAgICAvLyBmaXh0dXJlLCB3ZSBjYW4gcmVwb3J0IHRoaXMgZml4dHVyZSBzdGFydC5cbiAgICAgICAgICAgIG5leHRSZXBvcnRJdGVtID0gdGVzdFF1ZXVlWzBdO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoVG9QbHVnaW4oe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogICAgICAgIFJlcG9ydGVyUGx1Z2luTWV0aG9kLnJlcG9ydFRlc3REb25lLFxuICAgICAgICAgICAgICAgIGluaXRpYWxPYmplY3Q6IHRoaXMudGFza0luZm8udGFzayxcbiAgICAgICAgICAgICAgICBhcmdzOiAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHRlc3RJdGVtLnRlc3QubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdGVzdEl0ZW0udGVzdFJ1bkluZm8sXG4gICAgICAgICAgICAgICAgICAgIHRlc3RJdGVtLnRlc3QubWV0YSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghbmV4dFJlcG9ydEl0ZW0gfHwgbmV4dFJlcG9ydEl0ZW0uZml4dHVyZSA9PT0gY3VycmVudEZpeHR1cmUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hUb1BsdWdpbih7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAgICAgICAgUmVwb3J0ZXJQbHVnaW5NZXRob2QucmVwb3J0Rml4dHVyZVN0YXJ0LFxuICAgICAgICAgICAgICAgIGluaXRpYWxPYmplY3Q6IHRoaXMudGFza0luZm8udGFzayxcbiAgICAgICAgICAgICAgICBhcmdzOiAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIG5leHRSZXBvcnRJdGVtLmZpeHR1cmUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFJlcG9ydEl0ZW0uZml4dHVyZS5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBuZXh0UmVwb3J0SXRlbS5maXh0dXJlLm1ldGEsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcmVzb2x2ZVRlc3RJdGVtICh0YXNrSW5mbzogVGFza0luZm8sIHRlc3RJdGVtOiBUZXN0SW5mbywgdGVzdFJ1bjogVGVzdFJ1bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRhc2tJbmZvLnRhc2spXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHRhc2tJbmZvLnRhc2suc2NyZWVuc2hvdHMuaGFzQ2FwdHVyZWRGb3IodGVzdFJ1bi50ZXN0KSkge1xuICAgICAgICAgICAgdGVzdEl0ZW0uc2NyZWVuc2hvdFBhdGggPSB0YXNrSW5mby50YXNrLnNjcmVlbnNob3RzLmdldFBhdGhGb3IodGVzdFJ1bi50ZXN0KTtcbiAgICAgICAgICAgIHRlc3RJdGVtLnNjcmVlbnNob3RzICAgID0gdGFza0luZm8udGFzay5zY3JlZW5zaG90cy5nZXRTY3JlZW5zaG90c0luZm8odGVzdFJ1bi50ZXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXNrSW5mby50YXNrLnZpZGVvcylcbiAgICAgICAgICAgIHRlc3RJdGVtLnZpZGVvcyA9IHRhc2tJbmZvLnRhc2sudmlkZW9zLmdldFRlc3RWaWRlb3ModGVzdEl0ZW0udGVzdC5pZCk7XG5cbiAgICAgICAgaWYgKHRlc3RSdW4ucXVhcmFudGluZSkge1xuICAgICAgICAgICAgY29uc3QgdGVzdEl0ZW1RdWFyYW50aW5lID0gdGVzdFJ1bi5xdWFyYW50aW5lLmF0dGVtcHRzLnJlZHVjZSgocmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+LCB7IGVycm9ycyB9LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFzc2VkICAgICAgICAgICAgPSAhZXJyb3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWFyYW50aW5lQXR0ZW1wdCA9IGluZGV4ICsgMTtcblxuICAgICAgICAgICAgICAgIHJlc3VsdFtxdWFyYW50aW5lQXR0ZW1wdF0gPSB7IHBhc3NlZCB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIHsgfSk7XG5cbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGVzdEl0ZW0ucXVhcmFudGluZSBhcyBvYmplY3QsIHRlc3RJdGVtUXVhcmFudGluZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRlc3RJdGVtLnRlc3RSdW5JbmZvKSB7XG4gICAgICAgICAgICB0ZXN0SXRlbS50ZXN0UnVuSW5mbyA9IFJlcG9ydGVyLl9jcmVhdGVUZXN0UnVuSW5mbyh0ZXN0SXRlbSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXN0SXRlbS50ZXN0LnNraXApXG4gICAgICAgICAgICAgICAgdGFza0luZm8uc2tpcHBlZCsrO1xuICAgICAgICAgICAgZWxzZSBpZiAodGVzdEl0ZW0uZXJycy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgdGFza0luZm8uZmFpbGVkKys7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGFza0luZm8ucGFzc2VkKys7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLl9zaGlmdFRlc3RRdWV1ZSgpO1xuXG4gICAgICAgICh0ZXN0SXRlbS5wZW5kaW5nVGVzdFJ1bkRvbmVQcm9taXNlLnJlc29sdmUgYXMgRnVuY3Rpb24pKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVJlcG9ydFRlc3RBY3Rpb25FdmVudEFyZ3MgKHsgY29tbWFuZCwgZHVyYXRpb24sIHJlc3VsdCwgdGVzdFJ1biwgZXJyIH06IFJlcG9ydFRlc3RBY3Rpb25FdmVudEFyZ3VtZW50cyk6IGFueSB7XG4gICAgICAgIGNvbnN0IGFyZ3M6IGFueSA9IHt9O1xuXG4gICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICBhcmdzLmVyciA9IGVycjtcblxuICAgICAgICBpZiAodHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIGFyZ3MuZHVyYXRpb24gPSBkdXJhdGlvbjtcblxuICAgICAgICBjb25zdCB0ZXN0Rml4dHVyZSA9IHRlc3RSdW4udGVzdC5maXh0dXJlIGFzIEZpeHR1cmU7XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXJncywge1xuICAgICAgICAgICAgdGVzdFJ1bklkOiB0ZXN0UnVuLmlkLFxuICAgICAgICAgICAgdGVzdDogICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6ICAgIHRlc3RSdW4udGVzdC5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiAgdGVzdFJ1bi50ZXN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgcGhhc2U6IHRlc3RSdW4ucGhhc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZml4dHVyZToge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRlc3RGaXh0dXJlLm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6ICAgdGVzdEZpeHR1cmUuaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29tbWFuZDogZm9ybWF0Q29tbWFuZChjb21tYW5kLCByZXN1bHQpLFxuICAgICAgICAgICAgYnJvd3NlcjogdGVzdFJ1bi5icm93c2VyLFxuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgYXN5bmMgX29uY2VUYXNrU3RhcnRIYW5kbGVyICh0YXNrOiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMudGFza0luZm8gPSB7XG4gICAgICAgICAgICB0YXNrOiAgICAgICAgICAgICAgICAgICB0YXNrLFxuICAgICAgICAgICAgcGFzc2VkOiAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGZhaWxlZDogICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBza2lwcGVkOiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgdGVzdENvdW50OiAgICAgICAgICAgICAgdGFzay50ZXN0cy5maWx0ZXIodGVzdCA9PiAhdGVzdC5za2lwKS5sZW5ndGgsXG4gICAgICAgICAgICB0ZXN0UXVldWU6ICAgICAgICAgICAgICBSZXBvcnRlci5fY3JlYXRlVGVzdFF1ZXVlKHRhc2spLFxuICAgICAgICAgICAgc3RvcE9uRmlyc3RGYWlsOiAgICAgICAgdGFzay5vcHRzLnN0b3BPbkZpcnN0RmFpbCBhcyBib29sZWFuLFxuICAgICAgICAgICAgcGVuZGluZ1Rhc2tEb25lUHJvbWlzZTogUmVwb3J0ZXIuX2NyZWF0ZVBlbmRpbmdQcm9taXNlKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lICAgICAgICAgICAgICA9IHRhc2suc3RhcnRUaW1lO1xuICAgICAgICBjb25zdCBicm93c2VyQ29ubmVjdGlvbnNJbmZvID0gKFtdIGFzIEJyb3dzZXJDb25uZWN0aW9uW10pXG4gICAgICAgICAgICAuY29uY2F0KC4uLnRhc2suYnJvd3NlckNvbm5lY3Rpb25Hcm91cHMpXG4gICAgICAgICAgICAubWFwKGNvbm5lY3Rpb24gPT4gY29ubmVjdGlvbi5jb25uZWN0aW9uSW5mbyk7XG4gICAgICAgIGNvbnN0IGZpcnN0ICAgICAgICAgICAgICAgICAgPSB0aGlzLnRhc2tJbmZvLnRlc3RRdWV1ZVswXTtcblxuICAgICAgICBjb25zdCB0YXNrUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IHRhc2sub3B0cyxcbiAgICAgICAgICAgIGRhc2hib2FyZFVybDogIHRhc2sub3B0cy5kYXNoYm9hcmRVcmwsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaFRvUGx1Z2luKHtcbiAgICAgICAgICAgIG1ldGhvZDogICAgICAgIFJlcG9ydGVyUGx1Z2luTWV0aG9kLnJlcG9ydFRhc2tTdGFydCxcbiAgICAgICAgICAgIGluaXRpYWxPYmplY3Q6IHRhc2ssXG4gICAgICAgICAgICBhcmdzOiAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgIGJyb3dzZXJDb25uZWN0aW9uc0luZm8sXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrSW5mby50ZXN0Q291bnQsXG4gICAgICAgICAgICAgICAgdGFzay50ZXN0U3RydWN0dXJlLFxuICAgICAgICAgICAgICAgIHRhc2tQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoVG9QbHVnaW4oe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogICAgICAgIFJlcG9ydGVyUGx1Z2luTWV0aG9kLnJlcG9ydEZpeHR1cmVTdGFydCxcbiAgICAgICAgICAgICAgICBpbml0aWFsT2JqZWN0OiB0YXNrLFxuICAgICAgICAgICAgICAgIGFyZ3M6ICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3QuZml4dHVyZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaXJzdC5maXh0dXJlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0LmZpeHR1cmUubWV0YSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vblRhc2tUZXN0UnVuU3RhcnRIYW5kbGVyICh0ZXN0UnVuOiBUZXN0UnVuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGlmICghdGhpcy50YXNrSW5mbylcbiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG5cbiAgICAgICAgY29uc3QgdGVzdEl0ZW0gPSB0aGlzLl9nZXRUZXN0SXRlbUZvclRlc3RSdW4odGhpcy50YXNrSW5mbywgdGVzdFJ1bikgYXMgVGVzdEluZm87XG5cbiAgICAgICAgdGVzdEl0ZW0udGVzdFJ1bklkcy5wdXNoKHRlc3RSdW4uaWQpO1xuXG4gICAgICAgIGlmICghdGVzdEl0ZW0uc3RhcnRUaW1lKVxuICAgICAgICAgICAgdGVzdEl0ZW0uc3RhcnRUaW1lID0gK25ldyBEYXRlKCk7XG5cbiAgICAgICAgdGVzdEl0ZW0ucGVuZGluZ1N0YXJ0cy0tO1xuXG4gICAgICAgIGlmICghdGVzdEl0ZW0ucGVuZGluZ1N0YXJ0cykge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgaWYgKHRoaXMucGx1Z2luLnJlcG9ydFRlc3RTdGFydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RTdGFydEluZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgIHRlc3RSdW5JZHM6IHRlc3RJdGVtLnRlc3RSdW5JZHMsXG4gICAgICAgICAgICAgICAgICAgIHRlc3RJZDogICAgIHRlc3RJdGVtLnRlc3QuaWQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogIG5ldyBEYXRlKHRlc3RJdGVtLnN0YXJ0VGltZSksXG4gICAgICAgICAgICAgICAgICAgIHNraXBwZWQ6ICAgIHRlc3RJdGVtLnRlc3Quc2tpcCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaFRvUGx1Z2luKHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAgICAgICAgUmVwb3J0ZXJQbHVnaW5NZXRob2QucmVwb3J0VGVzdFN0YXJ0IGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbE9iamVjdDogdGhpcy50YXNrSW5mby50YXNrLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0SXRlbS50ZXN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0SXRlbS50ZXN0Lm1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0U3RhcnRJbmZvLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAodGVzdEl0ZW0ucGVuZGluZ1Rlc3RSdW5TdGFydFByb21pc2UucmVzb2x2ZSBhcyBGdW5jdGlvbikoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXN0SXRlbS5wZW5kaW5nVGVzdFJ1blN0YXJ0UHJvbWlzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vblRhc2tUZXN0UnVuRG9uZUhhbmRsZXIgKHRlc3RSdW46IFRlc3RSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLnRhc2tJbmZvKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHJlcG9ydEl0ZW0gICAgICAgICAgICAgICAgICAgID0gdGhpcy5fZ2V0VGVzdEl0ZW1Gb3JUZXN0UnVuKHRoaXMudGFza0luZm8sIHRlc3RSdW4pIGFzIFRlc3RJbmZvO1xuICAgICAgICBjb25zdCBpc1Rlc3RSdW5TdG9wcGVkVGFza0V4ZWN1dGlvbiA9ICEhdGVzdFJ1bi5lcnJzLmxlbmd0aCAmJiB0aGlzLnRhc2tJbmZvLnN0b3BPbkZpcnN0RmFpbDtcbiAgICAgICAgY29uc3QgYnJvd3NlcjogQnJvd3NlclJ1bkluZm8gICAgICAgPSBPYmplY3QuYXNzaWduKHsgdGVzdFJ1bklkOiB0ZXN0UnVuLmlkIH0sIHRlc3RSdW4uYnJvd3Nlcik7XG5cbiAgICAgICAgcmVwb3J0SXRlbS5icm93c2Vycy5wdXNoKGJyb3dzZXIpO1xuXG4gICAgICAgIHJlcG9ydEl0ZW0ucGVuZGluZ1J1bnMgPSBpc1Rlc3RSdW5TdG9wcGVkVGFza0V4ZWN1dGlvbiA/IDAgOiByZXBvcnRJdGVtLnBlbmRpbmdSdW5zIC0gMTtcbiAgICAgICAgcmVwb3J0SXRlbS51bnN0YWJsZSAgICA9IHJlcG9ydEl0ZW0udW5zdGFibGUgfHwgdGVzdFJ1bi51bnN0YWJsZTtcbiAgICAgICAgcmVwb3J0SXRlbS5lcnJzICAgICAgICA9IHJlcG9ydEl0ZW0uZXJycy5jb25jYXQodGVzdFJ1bi5lcnJzKTtcbiAgICAgICAgcmVwb3J0SXRlbS53YXJuaW5ncyAgICA9IHRlc3RSdW4ud2FybmluZ0xvZyA/IHVuaW9uKHJlcG9ydEl0ZW0ud2FybmluZ3MsIHRlc3RSdW4ud2FybmluZ0xvZy5tZXNzYWdlcykgOiBbXTtcblxuICAgICAgICBpZiAodGVzdFJ1bi5xdWFyYW50aW5lKSB7XG4gICAgICAgICAgICByZXBvcnRJdGVtLnF1YXJhbnRpbmUgPSByZXBvcnRJdGVtLnF1YXJhbnRpbmUgfHwge307XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydEl0ZW1RdWFyYW50aW5lID0gdGVzdFJ1bi5xdWFyYW50aW5lLmF0dGVtcHRzLnJlZHVjZSgocmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+LCB7IGVycm9ycywgdGVzdFJ1bklkIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXNzZWQgPSAhZXJyb3JzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIHJlc3VsdFt0ZXN0UnVuSWRdICAgICAgICAgICAgICAgICAgICA9IHsgcGFzc2VkLCBlcnJvcnMgfTtcbiAgICAgICAgICAgICAgICBicm93c2VyLnF1YXJhbnRpbmVBdHRlbXB0c1Rlc3RSdW5JZHMgPSBicm93c2VyLnF1YXJhbnRpbmVBdHRlbXB0c1Rlc3RSdW5JZHMgfHwgW107XG5cbiAgICAgICAgICAgICAgICBicm93c2VyLnF1YXJhbnRpbmVBdHRlbXB0c1Rlc3RSdW5JZHMucHVzaCh0ZXN0UnVuSWQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZXBvcnRJdGVtLnF1YXJhbnRpbmUsIHJlcG9ydEl0ZW1RdWFyYW50aW5lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVwb3J0SXRlbS5wZW5kaW5nUnVucylcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc29sdmVUZXN0SXRlbSh0aGlzLnRhc2tJbmZvLCByZXBvcnRJdGVtLCB0ZXN0UnVuKTtcblxuICAgICAgICBhd2FpdCByZXBvcnRJdGVtLnBlbmRpbmdUZXN0UnVuRG9uZVByb21pc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfb25UYXNrVGVzdEFjdGlvblN0YXJ0ICh7IGFwaUFjdGlvbk5hbWUsIC4uLnJlc3RBcmdzIH06IFJlcG9ydFRhc2tBY3Rpb25FdmVudEFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMudGFza0luZm8pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5wbHVnaW4ucmVwb3J0VGVzdEFjdGlvblN0YXJ0KSB7XG4gICAgICAgICAgICByZXN0QXJncyA9IHRoaXMuX3ByZXBhcmVSZXBvcnRUZXN0QWN0aW9uRXZlbnRBcmdzKHJlc3RBcmdzIGFzIHVua25vd24gYXMgUmVwb3J0VGVzdEFjdGlvbkV2ZW50QXJndW1lbnRzKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaFRvUGx1Z2luKHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICAgICAgICBSZXBvcnRlclBsdWdpbk1ldGhvZC5yZXBvcnRUZXN0QWN0aW9uU3RhcnQgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIGluaXRpYWxPYmplY3Q6IHRoaXMudGFza0luZm8udGFzayxcbiAgICAgICAgICAgICAgICBhcmdzOiAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIGFwaUFjdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHJlc3RBcmdzLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX29uVGFza1Rlc3RBY3Rpb25Eb25lICh7IGFwaUFjdGlvbk5hbWUsIC4uLnJlc3RBcmdzIH06IFJlcG9ydFRhc2tBY3Rpb25FdmVudEFyZ3VtZW50cyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMudGFza0luZm8pXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5wbHVnaW4ucmVwb3J0VGVzdEFjdGlvbkRvbmUpIHtcbiAgICAgICAgICAgIHJlc3RBcmdzID0gdGhpcy5fcHJlcGFyZVJlcG9ydFRlc3RBY3Rpb25FdmVudEFyZ3MocmVzdEFyZ3MgYXMgdW5rbm93biBhcyBSZXBvcnRUZXN0QWN0aW9uRXZlbnRBcmd1bWVudHMpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoVG9QbHVnaW4oe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogICAgICAgIFJlcG9ydGVyUGx1Z2luTWV0aG9kLnJlcG9ydFRlc3RBY3Rpb25Eb25lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBpbml0aWFsT2JqZWN0OiB0aGlzLnRhc2tJbmZvLnRhc2ssXG4gICAgICAgICAgICAgICAgYXJnczogICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBhcGlBY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICByZXN0QXJncyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9vbmNlVGFza0RvbmVIYW5kbGVyICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLnRhc2tJbmZvKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHBhc3NlZENvdW50OiAgdGhpcy50YXNrSW5mby5wYXNzZWQsXG4gICAgICAgICAgICBmYWlsZWRDb3VudDogIHRoaXMudGFza0luZm8uZmFpbGVkLFxuICAgICAgICAgICAgc2tpcHBlZENvdW50OiB0aGlzLnRhc2tJbmZvLnNraXBwZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaFRvUGx1Z2luKHtcbiAgICAgICAgICAgIG1ldGhvZDogICAgICAgIFJlcG9ydGVyUGx1Z2luTWV0aG9kLnJlcG9ydFRhc2tEb25lLFxuICAgICAgICAgICAgaW5pdGlhbE9iamVjdDogdGhpcy50YXNrSW5mby50YXNrLFxuICAgICAgICAgICAgYXJnczogICAgICAgICAgW1xuICAgICAgICAgICAgICAgIGVuZFRpbWUsXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrSW5mby5wYXNzZWQsXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrSW5mby50YXNrPy53YXJuaW5nTG9nLm1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgICh0aGlzLnRhc2tJbmZvLnBlbmRpbmdUYXNrRG9uZVByb21pc2UucmVzb2x2ZSBhcyBGdW5jdGlvbikoKTtcbiAgICB9XG59XG4iXX0=
@@ -28,9 +28,9 @@ class ReporterPluginHost {
28
28
  const useColors = this[stream] === process.stdout && chalk_1.default.enabled && !plugin.noColors;
29
29
  this.chalk = new chalk_1.default.constructor({ enabled: useColors });
30
30
  this.moment = moment_loader_1.default;
31
- this.viewportWidth = get_viewport_width_1.default(this[stream]);
31
+ this.viewportWidth = (0, get_viewport_width_1.default)(this[stream]);
32
32
  this.symbols = Object.assign({}, symbols_1.default);
33
- lodash_1.assignIn(this, plugin);
33
+ (0, lodash_1.assignIn)(this, plugin);
34
34
  this[errorDecorator] = this.createErrorDecorator();
35
35
  }
36
36
  // Error decorator
@@ -69,16 +69,16 @@ class ReporterPluginHost {
69
69
  }
70
70
  // String helpers
71
71
  indentString(str, indentVal) {
72
- return indent_string_1.default(str, ' ', indentVal);
72
+ return (0, indent_string_1.default)(str, ' ', indentVal);
73
73
  }
74
74
  wordWrap(str, indentVal, width) {
75
- return string_1.wordWrap(str, indentVal, width);
75
+ return (0, string_1.wordWrap)(str, indentVal, width);
76
76
  }
77
77
  escapeHtml(str) {
78
- return lodash_1.escape(str);
78
+ return (0, lodash_1.escape)(str);
79
79
  }
80
80
  formatError(err, prefix = '') {
81
- const prefixLengthWithoutColors = string_1.removeTTYColors(prefix).length;
81
+ const prefixLengthWithoutColors = (0, string_1.removeTTYColors)(prefix).length;
82
82
  const maxMsgLength = this.viewportWidth - this[indent] - prefixLengthWithoutColors;
83
83
  let msg = err.formatMessage(this[errorDecorator], maxMsgLength);
84
84
  if (this[wordWrapEnabled])
@@ -139,4 +139,4 @@ class ReporterPluginHost {
139
139
  }
140
140
  exports.default = ReporterPluginHost;
141
141
  module.exports = exports.default;
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVwb3J0ZXIvcGx1Z2luLWhvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBcUM7QUFDckMsa0VBQXlDO0FBRXpDLG1DQUlnQjtBQUVoQiwyRUFBNEM7QUFDNUMsNENBQTREO0FBQzVELHFGQUEyRDtBQUMzRCxpREFBbUQ7QUFLbkQsa0VBQW1EO0FBR25ELCtDQUErQztBQUMvQyw0Q0FBNEM7QUFDNUMsMENBQTBDO0FBQzFDLE1BQU0sTUFBTSxHQUFZLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sZUFBZSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sTUFBTSxHQUFZLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sY0FBYyxHQUFJLE1BQU0sRUFBRSxDQUFDO0FBRWpDLE1BQXFCLGtCQUFrQjtJQVluQyxZQUFvQixNQUFXLEVBQUUsU0FBb0IsRUFBRSxJQUFhO1FBQ2hFLElBQUksQ0FBQyxJQUFJLEdBQWUsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFZLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3BELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFZLENBQUMsQ0FBQztRQUUxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sSUFBSSxlQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUV2RixJQUFJLENBQUMsS0FBSyxHQUFXLElBQUksZUFBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxNQUFNLEdBQVUsdUJBQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLDRCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxPQUFPLEdBQVMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsaUJBQWdCLENBQUMsQ0FBQztRQUV6RCxpQkFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV2QixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELGtCQUFrQjtJQUNYLG9CQUFvQjtRQUN2QixPQUFPO1lBQ0gsaUJBQWlCLEVBQUUsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUV4RCxlQUFlLEVBQUUsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQ25FLGFBQWEsRUFBSSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUUxRCxxQkFBcUIsRUFBRSxpQkFBUTtZQUMvQixtQkFBbUIsRUFBSSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztZQUV0RSxNQUFNLEVBQUUsaUJBQVE7WUFFaEIsb0JBQW9CLEVBQU0sQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUNoRSx3QkFBd0IsRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQy9ELHFCQUFxQixFQUFLLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDL0Qsb0JBQW9CLEVBQU0sQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNsRSxtQkFBbUIsRUFBTyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2xFLHFCQUFxQixFQUFLLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3BFLHFCQUFxQixFQUFLLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFFbEUsQ0FBQyxRQUFRLG9CQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDaEYsQ0FBQyxRQUFRLG9CQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBUyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ2pGLENBQUMsUUFBUSxvQkFBVyxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQU8sQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUUvRSxnQkFBZ0IsRUFBVSxpQkFBUTtZQUNsQyxlQUFlLEVBQVcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJO1lBQ3JELG9CQUFvQixFQUFNLGlCQUFRO1lBQ2xDLG1CQUFtQixFQUFPLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSTtZQUN4RCx3QkFBd0IsRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUc7WUFDL0UsbUJBQW1CLEVBQU8saUJBQVE7WUFFbEMsV0FBVyxFQUFnQixDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUc7WUFDeEQsZ0JBQWdCLEVBQVcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJO1lBQ3RELHFCQUFxQixFQUFNLGlCQUFRO1lBQ25DLHFCQUFxQixFQUFNLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNFLHlCQUF5QixFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRztZQUVsRixRQUFRLEVBQUUsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUMvQyxHQUFHLEVBQU8sQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUc7U0FDOUQsQ0FBQztJQUNOLENBQUM7SUFFRCxpQkFBaUI7SUFDVixZQUFZLENBQUUsR0FBVyxFQUFFLFNBQWlCO1FBQy9DLE9BQU8sdUJBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxRQUFRLENBQUUsR0FBVyxFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUMxRCxPQUFPLGlCQUFRLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU0sVUFBVSxDQUFFLEdBQVc7UUFDMUIsT0FBTyxlQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLFdBQVcsQ0FBRSxHQUFtQyxFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQ2hFLE1BQU0seUJBQXlCLEdBQUcsd0JBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDakUsTUFBTSxZQUFZLEdBQWdCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLHlCQUF5QixDQUFDO1FBRWhHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRWhFLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNyQixHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxDQUFDLENBQUM7O1lBRWxFLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBRTVELE9BQU8sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBR0Qsa0JBQWtCO0lBQ1gsT0FBTztRQUNWLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFFLElBQVk7UUFDdEIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3JCLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDOztZQUU3RCxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxXQUFXLENBQUUsR0FBWTtRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRTVCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxTQUFTLENBQUUsR0FBVztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRW5CLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxvQkFBb0IsQ0FBRSxJQUFZO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDdEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBR0QseUNBQXlDO0lBQ2xDLEtBQUssQ0FBQyxlQUFlLEVBQUUscUVBQXFFO1FBQy9GLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQjtRQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxpREFBaUQ7SUFDakQsMENBQTBDO0lBQzFDLElBQUk7SUFFRyxLQUFLLENBQUMsY0FBYyxFQUFFLHVCQUF1QjtRQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLEVBQUUsK0JBQStCO1FBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZ0NBQWdDO0lBQ3pCLEtBQUssQ0FBQyxJQUFJO1FBQ2IsV0FBVztJQUNmLENBQUM7SUFFRCxnQ0FBZ0M7SUFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxjQUFjO0lBQzNDLENBQUM7Q0FDSjtBQXhLRCxxQ0F3S0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGssIHsgQ2hhbGsgfSBmcm9tICdjaGFsayc7XG5pbXBvcnQgaW5kZW50U3RyaW5nIGZyb20gJ2luZGVudC1zdHJpbmcnO1xuXG5pbXBvcnQge1xuICAgIGlkZW50aXR5LFxuICAgIGVzY2FwZSBhcyBlc2NhcGVIdG1sLFxuICAgIGFzc2lnbkluLFxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL3V0aWxzL21vbWVudC1sb2FkZXInO1xuaW1wb3J0IHsgd29yZFdyYXAsIHJlbW92ZVRUWUNvbG9ycyB9IGZyb20gJy4uL3V0aWxzL3N0cmluZyc7XG5pbXBvcnQgZ2V0Vmlld3BvcnRXaWR0aCBmcm9tICcuLi91dGlscy9nZXQtdmlld3BvcnQtd2lkdGgnO1xuaW1wb3J0IHsgRElGRl9DT0xPUlMgfSBmcm9tICcuLi91dGlscy9kaWZmL2NvbG9ycyc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IFJlcG9ydGVyU3RyZWFtQ29udHJvbGxlciBmcm9tICcuLi9ydW5uZXIvcmVwb3J0ZXItc3RyZWFtLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlciBmcm9tICcuLi9lcnJvcnMvdGVzdC1ydW4vZm9ybWF0dGFibGUtYWRhcHRlcic7XG5pbXBvcnQgUkVQT1JURVJfU1lNQk9MUyBmcm9tICcuLi9yZXBvcnRlci9zeW1ib2xzJztcbmltcG9ydCB7IFJlcG9ydGVyU3ltYm9scyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbi8vIE5PVEU6IHdlIHNob3VsZCBub3QgZXhwb3NlIGludGVybmFsIHN0YXRlIHRvXG4vLyB0aGUgcGx1Z2luLCB0byBhdm9pZCBhY2NpZGVudGFsIHJld3JpdGVzLlxuLy8gVGhlcmVmb3JlIHdlIHVzZSBzeW1ib2xzIHRvIHN0b3JlIHRoZW0uXG5jb25zdCBzdHJlYW0gICAgICAgICAgPSBTeW1ib2woKTtcbmNvbnN0IHdvcmRXcmFwRW5hYmxlZCA9IFN5bWJvbCgpO1xuY29uc3QgaW5kZW50ICAgICAgICAgID0gU3ltYm9sKCk7XG5jb25zdCBlcnJvckRlY29yYXRvciAgPSBTeW1ib2woKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwb3J0ZXJQbHVnaW5Ib3N0IHtcbiAgICBwdWJsaWMgbmFtZT86IHN0cmluZztcbiAgICBwdWJsaWMgc3RyZWFtQ29udHJvbGxlcjogUmVwb3J0ZXJTdHJlYW1Db250cm9sbGVyIHwgbnVsbDtcbiAgICBwdWJsaWMgY2hhbGs6IENoYWxrO1xuICAgIHB1YmxpYyBtb21lbnQ6IE1vbWVudDtcbiAgICBwdWJsaWMgdmlld3BvcnRXaWR0aDogbnVtYmVyO1xuICAgIHB1YmxpYyBzeW1ib2xzOiBSZXBvcnRlclN5bWJvbHM7XG4gICAgcHJpdmF0ZSBbc3RyZWFtXTogV3JpdGFibGU7XG4gICAgcHJpdmF0ZSBbd29yZFdyYXBFbmFibGVkXTogYm9vbGVhbjtcbiAgICBwcml2YXRlIFtpbmRlbnRdOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBbZXJyb3JEZWNvcmF0b3JdOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHBsdWdpbjogYW55LCBvdXRTdHJlYW0/OiBXcml0YWJsZSwgbmFtZT86IHN0cmluZykge1xuICAgICAgICB0aGlzLm5hbWUgICAgICAgICAgICAgPSBuYW1lO1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXIgPSBudWxsO1xuICAgICAgICB0aGlzW3N0cmVhbV0gICAgICAgICAgPSBvdXRTdHJlYW0gfHwgcHJvY2Vzcy5zdGRvdXQ7XG4gICAgICAgIHRoaXNbd29yZFdyYXBFbmFibGVkXSA9IGZhbHNlO1xuICAgICAgICB0aGlzW2luZGVudF0gICAgICAgICAgPSAwO1xuXG4gICAgICAgIGNvbnN0IHVzZUNvbG9ycyA9IHRoaXNbc3RyZWFtXSA9PT0gcHJvY2Vzcy5zdGRvdXQgJiYgY2hhbGsuZW5hYmxlZCAmJiAhcGx1Z2luLm5vQ29sb3JzO1xuXG4gICAgICAgIHRoaXMuY2hhbGsgICAgICAgICA9IG5ldyBjaGFsay5jb25zdHJ1Y3Rvcih7IGVuYWJsZWQ6IHVzZUNvbG9ycyB9KTtcbiAgICAgICAgdGhpcy5tb21lbnQgICAgICAgID0gbW9tZW50O1xuICAgICAgICB0aGlzLnZpZXdwb3J0V2lkdGggPSBnZXRWaWV3cG9ydFdpZHRoKHRoaXNbc3RyZWFtXSk7XG4gICAgICAgIHRoaXMuc3ltYm9scyAgICAgICA9IE9iamVjdC5hc3NpZ24oe30sIFJFUE9SVEVSX1NZTUJPTFMpO1xuXG4gICAgICAgIGFzc2lnbkluKHRoaXMsIHBsdWdpbik7XG5cbiAgICAgICAgdGhpc1tlcnJvckRlY29yYXRvcl0gPSB0aGlzLmNyZWF0ZUVycm9yRGVjb3JhdG9yKCk7XG4gICAgfVxuXG4gICAgLy8gRXJyb3IgZGVjb3JhdG9yXG4gICAgcHVibGljIGNyZWF0ZUVycm9yRGVjb3JhdG9yICgpOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3NwYW4gdXNlci1hZ2VudCc6IChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5ncmV5KHN0ciksXG5cbiAgICAgICAgICAgICdzcGFuIHN1YnRpdGxlJzogKHN0cjogc3RyaW5nKSA9PiBgLSAke3RoaXMuY2hhbGsuYm9sZC5yZWQoc3RyKX0gLWAsXG4gICAgICAgICAgICAnZGl2IG1lc3NhZ2UnOiAgIChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5ib2xkLnJlZChzdHIpLFxuXG4gICAgICAgICAgICAnZGl2IHNjcmVlbnNob3QtaW5mbyc6IGlkZW50aXR5LFxuICAgICAgICAgICAgJ2Egc2NyZWVuc2hvdC1wYXRoJzogICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuZ3JleS51bmRlcmxpbmUoc3RyKSxcblxuICAgICAgICAgICAgJ2NvZGUnOiBpZGVudGl0eSxcblxuICAgICAgICAgICAgJ3NwYW4gc3ludGF4LXN0cmluZyc6ICAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuZ3JlZW4oc3RyKSxcbiAgICAgICAgICAgICdzcGFuIHN5bnRheC1wdW5jdHVhdG9yJzogKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLmdyZXkoc3RyKSxcbiAgICAgICAgICAgICdzcGFuIHN5bnRheC1rZXl3b3JkJzogICAgKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLmN5YW4oc3RyKSxcbiAgICAgICAgICAgICdzcGFuIHN5bnRheC1udW1iZXInOiAgICAgKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLm1hZ2VudGEoc3RyKSxcbiAgICAgICAgICAgICdzcGFuIHN5bnRheC1yZWdleCc6ICAgICAgKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLm1hZ2VudGEoc3RyKSxcbiAgICAgICAgICAgICdzcGFuIHN5bnRheC1jb21tZW50JzogICAgKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLmdyZXkuYm9sZChzdHIpLFxuICAgICAgICAgICAgJ3NwYW4gc3ludGF4LWludmFsaWQnOiAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuaW52ZXJzZShzdHIpLFxuXG4gICAgICAgICAgICBbYHNwYW4gJHtESUZGX0NPTE9SUy5ESUZGX05PVF9NT0RJRklFRH1gXTogKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLmdyYXkoc3RyKSxcbiAgICAgICAgICAgIFtgc3BhbiAke0RJRkZfQ09MT1JTLkRJRkZfQURERUR9YF06ICAgICAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuZ3JlZW4oc3RyKSxcbiAgICAgICAgICAgIFtgc3BhbiAke0RJRkZfQ09MT1JTLkRJRkZfUkVNT1ZFRH1gXTogICAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsucmVkKHN0ciksXG5cbiAgICAgICAgICAgICdkaXYgY29kZS1mcmFtZSc6ICAgICAgICAgaWRlbnRpdHksXG4gICAgICAgICAgICAnZGl2IGNvZGUtbGluZSc6ICAgICAgICAgIChzdHI6IHN0cmluZykgPT4gc3RyICsgJ1xcbicsXG4gICAgICAgICAgICAnZGl2IGNvZGUtbGluZS1sYXN0JzogICAgIGlkZW50aXR5LFxuICAgICAgICAgICAgJ2RpdiBjb2RlLWxpbmUtbnVtJzogICAgICAoc3RyOiBzdHJpbmcpID0+IGAgICAke3N0cn0gfGAsXG4gICAgICAgICAgICAnZGl2IGNvZGUtbGluZS1udW0tYmFzZSc6IChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5iZ1JlZChgID4gJHtzdHJ9IGApICsgJ3wnLFxuICAgICAgICAgICAgJ2RpdiBjb2RlLWxpbmUtc3JjJzogICAgICBpZGVudGl0eSxcblxuICAgICAgICAgICAgJ2RpdiBzdGFjayc6ICAgICAgICAgICAgICAgKHN0cjogc3RyaW5nKSA9PiAnXFxuXFxuJyArIHN0cixcbiAgICAgICAgICAgICdkaXYgc3RhY2stbGluZSc6ICAgICAgICAgIChzdHI6IHN0cmluZykgPT4gc3RyICsgJ1xcbicsXG4gICAgICAgICAgICAnZGl2IHN0YWNrLWxpbmUtbGFzdCc6ICAgICBpZGVudGl0eSxcbiAgICAgICAgICAgICdkaXYgc3RhY2stbGluZS1uYW1lJzogICAgIChzdHI6IHN0cmluZykgPT4gYCAgIGF0ICR7dGhpcy5jaGFsay5ib2xkKHN0cil9YCxcbiAgICAgICAgICAgICdkaXYgc3RhY2stbGluZS1sb2NhdGlvbic6IChzdHI6IHN0cmluZykgPT4gYCAoJHt0aGlzLmNoYWxrLmdyZXkudW5kZXJsaW5lKHN0cil9KWAsXG5cbiAgICAgICAgICAgICdzdHJvbmcnOiAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuYm9sZChzdHIpLFxuICAgICAgICAgICAgJ2EnOiAgICAgIChzdHI6IHN0cmluZykgPT4gYFwiJHt0aGlzLmNoYWxrLnVuZGVybGluZShzdHIpfVwiYCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTdHJpbmcgaGVscGVyc1xuICAgIHB1YmxpYyBpbmRlbnRTdHJpbmcgKHN0cjogc3RyaW5nLCBpbmRlbnRWYWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpbmRlbnRTdHJpbmcoc3RyLCAnICcsIGluZGVudFZhbCk7XG4gICAgfVxuXG4gICAgcHVibGljIHdvcmRXcmFwIChzdHI6IHN0cmluZywgaW5kZW50VmFsOiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gd29yZFdyYXAoc3RyLCBpbmRlbnRWYWwsIHdpZHRoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXNjYXBlSHRtbCAoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZXNjYXBlSHRtbChzdHIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JtYXRFcnJvciAoZXJyOiBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIsIHByZWZpeCA9ICcnKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcHJlZml4TGVuZ3RoV2l0aG91dENvbG9ycyA9IHJlbW92ZVRUWUNvbG9ycyhwcmVmaXgpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbWF4TXNnTGVuZ3RoICAgICAgICAgICAgICA9IHRoaXMudmlld3BvcnRXaWR0aCAtIHRoaXNbaW5kZW50XSAtIHByZWZpeExlbmd0aFdpdGhvdXRDb2xvcnM7XG5cbiAgICAgICAgbGV0IG1zZyA9IGVyci5mb3JtYXRNZXNzYWdlKHRoaXNbZXJyb3JEZWNvcmF0b3JdLCBtYXhNc2dMZW5ndGgpO1xuXG4gICAgICAgIGlmICh0aGlzW3dvcmRXcmFwRW5hYmxlZF0pXG4gICAgICAgICAgICBtc2cgPSB0aGlzLndvcmRXcmFwKG1zZywgcHJlZml4TGVuZ3RoV2l0aG91dENvbG9ycywgbWF4TXNnTGVuZ3RoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXNnID0gdGhpcy5pbmRlbnRTdHJpbmcobXNnLCBwcmVmaXhMZW5ndGhXaXRob3V0Q29sb3JzKTtcblxuICAgICAgICByZXR1cm4gcHJlZml4ICsgbXNnLnN1YnN0cihwcmVmaXhMZW5ndGhXaXRob3V0Q29sb3JzKTtcbiAgICB9XG5cblxuICAgIC8vIFdyaXRpbmcgaGVscGVyc1xuICAgIHB1YmxpYyBuZXdsaW5lICgpOiBSZXBvcnRlclBsdWdpbkhvc3Qge1xuICAgICAgICB0aGlzLl93cml0ZVRvVW5pcXVlU3RyZWFtKCdcXG4nKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGUgKHRleHQ6IHN0cmluZyk6IFJlcG9ydGVyUGx1Z2luSG9zdCB7XG4gICAgICAgIGlmICh0aGlzW3dvcmRXcmFwRW5hYmxlZF0pXG4gICAgICAgICAgICB0ZXh0ID0gdGhpcy53b3JkV3JhcCh0ZXh0LCB0aGlzW2luZGVudF0sIHRoaXMudmlld3BvcnRXaWR0aCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRleHQgPSB0aGlzLmluZGVudFN0cmluZyh0ZXh0LCB0aGlzW2luZGVudF0pO1xuXG4gICAgICAgIHRoaXMuX3dyaXRlVG9VbmlxdWVTdHJlYW0odGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHVzZVdvcmRXcmFwICh1c2U6IGJvb2xlYW4pOiBSZXBvcnRlclBsdWdpbkhvc3Qge1xuICAgICAgICB0aGlzW3dvcmRXcmFwRW5hYmxlZF0gPSB1c2U7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEluZGVudCAodmFsOiBudW1iZXIpOiBSZXBvcnRlclBsdWdpbkhvc3Qge1xuICAgICAgICB0aGlzW2luZGVudF0gPSB2YWw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd3JpdGVUb1VuaXF1ZVN0cmVhbSAodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zdHJlYW1Db250cm9sbGVyIHx8IHRoaXMuc3RyZWFtQ29udHJvbGxlci5lbnN1cmVVbmlxdWVTdHJlYW0odGhpc1tzdHJlYW1dLCB0aGlzKSlcbiAgICAgICAgICAgIHRoaXNbc3RyZWFtXS53cml0ZSh0ZXh0KTtcbiAgICB9XG5cblxuICAgIC8vIEFic3RyYWN0IG1ldGhvZHMgaW1wbGVtZW50ZWQgaW4gcGx1Z2luXG4gICAgcHVibGljIGFzeW5jIHJlcG9ydFRhc2tTdGFydCAoLyogc3RhcnRUaW1lLCB1c2VyQWdlbnRzLCB0ZXN0Q291bnQsIHRlc3RTdHJ1Y3R1cmUsIHRhc2tQcm9wZXJ0aWVzICovKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZXBvcnRGaXh0dXJlU3RhcnQgKC8qIG5hbWUsIHBhdGggKi8pOiBQcm9taXNlPG5ldmVyPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgLy8gTk9URTogSXQncyBhbiBvcHRpb25hbCBtZXRob2RcbiAgICAvLyBhc3luYyByZXBvcnRUZXN0U3RhcnQgKC8qIG5hbWUsIHRlc3RNZXRhICovKSB7XG4gICAgLy8gICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgLy8gfVxuXG4gICAgcHVibGljIGFzeW5jIHJlcG9ydFRlc3REb25lICgvKiBuYW1lLCB0ZXN0UnVuSW5mbyAqLyk6IFByb21pc2U8bmV2ZXI+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVwb3J0VGFza0RvbmUgKC8qIGVuZFRpbWUsIHBhc3NlZCwgd2FybmluZ3MgKi8pOiBQcm9taXNlPG5ldmVyPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgLy8gTk9URTogSXQncyBhbiBvcHRpb25hbCBtZXRob2RcbiAgICBwdWJsaWMgYXN5bmMgaW5pdCAoKTogUHJvbWlzZTx2b2lkPiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgICAgIC8vIE9wdGlvbmFsXG4gICAgfVxuXG4gICAgLy8gTk9URTogSXQncyBhbiBvcHRpb25hbCBtZXRob2RcbiAgICBwdWJsaWMgYXN5bmMgcmVwb3J0V2FybmluZ3MgKC8qIHdhcm5pbmdzICovKTogUHJvbWlzZTx2b2lkPiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgfVxufVxuIl19
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVwb3J0ZXIvcGx1Z2luLWhvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBcUM7QUFDckMsa0VBQXlDO0FBRXpDLG1DQUlnQjtBQUVoQiwyRUFBNEM7QUFDNUMsNENBQTREO0FBQzVELHFGQUEyRDtBQUMzRCxpREFBbUQ7QUFLbkQsa0VBQW1EO0FBR25ELCtDQUErQztBQUMvQyw0Q0FBNEM7QUFDNUMsMENBQTBDO0FBQzFDLE1BQU0sTUFBTSxHQUFZLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sZUFBZSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sTUFBTSxHQUFZLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sY0FBYyxHQUFJLE1BQU0sRUFBRSxDQUFDO0FBRWpDLE1BQXFCLGtCQUFrQjtJQVluQyxZQUFvQixNQUFXLEVBQUUsU0FBb0IsRUFBRSxJQUFhO1FBQ2hFLElBQUksQ0FBQyxJQUFJLEdBQWUsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFZLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3BELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFZLENBQUMsQ0FBQztRQUUxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sSUFBSSxlQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUV2RixJQUFJLENBQUMsS0FBSyxHQUFXLElBQUksZUFBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FB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O1FBQ2IsV0FBVztJQUNmLENBQUM7SUFFRCxnQ0FBZ0M7SUFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxjQUFjO0lBQzNDLENBQUM7Q0FDSjtBQXhLRCxxQ0F3S0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGssIHsgQ2hhbGsgfSBmcm9tICdjaGFsayc7XG5pbXBvcnQgaW5kZW50U3RyaW5nIGZyb20gJ2luZGVudC1zdHJpbmcnO1xuXG5pbXBvcnQge1xuICAgIGlkZW50aXR5LFxuICAgIGVzY2FwZSBhcyBlc2NhcGVIdG1sLFxuICAgIGFzc2lnbkluLFxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL3V0aWxzL21vbWVudC1sb2FkZXInO1xuaW1wb3J0IHsgd29yZFdyYXAsIHJlbW92ZVRUWUNvbG9ycyB9IGZyb20gJy4uL3V0aWxzL3N0cmluZyc7XG5pbXBvcnQgZ2V0Vmlld3BvcnRXaWR0aCBmcm9tICcuLi91dGlscy9nZXQtdmlld3BvcnQtd2lkdGgnO1xuaW1wb3J0IHsgRElGRl9DT0xPUlMgfSBmcm9tICcuLi91dGlscy9kaWZmL2NvbG9ycyc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IFJlcG9ydGVyU3RyZWFtQ29udHJvbGxlciBmcm9tICcuLi9ydW5uZXIvcmVwb3J0ZXItc3RyZWFtLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlciBmcm9tICcuLi9lcnJvcnMvdGVzdC1ydW4vZm9ybWF0dGFibGUtYWRhcHRlcic7XG5pbXBvcnQgUkVQT1JURVJfU1lNQk9MUyBmcm9tICcuLi9yZXBvcnRlci9zeW1ib2xzJztcbmltcG9ydCB7IFJlcG9ydGVyU3ltYm9scyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbi8vIE5PVEU6IHdlIHNob3VsZCBub3QgZXhwb3NlIGludGVybmFsIHN0YXRlIHRvXG4vLyB0aGUgcGx1Z2luLCB0byBhdm9pZCBhY2NpZGVudGFsIHJld3JpdGVzLlxuLy8gVGhlcmVmb3JlIHdlIHVzZSBzeW1ib2xzIHRvIHN0b3JlIHRoZW0uXG5jb25zdCBzdHJlYW0gICAgICAgICAgPSBTeW1ib2woKTtcbmNvbnN0IHdvcmRXcmFwRW5hYmxlZCA9IFN5bWJvbCgpO1xuY29uc3QgaW5kZW50ICAgICAgICAgID0gU3ltYm9sKCk7XG5jb25zdCBlcnJvckRlY29yYXRvciAgPSBTeW1ib2woKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwb3J0ZXJQbHVnaW5Ib3N0IHtcbiAgICBwdWJsaWMgbmFtZT86IHN0cmluZztcbiAgICBwdWJsaWMgc3RyZWFtQ29udHJvbGxlcjogUmVwb3J0ZXJTdHJlYW1Db250cm9sbGVyIHwgbnVsbDtcbiAgICBwdWJsaWMgY2hhbGs6IENoYWxrO1xuICAgIHB1YmxpYyBtb21lbnQ6IE1vbWVudDtcbiAgICBwdWJsaWMgdmlld3BvcnRXaWR0aDogbnVtYmVyO1xuICAgIHB1YmxpYyBzeW1ib2xzOiBSZXBvcnRlclN5bWJvbHM7XG4gICAgcHJpdmF0ZSBbc3RyZWFtXTogV3JpdGFibGU7XG4gICAgcHJpdmF0ZSBbd29yZFdyYXBFbmFibGVkXTogYm9vbGVhbjtcbiAgICBwcml2YXRlIFtpbmRlbnRdOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBbZXJyb3JEZWNvcmF0b3JdOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHBsdWdpbjogYW55LCBvdXRTdHJlYW0/OiBXcml0YWJsZSwgbmFtZT86IHN0cmluZykge1xuICAgICAgICB0aGlzLm5hbWUgICAgICAgICAgICAgPSBuYW1lO1xuICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXIgPSBudWxsO1xuICAgICAgICB0aGlzW3N0cmVhbV0gICAgICAgICAgPSBvdXRTdHJlYW0gfHwgcHJvY2Vzcy5zdGRvdXQ7XG4gICAgICAgIHRoaXNbd29yZFdyYXBFbmFibGVkXSA9IGZhbHNlO1xuICAgICAgICB0aGlzW2luZGVudF0gICAgICAgICAgPSAwO1xuXG4gICAgICAgIGNvbnN0IHVzZUNvbG9ycyA9IHRoaXNbc3RyZWFtXSA9PT0gcHJvY2Vzcy5zdGRvdXQgJiYgY2hhbGsuZW5hYmxlZCAmJiAhcGx1Z2luLm5vQ29sb3JzO1xuXG4gICAgICAgIHRoaXMuY2hhbGsgICAgICAgICA9IG5ldyBjaGFsay5jb25zdHJ1Y3Rvcih7IGVuYWJsZWQ6IHVzZUNvbG9ycyB9KTtcbiAgICAgICAgdGhpcy5tb21lbnQgICAgICAgID0gbW9tZW50O1xuICAgICAgICB0aGlzLnZpZXdwb3J0V2lkdGggPSBnZXRWaWV3cG9ydFdpZHRoKHRoaXNbc3RyZWFtXSk7XG4gICAgICAgIHRoaXMuc3ltYm9scyAgICAgICA9IE9iamVjdC5hc3NpZ24oe30sIFJFUE9SVEVSX1NZTUJPTFMpO1xuXG4gICAgICAgIGFzc2lnbkluKHRoaXMsIHBsdWdpbik7XG5cbiAgICAgICAgdGhpc1tlcnJvckRlY29yYXRvcl0gPSB0aGlzLmNyZWF0ZUVycm9yRGVjb3JhdG9yKCk7XG4gICAgfVxuXG4gICAgLy8gRXJyb3IgZGVjb3JhdG9yXG4gICAgcHVibGljIGNyZWF0ZUVycm9yRGVjb3JhdG9yICgpOiBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3NwYW4gdXNlci1hZ2VudCc6IChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5ncmV5KHN0ciksXG5cbiAgICAgICAgICAgICdzcGFuIHN1YnRpdGxlJzogKHN0cjogc3RyaW5nKSA9PiBgLSAke3RoaXMuY2hhbGsuYm9sZC5yZWQoc3RyKX0gLWAsXG4gICAgICAgICAgICAnZGl2IG1lc3NhZ2UnOiAgIChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5ib2xkLnJlZChzdHIpLFxuXG4gICAgICAgICAgICAnZGl2IHNjcmVlbnNob3QtaW5mbyc6IGlkZW50aXR5LFxuICAgICAgICAgICAgJ2Egc2NyZWVuc2hvdC1wYXRoJzogICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuZ3JleS51bmRlcmxpbmUoc3RyKSxcblxuICAgICAgICAgICAgJ2NvZGUnOiBpZGVudGl0eSxcblxuICAgICAgICAgICAgJ3NwYW4gc3ludGF4LXN0cmluZyc6ICAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuZ3JlZW4oc3RyKSxcbiAgICAgICAgICAgICdzcGFuIHN5bnRheC1wdW5jdHVhdG9yJzogKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLmdyZXkoc3RyKSxcbiAgICAgICAgICAgICdzcGFuIHN5bnRheC1rZXl3b3JkJzogICAgKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLmN5YW4oc3RyKSxcbiAgICAgICAgICAgICdzcGFuIHN5bnRheC1udW1iZXInOiAgICAgKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLm1hZ2VudGEoc3RyKSxcbiAgICAgICAgICAgICdzcGFuIHN5bnRheC1yZWdleCc6ICAgICAgKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLm1hZ2VudGEoc3RyKSxcbiAgICAgICAgICAgICdzcGFuIHN5bnRheC1jb21tZW50JzogICAgKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLmdyZXkuYm9sZChzdHIpLFxuICAgICAgICAgICAgJ3NwYW4gc3ludGF4LWludmFsaWQnOiAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuaW52ZXJzZShzdHIpLFxuXG4gICAgICAgICAgICBbYHNwYW4gJHtESUZGX0NPTE9SUy5ESUZGX05PVF9NT0RJRklFRH1gXTogKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLmdyYXkoc3RyKSxcbiAgICAgICAgICAgIFtgc3BhbiAke0RJRkZfQ09MT1JTLkRJRkZfQURERUR9YF06ICAgICAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuZ3JlZW4oc3RyKSxcbiAgICAgICAgICAgIFtgc3BhbiAke0RJRkZfQ09MT1JTLkRJRkZfUkVNT1ZFRH1gXTogICAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsucmVkKHN0ciksXG5cbiAgICAgICAgICAgICdkaXYgY29kZS1mcmFtZSc6ICAgICAgICAgaWRlbnRpdHksXG4gICAgICAgICAgICAnZGl2IGNvZGUtbGluZSc6ICAgICAgICAgIChzdHI6IHN0cmluZykgPT4gc3RyICsgJ1xcbicsXG4gICAgICAgICAgICAnZGl2IGNvZGUtbGluZS1sYXN0JzogICAgIGlkZW50aXR5LFxuICAgICAgICAgICAgJ2RpdiBjb2RlLWxpbmUtbnVtJzogICAgICAoc3RyOiBzdHJpbmcpID0+IGAgICAke3N0cn0gfGAsXG4gICAgICAgICAgICAnZGl2IGNvZGUtbGluZS1udW0tYmFzZSc6IChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5iZ1JlZChgID4gJHtzdHJ9IGApICsgJ3wnLFxuICAgICAgICAgICAgJ2RpdiBjb2RlLWxpbmUtc3JjJzogICAgICBpZGVudGl0eSxcblxuICAgICAgICAgICAgJ2RpdiBzdGFjayc6ICAgICAgICAgICAgICAgKHN0cjogc3RyaW5nKSA9PiAnXFxuXFxuJyArIHN0cixcbiAgICAgICAgICAgICdkaXYgc3RhY2stbGluZSc6ICAgICAgICAgIChzdHI6IHN0cmluZykgPT4gc3RyICsgJ1xcbicsXG4gICAgICAgICAgICAnZGl2IHN0YWNrLWxpbmUtbGFzdCc6ICAgICBpZGVudGl0eSxcbiAgICAgICAgICAgICdkaXYgc3RhY2stbGluZS1uYW1lJzogICAgIChzdHI6IHN0cmluZykgPT4gYCAgIGF0ICR7dGhpcy5jaGFsay5ib2xkKHN0cil9YCxcbiAgICAgICAgICAgICdkaXYgc3RhY2stbGluZS1sb2NhdGlvbic6IChzdHI6IHN0cmluZykgPT4gYCAoJHt0aGlzLmNoYWxrLmdyZXkudW5kZXJsaW5lKHN0cil9KWAsXG5cbiAgICAgICAgICAgICdzdHJvbmcnOiAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuYm9sZChzdHIpLFxuICAgICAgICAgICAgJ2EnOiAgICAgIChzdHI6IHN0cmluZykgPT4gYFwiJHt0aGlzLmNoYWxrLnVuZGVybGluZShzdHIpfVwiYCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTdHJpbmcgaGVscGVyc1xuICAgIHB1YmxpYyBpbmRlbnRTdHJpbmcgKHN0cjogc3RyaW5nLCBpbmRlbnRWYWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpbmRlbnRTdHJpbmcoc3RyLCAnICcsIGluZGVudFZhbCk7XG4gICAgfVxuXG4gICAgcHVibGljIHdvcmRXcmFwIChzdHI6IHN0cmluZywgaW5kZW50VmFsOiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gd29yZFdyYXAoc3RyLCBpbmRlbnRWYWwsIHdpZHRoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXNjYXBlSHRtbCAoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZXNjYXBlSHRtbChzdHIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JtYXRFcnJvciAoZXJyOiBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIsIHByZWZpeCA9ICcnKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcHJlZml4TGVuZ3RoV2l0aG91dENvbG9ycyA9IHJlbW92ZVRUWUNvbG9ycyhwcmVmaXgpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbWF4TXNnTGVuZ3RoICAgICAgICAgICAgICA9IHRoaXMudmlld3BvcnRXaWR0aCAtIHRoaXNbaW5kZW50XSAtIHByZWZpeExlbmd0aFdpdGhvdXRDb2xvcnM7XG5cbiAgICAgICAgbGV0IG1zZyA9IGVyci5mb3JtYXRNZXNzYWdlKHRoaXNbZXJyb3JEZWNvcmF0b3JdLCBtYXhNc2dMZW5ndGgpO1xuXG4gICAgICAgIGlmICh0aGlzW3dvcmRXcmFwRW5hYmxlZF0pXG4gICAgICAgICAgICBtc2cgPSB0aGlzLndvcmRXcmFwKG1zZywgcHJlZml4TGVuZ3RoV2l0aG91dENvbG9ycywgbWF4TXNnTGVuZ3RoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXNnID0gdGhpcy5pbmRlbnRTdHJpbmcobXNnLCBwcmVmaXhMZW5ndGhXaXRob3V0Q29sb3JzKTtcblxuICAgICAgICByZXR1cm4gcHJlZml4ICsgbXNnLnN1YnN0cihwcmVmaXhMZW5ndGhXaXRob3V0Q29sb3JzKTtcbiAgICB9XG5cblxuICAgIC8vIFdyaXRpbmcgaGVscGVyc1xuICAgIHB1YmxpYyBuZXdsaW5lICgpOiBSZXBvcnRlclBsdWdpbkhvc3Qge1xuICAgICAgICB0aGlzLl93cml0ZVRvVW5pcXVlU3RyZWFtKCdcXG4nKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGUgKHRleHQ6IHN0cmluZyk6IFJlcG9ydGVyUGx1Z2luSG9zdCB7XG4gICAgICAgIGlmICh0aGlzW3dvcmRXcmFwRW5hYmxlZF0pXG4gICAgICAgICAgICB0ZXh0ID0gdGhpcy53b3JkV3JhcCh0ZXh0LCB0aGlzW2luZGVudF0sIHRoaXMudmlld3BvcnRXaWR0aCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRleHQgPSB0aGlzLmluZGVudFN0cmluZyh0ZXh0LCB0aGlzW2luZGVudF0pO1xuXG4gICAgICAgIHRoaXMuX3dyaXRlVG9VbmlxdWVTdHJlYW0odGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHVzZVdvcmRXcmFwICh1c2U6IGJvb2xlYW4pOiBSZXBvcnRlclBsdWdpbkhvc3Qge1xuICAgICAgICB0aGlzW3dvcmRXcmFwRW5hYmxlZF0gPSB1c2U7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEluZGVudCAodmFsOiBudW1iZXIpOiBSZXBvcnRlclBsdWdpbkhvc3Qge1xuICAgICAgICB0aGlzW2luZGVudF0gPSB2YWw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd3JpdGVUb1VuaXF1ZVN0cmVhbSAodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zdHJlYW1Db250cm9sbGVyIHx8IHRoaXMuc3RyZWFtQ29udHJvbGxlci5lbnN1cmVVbmlxdWVTdHJlYW0odGhpc1tzdHJlYW1dLCB0aGlzKSlcbiAgICAgICAgICAgIHRoaXNbc3RyZWFtXS53cml0ZSh0ZXh0KTtcbiAgICB9XG5cblxuICAgIC8vIEFic3RyYWN0IG1ldGhvZHMgaW1wbGVtZW50ZWQgaW4gcGx1Z2luXG4gICAgcHVibGljIGFzeW5jIHJlcG9ydFRhc2tTdGFydCAoLyogc3RhcnRUaW1lLCB1c2VyQWdlbnRzLCB0ZXN0Q291bnQsIHRlc3RTdHJ1Y3R1cmUsIHRhc2tQcm9wZXJ0aWVzICovKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZXBvcnRGaXh0dXJlU3RhcnQgKC8qIG5hbWUsIHBhdGggKi8pOiBQcm9taXNlPG5ldmVyPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgLy8gTk9URTogSXQncyBhbiBvcHRpb25hbCBtZXRob2RcbiAgICAvLyBhc3luYyByZXBvcnRUZXN0U3RhcnQgKC8qIG5hbWUsIHRlc3RNZXRhICovKSB7XG4gICAgLy8gICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgLy8gfVxuXG4gICAgcHVibGljIGFzeW5jIHJlcG9ydFRlc3REb25lICgvKiBuYW1lLCB0ZXN0UnVuSW5mbyAqLyk6IFByb21pc2U8bmV2ZXI+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVwb3J0VGFza0RvbmUgKC8qIGVuZFRpbWUsIHBhc3NlZCwgd2FybmluZ3MgKi8pOiBQcm9taXNlPG5ldmVyPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgLy8gTk9URTogSXQncyBhbiBvcHRpb25hbCBtZXRob2RcbiAgICBwdWJsaWMgYXN5bmMgaW5pdCAoKTogUHJvbWlzZTx2b2lkPiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgICAgIC8vIE9wdGlvbmFsXG4gICAgfVxuXG4gICAgLy8gTk9URTogSXQncyBhbiBvcHRpb25hbCBtZXRob2RcbiAgICBwdWJsaWMgYXN5bmMgcmVwb3J0V2FybmluZ3MgKC8qIHdhcm5pbmdzICovKTogUHJvbWlzZTx2b2lkPiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgfVxufVxuIl19
package/lib/role/index.js CHANGED
@@ -9,14 +9,14 @@ const wrap_test_function_1 = __importDefault(require("../api/wrap-test-function"
9
9
  const test_page_url_1 = require("../api/test-page-url");
10
10
  const role_1 = __importDefault(require("./role"));
11
11
  function createRole(loginUrl, initFn, options = { preserveUrl: false }) {
12
- type_assertions_1.assertType(type_assertions_1.is.string, 'Role', 'The "loginUrl" argument', loginUrl);
13
- type_assertions_1.assertType(type_assertions_1.is.function, 'Role', 'The "initFn" argument', initFn);
14
- type_assertions_1.assertType(type_assertions_1.is.nonNullObject, 'Role', 'The "options" argument', options);
12
+ (0, type_assertions_1.assertType)(type_assertions_1.is.string, 'Role', 'The "loginUrl" argument', loginUrl);
13
+ (0, type_assertions_1.assertType)(type_assertions_1.is.function, 'Role', 'The "initFn" argument', initFn);
14
+ (0, type_assertions_1.assertType)(type_assertions_1.is.nonNullObject, 'Role', 'The "options" argument', options);
15
15
  if (options.preserveUrl !== void 0)
16
- type_assertions_1.assertType(type_assertions_1.is.boolean, 'Role', 'The "preserveUrl" option', options.preserveUrl);
17
- test_page_url_1.assertRoleUrl(loginUrl, 'Role');
18
- loginUrl = test_page_url_1.getUrl(loginUrl);
19
- initFn = wrap_test_function_1.default(initFn);
16
+ (0, type_assertions_1.assertType)(type_assertions_1.is.boolean, 'Role', 'The "preserveUrl" option', options.preserveUrl);
17
+ (0, test_page_url_1.assertRoleUrl)(loginUrl, 'Role');
18
+ loginUrl = (0, test_page_url_1.getUrl)(loginUrl);
19
+ initFn = (0, wrap_test_function_1.default)(initFn);
20
20
  return new role_1.default(loginUrl, initFn, options);
21
21
  }
22
22
  exports.createRole = createRole;
@@ -24,4 +24,4 @@ function createAnonymousRole() {
24
24
  return new role_1.default(null, null);
25
25
  }
26
26
  exports.createAnonymousRole = createAnonymousRole;
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm9sZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1RUFBbUU7QUFDbkUsbUZBQXlEO0FBQ3pELHdEQUE2RDtBQUM3RCxrREFBMEI7QUFNMUIsU0FBZ0IsVUFBVSxDQUFFLFFBQWdCLEVBQUUsTUFBZ0IsRUFBRSxVQUF1QixFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7SUFDekcsNEJBQVUsQ0FBQyxvQkFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkUsNEJBQVUsQ0FBQyxvQkFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakUsNEJBQVUsQ0FBQyxvQkFBRSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFeEUsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQztRQUM5Qiw0QkFBVSxDQUFDLG9CQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSwwQkFBMEIsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFcEYsNkJBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFaEMsUUFBUSxHQUFHLHNCQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUIsTUFBTSxHQUFLLDRCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXBDLE9BQU8sSUFBSSxjQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBZEQsZ0NBY0M7QUFFRCxTQUFnQixtQkFBbUI7SUFDL0IsT0FBTyxJQUFJLGNBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUZELGtEQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0VHlwZSwgaXMgfSBmcm9tICcuLi9lcnJvcnMvcnVudGltZS90eXBlLWFzc2VydGlvbnMnO1xuaW1wb3J0IHdyYXBUZXN0RnVuY3Rpb24gZnJvbSAnLi4vYXBpL3dyYXAtdGVzdC1mdW5jdGlvbic7XG5pbXBvcnQgeyBnZXRVcmwsIGFzc2VydFJvbGVVcmwgfSBmcm9tICcuLi9hcGkvdGVzdC1wYWdlLXVybCc7XG5pbXBvcnQgUm9sZSBmcm9tICcuL3JvbGUnO1xuXG5pbnRlcmZhY2UgUm9sZU9wdGlvbnMge1xuICAgIHByZXNlcnZlVXJsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJvbGUgKGxvZ2luVXJsOiBzdHJpbmcsIGluaXRGbjogRnVuY3Rpb24sIG9wdGlvbnM6IFJvbGVPcHRpb25zID0geyBwcmVzZXJ2ZVVybDogZmFsc2UgfSk6IFJvbGUge1xuICAgIGFzc2VydFR5cGUoaXMuc3RyaW5nLCAnUm9sZScsICdUaGUgXCJsb2dpblVybFwiIGFyZ3VtZW50JywgbG9naW5VcmwpO1xuICAgIGFzc2VydFR5cGUoaXMuZnVuY3Rpb24sICdSb2xlJywgJ1RoZSBcImluaXRGblwiIGFyZ3VtZW50JywgaW5pdEZuKTtcbiAgICBhc3NlcnRUeXBlKGlzLm5vbk51bGxPYmplY3QsICdSb2xlJywgJ1RoZSBcIm9wdGlvbnNcIiBhcmd1bWVudCcsIG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnMucHJlc2VydmVVcmwgIT09IHZvaWQgMClcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5ib29sZWFuLCAnUm9sZScsICdUaGUgXCJwcmVzZXJ2ZVVybFwiIG9wdGlvbicsIG9wdGlvbnMucHJlc2VydmVVcmwpO1xuXG4gICAgYXNzZXJ0Um9sZVVybChsb2dpblVybCwgJ1JvbGUnKTtcblxuICAgIGxvZ2luVXJsID0gZ2V0VXJsKGxvZ2luVXJsKTtcbiAgICBpbml0Rm4gICA9IHdyYXBUZXN0RnVuY3Rpb24oaW5pdEZuKTtcblxuICAgIHJldHVybiBuZXcgUm9sZShsb2dpblVybCwgaW5pdEZuLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFub255bW91c1JvbGUgKCk6IFJvbGUge1xuICAgIHJldHVybiBuZXcgUm9sZShudWxsLCBudWxsKTtcbn1cbiJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm9sZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx1RUFBbUU7QUFDbkUsbUZBQXlEO0FBQ3pELHdEQUE2RDtBQUM3RCxrREFBMEI7QUFNMUIsU0FBZ0IsVUFBVSxDQUFFLFFBQWdCLEVBQUUsTUFBZ0IsRUFBRSxVQUF1QixFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7SUFDekcsSUFBQSw0QkFBVSxFQUFDLG9CQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRSxJQUFBLDRCQUFVLEVBQUMsb0JBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLElBQUEsNEJBQVUsRUFBQyxvQkFBRSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFeEUsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQztRQUM5QixJQUFBLDRCQUFVLEVBQUMsb0JBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLDBCQUEwQixFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVwRixJQUFBLDZCQUFhLEVBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRWhDLFFBQVEsR0FBRyxJQUFBLHNCQUFNLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUIsTUFBTSxHQUFLLElBQUEsNEJBQWdCLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFFcEMsT0FBTyxJQUFJLGNBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFkRCxnQ0FjQztBQUVELFNBQWdCLG1CQUFtQjtJQUMvQixPQUFPLElBQUksY0FBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRkQsa0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgd3JhcFRlc3RGdW5jdGlvbiBmcm9tICcuLi9hcGkvd3JhcC10ZXN0LWZ1bmN0aW9uJztcbmltcG9ydCB7IGdldFVybCwgYXNzZXJ0Um9sZVVybCB9IGZyb20gJy4uL2FwaS90ZXN0LXBhZ2UtdXJsJztcbmltcG9ydCBSb2xlIGZyb20gJy4vcm9sZSc7XG5cbmludGVyZmFjZSBSb2xlT3B0aW9ucyB7XG4gICAgcHJlc2VydmVVcmw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm9sZSAobG9naW5Vcmw6IHN0cmluZywgaW5pdEZuOiBGdW5jdGlvbiwgb3B0aW9uczogUm9sZU9wdGlvbnMgPSB7IHByZXNlcnZlVXJsOiBmYWxzZSB9KTogUm9sZSB7XG4gICAgYXNzZXJ0VHlwZShpcy5zdHJpbmcsICdSb2xlJywgJ1RoZSBcImxvZ2luVXJsXCIgYXJndW1lbnQnLCBsb2dpblVybCk7XG4gICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ1JvbGUnLCAnVGhlIFwiaW5pdEZuXCIgYXJndW1lbnQnLCBpbml0Rm4pO1xuICAgIGFzc2VydFR5cGUoaXMubm9uTnVsbE9iamVjdCwgJ1JvbGUnLCAnVGhlIFwib3B0aW9uc1wiIGFyZ3VtZW50Jywgb3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5wcmVzZXJ2ZVVybCAhPT0gdm9pZCAwKVxuICAgICAgICBhc3NlcnRUeXBlKGlzLmJvb2xlYW4sICdSb2xlJywgJ1RoZSBcInByZXNlcnZlVXJsXCIgb3B0aW9uJywgb3B0aW9ucy5wcmVzZXJ2ZVVybCk7XG5cbiAgICBhc3NlcnRSb2xlVXJsKGxvZ2luVXJsLCAnUm9sZScpO1xuXG4gICAgbG9naW5VcmwgPSBnZXRVcmwobG9naW5VcmwpO1xuICAgIGluaXRGbiAgID0gd3JhcFRlc3RGdW5jdGlvbihpbml0Rm4pO1xuXG4gICAgcmV0dXJuIG5ldyBSb2xlKGxvZ2luVXJsLCBpbml0Rm4sIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5vbnltb3VzUm9sZSAoKTogUm9sZSB7XG4gICAgcmV0dXJuIG5ldyBSb2xlKG51bGwsIG51bGwpO1xufVxuIl19
package/lib/role/role.js CHANGED
@@ -12,7 +12,7 @@ class Role extends events_1.EventEmitter {
12
12
  constructor(loginUrl, initFn, options = {}) {
13
13
  super();
14
14
  this[marker_symbol_1.default] = true;
15
- this.id = nanoid_1.nanoid(7);
15
+ this.id = (0, nanoid_1.nanoid)(7);
16
16
  this.phase = loginUrl ? phase_1.default.uninitialized : phase_1.default.initialized;
17
17
  this.loginUrl = loginUrl;
18
18
  this._initFn = initFn;
@@ -119,4 +119,4 @@ class Role extends events_1.EventEmitter {
119
119
  }
120
120
  exports.default = Role;
121
121
  module.exports = exports.default;
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb2xlL3JvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBc0M7QUFDdEMsb0RBQWdDO0FBQ2hDLDZEQUFvRDtBQUNwRCxvRUFBeUM7QUFDekMsbUNBQWdDO0FBUWhDLE1BQXFCLElBQUssU0FBUSxxQkFBWTtJQVcxQyxZQUFvQixRQUF1QixFQUFFLE1BQXVCLEVBQUUsT0FBTyxHQUFHLEVBQUU7UUFDOUUsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsdUJBQVUsQ0FBQyxHQUFLLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsRUFBRSxHQUFjLGVBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFXLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsZUFBUyxDQUFDLFdBQVcsQ0FBQztRQUNoRixJQUFJLENBQUMsUUFBUSxHQUFRLFFBQVEsQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFTLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFZLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFLLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLG1DQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLE9BQU8sR0FBUyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBRSxPQUFnQjs7UUFDL0MsSUFBSSxJQUFJLENBQUMsT0FBTztZQUNaLE9BQU87UUFFWCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFdEQsYUFBTSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsZUFBZSwwQ0FBRSxrQkFBa0IsQ0FBQztZQUMv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LENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBNUlELHVCQTRJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgUm9sZVBoYXNlIGZyb20gJy4vcGhhc2UnO1xuaW1wb3J0IHsgU3RhdGVTbmFwc2hvdCB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHJvbGVNYXJrZXIgZnJvbSAnLi9tYXJrZXItc3ltYm9sJztcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi90ZXN0LXJ1bic7XG5pbXBvcnQgVGVzdENhZmVFcnJvckxpc3QgZnJvbSAnLi4vZXJyb3JzL2Vycm9yLWxpc3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZGlyZWN0VXJsIHtcbiAgICBbdGVzdElkOiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvbGUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIHB1YmxpYyBpZDogc3RyaW5nO1xuICAgIHB1YmxpYyBwaGFzZTogUm9sZVBoYXNlO1xuICAgIHB1YmxpYyBsb2dpblVybDogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaWMgcmVkaXJlY3RVcmw6IFJlZGlyZWN0VXJsIHwgc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaWMgX2luaXRGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBvcHRzOiBSb2xlT3B0aW9ucztcbiAgICBwdWJsaWMgaW5pdEVycjogbnVsbCB8IEVycm9yIHwgVGVzdENhZmVFcnJvckxpc3Q7XG4gICAgcHVibGljIHN0YXRlU25hcHNob3Q6IFN0YXRlU25hcHNob3Q7XG4gICAgcHJpdmF0ZSBbcm9sZU1hcmtlcl06IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGxvZ2luVXJsOiBzdHJpbmcgfCBudWxsLCBpbml0Rm46IEZ1bmN0aW9uIHwgbnVsbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpc1tyb2xlTWFya2VyXSAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pZCAgICAgICAgICAgID0gbmFub2lkKDcpO1xuICAgICAgICB0aGlzLnBoYXNlICAgICAgICAgPSBsb2dpblVybCA/IFJvbGVQaGFzZS51bmluaXRpYWxpemVkIDogUm9sZVBoYXNlLmluaXRpYWxpemVkO1xuICAgICAgICB0aGlzLmxvZ2luVXJsICAgICAgPSBsb2dpblVybDtcbiAgICAgICAgdGhpcy5faW5pdEZuICAgICAgID0gaW5pdEZuO1xuICAgICAgICB0aGlzLm9wdHMgICAgICAgICAgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnJlZGlyZWN0VXJsICAgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlU25hcHNob3QgPSBTdGF0ZVNuYXBzaG90LmVtcHR5KCk7XG4gICAgICAgIHRoaXMuaW5pdEVyciAgICAgICA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc3RvcmVTdGF0ZVNuYXBzaG90ICh0ZXN0UnVuOiBUZXN0UnVuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmluaXRFcnIpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5zdGF0ZVNuYXBzaG90ID0gYXdhaXQgdGVzdFJ1bi5nZXRTdGF0ZVNuYXBzaG90KCk7XG5cbiAgICAgICAgYXdhaXQgdGVzdFJ1bj8uY29tcGlsZXJTZXJ2aWNlPy51cGRhdGVSb2xlUHJvcGVydHkoe1xuICAgICAgICAgICAgcm9sZUlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgbmFtZTogICAnc3RhdGVTbmFwc2hvdCcsXG4gICAgICAgICAgICB2YWx1ZTogIHRoaXMuc3RhdGVTbmFwc2hvdCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd3JhcFRlc3RGbiAodGVzdFJ1bjogVGVzdFJ1bik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0Rm4gPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGVzdFJ1bi5jb21waWxlclNlcnZpY2U/LmV4ZWN1dGVSb2xlSW5pdEZuKHtcbiAgICAgICAgICAgICAgICB0ZXN0UnVuSWQ6IHRlc3RSdW4uaWQsXG4gICAgICAgICAgICAgICAgcm9sZUlkOiAgICB0aGlzLmlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0SW5pdEVycm9yIChlcnI6IEVycm9yLCB0ZXN0UnVuOiBUZXN0UnVuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuaW5pdEVyciA9IGVycjtcblxuICAgICAgICBhd2FpdCB0ZXN0UnVuPy5jb21waWxlclNlcnZpY2U/LnVwZGF0ZVJvbGVQcm9wZXJ0eSh7XG4gICAgICAgICAgICByb2xlSWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBuYW1lOiAgICdpbml0RXJyJyxcbiAgICAgICAgICAgIHZhbHVlOiAgdGhpcy5pbml0RXJyLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9leGVjdXRlSW5pdEZuICh0ZXN0UnVuOiBUZXN0UnVuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmluaXRFcnIpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0ZXN0UnVuLmNvbXBpbGVyU2VydmljZSlcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwVGVzdEZuKHRlc3RSdW4pO1xuXG4gICAgICAgICAgICBsZXQgZm4gPSAoKTogUHJvbWlzZTx2b2lkPiA9PiAodGhpcy5faW5pdEZuIGFzIEZ1bmN0aW9uKSh0ZXN0UnVuKTtcblxuICAgICAgICAgICAgZm4gPSB0ZXN0UnVuLmRlY29yYXRlUHJldmVudEVtaXRBY3Rpb25FdmVudHMoZm4sIHsgcHJldmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICBmbiA9IHRlc3RSdW4uZGVjb3JhdGVEaXNhYmxlRGVidWdCcmVha3BvaW50cyhmbiwgeyBkaXNhYmxlOiBmYWxzZSB9KTtcblxuICAgICAgICAgICAgYXdhaXQgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zZXRJbml0RXJyb3IoZXJyLCB0ZXN0UnVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3N3aXRjaFRvQ2xlYW5SdW4gKHRlc3RSdW46IFRlc3RSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRlc3RSdW4uc3dpdGNoVG9DbGVhblJ1bih0aGlzLmxvZ2luVXJsIGFzIHN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2V0SW5pdEVycm9yKGVyciwgdGVzdFJ1bik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZSAodGVzdFJ1bjogVGVzdFJ1bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnBoYXNlID0gUm9sZVBoYXNlLnBlbmRpbmdJbml0aWFsaXphdGlvbjtcblxuICAgICAgICBhd2FpdCB0aGlzLl9zd2l0Y2hUb0NsZWFuUnVuKHRlc3RSdW4pO1xuICAgICAgICBhd2FpdCB0aGlzLl9leGVjdXRlSW5pdEZuKHRlc3RSdW4pO1xuICAgICAgICBhd2FpdCB0aGlzLl9zdG9yZVN0YXRlU25hcHNob3QodGVzdFJ1bik7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5wcmVzZXJ2ZVVybClcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0Q3VycmVudFVybEFzUmVkaXJlY3RVcmwodGVzdFJ1bik7XG5cbiAgICAgICAgdGhpcy5waGFzZSA9IFJvbGVQaGFzZS5pbml0aWFsaXplZDtcblxuICAgICAgICBhd2FpdCB0ZXN0UnVuLmNvbXBpbGVyU2VydmljZT8udXBkYXRlUm9sZVByb3BlcnR5KHtcbiAgICAgICAgICAgIHJvbGVJZDogdGhpcy5pZCxcbiAgICAgICAgICAgIG5hbWU6ICAgJ3BoYXNlJyxcbiAgICAgICAgICAgIHZhbHVlOiAgdGhpcy5waGFzZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5lbWl0KCdpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRDdXJyZW50VXJsQXNSZWRpcmVjdFVybCAodGVzdFJ1bjogVGVzdFJ1bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gYXdhaXQgdGVzdFJ1bi5nZXRDdXJyZW50VXJsKCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5wcmVzZXJ2ZVVybClcbiAgICAgICAgICAgIHRoaXMucmVkaXJlY3RVcmwgPSBjdXJyZW50VXJsO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVkaXJlY3RVcmwgPSB0aGlzLnJlZGlyZWN0VXJsIHx8IHt9O1xuICAgICAgICAgICAgKHRoaXMucmVkaXJlY3RVcmwgYXMgUmVkaXJlY3RVcmwpW3Rlc3RSdW4udGVzdC5pZF0gPSBjdXJyZW50VXJsO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGVzdFJ1bi5jb21waWxlclNlcnZpY2U/LnVwZGF0ZVJvbGVQcm9wZXJ0eSh7XG4gICAgICAgICAgICByb2xlSWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBuYW1lOiAgICdyZWRpcmVjdFVybCcsXG4gICAgICAgICAgICB2YWx1ZTogIHRoaXMucmVkaXJlY3RVcmwsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbSAoaW5pdDogdW5rbm93bik6IFJvbGUgfCBudWxsIHtcbiAgICAgICAgaWYgKCFpbml0KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFJvbGUgPSBpbml0IGFzIFJvbGU7XG5cbiAgICAgICAgY29uc3Qgcm9sZSA9IG5ldyBSb2xlKHNlcmlhbGl6ZWRSb2xlLmxvZ2luVXJsLCBzZXJpYWxpemVkUm9sZS5faW5pdEZuLCBzZXJpYWxpemVkUm9sZS5vcHRzKTtcblxuICAgICAgICByb2xlLmlkICAgICAgICAgICAgPSBzZXJpYWxpemVkUm9sZS5pZDtcbiAgICAgICAgcm9sZS5waGFzZSAgICAgICAgID0gc2VyaWFsaXplZFJvbGUucGhhc2U7XG4gICAgICAgIHJvbGUucmVkaXJlY3RVcmwgICA9IHNlcmlhbGl6ZWRSb2xlLnJlZGlyZWN0VXJsO1xuICAgICAgICByb2xlLnN0YXRlU25hcHNob3QgPSBzZXJpYWxpemVkUm9sZS5zdGF0ZVNuYXBzaG90O1xuICAgICAgICByb2xlLmluaXRFcnIgICAgICAgPSBzZXJpYWxpemVkUm9sZS5pbml0RXJyO1xuXG4gICAgICAgIHJldHVybiByb2xlO1xuICAgIH1cbn1cbiJdfQ==
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb2xlL3JvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBc0M7QUFDdEMsb0RBQWdDO0FBQ2hDLDZEQUFvRDtBQUNwRCxvRUFBeUM7QUFDekMsbUNBQWdDO0FBUWhDLE1BQXFCLElBQUssU0FBUSxxQkFBWTtJQVcxQyxZQUFvQixRQUF1QixFQUFFLE1BQXVCLEVBQUUsT0FBTyxHQUFHLEVBQUU7UUFDOUUsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsdUJBQVUsQ0FBQyxHQUFLLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsRUFBRSxHQUFjLElBQUEsZUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQVcsUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxlQUFTLENBQUMsV0FBVyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQVEsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQVMsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQVksT0FBTyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUssSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsbUNBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFTLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQixDQUFFLE9BQWdCOztRQUMvQyxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ1osT0FBTztRQUVYLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV0RCxNQUFNLENBQUEsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsZUFBZSwwQ0FBRSxr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QUFDLGFBQWEsQ0FBQztRQUNsRCxJQUFJLENBQUMsT0FBTyxHQUFTLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBNUlELHVCQTRJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgUm9sZVBoYXNlIGZyb20gJy4vcGhhc2UnO1xuaW1wb3J0IHsgU3RhdGVTbmFwc2hvdCB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHJvbGVNYXJrZXIgZnJvbSAnLi9tYXJrZXItc3ltYm9sJztcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi90ZXN0LXJ1bic7XG5pbXBvcnQgVGVzdENhZmVFcnJvckxpc3QgZnJvbSAnLi4vZXJyb3JzL2Vycm9yLWxpc3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZGlyZWN0VXJsIHtcbiAgICBbdGVzdElkOiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvbGUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIHB1YmxpYyBpZDogc3RyaW5nO1xuICAgIHB1YmxpYyBwaGFzZTogUm9sZVBoYXNlO1xuICAgIHB1YmxpYyBsb2dpblVybDogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaWMgcmVkaXJlY3RVcmw6IFJlZGlyZWN0VXJsIHwgc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaWMgX2luaXRGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBvcHRzOiBSb2xlT3B0aW9ucztcbiAgICBwdWJsaWMgaW5pdEVycjogbnVsbCB8IEVycm9yIHwgVGVzdENhZmVFcnJvckxpc3Q7XG4gICAgcHVibGljIHN0YXRlU25hcHNob3Q6IFN0YXRlU25hcHNob3Q7XG4gICAgcHJpdmF0ZSBbcm9sZU1hcmtlcl06IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGxvZ2luVXJsOiBzdHJpbmcgfCBudWxsLCBpbml0Rm46IEZ1bmN0aW9uIHwgbnVsbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpc1tyb2xlTWFya2VyXSAgID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pZCAgICAgICAgICAgID0gbmFub2lkKDcpO1xuICAgICAgICB0aGlzLnBoYXNlICAgICAgICAgPSBsb2dpblVybCA/IFJvbGVQaGFzZS51bmluaXRpYWxpemVkIDogUm9sZVBoYXNlLmluaXRpYWxpemVkO1xuICAgICAgICB0aGlzLmxvZ2luVXJsICAgICAgPSBsb2dpblVybDtcbiAgICAgICAgdGhpcy5faW5pdEZuICAgICAgID0gaW5pdEZuO1xuICAgICAgICB0aGlzLm9wdHMgICAgICAgICAgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLnJlZGlyZWN0VXJsICAgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlU25hcHNob3QgPSBTdGF0ZVNuYXBzaG90LmVtcHR5KCk7XG4gICAgICAgIHRoaXMuaW5pdEVyciAgICAgICA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc3RvcmVTdGF0ZVNuYXBzaG90ICh0ZXN0UnVuOiBUZXN0UnVuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmluaXRFcnIpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5zdGF0ZVNuYXBzaG90ID0gYXdhaXQgdGVzdFJ1bi5nZXRTdGF0ZVNuYXBzaG90KCk7XG5cbiAgICAgICAgYXdhaXQgdGVzdFJ1bj8uY29tcGlsZXJTZXJ2aWNlPy51cGRhdGVSb2xlUHJvcGVydHkoe1xuICAgICAgICAgICAgcm9sZUlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgbmFtZTogICAnc3RhdGVTbmFwc2hvdCcsXG4gICAgICAgICAgICB2YWx1ZTogIHRoaXMuc3RhdGVTbmFwc2hvdCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd3JhcFRlc3RGbiAodGVzdFJ1bjogVGVzdFJ1bik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0Rm4gPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGVzdFJ1bi5jb21waWxlclNlcnZpY2U/LmV4ZWN1dGVSb2xlSW5pdEZuKHtcbiAgICAgICAgICAgICAgICB0ZXN0UnVuSWQ6IHRlc3RSdW4uaWQsXG4gICAgICAgICAgICAgICAgcm9sZUlkOiAgICB0aGlzLmlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0SW5pdEVycm9yIChlcnI6IEVycm9yLCB0ZXN0UnVuOiBUZXN0UnVuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuaW5pdEVyciA9IGVycjtcblxuICAgICAgICBhd2FpdCB0ZXN0UnVuPy5jb21waWxlclNlcnZpY2U/LnVwZGF0ZVJvbGVQcm9wZXJ0eSh7XG4gICAgICAgICAgICByb2xlSWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBuYW1lOiAgICdpbml0RXJyJyxcbiAgICAgICAgICAgIHZhbHVlOiAgdGhpcy5pbml0RXJyLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9leGVjdXRlSW5pdEZuICh0ZXN0UnVuOiBUZXN0UnVuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmluaXRFcnIpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0ZXN0UnVuLmNvbXBpbGVyU2VydmljZSlcbiAgICAgICAgICAgICAgICB0aGlzLl93cmFwVGVzdEZuKHRlc3RSdW4pO1xuXG4gICAgICAgICAgICBsZXQgZm4gPSAoKTogUHJvbWlzZTx2b2lkPiA9PiAodGhpcy5faW5pdEZuIGFzIEZ1bmN0aW9uKSh0ZXN0UnVuKTtcblxuICAgICAgICAgICAgZm4gPSB0ZXN0UnVuLmRlY29yYXRlUHJldmVudEVtaXRBY3Rpb25FdmVudHMoZm4sIHsgcHJldmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICBmbiA9IHRlc3RSdW4uZGVjb3JhdGVEaXNhYmxlRGVidWdCcmVha3BvaW50cyhmbiwgeyBkaXNhYmxlOiBmYWxzZSB9KTtcblxuICAgICAgICAgICAgYXdhaXQgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldEluaXRFcnJvcihlcnIsIHRlc3RSdW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc3dpdGNoVG9DbGVhblJ1biAodGVzdFJ1bjogVGVzdFJ1bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGVzdFJ1bi5zd2l0Y2hUb0NsZWFuUnVuKHRoaXMubG9naW5VcmwgYXMgc3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldEluaXRFcnJvcihlcnIsIHRlc3RSdW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXRpYWxpemUgKHRlc3RSdW46IFRlc3RSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5waGFzZSA9IFJvbGVQaGFzZS5wZW5kaW5nSW5pdGlhbGl6YXRpb247XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fc3dpdGNoVG9DbGVhblJ1bih0ZXN0UnVuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZXhlY3V0ZUluaXRGbih0ZXN0UnVuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RvcmVTdGF0ZVNuYXBzaG90KHRlc3RSdW4pO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdHMucHJlc2VydmVVcmwpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldEN1cnJlbnRVcmxBc1JlZGlyZWN0VXJsKHRlc3RSdW4pO1xuXG4gICAgICAgIHRoaXMucGhhc2UgPSBSb2xlUGhhc2UuaW5pdGlhbGl6ZWQ7XG5cbiAgICAgICAgYXdhaXQgdGVzdFJ1bi5jb21waWxlclNlcnZpY2U/LnVwZGF0ZVJvbGVQcm9wZXJ0eSh7XG4gICAgICAgICAgICByb2xlSWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBuYW1lOiAgICdwaGFzZScsXG4gICAgICAgICAgICB2YWx1ZTogIHRoaXMucGhhc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZW1pdCgnaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0Q3VycmVudFVybEFzUmVkaXJlY3RVcmwgKHRlc3RSdW46IFRlc3RSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFVybCA9IGF3YWl0IHRlc3RSdW4uZ2V0Q3VycmVudFVybCgpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdHMucHJlc2VydmVVcmwpXG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0VXJsID0gY3VycmVudFVybDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0VXJsID0gdGhpcy5yZWRpcmVjdFVybCB8fCB7fTtcbiAgICAgICAgICAgICh0aGlzLnJlZGlyZWN0VXJsIGFzIFJlZGlyZWN0VXJsKVt0ZXN0UnVuLnRlc3QuaWRdID0gY3VycmVudFVybDtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRlc3RSdW4uY29tcGlsZXJTZXJ2aWNlPy51cGRhdGVSb2xlUHJvcGVydHkoe1xuICAgICAgICAgICAgcm9sZUlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgbmFtZTogICAncmVkaXJlY3RVcmwnLFxuICAgICAgICAgICAgdmFsdWU6ICB0aGlzLnJlZGlyZWN0VXJsLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb20gKGluaXQ6IHVua25vd24pOiBSb2xlIHwgbnVsbCB7XG4gICAgICAgIGlmICghaW5pdClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRSb2xlID0gaW5pdCBhcyBSb2xlO1xuXG4gICAgICAgIGNvbnN0IHJvbGUgPSBuZXcgUm9sZShzZXJpYWxpemVkUm9sZS5sb2dpblVybCwgc2VyaWFsaXplZFJvbGUuX2luaXRGbiwgc2VyaWFsaXplZFJvbGUub3B0cyk7XG5cbiAgICAgICAgcm9sZS5pZCAgICAgICAgICAgID0gc2VyaWFsaXplZFJvbGUuaWQ7XG4gICAgICAgIHJvbGUucGhhc2UgICAgICAgICA9IHNlcmlhbGl6ZWRSb2xlLnBoYXNlO1xuICAgICAgICByb2xlLnJlZGlyZWN0VXJsICAgPSBzZXJpYWxpemVkUm9sZS5yZWRpcmVjdFVybDtcbiAgICAgICAgcm9sZS5zdGF0ZVNuYXBzaG90ID0gc2VyaWFsaXplZFJvbGUuc3RhdGVTbmFwc2hvdDtcbiAgICAgICAgcm9sZS5pbml0RXJyICAgICAgID0gc2VyaWFsaXplZFJvbGUuaW5pdEVycjtcblxuICAgICAgICByZXR1cm4gcm9sZTtcbiAgICB9XG59XG4iXX0=