velocious 1.0.563 → 1.0.565

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 (219) hide show
  1. package/README.md +3 -1
  2. package/build/background-jobs/cron-expression.js +12 -13
  3. package/build/background-jobs/main.js +6 -6
  4. package/build/background-jobs/runner-graceful-shutdown.js +2 -3
  5. package/build/background-jobs/scheduler.js +3 -3
  6. package/build/background-jobs/worker.js +8 -9
  7. package/build/beacon/client.js +3 -4
  8. package/build/database/drivers/sqlite/web-persistence.js +2 -5
  9. package/build/database/pool/async-tracked-multi-connection.js +65 -15
  10. package/build/database/pool/base.js +23 -7
  11. package/build/database/query/index.js +21 -22
  12. package/build/database/query/model-class-query.js +5 -6
  13. package/build/database/record/acts-as-list.js +37 -10
  14. package/build/database/record/attachments/normalize-input.js +9 -10
  15. package/build/database/record/attachments/store.js +2 -2
  16. package/build/database/record/auditing.js +7 -8
  17. package/build/database/record/index.js +4 -5
  18. package/build/environment-handlers/node/cli/commands/generate/base-models.js +4 -12
  19. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +1 -2
  20. package/build/frontend-model-controller.js +49 -56
  21. package/build/frontend-models/base.js +17 -19
  22. package/build/frontend-models/outgoing-event-buffer.js +3 -4
  23. package/build/frontend-models/query.js +40 -44
  24. package/build/frontend-models/resource-definition.js +7 -8
  25. package/build/frontend-models/transport-serialization.js +10 -12
  26. package/build/frontend-models/websocket-channel.js +12 -13
  27. package/build/http-server/client/websocket-session.js +4 -5
  28. package/build/http-server/client-delivery-queue.js +7 -8
  29. package/build/http-server/websocket-event-log-store.js +4 -6
  30. package/build/plugins/sqljs-wasm-route.js +3 -5
  31. package/build/src/background-jobs/cron-expression.d.ts +0 -12
  32. package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
  33. package/build/src/background-jobs/cron-expression.js +13 -13
  34. package/build/src/background-jobs/main.d.ts.map +1 -1
  35. package/build/src/background-jobs/main.js +7 -7
  36. package/build/src/background-jobs/runner-graceful-shutdown.d.ts +0 -6
  37. package/build/src/background-jobs/runner-graceful-shutdown.d.ts.map +1 -1
  38. package/build/src/background-jobs/runner-graceful-shutdown.js +3 -3
  39. package/build/src/background-jobs/scheduler.d.ts +0 -3
  40. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  41. package/build/src/background-jobs/scheduler.js +4 -4
  42. package/build/src/background-jobs/worker.d.ts +0 -8
  43. package/build/src/background-jobs/worker.d.ts.map +1 -1
  44. package/build/src/background-jobs/worker.js +9 -9
  45. package/build/src/beacon/client.d.ts +0 -4
  46. package/build/src/beacon/client.d.ts.map +1 -1
  47. package/build/src/beacon/client.js +4 -4
  48. package/build/src/database/drivers/sqlite/web-persistence.d.ts +0 -14
  49. package/build/src/database/drivers/sqlite/web-persistence.d.ts.map +1 -1
  50. package/build/src/database/drivers/sqlite/web-persistence.js +3 -3
  51. package/build/src/database/pool/async-tracked-multi-connection.d.ts +29 -1
  52. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  53. package/build/src/database/pool/async-tracked-multi-connection.js +57 -15
  54. package/build/src/database/pool/base.d.ts +53 -4
  55. package/build/src/database/pool/base.d.ts.map +1 -1
  56. package/build/src/database/pool/base.js +23 -6
  57. package/build/src/database/query/index.d.ts +18 -39
  58. package/build/src/database/query/index.d.ts.map +1 -1
  59. package/build/src/database/query/index.js +22 -22
  60. package/build/src/database/query/model-class-query.d.ts +0 -5
  61. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  62. package/build/src/database/query/model-class-query.js +6 -6
  63. package/build/src/database/record/acts-as-list.d.ts.map +1 -1
  64. package/build/src/database/record/acts-as-list.js +34 -12
  65. package/build/src/database/record/attachments/normalize-input.d.ts +0 -9
  66. package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
  67. package/build/src/database/record/attachments/normalize-input.js +10 -10
  68. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  69. package/build/src/database/record/attachments/store.js +2 -2
  70. package/build/src/database/record/auditing.d.ts +17 -24
  71. package/build/src/database/record/auditing.d.ts.map +1 -1
  72. package/build/src/database/record/auditing.js +8 -8
  73. package/build/src/database/record/index.d.ts +4 -4
  74. package/build/src/database/record/index.d.ts.map +1 -1
  75. package/build/src/database/record/index.js +5 -5
  76. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  77. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +5 -13
  78. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +0 -39
  79. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  80. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +2 -2
  81. package/build/src/frontend-model-controller.d.ts +1 -1
  82. package/build/src/frontend-model-controller.d.ts.map +1 -1
  83. package/build/src/frontend-model-controller.js +50 -50
  84. package/build/src/frontend-models/base.d.ts.map +1 -1
  85. package/build/src/frontend-models/base.js +18 -18
  86. package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
  87. package/build/src/frontend-models/outgoing-event-buffer.js +3 -3
  88. package/build/src/frontend-models/query.d.ts +56 -37
  89. package/build/src/frontend-models/query.d.ts.map +1 -1
  90. package/build/src/frontend-models/query.js +39 -39
  91. package/build/src/frontend-models/resource-definition.d.ts +0 -7
  92. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  93. package/build/src/frontend-models/resource-definition.js +8 -8
  94. package/build/src/frontend-models/transport-serialization.d.ts +0 -10
  95. package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
  96. package/build/src/frontend-models/transport-serialization.js +11 -11
  97. package/build/src/frontend-models/websocket-channel.d.ts +0 -12
  98. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  99. package/build/src/frontend-models/websocket-channel.js +13 -13
  100. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  101. package/build/src/http-server/client/websocket-session.js +5 -5
  102. package/build/src/http-server/client-delivery-queue.d.ts +7 -7
  103. package/build/src/http-server/client-delivery-queue.d.ts.map +1 -1
  104. package/build/src/http-server/client-delivery-queue.js +8 -8
  105. package/build/src/http-server/websocket-event-log-store.d.ts +0 -14
  106. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  107. package/build/src/http-server/websocket-event-log-store.js +5 -5
  108. package/build/src/plugins/sqljs-wasm-route.d.ts.map +1 -1
  109. package/build/src/plugins/sqljs-wasm-route.js +4 -4
  110. package/build/src/sync/conflict-strategy.d.ts +0 -15
  111. package/build/src/sync/conflict-strategy.d.ts.map +1 -1
  112. package/build/src/sync/conflict-strategy.js +3 -3
  113. package/build/src/sync/device-identity.d.ts +0 -45
  114. package/build/src/sync/device-identity.d.ts.map +1 -1
  115. package/build/src/sync/device-identity.js +4 -4
  116. package/build/src/sync/local-mutation-log.d.ts +0 -41
  117. package/build/src/sync/local-mutation-log.d.ts.map +1 -1
  118. package/build/src/sync/local-mutation-log.js +9 -9
  119. package/build/src/sync/offline-grant.d.ts +0 -26
  120. package/build/src/sync/offline-grant.d.ts.map +1 -1
  121. package/build/src/sync/offline-grant.js +4 -4
  122. package/build/src/sync/peer-mutation-bundle.d.ts +0 -14
  123. package/build/src/sync/peer-mutation-bundle.d.ts.map +1 -1
  124. package/build/src/sync/peer-mutation-bundle.js +3 -3
  125. package/build/src/sync/server-change-feed.d.ts.map +1 -1
  126. package/build/src/sync/server-change-feed.js +33 -33
  127. package/build/src/sync/sync-api-client.d.ts +0 -9
  128. package/build/src/sync/sync-api-client.d.ts.map +1 -1
  129. package/build/src/sync/sync-api-client.js +2 -2
  130. package/build/src/sync/sync-envelope-replay-service.d.ts +38 -21
  131. package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
  132. package/build/src/sync/sync-envelope-replay-service.js +18 -18
  133. package/build/src/sync/sync-resource-base.d.ts +0 -7
  134. package/build/src/sync/sync-resource-base.d.ts.map +1 -1
  135. package/build/src/sync/sync-resource-base.js +2 -2
  136. package/build/src/sync/sync-scope-store.d.ts +0 -9
  137. package/build/src/sync/sync-scope-store.d.ts.map +1 -1
  138. package/build/src/sync/sync-scope-store.js +10 -10
  139. package/build/src/testing/test-filter-parser.d.ts +0 -10
  140. package/build/src/testing/test-filter-parser.d.ts.map +1 -1
  141. package/build/src/testing/test-filter-parser.js +11 -11
  142. package/build/src/testing/test-runner.d.ts +25 -91
  143. package/build/src/testing/test-runner.d.ts.map +1 -1
  144. package/build/src/testing/test-runner.js +113 -98
  145. package/build/src/testing/test.d.ts +8 -0
  146. package/build/src/testing/test.d.ts.map +1 -1
  147. package/build/src/testing/test.js +9 -9
  148. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  149. package/build/src/utils/backtrace-cleaner.js +9 -9
  150. package/build/src/utils/model-scope.d.ts +0 -8
  151. package/build/src/utils/model-scope.d.ts.map +1 -1
  152. package/build/src/utils/model-scope.js +3 -3
  153. package/build/src/utils/ransack.d.ts +52 -19
  154. package/build/src/utils/ransack.d.ts.map +1 -1
  155. package/build/src/utils/ransack.js +26 -26
  156. package/build/sync/conflict-strategy.js +3 -6
  157. package/build/sync/device-identity.js +4 -9
  158. package/build/sync/local-mutation-log.js +9 -14
  159. package/build/sync/offline-grant.js +4 -7
  160. package/build/sync/peer-mutation-bundle.js +2 -4
  161. package/build/sync/server-change-feed.js +32 -34
  162. package/build/sync/sync-api-client.js +1 -2
  163. package/build/sync/sync-envelope-replay-service.js +17 -19
  164. package/build/sync/sync-resource-base.js +1 -2
  165. package/build/sync/sync-scope-store.js +9 -10
  166. package/build/testing/test-filter-parser.js +10 -11
  167. package/build/testing/test-runner.js +116 -108
  168. package/build/testing/test.js +8 -9
  169. package/build/utils/backtrace-cleaner.js +8 -9
  170. package/build/utils/model-scope.js +3 -4
  171. package/build/utils/ransack.js +27 -34
  172. package/package.json +2 -1
  173. package/scripts/eslint-rules/typedefs-first.js +67 -0
  174. package/scripts/prewarm-chromedriver.js +26 -0
  175. package/src/background-jobs/cron-expression.js +12 -13
  176. package/src/background-jobs/main.js +6 -6
  177. package/src/background-jobs/runner-graceful-shutdown.js +2 -3
  178. package/src/background-jobs/scheduler.js +3 -3
  179. package/src/background-jobs/worker.js +8 -9
  180. package/src/beacon/client.js +3 -4
  181. package/src/database/drivers/sqlite/web-persistence.js +2 -5
  182. package/src/database/pool/async-tracked-multi-connection.js +65 -15
  183. package/src/database/pool/base.js +23 -7
  184. package/src/database/query/index.js +21 -22
  185. package/src/database/query/model-class-query.js +5 -6
  186. package/src/database/record/acts-as-list.js +37 -10
  187. package/src/database/record/attachments/normalize-input.js +9 -10
  188. package/src/database/record/attachments/store.js +2 -2
  189. package/src/database/record/auditing.js +7 -8
  190. package/src/database/record/index.js +4 -5
  191. package/src/environment-handlers/node/cli/commands/generate/base-models.js +4 -12
  192. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +1 -2
  193. package/src/frontend-model-controller.js +49 -56
  194. package/src/frontend-models/base.js +17 -19
  195. package/src/frontend-models/outgoing-event-buffer.js +3 -4
  196. package/src/frontend-models/query.js +40 -44
  197. package/src/frontend-models/resource-definition.js +7 -8
  198. package/src/frontend-models/transport-serialization.js +10 -12
  199. package/src/frontend-models/websocket-channel.js +12 -13
  200. package/src/http-server/client/websocket-session.js +4 -5
  201. package/src/http-server/client-delivery-queue.js +7 -8
  202. package/src/http-server/websocket-event-log-store.js +4 -6
  203. package/src/plugins/sqljs-wasm-route.js +3 -5
  204. package/src/sync/conflict-strategy.js +3 -6
  205. package/src/sync/device-identity.js +4 -9
  206. package/src/sync/local-mutation-log.js +9 -14
  207. package/src/sync/offline-grant.js +4 -7
  208. package/src/sync/peer-mutation-bundle.js +2 -4
  209. package/src/sync/server-change-feed.js +32 -34
  210. package/src/sync/sync-api-client.js +1 -2
  211. package/src/sync/sync-envelope-replay-service.js +17 -19
  212. package/src/sync/sync-resource-base.js +1 -2
  213. package/src/sync/sync-scope-store.js +9 -10
  214. package/src/testing/test-filter-parser.js +10 -11
  215. package/src/testing/test-runner.js +116 -108
  216. package/src/testing/test.js +8 -9
  217. package/src/utils/backtrace-cleaner.js +8 -9
  218. package/src/utils/model-scope.js +3 -4
  219. package/src/utils/ransack.js +27 -34
@@ -4,13 +4,13 @@ import net from "node:net";
4
4
  import timeout from "awaitery/build/timeout.js";
5
5
  import JsonSocket from "../background-jobs/json-socket.js";
6
6
  import EventEmitter from "../utils/event-emitter.js";
7
- const DEFAULT_RECONNECT_DELAY_MS = 1000;
8
- const MAX_RECONNECT_DELAY_MS = 30_000;
9
- const DEFAULT_CLOSE_TIMEOUT_MS = 1000;
10
7
  /**
11
8
  * BeaconBroadcastHandler type.
12
9
  * @typedef {function(import("./types.js").BeaconBroadcastMessage): void} BeaconBroadcastHandler
13
10
  */
11
+ const DEFAULT_RECONNECT_DELAY_MS = 1000;
12
+ const MAX_RECONNECT_DELAY_MS = 30_000;
13
+ const DEFAULT_CLOSE_TIMEOUT_MS = 1000;
14
14
  /**
15
15
  * BeaconClient connects to a `velocious beacon` daemon and exchanges
16
16
  * broadcasts with all peer processes connected to the same daemon.
@@ -309,4 +309,4 @@ export default class BeaconClient extends EventEmitter {
309
309
  }, delay);
310
310
  }
311
311
  }
312
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JlYWNvbi9jbGllbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDdEMsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFBO0FBQzFCLE9BQU8sT0FBTyxNQUFNLDJCQUEyQixDQUFBO0FBRS9DLE9BQU8sVUFBVSxNQUFNLG1DQUFtQyxDQUFBO0FBQzFELE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBRXBELE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFBO0FBQ3ZDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFBO0FBQ3JDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFBO0FBRXJDOzs7R0FHRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sWUFBYSxTQUFRLFlBQVk7SUFDcEQ7Ozs7Ozs7Ozs7T0FVRztJQUNILFlBQVksRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFDO1FBQy9GLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUE7UUFDcEMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLGdCQUFnQixJQUFJLDBCQUEwQixDQUFBO1FBQzlFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxtQkFBbUIsSUFBSSxzQkFBc0IsQ0FBQTtRQUN6RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFBO1FBQ3RELElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxJQUFJLHdCQUF3QixDQUFBO1FBQ2pFOzs0Q0FFb0M7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7UUFDNUI7OzRDQUVvQztRQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQTtRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtRQUNwQjs7K0RBRXVEO1FBQ3ZELElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFBO1FBQ2hDOzsrQ0FFdUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUE7UUFDaEM7OztXQUdHO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUM7SUFFbEM7OztPQUdHO0lBQ0gsV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUM7SUFFeEM7OztPQUdHO0lBQ0gsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUM7SUFFaEM7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUE7UUFDakUsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUFFLE9BQU8sTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFBO1FBRTNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckQsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO2dCQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtnQkFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUE7Z0JBQ2xDLE9BQU8sRUFBRSxDQUFBO1lBQ1gsQ0FBQyxDQUFBO1lBQ0QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUE7Z0JBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFBO2dCQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDZixDQUFDLENBQUE7WUFFRCxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUM3QixJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNuQyxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUVsQixPQUFPLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQTtJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUMsU0FBUyxFQUFDLEdBQUcsRUFBRTtRQUNqQyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTTtRQUV2Qjs7O1dBR0c7UUFDSCxJQUFJLE9BQU8sR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUE7UUFDdEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMzQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ25CLE9BQU8sRUFBRSxDQUFBO2dCQUNULE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUNwQixDQUFDLENBQUE7WUFFRCxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDMUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDM0IsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUM7WUFDSCxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLE9BQU8sQ0FBQyxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtvQkFDN0MsTUFBTSxZQUFZLENBQUE7Z0JBQ3BCLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sWUFBWSxDQUFBO1lBQ3BCLENBQUM7UUFDSCxDQUFDO2dCQUFTLENBQUM7WUFDVCxPQUFPLEVBQUUsQ0FBQTtRQUNYLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxPQUFPLENBQUMsRUFBQyxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFFdkQ7O2lFQUV5RDtRQUN6RCxNQUFNLE9BQU8sR0FBRztZQUNkLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU87WUFDUCxlQUFlO1lBQ2YsSUFBSTtZQUNKLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTTtTQUMxQixDQUFBO1FBRUQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDOUIsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFdBQVcsQ0FBQyxPQUFPO1FBQ2pCLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzdCLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7UUFFbkIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQTtRQUNsQyxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUUzQixJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU07UUFFbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUE7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7UUFFNUIsSUFBSSxNQUFNLENBQUMsU0FBUztZQUFFLE9BQU07UUFFNUIsTUFBTSxPQUFPLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3hELE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7Z0JBQzlDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQTtnQkFDWixNQUFNLENBQUMsV0FBVyxFQUFFLENBQUE7WUFDdEIsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ2xCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTTtRQUV4QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUE7UUFDdkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUE7UUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUE7UUFFN0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO1lBQ25CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUE7WUFFdEQsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDZCxJQUFJLEVBQUUsT0FBTztnQkFDYixJQUFJLEVBQUUsUUFBUTtnQkFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTthQUN4QixDQUFDLENBQUE7WUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3RCLENBQUMsQ0FBQyxDQUFBO1FBRUYsVUFBVSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyx1REFBdUQsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMzRixJQUFJLE9BQU8sRUFBRSxJQUFJLEtBQUssV0FBVyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQTtnQkFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNwQixDQUFDO2lCQUFNLElBQUksT0FBTyxFQUFFLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDakMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNyQixpRkFBaUY7Z0JBQ2pGLHVFQUF1RTtnQkFDdkUsb0RBQW9EO2dCQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNuQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04scUVBQXFFO2dCQUNyRSx1Q0FBdUM7Z0JBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7Z0JBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQzNCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUMxQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFBO1lBRXBDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO1lBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFBO1lBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFBO1lBRXhCLG1FQUFtRTtZQUNuRSxrRUFBa0U7WUFDbEUsZ0RBQWdEO1lBQ2hELElBQUksWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtnQkFFL0UsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDakMsQ0FBQztZQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUE7WUFFakMsSUFBSSxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFNO1lBRXhCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1FBQzNCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTTtRQUVoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUE7UUFFcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFBO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7WUFDdkUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3BCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNYLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3JhbmRvbVVVSUR9IGZyb20gXCJub2RlOmNyeXB0b1wiXG5pbXBvcnQgbmV0IGZyb20gXCJub2RlOm5ldFwiXG5pbXBvcnQgdGltZW91dCBmcm9tIFwiYXdhaXRlcnkvYnVpbGQvdGltZW91dC5qc1wiXG5cbmltcG9ydCBKc29uU29ja2V0IGZyb20gXCIuLi9iYWNrZ3JvdW5kLWpvYnMvanNvbi1zb2NrZXQuanNcIlxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiLi4vdXRpbHMvZXZlbnQtZW1pdHRlci5qc1wiXG5cbmNvbnN0IERFRkFVTFRfUkVDT05ORUNUX0RFTEFZX01TID0gMTAwMFxuY29uc3QgTUFYX1JFQ09OTkVDVF9ERUxBWV9NUyA9IDMwXzAwMFxuY29uc3QgREVGQVVMVF9DTE9TRV9USU1FT1VUX01TID0gMTAwMFxuXG4vKipcbiAqIEJlYWNvbkJyb2FkY2FzdEhhbmRsZXIgdHlwZS5cbiAqIEB0eXBlZGVmIHtmdW5jdGlvbihpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJlYWNvbkJyb2FkY2FzdE1lc3NhZ2UpOiB2b2lkfSBCZWFjb25Ccm9hZGNhc3RIYW5kbGVyXG4gKi9cblxuLyoqXG4gKiBCZWFjb25DbGllbnQgY29ubmVjdHMgdG8gYSBgdmVsb2Npb3VzIGJlYWNvbmAgZGFlbW9uIGFuZCBleGNoYW5nZXNcbiAqIGJyb2FkY2FzdHMgd2l0aCBhbGwgcGVlciBwcm9jZXNzZXMgY29ubmVjdGVkIHRvIHRoZSBzYW1lIGRhZW1vbi5cbiAqXG4gKiBMaWZlY3ljbGU6XG4gKiAgIGNvbnN0IGNsaWVudCA9IG5ldyBCZWFjb25DbGllbnQoe2hvc3QsIHBvcnQsIHBlZXJUeXBlOiBcInNlcnZlclwifSlcbiAqICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNvbHZlcyBvbiBmaXJzdCBzdWNjZXNzZnVsIGNvbm5lY3RcbiAqICAgYXdhaXQgY2xpZW50LndhaXRGb3JSZWFkeSh7dGltZW91dE1zOiAxMDAwfSkgICAvLyByZXNvbHZlcyBhZnRlciB0aGUgZGFlbW9uIGhlbGxvLWFja1xuICogICBjbGllbnQub25Ccm9hZGNhc3QoKG1lc3NhZ2UpID0+IHsgLi4uIH0pICAgICAgIC8vIGV2ZXJ5IGZhbi1vdXRcbiAqICAgY2xpZW50LnB1Ymxpc2goe2NoYW5uZWwsIGJyb2FkY2FzdFBhcmFtcywgYm9keX0pXG4gKiAgIGF3YWl0IGNsaWVudC5jbG9zZSgpXG4gKlxuICogUmVjb25uZWN0OiBvbiBzb2NrZXQgY2xvc2UgKHdpdGhvdXQgYW4gZXhwbGljaXQgYGNsb3NlKClgIGNhbGwpIHRoZVxuICogY2xpZW50IHNjaGVkdWxlcyBhIHJlY29ubmVjdCB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYuIFdoaWxlIHRoZVxuICogdW5kZXJseWluZyBzb2NrZXQgaXMgZG93biwgYHB1Ymxpc2goLi4uKWAgcmV0dXJucyBmYWxzZSBhbmQgdGhlXG4gKiBjYWxsZXIgY2FuIGZhbGwgYmFjayB0byBsb2NhbC1vbmx5IGRlbGl2ZXJ5OyBzdWJzZXF1ZW50IHJlY29ubmVjdHMgZG9cbiAqIG5vdCByZXBsYXkgbWlzc2VkIHB1Ymxpc2hlcyAoQmVhY29uIGlzIHB1YnN1Yiwgbm90IGEgcXVldWUpLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCZWFjb25DbGllbnQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5ob3N0IC0gQmVhY29uIGhvc3QuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLnBvcnQgLSBCZWFjb24gcG9ydC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnBlZXJUeXBlXSAtIE9wdGlvbmFsIGh1bWFuLXJlYWRhYmxlIHBlZXIgbGFiZWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5wZWVySWRdIC0gT3B0aW9uYWwgZXhwbGljaXQgcGVlciBpZCAoZGVmYXVsdHMgdG8gYSByYW5kb20gVVVJRCkuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5yZWNvbm5lY3REZWxheU1zXSAtIFN0YXJ0aW5nIHJlY29ubmVjdCBkZWxheSBpbiBtcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heFJlY29ubmVjdERlbGF5TXNdIC0gTWF4aW11bSByZWNvbm5lY3QgZGVsYXkgaW4gbXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5jbG9zZVRpbWVvdXRNc10gLSBNYXhpbXVtIGdyYWNlZnVsIHNvY2tldCBjbG9zZSB3YWl0IGluIG1zLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2hvc3QsIHBvcnQsIHBlZXJUeXBlLCBwZWVySWQsIHJlY29ubmVjdERlbGF5TXMsIG1heFJlY29ubmVjdERlbGF5TXMsIGNsb3NlVGltZW91dE1zfSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmhvc3QgPSBob3N0XG4gICAgdGhpcy5wb3J0ID0gcG9ydFxuICAgIHRoaXMucGVlclR5cGUgPSBwZWVyVHlwZVxuICAgIHRoaXMucGVlcklkID0gcGVlcklkIHx8IHJhbmRvbVVVSUQoKVxuICAgIHRoaXMuX2luaXRpYWxSZWNvbm5lY3REZWxheU1zID0gcmVjb25uZWN0RGVsYXlNcyA/PyBERUZBVUxUX1JFQ09OTkVDVF9ERUxBWV9NU1xuICAgIHRoaXMuX21heFJlY29ubmVjdERlbGF5TXMgPSBtYXhSZWNvbm5lY3REZWxheU1zID8/IE1BWF9SRUNPTk5FQ1RfREVMQVlfTVNcbiAgICB0aGlzLl9yZWNvbm5lY3REZWxheU1zID0gdGhpcy5faW5pdGlhbFJlY29ubmVjdERlbGF5TXNcbiAgICB0aGlzLl9jbG9zZVRpbWVvdXRNcyA9IGNsb3NlVGltZW91dE1zID8/IERFRkFVTFRfQ0xPU0VfVElNRU9VVF9NU1xuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7SnNvblNvY2tldCB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLl9qc29uU29ja2V0ID0gdW5kZWZpbmVkXG4gICAgLyoqXG4gICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAqIEB0eXBlIHtuZXQuU29ja2V0IHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuX3NvY2tldCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlXG4gICAgdGhpcy5fcmVhZHkgPSBmYWxzZVxuICAgIHRoaXMuX2Nsb3NlZCA9IGZhbHNlXG4gICAgLyoqXG4gICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLl9yZWNvbm5lY3RUaW1lciA9IHVuZGVmaW5lZFxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7UHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLl9jb25uZWN0UHJvbWlzZSA9IHVuZGVmaW5lZFxuICAgIC8qKlxuICAgICAqIExhc3Qgc29ja2V0IGVycm9yIG9ic2VydmVkIHdoaWxlIGNvbm5lY3RlZCwgc3VyZmFjZWQgYXMgdGhlIGRpc2Nvbm5lY3QgcmVhc29uLlxuICAgICAqIEB0eXBlIHtFcnJvciB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLl9sYXN0U29ja2V0RXJyb3IgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBwZWVyIGlkLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBwZWVyIGlkIHNlbnQgb24gdGhlIGhlbGxvIGhhbmRzaGFrZS5cbiAgICovXG4gIGdldFBlZXJJZCgpIHsgcmV0dXJuIHRoaXMucGVlcklkIH1cblxuICAvKipcbiAgICogUnVucyBpcyBjb25uZWN0ZWQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIHVuZGVybHlpbmcgc29ja2V0IGlzIGN1cnJlbnRseSBjb25uZWN0ZWQuXG4gICAqL1xuICBpc0Nvbm5lY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2Nvbm5lY3RlZCB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgaXMgcmVhZHkuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIGRhZW1vbiBoYXMgYWNrbm93bGVkZ2VkIHRoaXMgcGVlciByZWdpc3RyYXRpb24uXG4gICAqL1xuICBpc1JlYWR5KCkgeyByZXR1cm4gdGhpcy5fcmVhZHkgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBvbiB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCBjb25uZWN0LiBTdWJzZXF1ZW50IGNhbGxzIHJldHVyblxuICAgKiB0aGUgc2FtZSBwcm9taXNlLiBTdWJzZXF1ZW50IHJlY29ubmVjdHMgYWZ0ZXIgYSBkcm9wIGFyZSBzaWxlbnQg4oCUXG4gICAqIHVzZSBgb24oXCJjb25uZWN0XCIpYCAvIGBvbihcImRpc2Nvbm5lY3RcIiwgcmVhc29uKWAgdG8gb2JzZXJ2ZSB0aGVtLlxuICAgKiBUaGUgYGRpc2Nvbm5lY3RgIGxpc3RlbmVyIHJlY2VpdmVzIGFuIGBFcnJvcmAgcmVhc29uOiBlaXRoZXIgdGhlXG4gICAqIHVuZGVybHlpbmcgc29ja2V0IGVycm9yLCBvciBgRXJyb3IoXCJCZWFjb24gYnJva2VyIGRpc2Nvbm5lY3RlZFwiKWBcbiAgICogd2hlbiB0aGUgY2xvc2UgaGFkIG5vIHByZWNlZGluZyBlcnJvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHRocm93IG5ldyBFcnJvcihcIkJlYWNvbkNsaWVudCBoYXMgYmVlbiBjbG9zZWRcIilcbiAgICBpZiAodGhpcy5fY29ubmVjdFByb21pc2UpIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0UHJvbWlzZVxuXG4gICAgdGhpcy5fY29ubmVjdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBvbkNvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKFwiY29ubmVjdFwiLCBvbkNvbm5lY3QpXG4gICAgICAgIHRoaXMub2ZmKFwiY29ubmVjdC1lcnJvclwiLCBvbkVycm9yKVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9uRXJyb3IgPSAoLyoqIEB0eXBlIHtFcnJvcn0gKi8gZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoXCJjb25uZWN0XCIsIG9uQ29ubmVjdClcbiAgICAgICAgdGhpcy5vZmYoXCJjb25uZWN0LWVycm9yXCIsIG9uRXJyb3IpXG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5vbihcImNvbm5lY3RcIiwgb25Db25uZWN0KVxuICAgICAgdGhpcy5vbihcImNvbm5lY3QtZXJyb3JcIiwgb25FcnJvcilcbiAgICB9KVxuXG4gICAgdGhpcy5fb3BlblNvY2tldCgpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdFByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhZnRlciB0aGUgQmVhY29uIGRhZW1vbiBoYXMgYWNrbm93bGVkZ2VkIHRoaXMgcGVlcidzXG4gICAqIGhlbGxvIGhhbmRzaGFrZS4gVGhpcyBpcyBzdHJvbmdlciB0aGFuIGBpc0Nvbm5lY3RlZCgpYDogY29ubmVjdGVkXG4gICAqIG1lYW5zIHRoZSBUQ1Agc29ja2V0IGlzIG9wZW4sIHJlYWR5IG1lYW5zIHRoZSBkYWVtb24gaGFzIHJlZ2lzdGVyZWRcbiAgICogdGhlIHBlZXIgYW5kIGJyb2FkY2FzdHMgY2FuIGJlIHJvdXRlZCB0aHJvdWdoIHRoZSBidXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc10gLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MudGltZW91dE1zXSAtIE9wdGlvbmFsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHdhaXRGb3JSZWFkeSh7dGltZW91dE1zfSA9IHt9KSB7XG4gICAgaWYgKHRoaXMuX3JlYWR5KSByZXR1cm5cblxuICAgIC8qKlxuICAgICAqIENsZWFucyB1cCB0aGUgcmVhZHkgbGlzdGVuZXIgYW5kIHRpbWVvdXQuXG4gICAgICogQHR5cGUgeygpID0+IHZvaWR9XG4gICAgICovXG4gICAgbGV0IGNsZWFudXAgPSAoKSA9PiB7fVxuICAgIGNvbnN0IHJlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBvblJlYWR5ID0gKCkgPT4ge1xuICAgICAgICBjbGVhbnVwKClcbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9XG5cbiAgICAgIGNsZWFudXAgPSAoKSA9PiB0aGlzLm9mZihcInJlYWR5XCIsIG9uUmVhZHkpXG4gICAgICB0aGlzLm9uKFwicmVhZHlcIiwgb25SZWFkeSlcbiAgICB9KVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgdGltZW91dE1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGF3YWl0IHRpbWVvdXQoe3RpbWVvdXQ6IHRpbWVvdXRNc30sIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCByZWFkeVByb21pc2VcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHJlYWR5UHJvbWlzZVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjbGVhbnVwKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaGVzIGEgYnJvYWRjYXN0IG1lc3NhZ2UgdG8gYWxsIHBlZXJzIChpbmNsdWRpbmcgdGhpcyBvbmUsXG4gICAqIHVubGVzcyB0aGUgZGFlbW9uIGlzIHJlc3RhcnRlZCBtaWQtcHVibGlzaCkuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQnJvYWRjYXN0IGFyZ3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgPz59IGFyZ3MuYnJvYWRjYXN0UGFyYW1zIC0gUm91dGluZyBwYXJhbXMuXG4gICAqIEBwYXJhbSB7P30gYXJncy5ib2R5IC0gTWVzc2FnZSBib2R5LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBUcnVlIGlmIHRoZSBwdWJsaXNoIHdhcyB3cml0dGVuIHRvIHRoZSBzb2NrZXQuIEZhbHNlIGlmIHRoZSBjbGllbnQgaXMgY3VycmVudGx5IGRpc2Nvbm5lY3RlZC5cbiAgICovXG4gIHB1Ymxpc2goe2NoYW5uZWwsIGJyb2FkY2FzdFBhcmFtcywgYm9keX0pIHtcbiAgICBpZiAoIXRoaXMuX2Nvbm5lY3RlZCB8fCAhdGhpcy5fanNvblNvY2tldCkgcmV0dXJuIGZhbHNlXG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlLlxuICAgICAqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJlYWNvbkJyb2FkY2FzdE1lc3NhZ2V9ICovXG4gICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgIHR5cGU6IFwiYnJvYWRjYXN0XCIsXG4gICAgICBjaGFubmVsLFxuICAgICAgYnJvYWRjYXN0UGFyYW1zLFxuICAgICAgYm9keSxcbiAgICAgIG9yaWdpblBlZXJJZDogdGhpcy5wZWVySWRcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fanNvblNvY2tldC5zZW5kKG1lc3NhZ2UpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGhhbmRsZXIgY2FsbGVkIG9uY2UgZm9yIGV2ZXJ5IGBicm9hZGNhc3RgIG1lc3NhZ2VcbiAgICogcmVjZWl2ZWQgZnJvbSB0aGUgZGFlbW9uIChpbmNsdWRpbmcgZWNob2VzIG9mIHRoaXMgY2xpZW50J3Mgb3duXG4gICAqIHB1Ymxpc2hlcyDigJQgc3luYXBzZS1zdHlsZSBmYW4tb3V0KS5cbiAgICogQHBhcmFtIHtCZWFjb25Ccm9hZGNhc3RIYW5kbGVyfSBoYW5kbGVyIC0gSGFuZGxlci5cbiAgICogQHJldHVybnMgeygpID0+IHZvaWR9IC0gVW5yZWdpc3RlciBmdW5jdGlvbi5cbiAgICovXG4gIG9uQnJvYWRjYXN0KGhhbmRsZXIpIHtcbiAgICB0aGlzLm9uKFwiYnJvYWRjYXN0XCIsIGhhbmRsZXIpXG4gICAgcmV0dXJuICgpID0+IHRoaXMub2ZmKFwiYnJvYWRjYXN0XCIsIGhhbmRsZXIpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjbG9zZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgb25jZSB0aGUgc29ja2V0IGlzIGNsb3NlZC5cbiAgICovXG4gIGFzeW5jIGNsb3NlKCkge1xuICAgIHRoaXMuX2Nsb3NlZCA9IHRydWVcblxuICAgIGlmICh0aGlzLl9yZWNvbm5lY3RUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3JlY29ubmVjdFRpbWVyKVxuICAgICAgdGhpcy5fcmVjb25uZWN0VGltZXIgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBzb2NrZXQgPSB0aGlzLl9zb2NrZXRcblxuICAgIGlmICghc29ja2V0KSByZXR1cm5cblxuICAgIHRoaXMuX3NvY2tldCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuX2pzb25Tb2NrZXQgPSB1bmRlZmluZWRcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSByZXR1cm5cblxuICAgIGF3YWl0IHRpbWVvdXQoe3RpbWVvdXQ6IHRoaXMuX2Nsb3NlVGltZW91dE1zfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgc29ja2V0Lm9uY2UoXCJjbG9zZVwiLCAoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpXG4gICAgICAgIHNvY2tldC5lbmQoKVxuICAgICAgICBzb2NrZXQuZGVzdHJveVNvb24oKVxuICAgICAgfSlcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIG9wZW4gc29ja2V0LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIF9vcGVuU29ja2V0KCkge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHJldHVyblxuXG4gICAgY29uc3Qgc29ja2V0ID0gbmV0LmNyZWF0ZUNvbm5lY3Rpb24oe2hvc3Q6IHRoaXMuaG9zdCwgcG9ydDogdGhpcy5wb3J0fSlcbiAgICB0aGlzLl9zb2NrZXQgPSBzb2NrZXRcbiAgICBjb25zdCBqc29uU29ja2V0ID0gbmV3IEpzb25Tb2NrZXQoc29ja2V0KVxuICAgIHRoaXMuX2pzb25Tb2NrZXQgPSBqc29uU29ja2V0XG5cbiAgICBzb2NrZXQub24oXCJjb25uZWN0XCIsICgpID0+IHtcbiAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IHRydWVcbiAgICAgIHRoaXMuX3JlYWR5ID0gZmFsc2VcbiAgICAgIHRoaXMuX3JlY29ubmVjdERlbGF5TXMgPSB0aGlzLl9pbml0aWFsUmVjb25uZWN0RGVsYXlNc1xuXG4gICAgICBqc29uU29ja2V0LnNlbmQoe1xuICAgICAgICB0eXBlOiBcImhlbGxvXCIsXG4gICAgICAgIHJvbGU6IFwiY2xpZW50XCIsXG4gICAgICAgIHBlZXJJZDogdGhpcy5wZWVySWQsXG4gICAgICAgIHBlZXJUeXBlOiB0aGlzLnBlZXJUeXBlXG4gICAgICB9KVxuXG4gICAgICB0aGlzLmVtaXQoXCJjb25uZWN0XCIpXG4gICAgfSlcblxuICAgIGpzb25Tb2NrZXQub24oXCJtZXNzYWdlXCIsICgvKiogQHR5cGUge2ltcG9ydChcIi4vdHlwZXMuanNcIikuQmVhY29uU29ja2V0TWVzc2FnZX0gKi8gbWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2U/LnR5cGUgPT09IFwiaGVsbG8tYWNrXCIgJiYgbWVzc2FnZS5wZWVySWQgPT09IHRoaXMucGVlcklkKSB7XG4gICAgICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZVxuICAgICAgICB0aGlzLmVtaXQoXCJyZWFkeVwiKVxuICAgICAgfSBlbHNlIGlmIChtZXNzYWdlPy50eXBlID09PSBcImJyb2FkY2FzdFwiKSB7XG4gICAgICAgIHRoaXMuZW1pdChcImJyb2FkY2FzdFwiLCBtZXNzYWdlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBqc29uU29ja2V0Lm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Nvbm5lY3RlZCkge1xuICAgICAgICAvLyBJbml0aWFsIGNvbm5lY3QgZmFpbGVkIOKAlCBzdXJmYWNlIHRvIGBjb25uZWN0KClgJ3MgcHJvbWlzZSB2aWEgYGNvbm5lY3QtZXJyb3JgLlxuICAgICAgICAvLyBObyBgZXJyb3JgIGVtaXQ6IHRoYXQgY2hhbm5lbCBpcyBmb3IgZXN0YWJsaXNoZWQtc2Vzc2lvbiBlcnJvcnM7IHRoZVxuICAgICAgICAvLyBpbml0aWFsLWNvbm5lY3QgcGF0aCBpcyBvd25lZCBieSBgY29ubmVjdC1lcnJvcmAuXG4gICAgICAgIHRoaXMuZW1pdChcImNvbm5lY3QtZXJyb3JcIiwgZXJyb3IpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBFc3RhYmxpc2hlZCBzZXNzaW9uIGVycm9yLiBDYWNoZSBzbyB0aGUgdXBjb21pbmcgYGNsb3NlYCBldmVudCBjYW5cbiAgICAgICAgLy8gc3VyZmFjZSBpdCBhcyB0aGUgZGlzY29ubmVjdCByZWFzb24uXG4gICAgICAgIHRoaXMuX2xhc3RTb2NrZXRFcnJvciA9IGVycm9yXG4gICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycm9yKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBqc29uU29ja2V0Lm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgd2FzQ29ubmVjdGVkID0gdGhpcy5fY29ubmVjdGVkXG5cbiAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlXG4gICAgICB0aGlzLl9yZWFkeSA9IGZhbHNlXG4gICAgICB0aGlzLl9qc29uU29ja2V0ID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLl9zb2NrZXQgPSB1bmRlZmluZWRcblxuICAgICAgLy8gRXhwbGljaXQgY2xvc2UoKSBzZXRzIGBfY2xvc2VkID0gdHJ1ZWAgYmVmb3JlIGVuZGluZyB0aGUgc29ja2V0LlxuICAgICAgLy8gRG9uJ3Qgc3VyZmFjZSB1c2VyLWluaXRpYXRlZCB0ZWFyZG93biBhcyBhIGRpc2Nvbm5lY3QgXCJlcnJvclwiIOKAlFxuICAgICAgLy8gb25seSBuZXR3b3JrLWRyaXZlbiBkcm9wcyBzaG91bGQgYmUgcmVwb3J0ZWQuXG4gICAgICBpZiAod2FzQ29ubmVjdGVkICYmICF0aGlzLl9jbG9zZWQpIHtcbiAgICAgICAgY29uc3QgcmVhc29uID0gdGhpcy5fbGFzdFNvY2tldEVycm9yIHx8IG5ldyBFcnJvcihcIkJlYWNvbiBicm9rZXIgZGlzY29ubmVjdGVkXCIpXG5cbiAgICAgICAgdGhpcy5lbWl0KFwiZGlzY29ubmVjdFwiLCByZWFzb24pXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xhc3RTb2NrZXRFcnJvciA9IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodGhpcy5fY2xvc2VkKSByZXR1cm5cblxuICAgICAgdGhpcy5fc2NoZWR1bGVSZWNvbm5lY3QoKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzY2hlZHVsZSByZWNvbm5lY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgX3NjaGVkdWxlUmVjb25uZWN0KCkge1xuICAgIGlmICh0aGlzLl9yZWNvbm5lY3RUaW1lcikgcmV0dXJuXG5cbiAgICBjb25zdCBkZWxheSA9IHRoaXMuX3JlY29ubmVjdERlbGF5TXNcblxuICAgIHRoaXMuX3JlY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWNvbm5lY3RUaW1lciA9IHVuZGVmaW5lZFxuICAgICAgdGhpcy5fcmVjb25uZWN0RGVsYXlNcyA9IE1hdGgubWluKGRlbGF5ICogMiwgdGhpcy5fbWF4UmVjb25uZWN0RGVsYXlNcylcbiAgICAgIHRoaXMuX29wZW5Tb2NrZXQoKVxuICAgIH0sIGRlbGF5KVxuICB9XG59XG4iXX0=
312
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JlYWNvbi9jbGllbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDdEMsT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFBO0FBQzFCLE9BQU8sT0FBTyxNQUFNLDJCQUEyQixDQUFBO0FBRS9DLE9BQU8sVUFBVSxNQUFNLG1DQUFtQyxDQUFBO0FBQzFELE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBRXBEOzs7R0FHRztBQUNILE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFBO0FBQ3ZDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFBO0FBQ3JDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFBO0FBRXJDOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sWUFBYSxTQUFRLFlBQVk7SUFDcEQ7Ozs7Ozs7Ozs7T0FVRztJQUNILFlBQVksRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFDO1FBQy9GLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksVUFBVSxFQUFFLENBQUE7UUFDcEMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLGdCQUFnQixJQUFJLDBCQUEwQixDQUFBO1FBQzlFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxtQkFBbUIsSUFBSSxzQkFBc0IsQ0FBQTtRQUN6RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxD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Q0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUE7WUFFakMsSUFBSSxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFNO1lBRXhCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1FBQzNCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTTtRQUVoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUE7UUFFcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFBO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7WUFDdkUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3BCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNYLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3JhbmRvbVVVSUR9IGZyb20gXCJub2RlOmNyeXB0b1wiXG5pbXBvcnQgbmV0IGZyb20gXCJub2RlOm5ldFwiXG5pbXBvcnQgdGltZW91dCBmcm9tIFwiYXdhaXRlcnkvYnVpbGQvdGltZW91dC5qc1wiXG5cbmltcG9ydCBKc29uU29ja2V0IGZyb20gXCIuLi9iYWNrZ3JvdW5kLWpvYnMvanNvbi1zb2NrZXQuanNcIlxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiLi4vdXRpbHMvZXZlbnQtZW1pdHRlci5qc1wiXG5cbi8qKlxuICogQmVhY29uQnJvYWRjYXN0SGFuZGxlciB0eXBlLlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKGltcG9ydChcIi4vdHlwZXMuanNcIikuQmVhY29uQnJvYWRjYXN0TWVzc2FnZSk6IHZvaWR9IEJlYWNvbkJyb2FkY2FzdEhhbmRsZXJcbiAqL1xuY29uc3QgREVGQVVMVF9SRUNPTk5FQ1RfREVMQVlfTVMgPSAxMDAwXG5jb25zdCBNQVhfUkVDT05ORUNUX0RFTEFZX01TID0gMzBfMDAwXG5jb25zdCBERUZBVUxUX0NMT1NFX1RJTUVPVVRfTVMgPSAxMDAwXG5cbi8qKlxuICogQmVhY29uQ2xpZW50IGNvbm5lY3RzIHRvIGEgYHZlbG9jaW91cyBiZWFjb25gIGRhZW1vbiBhbmQgZXhjaGFuZ2VzXG4gKiBicm9hZGNhc3RzIHdpdGggYWxsIHBlZXIgcHJvY2Vzc2VzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBkYWVtb24uXG4gKlxuICogTGlmZWN5Y2xlOlxuICogICBjb25zdCBjbGllbnQgPSBuZXcgQmVhY29uQ2xpZW50KHtob3N0LCBwb3J0LCBwZWVyVHlwZTogXCJzZXJ2ZXJcIn0pXG4gKiAgIGF3YWl0IGNsaWVudC5jb25uZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZXMgb24gZmlyc3Qgc3VjY2Vzc2Z1bCBjb25uZWN0XG4gKiAgIGF3YWl0IGNsaWVudC53YWl0Rm9yUmVhZHkoe3RpbWVvdXRNczogMTAwMH0pICAgLy8gcmVzb2x2ZXMgYWZ0ZXIgdGhlIGRhZW1vbiBoZWxsby1hY2tcbiAqICAgY2xpZW50Lm9uQnJvYWRjYXN0KChtZXNzYWdlKSA9PiB7IC4uLiB9KSAgICAgICAvLyBldmVyeSBmYW4tb3V0XG4gKiAgIGNsaWVudC5wdWJsaXNoKHtjaGFubmVsLCBicm9hZGNhc3RQYXJhbXMsIGJvZHl9KVxuICogICBhd2FpdCBjbGllbnQuY2xvc2UoKVxuICpcbiAqIFJlY29ubmVjdDogb24gc29ja2V0IGNsb3NlICh3aXRob3V0IGFuIGV4cGxpY2l0IGBjbG9zZSgpYCBjYWxsKSB0aGVcbiAqIGNsaWVudCBzY2hlZHVsZXMgYSByZWNvbm5lY3Qgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLiBXaGlsZSB0aGVcbiAqIHVuZGVybHlpbmcgc29ja2V0IGlzIGRvd24sIGBwdWJsaXNoKC4uLilgIHJldHVybnMgZmFsc2UgYW5kIHRoZVxuICogY2FsbGVyIGNhbiBmYWxsIGJhY2sgdG8gbG9jYWwtb25seSBkZWxpdmVyeTsgc3Vic2VxdWVudCByZWNvbm5lY3RzIGRvXG4gKiBub3QgcmVwbGF5IG1pc3NlZCBwdWJsaXNoZXMgKEJlYWNvbiBpcyBwdWJzdWIsIG5vdCBhIHF1ZXVlKS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmVhY29uQ2xpZW50IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuaG9zdCAtIEJlYWNvbiBob3N0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5wb3J0IC0gQmVhY29uIHBvcnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5wZWVyVHlwZV0gLSBPcHRpb25hbCBodW1hbi1yZWFkYWJsZSBwZWVyIGxhYmVsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MucGVlcklkXSAtIE9wdGlvbmFsIGV4cGxpY2l0IHBlZXIgaWQgKGRlZmF1bHRzIHRvIGEgcmFuZG9tIFVVSUQpLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MucmVjb25uZWN0RGVsYXlNc10gLSBTdGFydGluZyByZWNvbm5lY3QgZGVsYXkgaW4gbXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhSZWNvbm5lY3REZWxheU1zXSAtIE1heGltdW0gcmVjb25uZWN0IGRlbGF5IGluIG1zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MuY2xvc2VUaW1lb3V0TXNdIC0gTWF4aW11bSBncmFjZWZ1bCBzb2NrZXQgY2xvc2Ugd2FpdCBpbiBtcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtob3N0LCBwb3J0LCBwZWVyVHlwZSwgcGVlcklkLCByZWNvbm5lY3REZWxheU1zLCBtYXhSZWNvbm5lY3REZWxheU1zLCBjbG9zZVRpbWVvdXRNc30pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5ob3N0ID0gaG9zdFxuICAgIHRoaXMucG9ydCA9IHBvcnRcbiAgICB0aGlzLnBlZXJUeXBlID0gcGVlclR5cGVcbiAgICB0aGlzLnBlZXJJZCA9IHBlZXJJZCB8fCByYW5kb21VVUlEKClcbiAgICB0aGlzLl9pbml0aWFsUmVjb25uZWN0RGVsYXlNcyA9IHJlY29ubmVjdERlbGF5TXMgPz8gREVGQVVMVF9SRUNPTk5FQ1RfREVMQVlfTVNcbiAgICB0aGlzLl9tYXhSZWNvbm5lY3REZWxheU1zID0gbWF4UmVjb25uZWN0RGVsYXlNcyA/PyBNQVhfUkVDT05ORUNUX0RFTEFZX01TXG4gICAgdGhpcy5fcmVjb25uZWN0RGVsYXlNcyA9IHRoaXMuX2luaXRpYWxSZWNvbm5lY3REZWxheU1zXG4gICAgdGhpcy5fY2xvc2VUaW1lb3V0TXMgPSBjbG9zZVRpbWVvdXRNcyA/PyBERUZBVUxUX0NMT1NFX1RJTUVPVVRfTVNcbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge0pzb25Tb2NrZXQgfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5fanNvblNvY2tldCA9IHVuZGVmaW5lZFxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7bmV0LlNvY2tldCB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLl9zb2NrZXQgPSB1bmRlZmluZWRcbiAgICB0aGlzLl9jb25uZWN0ZWQgPSBmYWxzZVxuICAgIHRoaXMuX3JlYWR5ID0gZmFsc2VcbiAgICB0aGlzLl9jbG9zZWQgPSBmYWxzZVxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5fcmVjb25uZWN0VGltZXIgPSB1bmRlZmluZWRcbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge1Byb21pc2U8dm9pZD4gfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5fY29ubmVjdFByb21pc2UgPSB1bmRlZmluZWRcbiAgICAvKipcbiAgICAgKiBMYXN0IHNvY2tldCBlcnJvciBvYnNlcnZlZCB3aGlsZSBjb25uZWN0ZWQsIHN1cmZhY2VkIGFzIHRoZSBkaXNjb25uZWN0IHJlYXNvbi5cbiAgICAgKiBAdHlwZSB7RXJyb3IgfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5fbGFzdFNvY2tldEVycm9yID0gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgcGVlciBpZC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgcGVlciBpZCBzZW50IG9uIHRoZSBoZWxsbyBoYW5kc2hha2UuXG4gICAqL1xuICBnZXRQZWVySWQoKSB7IHJldHVybiB0aGlzLnBlZXJJZCB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgaXMgY29ubmVjdGVkLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBpcyBjdXJyZW50bHkgY29ubmVjdGVkLlxuICAgKi9cbiAgaXNDb25uZWN0ZWQoKSB7IHJldHVybiB0aGlzLl9jb25uZWN0ZWQgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGlzIHJlYWR5LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBkYWVtb24gaGFzIGFja25vd2xlZGdlZCB0aGlzIHBlZXIgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgaXNSZWFkeSgpIHsgcmV0dXJuIHRoaXMuX3JlYWR5IH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgb24gdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgY29ubmVjdC4gU3Vic2VxdWVudCBjYWxscyByZXR1cm5cbiAgICogdGhlIHNhbWUgcHJvbWlzZS4gU3Vic2VxdWVudCByZWNvbm5lY3RzIGFmdGVyIGEgZHJvcCBhcmUgc2lsZW50IOKAlFxuICAgKiB1c2UgYG9uKFwiY29ubmVjdFwiKWAgLyBgb24oXCJkaXNjb25uZWN0XCIsIHJlYXNvbilgIHRvIG9ic2VydmUgdGhlbS5cbiAgICogVGhlIGBkaXNjb25uZWN0YCBsaXN0ZW5lciByZWNlaXZlcyBhbiBgRXJyb3JgIHJlYXNvbjogZWl0aGVyIHRoZVxuICAgKiB1bmRlcmx5aW5nIHNvY2tldCBlcnJvciwgb3IgYEVycm9yKFwiQmVhY29uIGJyb2tlciBkaXNjb25uZWN0ZWRcIilgXG4gICAqIHdoZW4gdGhlIGNsb3NlIGhhZCBubyBwcmVjZWRpbmcgZXJyb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgY29ubmVjdCgpIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB0aHJvdyBuZXcgRXJyb3IoXCJCZWFjb25DbGllbnQgaGFzIGJlZW4gY2xvc2VkXCIpXG4gICAgaWYgKHRoaXMuX2Nvbm5lY3RQcm9taXNlKSByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdFByb21pc2VcblxuICAgIHRoaXMuX2Nvbm5lY3RQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgb25Db25uZWN0ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLm9mZihcImNvbm5lY3RcIiwgb25Db25uZWN0KVxuICAgICAgICB0aGlzLm9mZihcImNvbm5lY3QtZXJyb3JcIiwgb25FcnJvcilcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9XG4gICAgICBjb25zdCBvbkVycm9yID0gKC8qKiBAdHlwZSB7RXJyb3J9ICovIGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKFwiY29ubmVjdFwiLCBvbkNvbm5lY3QpXG4gICAgICAgIHRoaXMub2ZmKFwiY29ubmVjdC1lcnJvclwiLCBvbkVycm9yKVxuICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIHRoaXMub24oXCJjb25uZWN0XCIsIG9uQ29ubmVjdClcbiAgICAgIHRoaXMub24oXCJjb25uZWN0LWVycm9yXCIsIG9uRXJyb3IpXG4gICAgfSlcblxuICAgIHRoaXMuX29wZW5Tb2NrZXQoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Nvbm5lY3RQcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYWZ0ZXIgdGhlIEJlYWNvbiBkYWVtb24gaGFzIGFja25vd2xlZGdlZCB0aGlzIHBlZXInc1xuICAgKiBoZWxsbyBoYW5kc2hha2UuIFRoaXMgaXMgc3Ryb25nZXIgdGhhbiBgaXNDb25uZWN0ZWQoKWA6IGNvbm5lY3RlZFxuICAgKiBtZWFucyB0aGUgVENQIHNvY2tldCBpcyBvcGVuLCByZWFkeSBtZWFucyB0aGUgZGFlbW9uIGhhcyByZWdpc3RlcmVkXG4gICAqIHRoZSBwZWVyIGFuZCBicm9hZGNhc3RzIGNhbiBiZSByb3V0ZWQgdGhyb3VnaCB0aGUgYnVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLnRpbWVvdXRNc10gLSBPcHRpb25hbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyB3YWl0Rm9yUmVhZHkoe3RpbWVvdXRNc30gPSB7fSkge1xuICAgIGlmICh0aGlzLl9yZWFkeSkgcmV0dXJuXG5cbiAgICAvKipcbiAgICAgKiBDbGVhbnMgdXAgdGhlIHJlYWR5IGxpc3RlbmVyIGFuZCB0aW1lb3V0LlxuICAgICAqIEB0eXBlIHsoKSA9PiB2b2lkfVxuICAgICAqL1xuICAgIGxldCBjbGVhbnVwID0gKCkgPT4ge31cbiAgICBjb25zdCByZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3Qgb25SZWFkeSA9ICgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpXG4gICAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgfVxuXG4gICAgICBjbGVhbnVwID0gKCkgPT4gdGhpcy5vZmYoXCJyZWFkeVwiLCBvblJlYWR5KVxuICAgICAgdGhpcy5vbihcInJlYWR5XCIsIG9uUmVhZHkpXG4gICAgfSlcblxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHRpbWVvdXRNcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBhd2FpdCB0aW1lb3V0KHt0aW1lb3V0OiB0aW1lb3V0TXN9LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcmVhZHlQcm9taXNlXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCByZWFkeVByb21pc2VcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xlYW51cCgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlcyBhIGJyb2FkY2FzdCBtZXNzYWdlIHRvIGFsbCBwZWVycyAoaW5jbHVkaW5nIHRoaXMgb25lLFxuICAgKiB1bmxlc3MgdGhlIGRhZW1vbiBpcyByZXN0YXJ0ZWQgbWlkLXB1Ymxpc2gpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEJyb2FkY2FzdCBhcmdzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBhcmdzLmJyb2FkY2FzdFBhcmFtcyAtIFJvdXRpbmcgcGFyYW1zLlxuICAgKiBAcGFyYW0gez99IGFyZ3MuYm9keSAtIE1lc3NhZ2UgYm9keS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gVHJ1ZSBpZiB0aGUgcHVibGlzaCB3YXMgd3JpdHRlbiB0byB0aGUgc29ja2V0LiBGYWxzZSBpZiB0aGUgY2xpZW50IGlzIGN1cnJlbnRseSBkaXNjb25uZWN0ZWQuXG4gICAqL1xuICBwdWJsaXNoKHtjaGFubmVsLCBicm9hZGNhc3RQYXJhbXMsIGJvZHl9KSB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0ZWQgfHwgIXRoaXMuX2pzb25Tb2NrZXQpIHJldHVybiBmYWxzZVxuXG4gICAgLyoqXG4gICAgICogTWVzc2FnZS5cbiAgICAgKiBAdHlwZSB7aW1wb3J0KFwiLi90eXBlcy5qc1wiKS5CZWFjb25Ccm9hZGNhc3RNZXNzYWdlfSAqL1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICB0eXBlOiBcImJyb2FkY2FzdFwiLFxuICAgICAgY2hhbm5lbCxcbiAgICAgIGJyb2FkY2FzdFBhcmFtcyxcbiAgICAgIGJvZHksXG4gICAgICBvcmlnaW5QZWVySWQ6IHRoaXMucGVlcklkXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2pzb25Tb2NrZXQuc2VuZChtZXNzYWdlKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBoYW5kbGVyIGNhbGxlZCBvbmNlIGZvciBldmVyeSBgYnJvYWRjYXN0YCBtZXNzYWdlXG4gICAqIHJlY2VpdmVkIGZyb20gdGhlIGRhZW1vbiAoaW5jbHVkaW5nIGVjaG9lcyBvZiB0aGlzIGNsaWVudCdzIG93blxuICAgKiBwdWJsaXNoZXMg4oCUIHN5bmFwc2Utc3R5bGUgZmFuLW91dCkuXG4gICAqIEBwYXJhbSB7QmVhY29uQnJvYWRjYXN0SGFuZGxlcn0gaGFuZGxlciAtIEhhbmRsZXIuXG4gICAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfSAtIFVucmVnaXN0ZXIgZnVuY3Rpb24uXG4gICAqL1xuICBvbkJyb2FkY2FzdChoYW5kbGVyKSB7XG4gICAgdGhpcy5vbihcImJyb2FkY2FzdFwiLCBoYW5kbGVyKVxuICAgIHJldHVybiAoKSA9PiB0aGlzLm9mZihcImJyb2FkY2FzdFwiLCBoYW5kbGVyKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY2xvc2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIG9uY2UgdGhlIHNvY2tldCBpcyBjbG9zZWQuXG4gICAqL1xuICBhc3luYyBjbG9zZSgpIHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlXG5cbiAgICBpZiAodGhpcy5fcmVjb25uZWN0VGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZWNvbm5lY3RUaW1lcilcbiAgICAgIHRoaXMuX3JlY29ubmVjdFRpbWVyID0gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3Qgc29ja2V0ID0gdGhpcy5fc29ja2V0XG5cbiAgICBpZiAoIXNvY2tldCkgcmV0dXJuXG5cbiAgICB0aGlzLl9zb2NrZXQgPSB1bmRlZmluZWRcbiAgICB0aGlzLl9qc29uU29ja2V0ID0gdW5kZWZpbmVkXG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkgcmV0dXJuXG5cbiAgICBhd2FpdCB0aW1lb3V0KHt0aW1lb3V0OiB0aGlzLl9jbG9zZVRpbWVvdXRNc30sIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHNvY2tldC5vbmNlKFwiY2xvc2VcIiwgKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpKVxuICAgICAgICBzb2NrZXQuZW5kKClcbiAgICAgICAgc29ja2V0LmRlc3Ryb3lTb29uKClcbiAgICAgIH0pXG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgc29ja2V0LmRlc3Ryb3koKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBvcGVuIHNvY2tldC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfb3BlblNvY2tldCgpIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHNvY2tldCA9IG5ldC5jcmVhdGVDb25uZWN0aW9uKHtob3N0OiB0aGlzLmhvc3QsIHBvcnQ6IHRoaXMucG9ydH0pXG4gICAgdGhpcy5fc29ja2V0ID0gc29ja2V0XG4gICAgY29uc3QganNvblNvY2tldCA9IG5ldyBKc29uU29ja2V0KHNvY2tldClcbiAgICB0aGlzLl9qc29uU29ja2V0ID0ganNvblNvY2tldFxuXG4gICAgc29ja2V0Lm9uKFwiY29ubmVjdFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0ZWQgPSB0cnVlXG4gICAgICB0aGlzLl9yZWFkeSA9IGZhbHNlXG4gICAgICB0aGlzLl9yZWNvbm5lY3REZWxheU1zID0gdGhpcy5faW5pdGlhbFJlY29ubmVjdERlbGF5TXNcblxuICAgICAganNvblNvY2tldC5zZW5kKHtcbiAgICAgICAgdHlwZTogXCJoZWxsb1wiLFxuICAgICAgICByb2xlOiBcImNsaWVudFwiLFxuICAgICAgICBwZWVySWQ6IHRoaXMucGVlcklkLFxuICAgICAgICBwZWVyVHlwZTogdGhpcy5wZWVyVHlwZVxuICAgICAgfSlcblxuICAgICAgdGhpcy5lbWl0KFwiY29ubmVjdFwiKVxuICAgIH0pXG5cbiAgICBqc29uU29ja2V0Lm9uKFwibWVzc2FnZVwiLCAoLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLkJlYWNvblNvY2tldE1lc3NhZ2V9ICovIG1lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlPy50eXBlID09PSBcImhlbGxvLWFja1wiICYmIG1lc3NhZ2UucGVlcklkID09PSB0aGlzLnBlZXJJZCkge1xuICAgICAgICB0aGlzLl9yZWFkeSA9IHRydWVcbiAgICAgICAgdGhpcy5lbWl0KFwicmVhZHlcIilcbiAgICAgIH0gZWxzZSBpZiAobWVzc2FnZT8udHlwZSA9PT0gXCJicm9hZGNhc3RcIikge1xuICAgICAgICB0aGlzLmVtaXQoXCJicm9hZGNhc3RcIiwgbWVzc2FnZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAganNvblNvY2tldC5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jb25uZWN0ZWQpIHtcbiAgICAgICAgLy8gSW5pdGlhbCBjb25uZWN0IGZhaWxlZCDigJQgc3VyZmFjZSB0byBgY29ubmVjdCgpYCdzIHByb21pc2UgdmlhIGBjb25uZWN0LWVycm9yYC5cbiAgICAgICAgLy8gTm8gYGVycm9yYCBlbWl0OiB0aGF0IGNoYW5uZWwgaXMgZm9yIGVzdGFibGlzaGVkLXNlc3Npb24gZXJyb3JzOyB0aGVcbiAgICAgICAgLy8gaW5pdGlhbC1jb25uZWN0IHBhdGggaXMgb3duZWQgYnkgYGNvbm5lY3QtZXJyb3JgLlxuICAgICAgICB0aGlzLmVtaXQoXCJjb25uZWN0LWVycm9yXCIsIGVycm9yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRXN0YWJsaXNoZWQgc2Vzc2lvbiBlcnJvci4gQ2FjaGUgc28gdGhlIHVwY29taW5nIGBjbG9zZWAgZXZlbnQgY2FuXG4gICAgICAgIC8vIHN1cmZhY2UgaXQgYXMgdGhlIGRpc2Nvbm5lY3QgcmVhc29uLlxuICAgICAgICB0aGlzLl9sYXN0U29ja2V0RXJyb3IgPSBlcnJvclxuICAgICAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuXG4gICAganNvblNvY2tldC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHdhc0Nvbm5lY3RlZCA9IHRoaXMuX2Nvbm5lY3RlZFxuXG4gICAgICB0aGlzLl9jb25uZWN0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5fcmVhZHkgPSBmYWxzZVxuICAgICAgdGhpcy5fanNvblNvY2tldCA9IHVuZGVmaW5lZFxuICAgICAgdGhpcy5fc29ja2V0ID0gdW5kZWZpbmVkXG5cbiAgICAgIC8vIEV4cGxpY2l0IGNsb3NlKCkgc2V0cyBgX2Nsb3NlZCA9IHRydWVgIGJlZm9yZSBlbmRpbmcgdGhlIHNvY2tldC5cbiAgICAgIC8vIERvbid0IHN1cmZhY2UgdXNlci1pbml0aWF0ZWQgdGVhcmRvd24gYXMgYSBkaXNjb25uZWN0IFwiZXJyb3JcIiDigJRcbiAgICAgIC8vIG9ubHkgbmV0d29yay1kcml2ZW4gZHJvcHMgc2hvdWxkIGJlIHJlcG9ydGVkLlxuICAgICAgaWYgKHdhc0Nvbm5lY3RlZCAmJiAhdGhpcy5fY2xvc2VkKSB7XG4gICAgICAgIGNvbnN0IHJlYXNvbiA9IHRoaXMuX2xhc3RTb2NrZXRFcnJvciB8fCBuZXcgRXJyb3IoXCJCZWFjb24gYnJva2VyIGRpc2Nvbm5lY3RlZFwiKVxuXG4gICAgICAgIHRoaXMuZW1pdChcImRpc2Nvbm5lY3RcIiwgcmVhc29uKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9sYXN0U29ja2V0RXJyb3IgPSB1bmRlZmluZWRcblxuICAgICAgaWYgKHRoaXMuX2Nsb3NlZCkgcmV0dXJuXG5cbiAgICAgIHRoaXMuX3NjaGVkdWxlUmVjb25uZWN0KClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2NoZWR1bGUgcmVjb25uZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIF9zY2hlZHVsZVJlY29ubmVjdCgpIHtcbiAgICBpZiAodGhpcy5fcmVjb25uZWN0VGltZXIpIHJldHVyblxuXG4gICAgY29uc3QgZGVsYXkgPSB0aGlzLl9yZWNvbm5lY3REZWxheU1zXG5cbiAgICB0aGlzLl9yZWNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVjb25uZWN0VGltZXIgPSB1bmRlZmluZWRcbiAgICAgIHRoaXMuX3JlY29ubmVjdERlbGF5TXMgPSBNYXRoLm1pbihkZWxheSAqIDIsIHRoaXMuX21heFJlY29ubmVjdERlbGF5TXMpXG4gICAgICB0aGlzLl9vcGVuU29ja2V0KClcbiAgICB9LCBkZWxheSlcbiAgfVxufVxuIl19
@@ -1,17 +1,3 @@
1
- /**
2
- * SQLite web persistence adapter.
3
- * @typedef {object} SqliteWebPersistence
4
- * @property {"indexeddb" | "localstorage" | "opfs"} name - Persistence backend name.
5
- * @property {() => Promise<void>} delete - Deletes the persisted database.
6
- * @property {() => Promise<Uint8Array | undefined>} load - Loads persisted database bytes.
7
- * @property {(content: Uint8Array) => Promise<void>} save - Saves persisted database bytes.
8
- */
9
- /**
10
- * Browser-like environment used for web persistence detection.
11
- * @typedef {object} SqliteWebPersistenceEnvironment
12
- * @property {unknown} [indexedDB] - IndexedDB global.
13
- * @property {unknown} [navigator] - Navigator global.
14
- */
15
1
  /**
16
2
  * Creates the best SQLite web persistence adapter supported by the current browser.
17
3
  * @param {object} args - Arguments.
@@ -1 +1 @@
1
- {"version":3,"file":"web-persistence.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/sqlite/web-persistence.js"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AAEH;;;;;GAKG;AAEH;;;;;;GAMG;AACH,0EAJG;IAAqB,YAAY,EAAzB,MAAM;IACiC,WAAW;CAC1D,GAAU,OAAO,CAAC,oBAAoB,CAAC,CAiBzC;AAED;;;;;;GAMG;AACH,2EAJG;IAAqB,YAAY,EAAzB,MAAM;IACiC,WAAW;CAC1D,GAAU,OAAO,CAAC,IAAI,CAAC,CAUzB;AAED;;;;GAIG;AACH,sDAHW,MAAM,GACJ,MAAM,CAMlB;;;;;;;;UA/Da,WAAW,GAAG,cAAc,GAAG,MAAM;;;;YACrC,MAAM,OAAO,CAAC,IAAI,CAAC;;;;UACnB,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;;;;UACrC,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC;;;;;;;;;gBAMtC,OAAO;;;;gBACP,OAAO"}
1
+ {"version":3,"file":"web-persistence.d.ts","sourceRoot":"","sources":["../../../../../src/database/drivers/sqlite/web-persistence.js"],"names":[],"mappings":"AAqBA;;;;;;GAMG;AACH,0EAJG;IAAqB,YAAY,EAAzB,MAAM;IACiC,WAAW;CAC1D,GAAU,OAAO,CAAC,oBAAoB,CAAC,CAiBzC;AAED;;;;;;GAMG;AACH,2EAJG;IAAqB,YAAY,EAAzB,MAAM;IACiC,WAAW;CAC1D,GAAU,OAAO,CAAC,IAAI,CAAC,CAUzB;AAED;;;;GAIG;AACH,sDAHW,MAAM,GACJ,MAAM,CAMlB;;;;;;;;UAhEa,WAAW,GAAG,cAAc,GAAG,MAAM;;;;YACrC,MAAM,OAAO,CAAC,IAAI,CAAC;;;;UACnB,MAAM,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;;;;UACrC,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC;;;;;;;;;gBAKtC,OAAO;;;;gBACP,OAAO"}
@@ -1,7 +1,5 @@
1
1
  // @ts-check
2
2
  import BetterLocalStorage from "better-localstorage";
3
- const SUPPORT_CHECK_FILE = ".velocious-opfs-support-check";
4
- const SUPPORT_CHECK_BYTES = new Uint8Array([118, 101, 108, 111, 99, 105, 111, 117, 115]);
5
3
  /**
6
4
  * SQLite web persistence adapter.
7
5
  * @typedef {object} SqliteWebPersistence
@@ -16,6 +14,8 @@ const SUPPORT_CHECK_BYTES = new Uint8Array([118, 101, 108, 111, 99, 105, 111, 11
16
14
  * @property {unknown} [indexedDB] - IndexedDB global.
17
15
  * @property {unknown} [navigator] - Navigator global.
18
16
  */
17
+ const SUPPORT_CHECK_FILE = ".velocious-opfs-support-check";
18
+ const SUPPORT_CHECK_BYTES = new Uint8Array([118, 101, 108, 111, 99, 105, 111, 117, 115]);
19
19
  /**
20
20
  * Creates the best SQLite web persistence adapter supported by the current browser.
21
21
  * @param {object} args - Arguments.
@@ -461,4 +461,4 @@ function sameBytes(left, right) {
461
461
  return false;
462
462
  return left.every((value, index) => value === right[index]);
463
463
  }
464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXBlcnNpc3RlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvc3FsaXRlL3dlYi1wZXJzaXN0ZW5jZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxrQkFBa0IsTUFBTSxxQkFBcUIsQ0FBQTtBQUVwRCxNQUFNLGtCQUFrQixHQUFHLCtCQUErQixDQUFBO0FBQzFELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFFeEY7Ozs7Ozs7R0FPRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FBQyxFQUFDLFlBQVksRUFBRSxXQUFXLEdBQUcsVUFBVSxFQUFDO0lBQ3ZGLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUE7SUFDM0UsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtJQUN4RSxNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQUMsRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtJQUVsRixNQUFNLG1CQUFtQixHQUFHLE1BQU0sMEJBQTBCLENBQUMsRUFBQyxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQTtJQUUzSSxNQUFNLHdCQUF3QixDQUFDO1FBQzdCLFlBQVk7UUFDWixzQkFBc0IsRUFBRSxtQkFBbUI7UUFDM0MsV0FBVztRQUNYLGtCQUFrQixFQUFFLENBQUMsdUJB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LE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtBQUNwQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQUs7SUFDNUIsT0FBTyxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFBO0FBQ2pFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLO0lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTlDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCZXR0ZXJMb2NhbFN0b3JhZ2UgZnJvbSBcImJldHRlci1sb2NhbHN0b3JhZ2VcIlxuXG5jb25zdCBTVVBQT1JUX0NIRUNLX0ZJTEUgPSBcIi52ZWxvY2lvdXMtb3Bmcy1zdXBwb3J0LWNoZWNrXCJcbmNvbnN0IFNVUFBPUlRfQ0hFQ0tfQllURVMgPSBuZXcgVWludDhBcnJheShbMTE4LCAxMDEsIDEwOCwgMTExLCA5OSwgMTA1LCAxMTEsIDExNywgMTE1XSlcblxuLyoqXG4gKiBTUUxpdGUgd2ViIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTcWxpdGVXZWJQZXJzaXN0ZW5jZVxuICogQHByb3BlcnR5IHtcImluZGV4ZWRkYlwiIHwgXCJsb2NhbHN0b3JhZ2VcIiB8IFwib3Bmc1wifSBuYW1lIC0gUGVyc2lzdGVuY2UgYmFja2VuZCBuYW1lLlxuICogQHByb3BlcnR5IHsoKSA9PiBQcm9taXNlPHZvaWQ+fSBkZWxldGUgLSBEZWxldGVzIHRoZSBwZXJzaXN0ZWQgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkgeygpID0+IFByb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IGxvYWQgLSBMb2FkcyBwZXJzaXN0ZWQgZGF0YWJhc2UgYnl0ZXMuXG4gKiBAcHJvcGVydHkgeyhjb250ZW50OiBVaW50OEFycmF5KSA9PiBQcm9taXNlPHZvaWQ+fSBzYXZlIC0gU2F2ZXMgcGVyc2lzdGVkIGRhdGFiYXNlIGJ5dGVzLlxuICovXG5cbi8qKlxuICogQnJvd3Nlci1saWtlIGVudmlyb25tZW50IHVzZWQgZm9yIHdlYiBwZXJzaXN0ZW5jZSBkZXRlY3Rpb24uXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50XG4gKiBAcHJvcGVydHkge3Vua25vd259IFtpbmRleGVkREJdIC0gSW5kZXhlZERCIGdsb2JhbC5cbiAqIEBwcm9wZXJ0eSB7dW5rbm93bn0gW25hdmlnYXRvcl0gLSBOYXZpZ2F0b3IgZ2xvYmFsLlxuICovXG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgYmVzdCBTUUxpdGUgd2ViIHBlcnNpc3RlbmNlIGFkYXB0ZXIgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGJyb3dzZXIuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmRhdGFiYXNlTmFtZSAtIERhdGFiYXNlIG5hbWUuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IFthcmdzLmVudmlyb25tZW50XSAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFNxbGl0ZVdlYlBlcnNpc3RlbmNlPn0gLSBTZWxlY3RlZCBwZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3FsaXRlV2ViUGVyc2lzdGVuY2Uoe2RhdGFiYXNlTmFtZSwgZW52aXJvbm1lbnQgPSBnbG9iYWxUaGlzfSkge1xuICBjb25zdCBsb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZSA9IG5ldyBMb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lfSlcbiAgY29uc3Qgb3Bmc1BlcnNpc3RlbmNlID0gbmV3IE9wZnNQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lLCBlbnZpcm9ubWVudH0pXG4gIGNvbnN0IGluZGV4ZWREYlBlcnNpc3RlbmNlID0gbmV3IEluZGV4ZWREYlBlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSlcblxuICBjb25zdCBzZWxlY3RlZFBlcnNpc3RlbmNlID0gYXdhaXQgc2VsZWN0U3VwcG9ydGVkUGVyc2lzdGVuY2Uoe2Vudmlyb25tZW50LCBpbmRleGVkRGJQZXJzaXN0ZW5jZSwgbG9jYWxTdG9yYWdlUGVyc2lzdGVuY2UsIG9wZnNQZXJzaXN0ZW5jZX0pXG5cbiAgYXdhaXQgbWlncmF0ZVBlcnNpc3RlZERhdGFiYXNlKHtcbiAgICBkYXRhYmFzZU5hbWUsXG4gICAgZGVzdGluYXRpb25QZXJzaXN0ZW5jZTogc2VsZWN0ZWRQZXJzaXN0ZW5jZSxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBzb3VyY2VQZXJzaXN0ZW5jZXM6IFtsb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZSwgaW5kZXhlZERiUGVyc2lzdGVuY2UsIG9wZnNQZXJzaXN0ZW5jZV1cbiAgfSlcblxuICByZXR1cm4gc2VsZWN0ZWRQZXJzaXN0ZW5jZVxufVxuXG4vKipcbiAqIERlbGV0ZXMgU1FMaXRlIHdlYiBkYXRhYmFzZSBieXRlcyBmcm9tIGV2ZXJ5IGF2YWlsYWJsZSBwZXJzaXN0ZW5jZSBiYWNrZW5kLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5kYXRhYmFzZU5hbWUgLSBEYXRhYmFzZSBuYW1lLlxuICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBbYXJncy5lbnZpcm9ubWVudF0gLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGFsbCBhdmFpbGFibGUgYmFja2VuZHMgd2VyZSBjbGVhcmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlU3FsaXRlV2ViUGVyc2lzdGVuY2VzKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50ID0gZ2xvYmFsVGhpc30pIHtcbiAgY29uc3QgcGVyc2lzdGVuY2VzID0gW1xuICAgIG5ldyBMb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lfSksXG4gICAgbmV3IE9wZnNQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lLCBlbnZpcm9ubWVudH0pLFxuICAgIG5ldyBJbmRleGVkRGJQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lLCBlbnZpcm9ubWVudH0pXG4gIF1cblxuICBmb3IgKGNvbnN0IHBlcnNpc3RlbmNlIG9mIHBlcnNpc3RlbmNlcykgYXdhaXQgZGVsZXRlUGVyc2lzdGVuY2VJZkF2YWlsYWJsZShwZXJzaXN0ZW5jZSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsZWdhY3kgU1FMaXRlIHdlYiBzdG9yYWdlIGtleSBmb3IgYSBkYXRhYmFzZSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGFiYXNlTmFtZSAtIERhdGFiYXNlIG5hbWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFBlcnNpc3RlbmNlIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KGRhdGFiYXNlTmFtZSkge1xuICBpZiAoIWRhdGFiYXNlTmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gbmFtZSBnaXZlbiBpbiBhcmd1bWVudHMgZm9yIFNRTGl0ZSBXZWIgZGF0YWJhc2VcIilcblxuICByZXR1cm4gYFZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc1NxbGl0ZVdlYi0tLSR7ZGF0YWJhc2VOYW1lfWBcbn1cblxuLyoqIE9QRlMtYmFja2VkIFNRTC5qcyBkYXRhYmFzZSBmaWxlIHBlcnNpc3RlbmNlLiAqL1xuY2xhc3MgT3Bmc1BlcnNpc3RlbmNlIHtcbiAgLyoqIEB0eXBlIHtcIm9wZnNcIn0gKi9cbiAgbmFtZSA9IFwib3Bmc1wiXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgT1BGUyBwZXJzaXN0ZW5jZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmRhdGFiYXNlTmFtZSAtIERhdGFiYXNlIG5hbWUuXG4gICAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2VFbnZpcm9ubWVudH0gYXJncy5lbnZpcm9ubWVudCAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSkge1xuICAgIHRoaXMuZGF0YWJhc2VOYW1lID0gZGF0YWJhc2VOYW1lXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgT1BGUyBkYXRhYmFzZSBmaWxlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGRlbGV0ZWQuXG4gICAqL1xuICBhc3luYyBkZWxldGUoKSB7XG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgb3Bmc0RpcmVjdG9yeSh0aGlzLmVudmlyb25tZW50KVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRpcmVjdG9yeS5yZW1vdmVFbnRyeShzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSkpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghaXNOb3RGb3VuZEVycm9yKGVycm9yKSkgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIE9QRlMgZGF0YWJhc2UgZmlsZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IC0gUGVyc2lzdGVkIGJ5dGVzLlxuICAgKi9cbiAgYXN5bmMgbG9hZCgpIHtcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBvcGZzRGlyZWN0b3J5KHRoaXMuZW52aXJvbm1lbnQpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZUhhbmRsZSA9IGF3YWl0IGRpcmVjdG9yeS5nZXRGaWxlSGFuZGxlKHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSlcbiAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBmaWxlSGFuZGxlLmdldEZpbGUoKVxuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBmaWxlLmFycmF5QnVmZmVyKClcblxuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoaXNOb3RGb3VuZEVycm9yKGVycm9yKSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgT1BGUyBkYXRhYmFzZSBmaWxlIGV4aXN0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciBjb250ZW50IGV4aXN0cy5cbiAgICovXG4gIGFzeW5jIGV4aXN0cygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmxvYWQoKSkgIT09IHVuZGVmaW5lZFxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGRhdGFiYXNlIGJ5dGVzLlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGNvbnRlbnQgLSBEYXRhYmFzZSBieXRlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBzYXZlZC5cbiAgICovXG4gIGFzeW5jIHNhdmUoY29udGVudCkge1xuICAgIGNvbnN0IGRpcmVjdG9yeSA9IGF3YWl0IG9wZnNEaXJlY3RvcnkodGhpcy5lbnZpcm9ubWVudClcbiAgICBjb25zdCBmaWxlSGFuZGxlID0gYXdhaXQgZGlyZWN0b3J5LmdldEZpbGVIYW5kbGUoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpLCB7Y3JlYXRlOiB0cnVlfSlcbiAgICBjb25zdCB3cml0YWJsZSA9IGF3YWl0IGZpbGVIYW5kbGUuY3JlYXRlV3JpdGFibGUoKVxuXG4gICAgYXdhaXQgd3JpdGFibGUud3JpdGUoYXJyYXlCdWZmZXJGcm9tQnl0ZXMoY29udGVudCkpXG4gICAgYXdhaXQgd3JpdGFibGUuY2xvc2UoKVxuICB9XG59XG5cbi8qKiBJbmRleGVkREItYmFja2VkIFNRTC5qcyBkYXRhYmFzZSBibG9iIHBlcnNpc3RlbmNlLiAqL1xuY2xhc3MgSW5kZXhlZERiUGVyc2lzdGVuY2Uge1xuICAvKiogQHR5cGUge1wiaW5kZXhlZGRiXCJ9ICovXG4gIG5hbWUgPSBcImluZGV4ZWRkYlwiXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgSW5kZXhlZERCIHBlcnNpc3RlbmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAgICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBhcmdzLmVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RhdGFiYXNlTmFtZSwgZW52aXJvbm1lbnR9KSB7XG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBkYXRhYmFzZU5hbWVcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBJbmRleGVkREIgZGF0YWJhc2UgZW50cnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gZGVsZXRlZC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IGF3YWl0IG9wZW5JbmRleGVkRGIodGhpcy5lbnZpcm9ubWVudClcblxuICAgIGF3YWl0IGluZGV4ZWREYlJlcXVlc3QoZGF0YWJhc2UudHJhbnNhY3Rpb24oXCJkYXRhYmFzZXNcIiwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUoXCJkYXRhYmFzZXNcIikuZGVsZXRlKHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSkpXG4gICAgZGF0YWJhc2UuY2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBJbmRleGVkREIgZGF0YWJhc2UgZW50cnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ+fSAtIFBlcnNpc3RlZCBieXRlcy5cbiAgICovXG4gIGFzeW5jIGxvYWQoKSB7XG4gICAgY29uc3QgZGF0YWJhc2UgPSBhd2FpdCBvcGVuSW5kZXhlZERiKHRoaXMuZW52aXJvbm1lbnQpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5kZXhlZERiUmVxdWVzdChkYXRhYmFzZS50cmFuc2FjdGlvbihcImRhdGFiYXNlc1wiLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpLmdldChzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSkpKVxuXG4gICAgZGF0YWJhc2UuY2xvc2UoKVxuXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiByZXN1bHRcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHJldHVybiBuZXcgVWludDhBcnJheShyZXN1bHQpXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTUUxpdGUgd2ViIEluZGV4ZWREQiBwZXJzaXN0ZW5jZSByZXR1cm5lZCB1bnN1cHBvcnRlZCBjb250ZW50XCIpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIEluZGV4ZWREQiBkYXRhYmFzZSBlbnRyeSBleGlzdHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgY29udGVudCBleGlzdHMuXG4gICAqL1xuICBhc3luYyBleGlzdHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgb3BlbkluZGV4ZWREYih0aGlzLmVudmlyb25tZW50KVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5kZXhlZERiUmVxdWVzdChkYXRhYmFzZS50cmFuc2FjdGlvbihcImRhdGFiYXNlc1wiLCBcInJlYWRvbmx5XCIpLm9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpLmdldChzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSkpKVxuXG4gICAgICBkYXRhYmFzZS5jbG9zZSgpXG5cbiAgICAgIHJldHVybiByZXN1bHQgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQgIT09IG51bGxcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBkYXRhYmFzZSBieXRlcy5cbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBjb250ZW50IC0gRGF0YWJhc2UgYnl0ZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gc2F2ZWQuXG4gICAqL1xuICBhc3luYyBzYXZlKGNvbnRlbnQpIHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IGF3YWl0IG9wZW5JbmRleGVkRGIodGhpcy5lbnZpcm9ubWVudClcblxuICAgIGF3YWl0IGluZGV4ZWREYlJlcXVlc3QoZGF0YWJhc2UudHJhbnNhY3Rpb24oXCJkYXRhYmFzZXNcIiwgXCJyZWFkd3JpdGVcIikub2JqZWN0U3RvcmUoXCJkYXRhYmFzZXNcIikucHV0KGNvbnRlbnQsIHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSkpXG4gICAgZGF0YWJhc2UuY2xvc2UoKVxuICB9XG59XG5cbi8qKiBMb2NhbFN0b3JhZ2UtYmFja2VkIFNRTC5qcyBkYXRhYmFzZSBibG9iIHBlcnNpc3RlbmNlIGZvciBsZWdhY3kgbWlncmF0aW9ucy4gKi9cbmNsYXNzIExvY2FsU3RvcmFnZVBlcnNpc3RlbmNlIHtcblxuICAvKiogQHR5cGUge1wibG9jYWxzdG9yYWdlXCJ9ICovXG4gIG5hbWUgPSBcImxvY2Fsc3RvcmFnZVwiXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgbG9jYWxTdG9yYWdlIHBlcnNpc3RlbmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtkYXRhYmFzZU5hbWV9KSB7XG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBkYXRhYmFzZU5hbWVcbiAgICAvKiogQHR5cGUge0JldHRlckxvY2FsU3RvcmFnZSB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLnN0b3JhZ2UgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBsb2NhbFN0b3JhZ2UgZGF0YWJhc2UgZW50cnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gZGVsZXRlZC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZSgpLmRlbGV0ZShzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSkpXG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGxvY2FsU3RvcmFnZSBkYXRhYmFzZSBlbnRyeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IC0gUGVyc2lzdGVkIGJ5dGVzLlxuICAgKi9cbiAgYXN5bmMgbG9hZCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5sb2NhbFN0b3JhZ2UoKS5nZXQoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpKVxuXG4gICAgaWYgKGNvbnRlbnQgPT09IG51bGwgfHwgY29udGVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gY29udGVudFxuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHJldHVybiBuZXcgVWludDhBcnJheShjb250ZW50KVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7VWludDhBcnJheX0gKi8gKGNvbnRlbnQpXG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgZGF0YWJhc2UgYnl0ZXMuXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gY29udGVudCAtIERhdGFiYXNlIGJ5dGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHNhdmVkLlxuICAgKi9cbiAgYXN5bmMgc2F2ZShjb250ZW50KSB7XG4gICAgYXdhaXQgdGhpcy5sb2NhbFN0b3JhZ2UoKS5zZXQoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpLCBjb250ZW50KVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBsZWdhY3kgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGV4aXN0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciBjb250ZW50IGV4aXN0cy5cbiAgICovXG4gIGFzeW5jIGV4aXN0cygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMubG9jYWxTdG9yYWdlKCkuZ2V0KHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSlcblxuICAgICAgcmV0dXJuIGNvbnRlbnQgIT09IHVuZGVmaW5lZCAmJiBjb250ZW50ICE9PSBudWxsXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbG9jYWxTdG9yYWdlIHdyYXBwZXIuXG4gICAqIEByZXR1cm5zIHtCZXR0ZXJMb2NhbFN0b3JhZ2V9IC0gU3RvcmFnZSB3cmFwcGVyLlxuICAgKi9cbiAgbG9jYWxTdG9yYWdlKCkge1xuICAgIHRoaXMuc3RvcmFnZSB8fD0gbmV3IEJldHRlckxvY2FsU3RvcmFnZSgpXG5cbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlXG4gIH1cbn1cblxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIHByZWZlcnJlZCBhdmFpbGFibGUgU1FMaXRlIHdlYiBwZXJzaXN0ZW5jZSBiYWNrZW5kLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGFyZ3MuZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge0luZGV4ZWREYlBlcnNpc3RlbmNlfSBhcmdzLmluZGV4ZWREYlBlcnNpc3RlbmNlIC0gSW5kZXhlZERCIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKiBAcGFyYW0ge0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlfSBhcmdzLmxvY2FsU3RvcmFnZVBlcnNpc3RlbmNlIC0gTGVnYWN5IGxvY2FsU3RvcmFnZSBwZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHBhcmFtIHtPcGZzUGVyc2lzdGVuY2V9IGFyZ3Mub3Bmc1BlcnNpc3RlbmNlIC0gT1BGUyBwZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8U3FsaXRlV2ViUGVyc2lzdGVuY2U+fSAtIFNlbGVjdGVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdFN1cHBvcnRlZFBlcnNpc3RlbmNlKHtlbnZpcm9ubWVudCwgaW5kZXhlZERiUGVyc2lzdGVuY2UsIGxvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLCBvcGZzUGVyc2lzdGVuY2V9KSB7XG4gIGlmIChhd2FpdCBzdXBwb3J0c09wZnNQZXJzaXN0ZW5jZShlbnZpcm9ubWVudCkpIHJldHVybiBvcGZzUGVyc2lzdGVuY2VcbiAgaWYgKGF3YWl0IHN1cHBvcnRzSW5kZXhlZERiUGVyc2lzdGVuY2UoZW52aXJvbm1lbnQpKSByZXR1cm4gaW5kZXhlZERiUGVyc2lzdGVuY2VcblxuICByZXR1cm4gbG9jYWxTdG9yYWdlUGVyc2lzdGVuY2Vcbn1cblxuLyoqXG4gKiBNaWdyYXRlcyBhbnkgZXhpc3RpbmcgZGF0YWJhc2UgYnl0ZXMgaW50byB0aGUgc2VsZWN0ZWQgcGVyc2lzdGVuY2UgYmFja2VuZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2V9IGFyZ3MuZGVzdGluYXRpb25QZXJzaXN0ZW5jZSAtIFNlbGVjdGVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGFyZ3MuZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge3tkZWxldGU6ICgpID0+IFByb21pc2U8dm9pZD4sIGxvYWQ6ICgpID0+IFByb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59W119IGFyZ3Muc291cmNlUGVyc2lzdGVuY2VzIC0gUGVyc2lzdGVuY2UgYWRhcHRlcnMgdG8gc2NhbiBmb3IgZXhpc3RpbmcgYnl0ZXMuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIG1pZ3JhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZVBlcnNpc3RlZERhdGFiYXNlKHtkYXRhYmFzZU5hbWUsIGRlc3RpbmF0aW9uUGVyc2lzdGVuY2UsIGVudmlyb25tZW50LCBzb3VyY2VQZXJzaXN0ZW5jZXN9KSB7XG4gIGlmIChhd2FpdCBkZXN0aW5hdGlvblBlcnNpc3RlbmNlLmxvYWQoKSAhPT0gdW5kZWZpbmVkKSByZXR1cm5cblxuICBmb3IgKGNvbnN0IHNvdXJjZVBlcnNpc3RlbmNlIG9mIHNvdXJjZVBlcnNpc3RlbmNlcykge1xuICAgIGlmIChzb3VyY2VQZXJzaXN0ZW5jZSA9PT0gZGVzdGluYXRpb25QZXJzaXN0ZW5jZSkgY29udGludWVcblxuICAgIGNvbnN0IGRhdGFiYXNlQnl0ZXMgPSBhd2FpdCBsb2FkUGVyc2lzdGVuY2VJZkF2YWlsYWJsZShzb3VyY2VQZXJzaXN0ZW5jZSlcbiAgICBpZiAoZGF0YWJhc2VCeXRlcyA9PT0gdW5kZWZpbmVkKSBjb250aW51ZVxuXG4gICAgYXdhaXQgZGVzdGluYXRpb25QZXJzaXN0ZW5jZS5zYXZlKGRhdGFiYXNlQnl0ZXMpXG4gICAgYXdhaXQgZGVsZXRlU3FsaXRlV2ViUGVyc2lzdGVuY2VzKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSlcbiAgICBhd2FpdCBkZXN0aW5hdGlvblBlcnNpc3RlbmNlLnNhdmUoZGF0YWJhc2VCeXRlcylcbiAgICByZXR1cm5cbiAgfVxufVxuXG4vKipcbiAqIExvYWRzIGEgcGVyc2lzdGVuY2UgYmFja2VuZCwgaWdub3JpbmcgdW5hdmFpbGFibGUgYmFja2VuZCBlcnJvcnMuXG4gKiBAcGFyYW0ge3tsb2FkOiAoKSA9PiBQcm9taXNlPFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ+fX0gcGVyc2lzdGVuY2UgLSBQZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IC0gUGVyc2lzdGVkIGJ5dGVzLCBpZiBhdmFpbGFibGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRQZXJzaXN0ZW5jZUlmQXZhaWxhYmxlKHBlcnNpc3RlbmNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHBlcnNpc3RlbmNlLmxvYWQoKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIE9QRlMgcGVyc2lzdGVuY2UgaXMgdXNhYmxlLlxuICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBlbnZpcm9ubWVudCAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgT1BGUyBjYW4gYmUgdXNlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VwcG9ydHNPcGZzUGVyc2lzdGVuY2UoZW52aXJvbm1lbnQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBvcGZzRGlyZWN0b3J5KGVudmlyb25tZW50KVxuICAgIGNvbnN0IGZpbGVIYW5kbGUgPSBhd2FpdCBkaXJlY3RvcnkuZ2V0RmlsZUhhbmRsZShTVVBQT1JUX0NIRUNLX0ZJTEUsIHtjcmVhdGU6IHRydWV9KVxuICAgIGNvbnN0IHdyaXRhYmxlID0gYXdhaXQgZmlsZUhhbmRsZS5jcmVhdGVXcml0YWJsZSgpXG5cbiAgICBhd2FpdCB3cml0YWJsZS53cml0ZShhcnJheUJ1ZmZlckZyb21CeXRlcyhTVVBQT1JUX0NIRUNLX0JZVEVTKSlcbiAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpXG5cbiAgICBjb25zdCBmaWxlID0gYXdhaXQgZmlsZUhhbmRsZS5nZXRGaWxlKClcbiAgICBjb25zdCByZWFkQmFjayA9IG5ldyBVaW50OEFycmF5KGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKSlcblxuICAgIGF3YWl0IGRpcmVjdG9yeS5yZW1vdmVFbnRyeShTVVBQT1JUX0NIRUNLX0ZJTEUpXG5cbiAgICByZXR1cm4gc2FtZUJ5dGVzKHJlYWRCYWNrLCBTVVBQT1JUX0NIRUNLX0JZVEVTKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgSW5kZXhlZERCIHBlcnNpc3RlbmNlIGlzIHVzYWJsZS5cbiAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2VFbnZpcm9ubWVudH0gZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIEluZGV4ZWREQiBjYW4gYmUgdXNlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VwcG9ydHNJbmRleGVkRGJQZXJzaXN0ZW5jZShlbnZpcm9ubWVudCkge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgb3BlbkluZGV4ZWREYihlbnZpcm9ubWVudClcbiAgICBjb25zdCBzdG9yZSA9IGRhdGFiYXNlLnRyYW5zYWN0aW9uKFwiZGF0YWJhc2VzXCIsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpXG5cbiAgICBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KHN0b3JlLnB1dChTVVBQT1JUX0NIRUNLX0JZVEVTLCBTVVBQT1JUX0NIRUNLX0ZJTEUpKVxuXG4gICAgY29uc3QgcmVhZEJhY2sgPSBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KHN0b3JlLmdldChTVVBQT1JUX0NIRUNLX0ZJTEUpKVxuXG4gICAgYXdhaXQgaW5kZXhlZERiUmVxdWVzdChzdG9yZS5kZWxldGUoU1VQUE9SVF9DSEVDS19GSUxFKSlcbiAgICBkYXRhYmFzZS5jbG9zZSgpXG5cbiAgICByZXR1cm4gcmVhZEJhY2sgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIHNhbWVCeXRlcyhyZWFkQmFjaywgU1VQUE9SVF9DSEVDS19CWVRFUylcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBPcGVucyB0aGUgU1FMaXRlIHdlYiBJbmRleGVkREIgZGF0YWJhc2UuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge1Byb21pc2U8SURCRGF0YWJhc2U+fSAtIE9wZW4gZGF0YWJhc2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW5JbmRleGVkRGIoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgaW5kZXhlZERiID0gaW5kZXhlZERiRnJvbUVudmlyb25tZW50KGVudmlyb25tZW50KVxuXG4gIGlmICghaW5kZXhlZERiIHx8IHR5cGVvZiBpbmRleGVkRGIub3BlbiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJJbmRleGVkREIgaXMgbm90IGF2YWlsYWJsZVwiKVxuXG4gIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkRGIub3BlbihcIlZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc1NxbGl0ZVdlYlwiLCAxKVxuICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9ICgpID0+IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IHJlcXVlc3QucmVzdWx0XG5cbiAgICBpZiAoIWRhdGFiYXNlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoXCJkYXRhYmFzZXNcIikpIGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpXG4gIH1cblxuICByZXR1cm4gYXdhaXQgaW5kZXhlZERiUmVxdWVzdChyZXF1ZXN0KVxufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIEluZGV4ZWREQiByZXF1ZXN0LlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7SURCUmVxdWVzdDxUPn0gcmVxdWVzdCAtIEluZGV4ZWREQiByZXF1ZXN0LlxuICogQHJldHVybnMge1Byb21pc2U8VD59IC0gUmVxdWVzdCByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGluZGV4ZWREYlJlcXVlc3QocmVxdWVzdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdClcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvciB8fCBuZXcgRXJyb3IoXCJJbmRleGVkREIgcmVxdWVzdCBmYWlsZWRcIikpXG4gIH0pXG59XG5cbi8qKlxuICogRGVsZXRlcyBhIHBlcnNpc3RlbmNlIGJhY2tlbmQsIGlnbm9yaW5nIHVuYXZhaWxhYmxlIGJhY2tlbmQgZXJyb3JzLlxuICogQHBhcmFtIHt7ZGVsZXRlOiAoKSA9PiBQcm9taXNlPHZvaWQ+fX0gcGVyc2lzdGVuY2UgLSBQZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBkZWxldGlvbiB3YXMgYXR0ZW1wdGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZWxldGVQZXJzaXN0ZW5jZUlmQXZhaWxhYmxlKHBlcnNpc3RlbmNlKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcGVyc2lzdGVuY2UuZGVsZXRlKClcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIHVuYXZhaWxhYmxlIGJhY2tlbmRzIHNvIHJlc2V0IGNsZWFycyBldmVyeSBiYWNrZW5kIHRoZSBicm93c2VyIGNhbiBhY2Nlc3MuXG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIE9QRlMgcm9vdCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge1Byb21pc2U8RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZT59IC0gT1BGUyByb290IGRpcmVjdG9yeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gb3Bmc0RpcmVjdG9yeShlbnZpcm9ubWVudCkge1xuICBjb25zdCBuYXZpZ2F0b3JPYmplY3QgPSBuYXZpZ2F0b3JGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpXG4gIGNvbnN0IHN0b3JhZ2UgPSBuYXZpZ2F0b3JPYmplY3Quc3RvcmFnZVxuXG4gIGlmICghc3RvcmFnZSB8fCB0eXBlb2Ygc3RvcmFnZS5nZXREaXJlY3RvcnkgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiT1BGUyBpcyBub3QgYXZhaWxhYmxlXCIpXG5cbiAgcmV0dXJuIGF3YWl0IHN0b3JhZ2UuZ2V0RGlyZWN0b3J5KClcbn1cblxuLyoqXG4gKiBHZXRzIG5hdmlnYXRvciBmcm9tIGVudmlyb25tZW50LlxuICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBlbnZpcm9ubWVudCAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHt7c3RvcmFnZT86IHtnZXREaXJlY3Rvcnk/OiAoKSA9PiBQcm9taXNlPEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU+fX19IC0gTmF2aWdhdG9yLWxpa2Ugb2JqZWN0LlxuICovXG5mdW5jdGlvbiBuYXZpZ2F0b3JGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gZW52aXJvbm1lbnQubmF2aWdhdG9yXG5cbiAgaWYgKCFjYW5kaWRhdGUgfHwgdHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHt9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7e3N0b3JhZ2U/OiB7Z2V0RGlyZWN0b3J5PzogKCkgPT4gUHJvbWlzZTxGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlPn19fSAqLyAoY2FuZGlkYXRlKVxufVxuXG4vKipcbiAqIEdldHMgSW5kZXhlZERCIGZyb20gZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge3tvcGVuPzogKG5hbWU6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikgPT4gSURCT3BlbkRCUmVxdWVzdH0gfCB1bmRlZmluZWR9IC0gSW5kZXhlZERCLWxpa2Ugb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpbmRleGVkRGJGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gZW52aXJvbm1lbnQuaW5kZXhlZERCXG5cbiAgaWYgKCFjYW5kaWRhdGUgfHwgdHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIHJldHVybiAvKiogQHR5cGUge3tvcGVuPzogKG5hbWU6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikgPT4gSURCT3BlbkRCUmVxdWVzdH19ICovIChjYW5kaWRhdGUpXG59XG5cbi8qKlxuICogQ29udmVydHMgYnl0ZXMgdG8gYSBzdGFuZGFsb25lIEFycmF5QnVmZmVyIGZvciBicm93c2VyIGZpbGUgd3JpdGVzLlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlcyAtIEJ5dGVzIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IC0gU3RhbmRhbG9uZSBBcnJheUJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gYXJyYXlCdWZmZXJGcm9tQnl0ZXMoYnl0ZXMpIHtcbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpXG5cbiAgY29weS5zZXQoYnl0ZXMpXG5cbiAgcmV0dXJuIGNvcHkuYnVmZmVyXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gZXJyb3IgaXMgYSBmaWxlLW5vdC1mb3VuZCBlcnJvci5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBFcnJvciBjYW5kaWRhdGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBlcnJvciBpcyBub3QgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGlzTm90Rm91bmRFcnJvcihlcnJvcikge1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSBcIk5vdEZvdW5kRXJyb3JcIlxufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBieXRlIGFycmF5cy5cbiAqIEBwYXJhbSB7VWludDhBcnJheX0gbGVmdCAtIExlZnQgYnl0ZXMuXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHJpZ2h0IC0gUmlnaHQgYnl0ZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGJ5dGVzIG1hdGNoLlxuICovXG5mdW5jdGlvbiBzYW1lQnl0ZXMobGVmdCwgcmlnaHQpIHtcbiAgaWYgKGxlZnQubGVuZ3RoICE9PSByaWdodC5sZW5ndGgpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBsZWZ0LmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSByaWdodFtpbmRleF0pXG59XG4iXX0=
464
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLXBlcnNpc3RlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGFiYXNlL2RyaXZlcnMvc3FsaXRlL3dlYi1wZXJzaXN0ZW5jZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxrQkFBa0IsTUFBTSxxQkFBcUIsQ0FBQTtBQUVwRDs7Ozs7OztHQU9HO0FBQ0g7Ozs7O0dBS0c7QUFDSCxNQUFNLGtCQUFrQixHQUFHLCtCQUErQixDQUFBO0FBQzFELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFFeEY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwwQkFBMEIsQ0FBQyxFQUFDLFlBQVksRUFBRSxXQUFXLEdBQUcsVUFBVSxFQUFDO0lBQ3ZGLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLENBQUE7SUFDM0UsTUFBTSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtJQUN4RSxNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQUMsRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUMsQ0FBQTtJQUVsRixNQUFNLG1CQUFtQixHQUFHLE1BQU0sMEJBQTBCLENBQUMsRUFBQyxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQTtJQUUzSSxNQUFNLHdCQUF3QixDQUFDO1FBQzdCLFlBQVk7UUFDWixzQkFBc0IsRUFBRSxtQkFBbUI7UUFDM0MsV0FBVztRQUNYLGtCQUFrQixFQUFFLENBQUMsdUJB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LE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtBQUNwQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLEtBQUs7SUFDNUIsT0FBTyxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFBO0FBQ2pFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLO0lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTlDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCZXR0ZXJMb2NhbFN0b3JhZ2UgZnJvbSBcImJldHRlci1sb2NhbHN0b3JhZ2VcIlxuXG4vKipcbiAqIFNRTGl0ZSB3ZWIgcGVyc2lzdGVuY2UgYWRhcHRlci5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNxbGl0ZVdlYlBlcnNpc3RlbmNlXG4gKiBAcHJvcGVydHkge1wiaW5kZXhlZGRiXCIgfCBcImxvY2Fsc3RvcmFnZVwiIHwgXCJvcGZzXCJ9IG5hbWUgLSBQZXJzaXN0ZW5jZSBiYWNrZW5kIG5hbWUuXG4gKiBAcHJvcGVydHkgeygpID0+IFByb21pc2U8dm9pZD59IGRlbGV0ZSAtIERlbGV0ZXMgdGhlIHBlcnNpc3RlZCBkYXRhYmFzZS5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gUHJvbWlzZTxVaW50OEFycmF5IHwgdW5kZWZpbmVkPn0gbG9hZCAtIExvYWRzIHBlcnNpc3RlZCBkYXRhYmFzZSBieXRlcy5cbiAqIEBwcm9wZXJ0eSB7KGNvbnRlbnQ6IFVpbnQ4QXJyYXkpID0+IFByb21pc2U8dm9pZD59IHNhdmUgLSBTYXZlcyBwZXJzaXN0ZWQgZGF0YWJhc2UgYnl0ZXMuXG4gKi9cbi8qKlxuICogQnJvd3Nlci1saWtlIGVudmlyb25tZW50IHVzZWQgZm9yIHdlYiBwZXJzaXN0ZW5jZSBkZXRlY3Rpb24uXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50XG4gKiBAcHJvcGVydHkge3Vua25vd259IFtpbmRleGVkREJdIC0gSW5kZXhlZERCIGdsb2JhbC5cbiAqIEBwcm9wZXJ0eSB7dW5rbm93bn0gW25hdmlnYXRvcl0gLSBOYXZpZ2F0b3IgZ2xvYmFsLlxuICovXG5jb25zdCBTVVBQT1JUX0NIRUNLX0ZJTEUgPSBcIi52ZWxvY2lvdXMtb3Bmcy1zdXBwb3J0LWNoZWNrXCJcbmNvbnN0IFNVUFBPUlRfQ0hFQ0tfQllURVMgPSBuZXcgVWludDhBcnJheShbMTE4LCAxMDEsIDEwOCwgMTExLCA5OSwgMTA1LCAxMTEsIDExNywgMTE1XSlcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBiZXN0IFNRTGl0ZSB3ZWIgcGVyc2lzdGVuY2UgYWRhcHRlciBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgYnJvd3Nlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2VFbnZpcm9ubWVudH0gW2FyZ3MuZW52aXJvbm1lbnRdIC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge1Byb21pc2U8U3FsaXRlV2ViUGVyc2lzdGVuY2U+fSAtIFNlbGVjdGVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTcWxpdGVXZWJQZXJzaXN0ZW5jZSh7ZGF0YWJhc2VOYW1lLCBlbnZpcm9ubWVudCA9IGdsb2JhbFRoaXN9KSB7XG4gIGNvbnN0IGxvY2FsU3RvcmFnZVBlcnNpc3RlbmNlID0gbmV3IExvY2FsU3RvcmFnZVBlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWV9KVxuICBjb25zdCBvcGZzUGVyc2lzdGVuY2UgPSBuZXcgT3Bmc1BlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSlcbiAgY29uc3QgaW5kZXhlZERiUGVyc2lzdGVuY2UgPSBuZXcgSW5kZXhlZERiUGVyc2lzdGVuY2Uoe2RhdGFiYXNlTmFtZSwgZW52aXJvbm1lbnR9KVxuXG4gIGNvbnN0IHNlbGVjdGVkUGVyc2lzdGVuY2UgPSBhd2FpdCBzZWxlY3RTdXBwb3J0ZWRQZXJzaXN0ZW5jZSh7ZW52aXJvbm1lbnQsIGluZGV4ZWREYlBlcnNpc3RlbmNlLCBsb2NhbFN0b3JhZ2VQZXJzaXN0ZW5jZSwgb3Bmc1BlcnNpc3RlbmNlfSlcblxuICBhd2FpdCBtaWdyYXRlUGVyc2lzdGVkRGF0YWJhc2Uoe1xuICAgIGRhdGFiYXNlTmFtZSxcbiAgICBkZXN0aW5hdGlvblBlcnNpc3RlbmNlOiBzZWxlY3RlZFBlcnNpc3RlbmNlLFxuICAgIGVudmlyb25tZW50LFxuICAgIHNvdXJjZVBlcnNpc3RlbmNlczogW2xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLCBpbmRleGVkRGJQZXJzaXN0ZW5jZSwgb3Bmc1BlcnNpc3RlbmNlXVxuICB9KVxuXG4gIHJldHVybiBzZWxlY3RlZFBlcnNpc3RlbmNlXG59XG5cbi8qKlxuICogRGVsZXRlcyBTUUxpdGUgd2ViIGRhdGFiYXNlIGJ5dGVzIGZyb20gZXZlcnkgYXZhaWxhYmxlIHBlcnNpc3RlbmNlIGJhY2tlbmQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmRhdGFiYXNlTmFtZSAtIERhdGFiYXNlIG5hbWUuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IFthcmdzLmVudmlyb25tZW50XSAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gYWxsIGF2YWlsYWJsZSBiYWNrZW5kcyB3ZXJlIGNsZWFyZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVTcWxpdGVXZWJQZXJzaXN0ZW5jZXMoe2RhdGFiYXNlTmFtZSwgZW52aXJvbm1lbnQgPSBnbG9iYWxUaGlzfSkge1xuICBjb25zdCBwZXJzaXN0ZW5jZXMgPSBbXG4gICAgbmV3IExvY2FsU3RvcmFnZVBlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWV9KSxcbiAgICBuZXcgT3Bmc1BlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSksXG4gICAgbmV3IEluZGV4ZWREYlBlcnNpc3RlbmNlKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSlcbiAgXVxuXG4gIGZvciAoY29uc3QgcGVyc2lzdGVuY2Ugb2YgcGVyc2lzdGVuY2VzKSBhd2FpdCBkZWxldGVQZXJzaXN0ZW5jZUlmQXZhaWxhYmxlKHBlcnNpc3RlbmNlKVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGxlZ2FjeSBTUUxpdGUgd2ViIHN0b3JhZ2Uga2V5IGZvciBhIGRhdGFiYXNlIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUGVyc2lzdGVuY2Uga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkoZGF0YWJhc2VOYW1lKSB7XG4gIGlmICghZGF0YWJhc2VOYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBuYW1lIGdpdmVuIGluIGFyZ3VtZW50cyBmb3IgU1FMaXRlIFdlYiBkYXRhYmFzZVwiKVxuXG4gIHJldHVybiBgVmVsb2Npb3VzRGF0YWJhc2VEcml2ZXJzU3FsaXRlV2ViLS0tJHtkYXRhYmFzZU5hbWV9YFxufVxuXG4vKiogT1BGUy1iYWNrZWQgU1FMLmpzIGRhdGFiYXNlIGZpbGUgcGVyc2lzdGVuY2UuICovXG5jbGFzcyBPcGZzUGVyc2lzdGVuY2Uge1xuICAvKiogQHR5cGUge1wib3Bmc1wifSAqL1xuICBuYW1lID0gXCJvcGZzXCJcblxuICAvKipcbiAgICogQ3JlYXRlcyBPUEZTIHBlcnNpc3RlbmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIEFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAgICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBhcmdzLmVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RhdGFiYXNlTmFtZSwgZW52aXJvbm1lbnR9KSB7XG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBkYXRhYmFzZU5hbWVcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBPUEZTIGRhdGFiYXNlIGZpbGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gZGVsZXRlZC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBvcGZzRGlyZWN0b3J5KHRoaXMuZW52aXJvbm1lbnQpXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGlyZWN0b3J5LnJlbW92ZUVudHJ5KHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFpc05vdEZvdW5kRXJyb3IoZXJyb3IpKSB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgT1BGUyBkYXRhYmFzZSBmaWxlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxVaW50OEFycmF5IHwgdW5kZWZpbmVkPn0gLSBQZXJzaXN0ZWQgYnl0ZXMuXG4gICAqL1xuICBhc3luYyBsb2FkKCkge1xuICAgIGNvbnN0IGRpcmVjdG9yeSA9IGF3YWl0IG9wZnNEaXJlY3RvcnkodGhpcy5lbnZpcm9ubWVudClcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlSGFuZGxlID0gYXdhaXQgZGlyZWN0b3J5LmdldEZpbGVIYW5kbGUoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpKVxuICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGZpbGVIYW5kbGUuZ2V0RmlsZSgpXG4gICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKVxuXG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChpc05vdEZvdW5kRXJyb3IoZXJyb3IpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBPUEZTIGRhdGFiYXNlIGZpbGUgZXhpc3RzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIGNvbnRlbnQgZXhpc3RzLlxuICAgKi9cbiAgYXN5bmMgZXhpc3RzKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMubG9hZCgpKSAhPT0gdW5kZWZpbmVkXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgZGF0YWJhc2UgYnl0ZXMuXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gY29udGVudCAtIERhdGFiYXNlIGJ5dGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHNhdmVkLlxuICAgKi9cbiAgYXN5bmMgc2F2ZShjb250ZW50KSB7XG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgb3Bmc0RpcmVjdG9yeSh0aGlzLmVudmlyb25tZW50KVxuICAgIGNvbnN0IGZpbGVIYW5kbGUgPSBhd2FpdCBkaXJlY3RvcnkuZ2V0RmlsZUhhbmRsZShzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSksIHtjcmVhdGU6IHRydWV9KVxuICAgIGNvbnN0IHdyaXRhYmxlID0gYXdhaXQgZmlsZUhhbmRsZS5jcmVhdGVXcml0YWJsZSgpXG5cbiAgICBhd2FpdCB3cml0YWJsZS53cml0ZShhcnJheUJ1ZmZlckZyb21CeXRlcyhjb250ZW50KSlcbiAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpXG4gIH1cbn1cblxuLyoqIEluZGV4ZWREQi1iYWNrZWQgU1FMLmpzIGRhdGFiYXNlIGJsb2IgcGVyc2lzdGVuY2UuICovXG5jbGFzcyBJbmRleGVkRGJQZXJzaXN0ZW5jZSB7XG4gIC8qKiBAdHlwZSB7XCJpbmRleGVkZGJcIn0gKi9cbiAgbmFtZSA9IFwiaW5kZXhlZGRiXCJcblxuICAvKipcbiAgICogQ3JlYXRlcyBJbmRleGVkREIgcGVyc2lzdGVuY2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5kYXRhYmFzZU5hbWUgLSBEYXRhYmFzZSBuYW1lLlxuICAgKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGFyZ3MuZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7ZGF0YWJhc2VOYW1lLCBlbnZpcm9ubWVudH0pIHtcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IGRhdGFiYXNlTmFtZVxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudFxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIEluZGV4ZWREQiBkYXRhYmFzZSBlbnRyeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBkZWxldGVkLlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKCkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgb3BlbkluZGV4ZWREYih0aGlzLmVudmlyb25tZW50KVxuXG4gICAgYXdhaXQgaW5kZXhlZERiUmVxdWVzdChkYXRhYmFzZS50cmFuc2FjdGlvbihcImRhdGFiYXNlc1wiLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZShcImRhdGFiYXNlc1wiKS5kZWxldGUoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpKSlcbiAgICBkYXRhYmFzZS5jbG9zZSgpXG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIEluZGV4ZWREQiBkYXRhYmFzZSBlbnRyeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IC0gUGVyc2lzdGVkIGJ5dGVzLlxuICAgKi9cbiAgYXN5bmMgbG9hZCgpIHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IGF3YWl0IG9wZW5JbmRleGVkRGIodGhpcy5lbnZpcm9ubWVudClcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KGRhdGFiYXNlLnRyYW5zYWN0aW9uKFwiZGF0YWJhc2VzXCIsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUoXCJkYXRhYmFzZXNcIikuZ2V0KHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSkpXG5cbiAgICBkYXRhYmFzZS5jbG9zZSgpXG5cbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgVWludDhBcnJheSkgcmV0dXJuIHJlc3VsdFxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlc3VsdClcblxuICAgIHRocm93IG5ldyBFcnJvcihcIlNRTGl0ZSB3ZWIgSW5kZXhlZERCIHBlcnNpc3RlbmNlIHJldHVybmVkIHVuc3VwcG9ydGVkIGNvbnRlbnRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgSW5kZXhlZERCIGRhdGFiYXNlIGVudHJ5IGV4aXN0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciBjb250ZW50IGV4aXN0cy5cbiAgICovXG4gIGFzeW5jIGV4aXN0cygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YWJhc2UgPSBhd2FpdCBvcGVuSW5kZXhlZERiKHRoaXMuZW52aXJvbm1lbnQpXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KGRhdGFiYXNlLnRyYW5zYWN0aW9uKFwiZGF0YWJhc2VzXCIsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUoXCJkYXRhYmFzZXNcIikuZ2V0KHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSkpXG5cbiAgICAgIGRhdGFiYXNlLmNsb3NlKClcblxuICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdCAhPT0gbnVsbFxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGRhdGFiYXNlIGJ5dGVzLlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGNvbnRlbnQgLSBEYXRhYmFzZSBieXRlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBzYXZlZC5cbiAgICovXG4gIGFzeW5jIHNhdmUoY29udGVudCkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgb3BlbkluZGV4ZWREYih0aGlzLmVudmlyb25tZW50KVxuXG4gICAgYXdhaXQgaW5kZXhlZERiUmVxdWVzdChkYXRhYmFzZS50cmFuc2FjdGlvbihcImRhdGFiYXNlc1wiLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZShcImRhdGFiYXNlc1wiKS5wdXQoY29udGVudCwgc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpKSlcbiAgICBkYXRhYmFzZS5jbG9zZSgpXG4gIH1cbn1cblxuLyoqIExvY2FsU3RvcmFnZS1iYWNrZWQgU1FMLmpzIGRhdGFiYXNlIGJsb2IgcGVyc2lzdGVuY2UgZm9yIGxlZ2FjeSBtaWdyYXRpb25zLiAqL1xuY2xhc3MgTG9jYWxTdG9yYWdlUGVyc2lzdGVuY2Uge1xuXG4gIC8qKiBAdHlwZSB7XCJsb2NhbHN0b3JhZ2VcIn0gKi9cbiAgbmFtZSA9IFwibG9jYWxzdG9yYWdlXCJcblxuICAvKipcbiAgICogQ3JlYXRlcyBsb2NhbFN0b3JhZ2UgcGVyc2lzdGVuY2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5kYXRhYmFzZU5hbWUgLSBEYXRhYmFzZSBuYW1lLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RhdGFiYXNlTmFtZX0pIHtcbiAgICB0aGlzLmRhdGFiYXNlTmFtZSA9IGRhdGFiYXNlTmFtZVxuICAgIC8qKiBAdHlwZSB7QmV0dGVyTG9jYWxTdG9yYWdlIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuc3RvcmFnZSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGxvY2FsU3RvcmFnZSBkYXRhYmFzZSBlbnRyeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBkZWxldGVkLlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKCkge1xuICAgIGF3YWl0IHRoaXMubG9jYWxTdG9yYWdlKCkuZGVsZXRlKHNxbGl0ZVdlYlBlcnNpc3RlbmNlS2V5KHRoaXMuZGF0YWJhc2VOYW1lKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgbG9jYWxTdG9yYWdlIGRhdGFiYXNlIGVudHJ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxVaW50OEFycmF5IHwgdW5kZWZpbmVkPn0gLSBQZXJzaXN0ZWQgYnl0ZXMuXG4gICAqL1xuICBhc3luYyBsb2FkKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZSgpLmdldChzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSkpXG5cbiAgICBpZiAoY29udGVudCA9PT0gbnVsbCB8fCBjb250ZW50ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiBjb250ZW50XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNvbnRlbnQpXG5cbiAgICByZXR1cm4gLyoqIEB0eXBlIHtVaW50OEFycmF5fSAqLyAoY29udGVudClcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBkYXRhYmFzZSBieXRlcy5cbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBjb250ZW50IC0gRGF0YWJhc2UgYnl0ZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gc2F2ZWQuXG4gICAqL1xuICBhc3luYyBzYXZlKGNvbnRlbnQpIHtcbiAgICBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZSgpLnNldChzcWxpdGVXZWJQZXJzaXN0ZW5jZUtleSh0aGlzLmRhdGFiYXNlTmFtZSksIGNvbnRlbnQpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGxlZ2FjeSBsb2NhbFN0b3JhZ2UgZGF0YWJhc2UgZXhpc3RzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIGNvbnRlbnQgZXhpc3RzLlxuICAgKi9cbiAgYXN5bmMgZXhpc3RzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5sb2NhbFN0b3JhZ2UoKS5nZXQoc3FsaXRlV2ViUGVyc2lzdGVuY2VLZXkodGhpcy5kYXRhYmFzZU5hbWUpKVxuXG4gICAgICByZXR1cm4gY29udGVudCAhPT0gdW5kZWZpbmVkICYmIGNvbnRlbnQgIT09IG51bGxcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsb2NhbFN0b3JhZ2Ugd3JhcHBlci5cbiAgICogQHJldHVybnMge0JldHRlckxvY2FsU3RvcmFnZX0gLSBTdG9yYWdlIHdyYXBwZXIuXG4gICAqL1xuICBsb2NhbFN0b3JhZ2UoKSB7XG4gICAgdGhpcy5zdG9yYWdlIHx8PSBuZXcgQmV0dGVyTG9jYWxTdG9yYWdlKClcblxuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIHByZWZlcnJlZCBhdmFpbGFibGUgU1FMaXRlIHdlYiBwZXJzaXN0ZW5jZSBiYWNrZW5kLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBBcmd1bWVudHMuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGFyZ3MuZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge0luZGV4ZWREYlBlcnNpc3RlbmNlfSBhcmdzLmluZGV4ZWREYlBlcnNpc3RlbmNlIC0gSW5kZXhlZERCIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKiBAcGFyYW0ge0xvY2FsU3RvcmFnZVBlcnNpc3RlbmNlfSBhcmdzLmxvY2FsU3RvcmFnZVBlcnNpc3RlbmNlIC0gTGVnYWN5IGxvY2FsU3RvcmFnZSBwZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHBhcmFtIHtPcGZzUGVyc2lzdGVuY2V9IGFyZ3Mub3Bmc1BlcnNpc3RlbmNlIC0gT1BGUyBwZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8U3FsaXRlV2ViUGVyc2lzdGVuY2U+fSAtIFNlbGVjdGVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdFN1cHBvcnRlZFBlcnNpc3RlbmNlKHtlbnZpcm9ubWVudCwgaW5kZXhlZERiUGVyc2lzdGVuY2UsIGxvY2FsU3RvcmFnZVBlcnNpc3RlbmNlLCBvcGZzUGVyc2lzdGVuY2V9KSB7XG4gIGlmIChhd2FpdCBzdXBwb3J0c09wZnNQZXJzaXN0ZW5jZShlbnZpcm9ubWVudCkpIHJldHVybiBvcGZzUGVyc2lzdGVuY2VcbiAgaWYgKGF3YWl0IHN1cHBvcnRzSW5kZXhlZERiUGVyc2lzdGVuY2UoZW52aXJvbm1lbnQpKSByZXR1cm4gaW5kZXhlZERiUGVyc2lzdGVuY2VcblxuICByZXR1cm4gbG9jYWxTdG9yYWdlUGVyc2lzdGVuY2Vcbn1cblxuLyoqXG4gKiBNaWdyYXRlcyBhbnkgZXhpc3RpbmcgZGF0YWJhc2UgYnl0ZXMgaW50byB0aGUgc2VsZWN0ZWQgcGVyc2lzdGVuY2UgYmFja2VuZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXJndW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGF0YWJhc2VOYW1lIC0gRGF0YWJhc2UgbmFtZS5cbiAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2V9IGFyZ3MuZGVzdGluYXRpb25QZXJzaXN0ZW5jZSAtIFNlbGVjdGVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGFyZ3MuZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge3tkZWxldGU6ICgpID0+IFByb21pc2U8dm9pZD4sIGxvYWQ6ICgpID0+IFByb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59W119IGFyZ3Muc291cmNlUGVyc2lzdGVuY2VzIC0gUGVyc2lzdGVuY2UgYWRhcHRlcnMgdG8gc2NhbiBmb3IgZXhpc3RpbmcgYnl0ZXMuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIG1pZ3JhdGlvbiBpcyBjb21wbGV0ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZVBlcnNpc3RlZERhdGFiYXNlKHtkYXRhYmFzZU5hbWUsIGRlc3RpbmF0aW9uUGVyc2lzdGVuY2UsIGVudmlyb25tZW50LCBzb3VyY2VQZXJzaXN0ZW5jZXN9KSB7XG4gIGlmIChhd2FpdCBkZXN0aW5hdGlvblBlcnNpc3RlbmNlLmxvYWQoKSAhPT0gdW5kZWZpbmVkKSByZXR1cm5cblxuICBmb3IgKGNvbnN0IHNvdXJjZVBlcnNpc3RlbmNlIG9mIHNvdXJjZVBlcnNpc3RlbmNlcykge1xuICAgIGlmIChzb3VyY2VQZXJzaXN0ZW5jZSA9PT0gZGVzdGluYXRpb25QZXJzaXN0ZW5jZSkgY29udGludWVcblxuICAgIGNvbnN0IGRhdGFiYXNlQnl0ZXMgPSBhd2FpdCBsb2FkUGVyc2lzdGVuY2VJZkF2YWlsYWJsZShzb3VyY2VQZXJzaXN0ZW5jZSlcbiAgICBpZiAoZGF0YWJhc2VCeXRlcyA9PT0gdW5kZWZpbmVkKSBjb250aW51ZVxuXG4gICAgYXdhaXQgZGVzdGluYXRpb25QZXJzaXN0ZW5jZS5zYXZlKGRhdGFiYXNlQnl0ZXMpXG4gICAgYXdhaXQgZGVsZXRlU3FsaXRlV2ViUGVyc2lzdGVuY2VzKHtkYXRhYmFzZU5hbWUsIGVudmlyb25tZW50fSlcbiAgICBhd2FpdCBkZXN0aW5hdGlvblBlcnNpc3RlbmNlLnNhdmUoZGF0YWJhc2VCeXRlcylcbiAgICByZXR1cm5cbiAgfVxufVxuXG4vKipcbiAqIExvYWRzIGEgcGVyc2lzdGVuY2UgYmFja2VuZCwgaWdub3JpbmcgdW5hdmFpbGFibGUgYmFja2VuZCBlcnJvcnMuXG4gKiBAcGFyYW0ge3tsb2FkOiAoKSA9PiBQcm9taXNlPFVpbnQ4QXJyYXkgfCB1bmRlZmluZWQ+fX0gcGVyc2lzdGVuY2UgLSBQZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8VWludDhBcnJheSB8IHVuZGVmaW5lZD59IC0gUGVyc2lzdGVkIGJ5dGVzLCBpZiBhdmFpbGFibGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRQZXJzaXN0ZW5jZUlmQXZhaWxhYmxlKHBlcnNpc3RlbmNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHBlcnNpc3RlbmNlLmxvYWQoKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn1cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIE9QRlMgcGVyc2lzdGVuY2UgaXMgdXNhYmxlLlxuICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBlbnZpcm9ubWVudCAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSAtIFdoZXRoZXIgT1BGUyBjYW4gYmUgdXNlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VwcG9ydHNPcGZzUGVyc2lzdGVuY2UoZW52aXJvbm1lbnQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBvcGZzRGlyZWN0b3J5KGVudmlyb25tZW50KVxuICAgIGNvbnN0IGZpbGVIYW5kbGUgPSBhd2FpdCBkaXJlY3RvcnkuZ2V0RmlsZUhhbmRsZShTVVBQT1JUX0NIRUNLX0ZJTEUsIHtjcmVhdGU6IHRydWV9KVxuICAgIGNvbnN0IHdyaXRhYmxlID0gYXdhaXQgZmlsZUhhbmRsZS5jcmVhdGVXcml0YWJsZSgpXG5cbiAgICBhd2FpdCB3cml0YWJsZS53cml0ZShhcnJheUJ1ZmZlckZyb21CeXRlcyhTVVBQT1JUX0NIRUNLX0JZVEVTKSlcbiAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpXG5cbiAgICBjb25zdCBmaWxlID0gYXdhaXQgZmlsZUhhbmRsZS5nZXRGaWxlKClcbiAgICBjb25zdCByZWFkQmFjayA9IG5ldyBVaW50OEFycmF5KGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKSlcblxuICAgIGF3YWl0IGRpcmVjdG9yeS5yZW1vdmVFbnRyeShTVVBQT1JUX0NIRUNLX0ZJTEUpXG5cbiAgICByZXR1cm4gc2FtZUJ5dGVzKHJlYWRCYWNrLCBTVVBQT1JUX0NIRUNLX0JZVEVTKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgSW5kZXhlZERCIHBlcnNpc3RlbmNlIGlzIHVzYWJsZS5cbiAqIEBwYXJhbSB7U3FsaXRlV2ViUGVyc2lzdGVuY2VFbnZpcm9ubWVudH0gZW52aXJvbm1lbnQgLSBCcm93c2VyLWxpa2UgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIEluZGV4ZWREQiBjYW4gYmUgdXNlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3VwcG9ydHNJbmRleGVkRGJQZXJzaXN0ZW5jZShlbnZpcm9ubWVudCkge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgb3BlbkluZGV4ZWREYihlbnZpcm9ubWVudClcbiAgICBjb25zdCBzdG9yZSA9IGRhdGFiYXNlLnRyYW5zYWN0aW9uKFwiZGF0YWJhc2VzXCIsIFwicmVhZHdyaXRlXCIpLm9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpXG5cbiAgICBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KHN0b3JlLnB1dChTVVBQT1JUX0NIRUNLX0JZVEVTLCBTVVBQT1JUX0NIRUNLX0ZJTEUpKVxuXG4gICAgY29uc3QgcmVhZEJhY2sgPSBhd2FpdCBpbmRleGVkRGJSZXF1ZXN0KHN0b3JlLmdldChTVVBQT1JUX0NIRUNLX0ZJTEUpKVxuXG4gICAgYXdhaXQgaW5kZXhlZERiUmVxdWVzdChzdG9yZS5kZWxldGUoU1VQUE9SVF9DSEVDS19GSUxFKSlcbiAgICBkYXRhYmFzZS5jbG9zZSgpXG5cbiAgICByZXR1cm4gcmVhZEJhY2sgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIHNhbWVCeXRlcyhyZWFkQmFjaywgU1VQUE9SVF9DSEVDS19CWVRFUylcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBPcGVucyB0aGUgU1FMaXRlIHdlYiBJbmRleGVkREIgZGF0YWJhc2UuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge1Byb21pc2U8SURCRGF0YWJhc2U+fSAtIE9wZW4gZGF0YWJhc2UuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW5JbmRleGVkRGIoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgaW5kZXhlZERiID0gaW5kZXhlZERiRnJvbUVudmlyb25tZW50KGVudmlyb25tZW50KVxuXG4gIGlmICghaW5kZXhlZERiIHx8IHR5cGVvZiBpbmRleGVkRGIub3BlbiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJJbmRleGVkREIgaXMgbm90IGF2YWlsYWJsZVwiKVxuXG4gIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkRGIub3BlbihcIlZlbG9jaW91c0RhdGFiYXNlRHJpdmVyc1NxbGl0ZVdlYlwiLCAxKVxuICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9ICgpID0+IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IHJlcXVlc3QucmVzdWx0XG5cbiAgICBpZiAoIWRhdGFiYXNlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoXCJkYXRhYmFzZXNcIikpIGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKFwiZGF0YWJhc2VzXCIpXG4gIH1cblxuICByZXR1cm4gYXdhaXQgaW5kZXhlZERiUmVxdWVzdChyZXF1ZXN0KVxufVxuXG4vKipcbiAqIFJlc29sdmVzIGFuIEluZGV4ZWREQiByZXF1ZXN0LlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7SURCUmVxdWVzdDxUPn0gcmVxdWVzdCAtIEluZGV4ZWREQiByZXF1ZXN0LlxuICogQHJldHVybnMge1Byb21pc2U8VD59IC0gUmVxdWVzdCByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGluZGV4ZWREYlJlcXVlc3QocmVxdWVzdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdClcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvciB8fCBuZXcgRXJyb3IoXCJJbmRleGVkREIgcmVxdWVzdCBmYWlsZWRcIikpXG4gIH0pXG59XG5cbi8qKlxuICogRGVsZXRlcyBhIHBlcnNpc3RlbmNlIGJhY2tlbmQsIGlnbm9yaW5nIHVuYXZhaWxhYmxlIGJhY2tlbmQgZXJyb3JzLlxuICogQHBhcmFtIHt7ZGVsZXRlOiAoKSA9PiBQcm9taXNlPHZvaWQ+fX0gcGVyc2lzdGVuY2UgLSBQZXJzaXN0ZW5jZSBhZGFwdGVyLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBkZWxldGlvbiB3YXMgYXR0ZW1wdGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZWxldGVQZXJzaXN0ZW5jZUlmQXZhaWxhYmxlKHBlcnNpc3RlbmNlKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcGVyc2lzdGVuY2UuZGVsZXRlKClcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIHVuYXZhaWxhYmxlIGJhY2tlbmRzIHNvIHJlc2V0IGNsZWFycyBldmVyeSBiYWNrZW5kIHRoZSBicm93c2VyIGNhbiBhY2Nlc3MuXG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIE9QRlMgcm9vdCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge1Byb21pc2U8RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZT59IC0gT1BGUyByb290IGRpcmVjdG9yeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gb3Bmc0RpcmVjdG9yeShlbnZpcm9ubWVudCkge1xuICBjb25zdCBuYXZpZ2F0b3JPYmplY3QgPSBuYXZpZ2F0b3JGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpXG4gIGNvbnN0IHN0b3JhZ2UgPSBuYXZpZ2F0b3JPYmplY3Quc3RvcmFnZVxuXG4gIGlmICghc3RvcmFnZSB8fCB0eXBlb2Ygc3RvcmFnZS5nZXREaXJlY3RvcnkgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiT1BGUyBpcyBub3QgYXZhaWxhYmxlXCIpXG5cbiAgcmV0dXJuIGF3YWl0IHN0b3JhZ2UuZ2V0RGlyZWN0b3J5KClcbn1cblxuLyoqXG4gKiBHZXRzIG5hdmlnYXRvciBmcm9tIGVudmlyb25tZW50LlxuICogQHBhcmFtIHtTcWxpdGVXZWJQZXJzaXN0ZW5jZUVudmlyb25tZW50fSBlbnZpcm9ubWVudCAtIEJyb3dzZXItbGlrZSBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm5zIHt7c3RvcmFnZT86IHtnZXREaXJlY3Rvcnk/OiAoKSA9PiBQcm9taXNlPEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU+fX19IC0gTmF2aWdhdG9yLWxpa2Ugb2JqZWN0LlxuICovXG5mdW5jdGlvbiBuYXZpZ2F0b3JGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gZW52aXJvbm1lbnQubmF2aWdhdG9yXG5cbiAgaWYgKCFjYW5kaWRhdGUgfHwgdHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHt9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7e3N0b3JhZ2U/OiB7Z2V0RGlyZWN0b3J5PzogKCkgPT4gUHJvbWlzZTxGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlPn19fSAqLyAoY2FuZGlkYXRlKVxufVxuXG4vKipcbiAqIEdldHMgSW5kZXhlZERCIGZyb20gZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0ge1NxbGl0ZVdlYlBlcnNpc3RlbmNlRW52aXJvbm1lbnR9IGVudmlyb25tZW50IC0gQnJvd3Nlci1saWtlIGVudmlyb25tZW50LlxuICogQHJldHVybnMge3tvcGVuPzogKG5hbWU6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikgPT4gSURCT3BlbkRCUmVxdWVzdH0gfCB1bmRlZmluZWR9IC0gSW5kZXhlZERCLWxpa2Ugb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpbmRleGVkRGJGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQpIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gZW52aXJvbm1lbnQuaW5kZXhlZERCXG5cbiAgaWYgKCFjYW5kaWRhdGUgfHwgdHlwZW9mIGNhbmRpZGF0ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIHJldHVybiAvKiogQHR5cGUge3tvcGVuPzogKG5hbWU6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikgPT4gSURCT3BlbkRCUmVxdWVzdH19ICovIChjYW5kaWRhdGUpXG59XG5cbi8qKlxuICogQ29udmVydHMgYnl0ZXMgdG8gYSBzdGFuZGFsb25lIEFycmF5QnVmZmVyIGZvciBicm93c2VyIGZpbGUgd3JpdGVzLlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlcyAtIEJ5dGVzIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IC0gU3RhbmRhbG9uZSBBcnJheUJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gYXJyYXlCdWZmZXJGcm9tQnl0ZXMoYnl0ZXMpIHtcbiAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ5dGVMZW5ndGgpXG5cbiAgY29weS5zZXQoYnl0ZXMpXG5cbiAgcmV0dXJuIGNvcHkuYnVmZmVyXG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gZXJyb3IgaXMgYSBmaWxlLW5vdC1mb3VuZCBlcnJvci5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBFcnJvciBjYW5kaWRhdGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRoZSBlcnJvciBpcyBub3QgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGlzTm90Rm91bmRFcnJvcihlcnJvcikge1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSBcIk5vdEZvdW5kRXJyb3JcIlxufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBieXRlIGFycmF5cy5cbiAqIEBwYXJhbSB7VWludDhBcnJheX0gbGVmdCAtIExlZnQgYnl0ZXMuXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHJpZ2h0IC0gUmlnaHQgYnl0ZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGJ5dGVzIG1hdGNoLlxuICovXG5mdW5jdGlvbiBzYW1lQnl0ZXMobGVmdCwgcmlnaHQpIHtcbiAgaWYgKGxlZnQubGVuZ3RoICE9PSByaWdodC5sZW5ndGgpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBsZWZ0LmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSByaWdodFtpbmRleF0pXG59XG4iXX0=
@@ -1,4 +1,3 @@
1
- export const CLOSED_CONNECTION: unique symbol;
2
1
  /**
3
2
  * PendingCheckout type.
4
3
  * @typedef {object} PendingCheckout
@@ -12,6 +11,7 @@ export const CLOSED_CONNECTION: unique symbol;
12
11
  * @property {number | null} timeoutMillis - Milliseconds to wait before rejecting, or null when disabled.
13
12
  * @property {ReturnType<typeof setTimeout> | undefined} timeoutTimer - Timer that rejects the pending checkout.
14
13
  */
14
+ export const CLOSED_CONNECTION: unique symbol;
15
15
  export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends BasePool {
16
16
  /**
17
17
  * Global fallback connections keyed by configuration instance and pool identifier.
@@ -39,6 +39,16 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
39
39
  * @type {import("../drivers/base.js").default | undefined}
40
40
  */
41
41
  _testSharedConnection: import("../drivers/base.js").default | undefined;
42
+ /**
43
+ * Dynamically resolves the connection eligible for in-process test request sharing.
44
+ * @type {(() => import("../drivers/base.js").default | undefined) | undefined}
45
+ */
46
+ _testSharedConnectionProvider: (() => import("../drivers/base.js").default | undefined) | undefined;
47
+ /**
48
+ * Identifies the lifecycle that installed the current shared connection or provider.
49
+ * @type {import("./base.js").TestSharedConnectionRegistration | undefined}
50
+ */
51
+ _testSharedConnectionRegistration: import("./base.js").TestSharedConnectionRegistration | undefined;
42
52
  /**
43
53
  * Connections.
44
54
  * @type {import("../drivers/base.js").default[]} */
@@ -294,6 +304,24 @@ export default class VelociousDatabasePoolAsyncTrackedMultiConnection extends Ba
294
304
  * @returns {void} - No return value.
295
305
  */
296
306
  setGlobalConnection(connection: import("../drivers/base.js").default): void;
307
+ /**
308
+ * Set a shared connection for test mode so that HTTP handlers running
309
+ * in the same process can reuse the test runner's database connection.
310
+ * @param {import("../drivers/base.js").default} connection - Shared connection.
311
+ * @returns {import("./base.js").TestSharedConnectionRegistration} - Opaque registration handle.
312
+ */
313
+ setTestSharedConnection(connection: import("../drivers/base.js").default): import("./base.js").TestSharedConnectionRegistration;
314
+ /**
315
+ * Sets a provider that is evaluated when an in-process test request is dispatched.
316
+ * @param {() => import("../drivers/base.js").default | undefined} provider - Shared connection provider.
317
+ * @returns {import("./base.js").TestSharedConnectionRegistration} - Opaque registration handle.
318
+ */
319
+ setTestSharedConnectionProvider(provider: () => import("../drivers/base.js").default | undefined): import("./base.js").TestSharedConnectionRegistration;
320
+ /**
321
+ * Resolves the connection currently eligible for in-process test request sharing.
322
+ * @returns {import("../drivers/base.js").default | undefined} - Shared connection.
323
+ */
324
+ testSharedConnection(): import("../drivers/base.js").default | undefined;
297
325
  /**
298
326
  * Runs debug connection snapshots.
299
327
  * @param {number} now - Current timestamp.
@@ -1 +1 @@
1
- {"version":3,"file":"async-tracked-multi-connection.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/async-tracked-multi-connection.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"async-tracked-multi-connection.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/async-tracked-multi-connection.js"],"names":[],"mappings":"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"}