sonamu 0.11.16 → 0.13.0

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 (322) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +1 -2
  2. package/dist/ai/agents/agent.js +2 -3
  3. package/dist/ai/agents/index.js +1 -2
  4. package/dist/ai/index.js +1 -2
  5. package/dist/ai/providers/rtzr/api.js +1 -2
  6. package/dist/ai/providers/rtzr/error.js +2 -3
  7. package/dist/ai/providers/rtzr/model.js +1 -2
  8. package/dist/ai/providers/rtzr/options.js +1 -2
  9. package/dist/ai/providers/rtzr/provider.js +1 -2
  10. package/dist/ai/providers/rtzr/utils.js +1 -2
  11. package/dist/api/base-frame.js +4 -4
  12. package/dist/api/caster.d.ts +1 -1
  13. package/dist/api/caster.d.ts.map +1 -1
  14. package/dist/api/caster.js +9 -9
  15. package/dist/api/code-converters.js +6 -5
  16. package/dist/api/config.d.ts +1 -1
  17. package/dist/api/config.d.ts.map +1 -1
  18. package/dist/api/config.js +2 -3
  19. package/dist/api/context.d.ts +2 -3
  20. package/dist/api/context.d.ts.map +1 -1
  21. package/dist/api/context.js +2 -3
  22. package/dist/api/decorators.js +2 -3
  23. package/dist/api/http-validator.js +2 -3
  24. package/dist/api/index.js +8 -3
  25. package/dist/api/secret.js +1 -2
  26. package/dist/api/sonamu.d.ts +3 -5
  27. package/dist/api/sonamu.d.ts.map +1 -1
  28. package/dist/api/sonamu.js +30 -24
  29. package/dist/api/validator.js +1 -2
  30. package/dist/api/websocket-helpers.js +2 -3
  31. package/dist/auth/audit-log/builders.js +1 -2
  32. package/dist/auth/audit-log/client-ip.js +2 -3
  33. package/dist/auth/audit-log/events.js +1 -2
  34. package/dist/auth/audit-log/plugin.d.ts.map +1 -1
  35. package/dist/auth/audit-log/plugin.js +2 -3
  36. package/dist/auth/audit-log-ingestor.js +2 -3
  37. package/dist/auth/auth-generator.js +2 -3
  38. package/dist/auth/better-auth-entities.js +1 -2
  39. package/dist/auth/better-auth-request.js +2 -3
  40. package/dist/auth/index.js +2 -3
  41. package/dist/auth/knex-adapter.js +2 -3
  42. package/dist/auth/plugins/entity-definitions/admin.js +1 -2
  43. package/dist/auth/plugins/entity-definitions/anonymous.js +1 -2
  44. package/dist/auth/plugins/entity-definitions/api-key.js +1 -2
  45. package/dist/auth/plugins/entity-definitions/audit-log.js +1 -2
  46. package/dist/auth/plugins/entity-definitions/index.js +1 -2
  47. package/dist/auth/plugins/entity-definitions/jwt.js +1 -2
  48. package/dist/auth/plugins/entity-definitions/organization.js +1 -2
  49. package/dist/auth/plugins/entity-definitions/passkey.js +1 -2
  50. package/dist/auth/plugins/entity-definitions/phone-number.js +1 -2
  51. package/dist/auth/plugins/entity-definitions/sso.js +1 -2
  52. package/dist/auth/plugins/entity-definitions/two-factor.js +1 -2
  53. package/dist/auth/plugins/entity-definitions/username.js +1 -2
  54. package/dist/auth/plugins/wrappers/admin.d.ts +33 -32
  55. package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
  56. package/dist/auth/plugins/wrappers/admin.js +2 -3
  57. package/dist/auth/plugins/wrappers/anonymous.js +2 -3
  58. package/dist/auth/plugins/wrappers/api-key.js +2 -3
  59. package/dist/auth/plugins/wrappers/jwt.js +2 -3
  60. package/dist/auth/plugins/wrappers/organization.js +2 -3
  61. package/dist/auth/plugins/wrappers/passkey.js +2 -3
  62. package/dist/auth/plugins/wrappers/phone-number.d.ts +43 -1
  63. package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
  64. package/dist/auth/plugins/wrappers/phone-number.js +2 -3
  65. package/dist/auth/plugins/wrappers/sso.d.ts +138 -187
  66. package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
  67. package/dist/auth/plugins/wrappers/sso.js +1 -2
  68. package/dist/auth/plugins/wrappers/two-factor.d.ts +51 -10
  69. package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
  70. package/dist/auth/plugins/wrappers/two-factor.js +2 -3
  71. package/dist/auth/plugins/wrappers/username.d.ts +39 -5
  72. package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
  73. package/dist/auth/plugins/wrappers/username.js +2 -3
  74. package/dist/bin/build-config.js +5 -5
  75. package/dist/bin/compiler-policy.js +2 -3
  76. package/dist/bin/fixture.js +7 -5
  77. package/dist/bin/hmr-hook-register.js +1 -2
  78. package/dist/bin/migrate-targets.js +2 -3
  79. package/dist/bin/test-command.js +2 -3
  80. package/dist/bin/ts-loader-register.js +2 -3
  81. package/dist/bin/ts-loader-registration.js +2 -3
  82. package/dist/bin/typecheck-web.js +2 -3
  83. package/dist/cache/cache-manager.js +1 -2
  84. package/dist/cache/decorator.js +2 -3
  85. package/dist/cache/drivers.js +1 -2
  86. package/dist/cache/index.js +2 -3
  87. package/dist/cache-control/cache-control.js +1 -2
  88. package/dist/code-formatting/index.js +2 -3
  89. package/dist/code-formatting/oxfmt.js +2 -3
  90. package/dist/code-formatting/oxlint.js +2 -3
  91. package/dist/compress/compress.js +1 -2
  92. package/dist/compress/index.js +2 -2
  93. package/dist/compress/types.d.ts +1 -1
  94. package/dist/compress/types.d.ts.map +1 -1
  95. package/dist/cone/cone-generator.js +2 -3
  96. package/dist/database/_batch_update.js +1 -2
  97. package/dist/database/base-model.js +4 -4
  98. package/dist/database/db.js +4 -4
  99. package/dist/database/knex.js +2 -3
  100. package/dist/database/puri-wrapper.js +2 -3
  101. package/dist/database/puri.js +23 -22
  102. package/dist/database/puri.types.js +1 -2
  103. package/dist/database/transaction-context.js +1 -2
  104. package/dist/database/upsert-builder.js +2 -3
  105. package/dist/dict/en.js +2 -3
  106. package/dist/dict/index.js +3 -3
  107. package/dist/dict/ko.js +2 -3
  108. package/dist/dict/rc-keys.js +1 -2
  109. package/dist/dict/sd.js +2 -3
  110. package/dist/dict/sonamu-dictionary.js +7 -6
  111. package/dist/dict/utils.js +2 -3
  112. package/dist/entity/entity-manager.d.ts +66 -66
  113. package/dist/entity/entity-manager.js +4 -4
  114. package/dist/entity/entity-template-cone.js +2 -3
  115. package/dist/entity/entity.js +21 -18
  116. package/dist/env.js +1 -2
  117. package/dist/exceptions/error-handler.d.ts.map +1 -1
  118. package/dist/exceptions/error-handler.js +2 -3
  119. package/dist/exceptions/so-exceptions.js +2 -3
  120. package/dist/filter/index.js +3 -2
  121. package/dist/filter/types.js +1 -2
  122. package/dist/filter/utils.js +7 -6
  123. package/dist/index.d.ts +1 -0
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +42 -6
  126. package/dist/logger/category.js +2 -3
  127. package/dist/logger/configure.js +5 -5
  128. package/dist/migration/code-generation.js +23 -16
  129. package/dist/migration/index-where-predicate.js +2 -3
  130. package/dist/migration/migration-set.js +2 -3
  131. package/dist/migration/migrator.js +2 -3
  132. package/dist/migration/postgresql-schema-reader.js +6 -9
  133. package/dist/migration/slack-confirm.js +2 -3
  134. package/dist/naite/naite-reporter.js +2 -3
  135. package/dist/naite/naite.js +10 -8
  136. package/dist/runtime-type.js +2 -3
  137. package/dist/ssr/hmr-opt-out.js +1 -2
  138. package/dist/ssr/index.js +7 -4
  139. package/dist/ssr/registry.js +1 -2
  140. package/dist/ssr/renderer.js +2 -3
  141. package/dist/storage/base-file.js +1 -2
  142. package/dist/storage/buffered-file.js +2 -3
  143. package/dist/storage/drivers.js +1 -2
  144. package/dist/storage/index.js +2 -3
  145. package/dist/storage/s3-driver.js +1 -2
  146. package/dist/storage/storage-manager.js +2 -3
  147. package/dist/storage/uploaded-file.js +2 -3
  148. package/dist/stream/__tests__/ws-test-helpers.d.ts +108 -0
  149. package/dist/stream/__tests__/ws-test-helpers.d.ts.map +1 -0
  150. package/dist/stream/__tests__/ws-test-helpers.js +259 -0
  151. package/dist/stream/index.d.ts +1 -0
  152. package/dist/stream/index.d.ts.map +1 -1
  153. package/dist/stream/index.js +15 -4
  154. package/dist/stream/sse.js +1 -2
  155. package/dist/stream/ws-audience-resolver.d.ts +8 -5
  156. package/dist/stream/ws-audience-resolver.d.ts.map +1 -1
  157. package/dist/stream/ws-audience-resolver.js +17 -15
  158. package/dist/stream/ws-audience.js +1 -2
  159. package/dist/stream/ws-cluster-bus.d.ts +9 -4
  160. package/dist/stream/ws-cluster-bus.d.ts.map +1 -1
  161. package/dist/stream/ws-cluster-bus.js +2 -3
  162. package/dist/stream/ws-core.d.ts +10 -0
  163. package/dist/stream/ws-core.d.ts.map +1 -1
  164. package/dist/stream/ws-delivery.d.ts +30 -4
  165. package/dist/stream/ws-delivery.d.ts.map +1 -1
  166. package/dist/stream/ws-delivery.js +200 -54
  167. package/dist/stream/ws-frame.d.ts +15 -0
  168. package/dist/stream/ws-frame.d.ts.map +1 -0
  169. package/dist/stream/ws-frame.js +28 -0
  170. package/dist/stream/ws-local-connection-store.d.ts +4 -4
  171. package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
  172. package/dist/stream/ws-local-connection-store.js +3 -4
  173. package/dist/stream/ws-presence-index.d.ts +36 -0
  174. package/dist/stream/ws-presence-index.d.ts.map +1 -0
  175. package/dist/stream/ws-presence-index.js +176 -0
  176. package/dist/stream/ws-presence-store.d.ts +39 -39
  177. package/dist/stream/ws-presence-store.d.ts.map +1 -1
  178. package/dist/stream/ws-presence-store.js +23 -154
  179. package/dist/stream/ws-registry.d.ts +45 -17
  180. package/dist/stream/ws-registry.d.ts.map +1 -1
  181. package/dist/stream/ws-registry.js +170 -62
  182. package/dist/stream/ws-session-id.d.ts +14 -0
  183. package/dist/stream/ws-session-id.d.ts.map +1 -0
  184. package/dist/stream/ws-session-id.js +36 -0
  185. package/dist/stream/ws-telemetry-memory.js +3 -4
  186. package/dist/stream/ws-telemetry-trace.js +1 -2
  187. package/dist/stream/ws-telemetry.js +2 -3
  188. package/dist/stream/ws.d.ts +20 -10
  189. package/dist/stream/ws.d.ts.map +1 -1
  190. package/dist/stream/ws.js +60 -38
  191. package/dist/syncer/api-parser.js +2 -3
  192. package/dist/syncer/checksum.js +4 -4
  193. package/dist/syncer/code-generator.js +4 -4
  194. package/dist/syncer/entity-operations.js +2 -3
  195. package/dist/syncer/event-batcher.js +1 -2
  196. package/dist/syncer/file-copy.js +2 -3
  197. package/dist/syncer/file-patterns.js +2 -3
  198. package/dist/syncer/file-tracking.js +2 -3
  199. package/dist/syncer/filesystem-dependencies.js +1 -2
  200. package/dist/syncer/index.js +8 -2
  201. package/dist/syncer/module-loader.js +8 -6
  202. package/dist/syncer/syncer-actions.js +8 -7
  203. package/dist/syncer/syncer.js +13 -8
  204. package/dist/syncer/watcher.js +2 -3
  205. package/dist/tasks/decorator.js +1 -2
  206. package/dist/tasks/step-wrapper.js +2 -3
  207. package/dist/tasks/workflow-manager.js +2 -3
  208. package/dist/template/entity-converter.js +17 -16
  209. package/dist/template/helpers.js +2 -3
  210. package/dist/template/implementations/entity.template.js +2 -3
  211. package/dist/template/implementations/entry-server.template.js +2 -3
  212. package/dist/template/implementations/generated.template.js +2 -3
  213. package/dist/template/implementations/generated_http.template.js +6 -6
  214. package/dist/template/implementations/generated_sso.template.js +2 -3
  215. package/dist/template/implementations/http_validators.template.js +2 -3
  216. package/dist/template/implementations/init_types.template.js +2 -3
  217. package/dist/template/implementations/model.template.js +4 -4
  218. package/dist/template/implementations/model_test.template.js +2 -3
  219. package/dist/template/implementations/queries.template.js +2 -3
  220. package/dist/template/implementations/sd.template.js +2 -3
  221. package/dist/template/implementations/services.template.js +2 -3
  222. package/dist/template/implementations/view_form.template.js +12 -9
  223. package/dist/template/implementations/view_id_all_select.template.js +2 -3
  224. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  225. package/dist/template/implementations/view_list.template.js +19 -17
  226. package/dist/template/implementations/view_search_input.template.js +2 -3
  227. package/dist/template/index.js +9 -3
  228. package/dist/template/template-manager.js +2 -3
  229. package/dist/template/template-types.js +1 -2
  230. package/dist/template/template.js +2 -3
  231. package/dist/template/zod-converter.js +54 -47
  232. package/dist/testing/_relation-graph.js +2 -3
  233. package/dist/testing/bootstrap.js +2 -3
  234. package/dist/testing/data-explorer.js +2 -3
  235. package/dist/testing/dev-test-routes.js +2 -3
  236. package/dist/testing/dev-vitest-manager.js +15 -12
  237. package/dist/testing/faker-mappings.js +1 -2
  238. package/dist/testing/filesystem.js +2 -3
  239. package/dist/testing/fixture-generator.js +2 -3
  240. package/dist/testing/fixture-loader.js +1 -2
  241. package/dist/testing/fixture-manager.js +12 -9
  242. package/dist/testing/global-setup.js +5 -5
  243. package/dist/testing/index.js +6 -3
  244. package/dist/testing/naite-vitest-reporter.js +1 -2
  245. package/dist/testing/parallel-db-manager.js +2 -3
  246. package/dist/testing/vitest-helpers.js +2 -3
  247. package/dist/tooling/__tests__/helpers/sonamu-test-root.js +2 -3
  248. package/dist/tooling/cdd-service.js +1 -2
  249. package/dist/tooling/cli-tooling.js +1 -2
  250. package/dist/tooling/fixture-service.js +1 -2
  251. package/dist/tooling/index.js +1 -2
  252. package/dist/tooling/test-run-client.js +2 -3
  253. package/dist/tsdown.api.config.js +1 -2
  254. package/dist/types/types.js +2 -3
  255. package/dist/ui/ai-api.d.ts.map +1 -1
  256. package/dist/ui/ai-api.js +4 -5
  257. package/dist/ui/ai-client.d.ts +2 -2
  258. package/dist/ui/ai-client.d.ts.map +1 -1
  259. package/dist/ui/ai-client.js +9 -8
  260. package/dist/ui/api.d.ts.map +1 -1
  261. package/dist/ui/api.js +11 -8
  262. package/dist/ui/async-route.js +1 -2
  263. package/dist/ui/cdd-service.js +22 -21
  264. package/dist/ui/migrations-api.js +6 -5
  265. package/dist/ui-web/assets/index-QDMyy31K.js +180 -0
  266. package/dist/ui-web/assets/index-dV7akMFB.css +1 -0
  267. package/dist/ui-web/index.html +2 -2
  268. package/dist/utils/async-utils.js +1 -2
  269. package/dist/utils/class-name.js +1 -2
  270. package/dist/utils/console-util.js +1 -2
  271. package/dist/utils/controller.js +2 -3
  272. package/dist/utils/esm-utils.js +1 -2
  273. package/dist/utils/fs-utils.js +2 -3
  274. package/dist/utils/lodash-able.js +1 -2
  275. package/dist/utils/model.js +1 -2
  276. package/dist/utils/object-utils.js +2 -3
  277. package/dist/utils/path-utils.js +2 -3
  278. package/dist/utils/process-utils.js +2 -3
  279. package/dist/utils/runtime-value.js +1 -2
  280. package/dist/utils/sql-parser.js +2 -3
  281. package/dist/utils/type-utils.js +8 -8
  282. package/dist/utils/utils.js +2 -3
  283. package/dist/utils/zod-error.js +2 -3
  284. package/dist/vector/chunking.js +1 -2
  285. package/dist/vector/config.js +1 -2
  286. package/dist/vector/embedding.js +4 -4
  287. package/package.json +63 -63
  288. package/src/ai/agents/agent.ts +1 -1
  289. package/src/api/__tests__/sonamu.plugins.test.ts +11 -1
  290. package/src/api/__tests__/sonamu.websocket-routes.test.ts +234 -0
  291. package/src/api/__tests__/sonamu.websocket.test.ts +241 -24
  292. package/src/api/config.ts +1 -1
  293. package/src/api/context.ts +2 -8
  294. package/src/api/sonamu.ts +46 -28
  295. package/src/auth/audit-log/plugin.ts +2 -0
  296. package/src/compress/types.ts +1 -1
  297. package/src/exceptions/error-handler.ts +3 -2
  298. package/src/index.ts +1 -0
  299. package/src/stream/__tests__/ws-contracts.test.ts +483 -265
  300. package/src/stream/__tests__/ws-multinode.test.ts +326 -0
  301. package/src/stream/__tests__/ws-registry-async.test.ts +855 -0
  302. package/src/stream/__tests__/ws-test-helpers.ts +360 -0
  303. package/src/stream/__tests__/ws.test.ts +342 -145
  304. package/src/stream/index.ts +1 -0
  305. package/src/stream/ws-audience-resolver.ts +21 -19
  306. package/src/stream/ws-cluster-bus.ts +12 -4
  307. package/src/stream/ws-core.ts +14 -0
  308. package/src/stream/ws-delivery.ts +321 -97
  309. package/src/stream/ws-frame.ts +39 -0
  310. package/src/stream/ws-local-connection-store.ts +10 -9
  311. package/src/stream/ws-presence-index.ts +273 -0
  312. package/src/stream/ws-presence-store.ts +64 -284
  313. package/src/stream/ws-registry.ts +272 -85
  314. package/src/stream/ws-session-id.ts +39 -0
  315. package/src/stream/ws.ts +91 -50
  316. package/src/template/implementations/model.template.ts +3 -3
  317. package/src/template/implementations/view_list.template.ts +12 -13
  318. package/src/ui/ai-api.ts +4 -2
  319. package/src/ui/ai-client.ts +2 -2
  320. package/src/ui/api.ts +58 -62
  321. package/dist/ui-web/assets/index-BMdIyKXS.css +0 -1
  322. package/dist/ui-web/assets/index-LpE8u19O.js +0 -178
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { init_runtime_value, isFunctionValue, isObjectValue } from "../utils/runtime-value.js";
3
3
  import { applyCurrentSnapshotToProcessEnv, init_env } from "../env.js";
4
- //#region src/api/config.ts
4
+ // src/api/config.ts
5
5
  function isExecutableConfig(value) {
6
6
  return isFunctionValue(value);
7
7
  }
@@ -39,8 +39,7 @@ var init_config = __esmMin((() => {
39
39
  await (await import("../bin/ts-loader-registration.js")).ensureTsLoaderRegistered(rootPath);
40
40
  } };
41
41
  }));
42
- //#endregion
43
42
  init_config();
44
43
  export { defineConfig, init_config, loadConfig, normalizeZodCompilerPolicy };
45
44
 
46
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRmFzdGlmeUNvbXByZXNzT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9jb21wcmVzc1wiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5Q29yc09wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvY29yc1wiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2Zvcm1ib2R5XCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5U3RhdGljT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9zdGF0aWNcIjtcbmltcG9ydCB7IHR5cGUgV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS93ZWJzb2NrZXRcIjtcbmltcG9ydCB7IHR5cGUgQmV0dGVyQXV0aE9wdGlvbnMgfSBmcm9tIFwiYmV0dGVyLWF1dGhcIjtcbmltcG9ydCB7XG4gIHR5cGUgRmFzdGlmeUluc3RhbmNlLFxuICB0eXBlIEZhc3RpZnlSZXBseSxcbiAgdHlwZSBGYXN0aWZ5UmVxdWVzdCxcbiAgdHlwZSBGYXN0aWZ5U2VydmVyT3B0aW9ucyxcbn0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB7IHR5cGUgUXNQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktcXNcIjtcbmltcG9ydCB7IHR5cGUgU3NlUGx1Z2luT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5LXNzZS12Mi9saWIvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmltcG9ydCB7IHR5cGUgQ2FjaGVDb25maWcgfSBmcm9tIFwiLi4vY2FjaGUvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IGFwcGx5Q3VycmVudFNuYXBzaG90VG9Qcm9jZXNzRW52IH0gZnJvbSBcIi4uL2VudlwiO1xuaW1wb3J0IHsgdHlwZSBTb25hbXVMb2dnaW5nT3B0aW9ucyB9IGZyb20gXCIuLi9sb2dnZXIvY29uZmlndXJlXCI7XG5pbXBvcnQgeyB0eXBlIFN0b3JhZ2VDb25maWcgfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBXZWJTb2NrZXRSdW50aW1lT3B0aW9ucyB9IGZyb20gXCIuLi9zdHJlYW0vd3NcIjtcbmltcG9ydCB7IHR5cGUgV29ya2Zsb3dPcHRpb25zIH0gZnJvbSBcIi4uL3Rhc2tzL3dvcmtmbG93LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgRXhlY3V0YWJsZSwgdHlwZSBTb25hbXVGYXN0aWZ5Q29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uVmFsdWUsIGlzT2JqZWN0VmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgdHlwZSBDb250ZXh0LCB0eXBlIFdlYlNvY2tldENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmZ1bmN0aW9uIGlzRXhlY3V0YWJsZUNvbmZpZyhcbiAgdmFsdWU6IEV4ZWN1dGFibGU8U29uYW11Q29uZmlnPixcbik6IHZhbHVlIGlzICgoKSA9PiBTb25hbXVDb25maWcpIHwgKCgpID0+IFByb21pc2U8U29uYW11Q29uZmlnPikge1xuICByZXR1cm4gaXNGdW5jdGlvblZhbHVlKHZhbHVlKTtcbn1cblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VDb25maWcgPSBPbWl0PEtuZXguQ29uZmlnLCBcImNvbm5lY3Rpb25cIj4gJiB7XG4gIGNvbm5lY3Rpb24/OiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbn07XG5cbi8qKlxuICogaTE4biDshKTsoJVcbiAqL1xuZXhwb3J0IHR5cGUgU29uYW11STE4bk9wdGlvbnMgPSB7XG4gIC8qKiDquLDrs7ggbG9jYWxlICjtgqQg7KCV7J2YIOq4sOykgCArIOufsO2DgOyehCDquLDrs7jqsJIpICovXG4gIGRlZmF1bHRMb2NhbGU6IHN0cmluZztcbiAgLyoqIOyngOybkO2VmOuKlCBsb2NhbGUg66qp66GdICovXG4gIHN1cHBvcnRlZExvY2FsZXM6IHN0cmluZ1tdO1xufTtcblxuLyoqXG4gKiBEZXYg7ISc67KEIOuCtCBWaXRlc3Qg7IOB7KO8IOyduOyKpO2EtOyKpCDshKTsoJVcbiAqL1xuZXhwb3J0IHR5cGUgU29uYW11RGV2UnVubmVyQ29uZmlnID0ge1xuICAvKiogRGV2UnVubmVyIO2ZnOyEse2ZlCDsl6zrtoAgKOq4sOuzuDogZmFsc2UpICovXG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKiDthYzsiqTtirgg7JeU65Oc7Y+s7J247Yq4IOqyveuhnCDsoJHrkZDsgqwgKOq4sOuzuDogL19fdGVzdF9fKSAqL1xuICByb3V0ZVByZWZpeD86IHN0cmluZztcbiAgLyoqIHZpdGVzdC5jb25maWcudHMg6rK966GcIChhcGktcm9vdCDsg4HrjIDqsr3roZwpICovXG4gIHZpdGVzdENvbmZpZ1BhdGg/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIO2FjOyKpO2KuCDshKTsoJVcbiAqIHZpdGVzdCDrs5HroKwg7YWM7Iqk7YyF7J2EIHNvbmFtdS5jb25maWcudHMg7ZWcIOqzs+yXkOyEnCDqtIDrpqztlZjquLAg7JyE7ZWcIOyEpOygleyeheuLiOuLpC5cbiAqL1xuZXhwb3J0IHR5cGUgU29uYW11VGVzdENvbmZpZyA9IHtcbiAgLyoqIOuzkeugrCDthYzsiqTtjIUg7Zmc7ISx7ZmUICjquLDrs7g6IGZhbHNlKSAqL1xuICBwYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKiDrs5HroKwg7Iuk7ZaJIOybjOy7pCDsiJggKOq4sOuzuDogNCkgKi9cbiAgbWF4V29ya2Vycz86IG51bWJlcjtcbiAgLyoqIERldiDshJzrsoQg64K0IFZpdGVzdCDsg4Hso7wg7J247Iqk7YS07IqkIOyEpOyglSAqL1xuICBkZXZSdW5uZXI/OiBTb25hbXVEZXZSdW5uZXJDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBab2RDb21waWxlckFwaU1vZGUgPSBmYWxzZSB8IFwiaml0XCIgfCBcImFvdFwiO1xuZXhwb3J0IHR5cGUgWm9kQ29tcGlsZXJDb25maWcgPVxuICB8IGZhbHNlXG4gIHwge1xuICAgICAgYXBpPzogWm9kQ29tcGlsZXJBcGlNb2RlO1xuICAgIH07XG5leHBvcnQgdHlwZSBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3kgPSB7XG4gIGFwaTogWm9kQ29tcGlsZXJBcGlNb2RlO1xuICB0YXJnZXRzOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplWm9kQ29tcGlsZXJQb2xpY3k8VmFsdWU+KFxuICB2YWx1ZTogVmFsdWUsXG4gIF9zeW5jVGFyZ2V0czogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbik6IE5vcm1hbGl6ZWRab2RDb21waWxlclBvbGljeSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgIHJldHVybiB7IGFwaTogZmFsc2UsIHRhcmdldHM6IHt9IH07XG4gIH1cbiAgaWYgKCFpc09iamVjdFZhbHVlKHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInZhbGlkYXRpb24uem9kQ29tcGlsZXIgbXVzdCBiZSBmYWxzZSBvciBhbiBvYmplY3RcIik7XG4gIH1cblxuICBjb25zdCBhcGkgPSBcImFwaVwiIGluIHZhbHVlID8gKHZhbHVlLmFwaSA/PyBmYWxzZSkgOiBmYWxzZTtcbiAgaWYgKGFwaSAhPT0gZmFsc2UgJiYgYXBpICE9PSBcImppdFwiICYmIGFwaSAhPT0gXCJhb3RcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcInZhbGlkYXRpb24uem9kQ29tcGlsZXIuYXBpIG11c3QgYmUgZmFsc2UsICdqaXQnLCBvciAnYW90J1wiKTtcbiAgfVxuXG4gIGlmIChcInRhcmdldHNcIiBpbiB2YWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInZhbGlkYXRpb24uem9kQ29tcGlsZXIudGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBBUEktb25seSBwaGFzZVwiKTtcbiAgfVxuXG4gIHJldHVybiB7IGFwaSwgdGFyZ2V0czoge30gfTtcbn1cblxuZXhwb3J0IHR5cGUgU29uYW11Q29uZmlnPFRTaW5rSWQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRGaWx0ZXJJZCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSB7XG4gIHByb2plY3ROYW1lPzogc3RyaW5nO1xuXG4gIGFwaToge1xuICAgIGRpcjogc3RyaW5nO1xuICAgIHJvdXRlOiB7XG4gICAgICBwcmVmaXg6IHN0cmluZztcbiAgICB9O1xuICAgIHRpbWV6b25lPzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBpMThuIOyEpOyglVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGkxOG46IHtcbiAgICogICBkZWZhdWx0TG9jYWxlOiAna28nLFxuICAgKiAgIHN1cHBvcnRlZExvY2FsZXM6IFsna28nLCAnZW4nLCAnamEnXSxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGkxOG46IFNvbmFtdUkxOG5PcHRpb25zO1xuXG4gIHN5bmM6IHtcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTsgLy8gXCJ3ZWJcIiwgXCJhcHBcIiDrk7FcbiAgfTtcblxuICB2YWxpZGF0aW9uPzoge1xuICAgIHpvZENvbXBpbGVyPzogWm9kQ29tcGlsZXJDb25maWc7XG4gIH07XG5cbiAgZGF0YWJhc2U6IHtcbiAgICAvLyDrjbDsnbTthLDrsqDsnbTsiqQocGfripQgcGcg66qo65OILCBwZ25hdGl2ZeuKlCBwZy1uYXRpdmUg66qo65OI7J2YIOyEpOy5mOqwgCDtlYTsmpTtlanri4jri6QuKVxuICAgIGRhdGFiYXNlPzogXCJwZ1wiIHwgXCJwZ25hdGl2ZVwiO1xuICAgIC8vIOuqqOuToCDtmZjqsr3sl5Ag7KCB7Jqp65CgIOq4sOuzuCBLbmV4IOyYteyFmFxuICAgIGRlZmF1bHRPcHRpb25zPzogRGF0YWJhc2VDb25maWc7XG4gIH07XG5cbiAgbG9nZ2luZz86IGZhbHNlIHwgU29uYW11TG9nZ2luZ09wdGlvbnM8VFNpbmtJZCwgVEZpbHRlcklkPjtcbiAgc2VydmVyOiBTb25hbXVTZXJ2ZXJPcHRpb25zO1xuICB0YXNrcz86IFNvbmFtdVRhc2tPcHRpb25zO1xuXG4gIC8qKlxuICAgKiDthYzsiqTtirgg7ISk7KCVICjrs5HroKwg7YWM7Iqk7YyFIOuTsSlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0ZXN0OiB7XG4gICAqICAgcGFyYWxsZWw6IHRydWUsXG4gICAqICAgbWF4V29ya2VyczogNCxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHRlc3Q/OiBTb25hbXVUZXN0Q29uZmlnO1xuXG4gIC8qKlxuICAgKiDsmbjrtoAg7JeQ65SU7YSwIOyEpOyglSAoQ0REIOuTseyXkOyEnCDtjIzsnbwg7Y647KeRIOyLnCDsgqzsmqkpXG4gICAqIOuvuOyEpOyglSDsi5wgXCJ2c2NvZGVcIuulvCDquLDrs7jqsJLsnLzroZwg7IKs7Jqp7ZWp64uI64ukLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGV4dGVybmFsRWRpdG9yOiBcImN1cnNvclwiXG4gICAqIGBgYFxuICAgKi9cbiAgZXh0ZXJuYWxFZGl0b3I/OiBcIlZpc3VhbCBTdHVkaW8gQ29kZVwiIHwgXCJaZWRcIiB8IFwiQ3Vyc29yXCI7XG5cbiAgLyoqXG4gICAqIFNsYWNrIOyKueyduCDshKTsoJUgKFByb2R1Y3Rpb24g66eI7J206re466CI7J207IWY7JqpKVxuICAgKlxuICAgKiBQcm9kdWN0aW9uIERCIOuniOydtOq3uOugiOydtOyFmCDsi5wgU2xhY2vsnYQg7Ya17ZWcIOyKueyduCDtlITroZzshLjsiqTrpbwg7Zmc7ISx7ZmU7ZWp64uI64ukLlxuICAgKiDshKTsoJXsnbQg7JeG7Jy866m0IOq4sOyhtCDrj5nsnpEo67CU66GcIOyLpO2WiSnsnLzroZwg64+Z7J6R7ZWp64uI64ukLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHNsYWNrQ29uZmlybToge1xuICAgKiAgIHRhcmdldHM6IFtcInByb2R1Y3Rpb25cIl0sXG4gICAqICAgYm90VG9rZW46IHByb2Nlc3MuZW52LlNMQUNLX0JPVF9UT0tFTiA/PyBcIlwiLFxuICAgKiAgIGNoYW5uZWxJZDogcHJvY2Vzcy5lbnYuU0xBQ0tfQ0hBTk5FTF9JRCA/PyBcIlwiLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgc2xhY2tDb25maXJtPzoge1xuICAgIC8qKiDsirnsnbjsnbQg7ZWE7JqU7ZWcIERCIO2CpCDrqqnroZ0gKOyYiDogW1wicHJvZHVjdGlvblwiXSkgKi9cbiAgICB0YXJnZXRzOiAoa2V5b2YgU29uYW11REJDb25maWcpW107XG4gICAgLyoqIFNsYWNrIEJvdCBUb2tlbiAoeG94Yi0uLi4pICovXG4gICAgYm90VG9rZW46IHN0cmluZztcbiAgICAvKiogU2xhY2sgQ2hhbm5lbCBJRCAoQy4uLikgKi9cbiAgICBjaGFubmVsSWQ6IHN0cmluZztcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVNlcnZlck9wdGlvbnMgPSB7XG4gIC8vIO2UhOuhnOygne2KuCDsmbjrtoDsl5DshJwg7KCR6re87ZWgIOyImCDsnojripQgVVJMLiDquLDrs7jqsJLsnYAge3NlcnZlci5saXN0ZW4uaG9zdH06e3NlcnZlci5saXN0ZW4ucG9ydH0g7J6F64uI64ukLlxuICBiYXNlVXJsPzogc3RyaW5nO1xuXG4gIGZhc3RpZnk/OiBPbWl0PEZhc3RpZnlTZXJ2ZXJPcHRpb25zLCBcImxvZ2dlclwiPjtcblxuICBsaXN0ZW4/OiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIGhvc3Q/OiBzdHJpbmc7XG4gIH07XG5cbiAgcGx1Z2lucz86IHtcbiAgICAvKiog7J2R64u1IOyVley2lSDtlIzrn6zqt7jsnbggKEBmYXN0aWZ5L2NvbXByZXNzKSAqL1xuICAgIGNvbXByZXNzPzogYm9vbGVhbiB8IEZhc3RpZnlDb21wcmVzc09wdGlvbnM7XG4gICAgY29ycz86IGJvb2xlYW4gfCBGYXN0aWZ5Q29yc09wdGlvbnM7XG4gICAgZm9ybWJvZHk/OiBib29sZWFuIHwgRmFzdGlmeUZvcm1ib2R5T3B0aW9ucztcbiAgICBtdWx0aXBhcnQ/OiBib29sZWFuIHwgRmFzdGlmeU11bHRpcGFydE9wdGlvbnM7XG4gICAgcXM/OiBib29sZWFuIHwgUXNQbHVnaW5PcHRpb25zO1xuICAgIHNzZT86IGJvb2xlYW4gfCBTc2VQbHVnaW5PcHRpb25zO1xuICAgIHN0YXRpYz86IGJvb2xlYW4gfCBGYXN0aWZ5U3RhdGljT3B0aW9ucztcbiAgICB3cz86IGJvb2xlYW4gfCBXZWJzb2NrZXRQbHVnaW5PcHRpb25zO1xuXG4gICAgY3VzdG9tPzogKHNlcnZlcjogRmFzdGlmeUluc3RhbmNlKSA9PiB2b2lkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBiZXR0ZXItYXV0aCDsnbjspp0g7ISk7KCVXG4gICAqIFNvbmFtdSDtmZXsnqXsnLzroZwgYWRkaXRpb25hbEZpZWxkc+yXkCBzb25hbXVUeXBlIOyGjeyEsSDstpTqsIAg6rCA64qlXG4gICAqIEJldHRlckF1dGjsnZggREJGaWVsZEF0dHJpYnV0ZeulvCDtmZXsnqXtlaAg7IiYIOyXhuyWtOyEnCDsmrDshKAgdXNlcuunjCDsoIHsmqlcbiAgICovXG4gIGF1dGg/OiBCZXR0ZXJBdXRoT3B0aW9ucyAmIHtcbiAgICB1c2VyPzoge1xuICAgICAgYWRkaXRpb25hbEZpZWxkcz86IFJlY29yZDxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBOb25OdWxsYWJsZTxOb25OdWxsYWJsZTxCZXR0ZXJBdXRoT3B0aW9uc1tcInVzZXJcIl0+W1wiYWRkaXRpb25hbEZpZWxkc1wiXT5bc3RyaW5nXSAmIHtcbiAgICAgICAgICBzb25hbXVUeXBlPzogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICA+O1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFdlYlNvY2tldCBydW50aW1lIOyEpOyglS5cbiAgICpcbiAgICog64uo7J28IOyduOyKpO2EtOyKpOyXkOyEnOuKlCDquLDrs7jqsJLsnLzroZwg7Lap67aE7ZWY66mwLCDrqYDti7Ag7J247Iqk7YS07IqkL+uMgOq3nOuqqCDtmZjqsr3sl5DshJzripRcbiAgICogcHJlc2VuY2Ugc3RvcmXsmYAgY2x1c3RlciBidXPrpbwg7Jes6riw7IScIOyjvOyehe2VqeuLiOuLpC5cbiAgICovXG4gIHdlYnNvY2tldD86IFdlYlNvY2tldFJ1bnRpbWVPcHRpb25zO1xuXG4gIGFwaUNvbmZpZzogU29uYW11RmFzdGlmeUNvbmZpZztcblxuICAvKipcbiAgICogU3RvcmFnZSDrk5zrnbzsnbTrsoQg7ISk7KCVLlxuICAgKiBzYXZlVG9EaXNrKGRpc2tOYW1lLCBrZXkpIO2YuOy2nCDsi5wg65Oc65287J2067KE66W8IOuqheyLnOyggeycvOuhnCDsp4DsoJXtlanri4jri6QuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW1wb3J0IHsgZHJpdmVycyB9IGZyb20gXCJzb25hbXUvc3RvcmFnZVwiO1xuICAgKlxuICAgKiBzdG9yYWdlOiB7XG4gICAqICAgZHJpdmVyczoge1xuICAgKiAgICAgZnM6IGRyaXZlcnMuZnMoeyBsb2NhdGlvbjogXCIuL3VwbG9hZHNcIiwgdXJsQnVpbGRlcjogeyAuLi4gfSB9KSxcbiAgICogICAgIHMzOiBkcml2ZXJzLnMzKHsgYnVja2V0OiBcIm15LWJ1Y2tldFwiLCByZWdpb246IFwiYXAtbm9ydGhlYXN0LTJcIiwgLi4uIH0pLFxuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHN0b3JhZ2U/OiBTdG9yYWdlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBDYWNoZSDshKTsoJUgKEJlbnRvQ2FjaGUg6riw67CYKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGltcG9ydCB7IGRyaXZlcnMsIHN0b3JlIH0gZnJvbSBcInNvbmFtdS9jYWNoZVwiO1xuICAgKlxuICAgKiBjYWNoZToge1xuICAgKiAgIGRlZmF1bHQ6ICdtYWluJyxcbiAgICogICBzdG9yZXM6IHtcbiAgICogICAgIG1haW46IHN0b3JlKClcbiAgICogICAgICAgLnVzZUwxTGF5ZXIoZHJpdmVycy5tZW1vcnkoeyBtYXhTaXplOiAnMTAwbWInIH0pKVxuICAgKiAgICAgICAudXNlTDJMYXllcihkcml2ZXJzLnJlZGlzKHsgY29ubmVjdGlvbjogcmVkaXNDb25uZWN0aW9uIH0pKVxuICAgKiAgICAgICAudXNlQnVzKGRyaXZlcnMucmVkaXNCdXMoeyBjb25uZWN0aW9uOiByZWRpc0Nvbm5lY3Rpb24gfSkpXG4gICAqICAgfSxcbiAgICogICB0dGw6ICcxaCcsXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBjYWNoZT86IENhY2hlQ29uZmlnO1xuXG4gIGxpZmVjeWNsZT86IHtcbiAgICBvblN0YXJ0PzogKHNlcnZlcjogRmFzdGlmeUluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgICBvblNodXRkb3duPzogKHNlcnZlcjogRmFzdGlmeUluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgICBvbkVycm9yPzogKGVycm9yOiBFcnJvciwgcmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsIHJlcGx5OiBGYXN0aWZ5UmVwbHkpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgU29uYW11VGFza09wdGlvbnMgPSB7XG4gIC8vIHdvcmtlcuulvCDsgqzsmqntlaDsp4Ag7Jes67aALCDquLDrs7jsoIHsnLzroZwgZGFlbW9uIOuqqOuTnOyXkOyEnOunjCDsgqzsmqnrkKguXG4gIGVuYWJsZVdvcmtlcj86IGJvb2xlYW47XG4gIHdvcmtlck9wdGlvbnM/OiBXb3JrZmxvd09wdGlvbnM7XG4gIGNvbnRleHRQcm92aWRlcjogKFxuICAgIGRlZmF1bHRDb250ZXh0OiBQaWNrPFxuICAgICAgQ29udGV4dCxcbiAgICAgIHwgXCJ0cmFuc3BvcnRcIlxuICAgICAgfCBcInJlcGx5XCJcbiAgICAgIHwgXCJyZXF1ZXN0XCJcbiAgICAgIHwgXCJoZWFkZXJzXCJcbiAgICAgIHwgXCJjcmVhdGVTU0VcIlxuICAgICAgfCBcIm5haXRlU3RvcmVcIlxuICAgICAgfCBcImxvY2FsZVwiXG4gICAgICB8IFwidXNlclwiXG4gICAgICB8IFwic2Vzc2lvblwiXG4gICAgPixcbiAgKSA9PiBDb250ZXh0IHwgUHJvbWlzZTxDb250ZXh0PjtcbiAgd2Vic29ja2V0Q29udGV4dFByb3ZpZGVyPzogKFxuICAgIGRlZmF1bHRDb250ZXh0OiBQaWNrPFxuICAgICAgV2ViU29ja2V0Q29udGV4dCxcbiAgICAgIFwidHJhbnNwb3J0XCIgfCBcInJlcXVlc3RcIiB8IFwiaGVhZGVyc1wiIHwgXCJ3c1wiIHwgXCJuYWl0ZVN0b3JlXCIgfCBcImxvY2FsZVwiIHwgXCJ1c2VyXCIgfCBcInNlc3Npb25cIlxuICAgID4sXG4gICAgcmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsXG4gICkgPT4gV2ViU29ja2V0Q29udGV4dCB8IFByb21pc2U8V2ViU29ja2V0Q29udGV4dD47XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVTU1JPcHRpb25zID0ge1xuICAvKipcbiAgICogSHlkcmF0aW9uIOyghOuetVxuICAgKiAtICdub25lJzog7ZWt7IOBIOyDiOuhnCDroIzrjZTrp4EgKGh5ZHJhdGlvbiBtaXNtYXRjaCDqsbHsoJUg7JeG7J2MLCDqtozsnqUpXG4gICAqIC0gJ2Z1bGwnOiBSZWFjdCBoeWRyYXRpb24g7Iuc64+EICjshJzrsoQgSFRNTCDsnqzsgqzsmqksIG1pc21hdGNoIOyjvOydmClcbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBoeWRyYXRpb24/OiBcIm5vbmVcIiB8IFwiZnVsbFwiO1xufTtcblxuLy8gTk9URShIYXplLCAyNTEyMDkpOiBjb25maWfsl5DripQgVCwgUHJvbWlzZTxUPiwgKCkgPT4gVCwgKCkgPT4gUHJvbWlzZTxUPuqwgCDrqqjrkZAg7JisIOyImCDsnojslrTslbwg7ZWoLlxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbmZpZyhjb25maWc6IEV4ZWN1dGFibGU8U29uYW11Q29uZmlnPik6IFByb21pc2U8U29uYW11Q29uZmlnPiB7XG4gIGlmIChpc0V4ZWN1dGFibGVDb25maWcoY29uZmlnKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29uZmlnKCkpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maWcpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5jb25maWcudHMg7YyM7J287J2EIOuhnOuTnO2VqeuLiOuLpC5cbiAqIOydtCDshKTsoJUg7YyM7J287J2AIO2ZmOqyveyXkCDrlLDrnbwg64uk66W4IOqyveuhnOyXkCDsnojsnYQg7IiYIOyeiOyKteuLiOuLpC5cbiAqIGRpc3Trpbwg67mM65Oc7ZWY64qUIO2ZmOqyveydtOudvOuptCBkaXN0IOuwlOuhnCDslYTrnpjsl5Ag7J6I7J2EIOqyg+ydtOqzoChjbGktd3JhcHBlci50c+yXkOyEnCDruYzrk5wpLFxuICog6re466CH7KeAIOyViuydgCDtmZjqsr3snbTrnbzrqbQg7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkCDsnojsnYQg6rKD7J6F64uI64ukLlxuICpcbiAqIOydtCDtlajsiJjripQg7J2Y64+E7KCB7Jy866GcIOuLpOuluCDsnZjsobTshLHsnZgg7IKs7Jqp7J2EIOy1nOuMgO2VnCDrsLDsoJztlZjsmIDsirXri4jri6QuXG4gKiDsnbTripQg7Iuk7ZaJIOy0iOq4sOyXkCDstZzrjIDtlZwg67mg66W06rKMIOyEpOygleydhCDsnb3slrTsmKwg7IiYIOyeiOuPhOuhnSDtlZjquLAg7JyE7ZWo7J6F64uI64ukLlxuICog65Sw65287IScIOqyveuhnCBjb25jYXTqs7wgVVJMIHNjaGVtZSDstpTqsIDrj4Qg64uo7Iic7ZWcIOusuOyekOyXtCDsobDsnpHsnLzroZwg7LKY66as7ZWY7JiA7Iq164uI64ukLlxuICpcbiAqIEBwYXJhbSByb290UGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdMb2FkZXJEZXBlbmRlbmNpZXMge1xuICBlbnN1cmVUc0xvYWRlclJlZ2lzdGVyZWQocm9vdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG5cbmNvbnN0IGRlZmF1bHRDb25maWdMb2FkZXJEZXBlbmRlbmNpZXM6IENvbmZpZ0xvYWRlckRlcGVuZGVuY2llcyA9IHtcbiAgYXN5bmMgZW5zdXJlVHNMb2FkZXJSZWdpc3RlcmVkKHJvb3RQYXRoKSB7XG4gICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgaW1wb3J0KFwiLi4vYmluL3RzLWxvYWRlci1yZWdpc3RyYXRpb25cIik7XG4gICAgYXdhaXQgcmVnaXN0cmF0aW9uLmVuc3VyZVRzTG9hZGVyUmVnaXN0ZXJlZChyb290UGF0aCk7XG4gIH0sXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZyhcbiAgcm9vdFBhdGg6IHN0cmluZyxcbiAgZGVwZW5kZW5jaWVzOiBDb25maWdMb2FkZXJEZXBlbmRlbmNpZXMgPSBkZWZhdWx0Q29uZmlnTG9hZGVyRGVwZW5kZW5jaWVzLFxuKTogUHJvbWlzZTxTb25hbXVDb25maWc+IHtcbiAgYXBwbHlDdXJyZW50U25hcHNob3RUb1Byb2Nlc3NFbnYocm9vdFBhdGgpO1xuXG4gIGNvbnN0IHNob3VsZExvYWRTb3VyY2VDb25maWcgPSBwcm9jZXNzLmVudi5IT1QgPT09IFwieWVzXCIgfHwgcHJvY2Vzcy5lbnYuVklURVNUID09PSBcInRydWVcIjtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHNob3VsZExvYWRTb3VyY2VDb25maWdcbiAgICA/IGAke3Jvb3RQYXRofS9zcmMvc29uYW11LmNvbmZpZy50c2BcbiAgICA6IGAke3Jvb3RQYXRofS9kaXN0L3NvbmFtdS5jb25maWcuanNgO1xuXG4gIGlmIChzaG91bGRMb2FkU291cmNlQ29uZmlnKSB7XG4gICAgYXdhaXQgZGVwZW5kZW5jaWVzLmVuc3VyZVRzTG9hZGVyUmVnaXN0ZXJlZChyb290UGF0aCk7XG4gIH1cblxuICBjb25zdCB7IGRlZmF1bHQ6IGNvbmZpZyB9ID0gYXdhaXQgaW1wb3J0KGBmaWxlOi8vJHtjb25maWdQYXRofWApO1xuICByZXR1cm4gY29uZmlnO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBNEJBLFNBQVMsbUJBQ1AsT0FDK0Q7Q0FDL0QsT0FBTyxnQkFBZ0IsS0FBSztBQUM5QjtBQW9EQSxTQUFnQiwyQkFDZCxPQUNBLGVBQWtDLENBQUMsR0FDTjtDQUM3QixJQUFJLFVBQVUsVUFBYSxVQUFVLE9BQ25DLE9BQU87RUFBRSxLQUFLO0VBQU8sU0FBUyxDQUFDO0NBQUU7Q0FFbkMsSUFBSSxDQUFDLGNBQWMsS0FBSyxLQUFLLE1BQU0sUUFBUSxLQUFLLEdBQzlDLE1BQU0sSUFBSSxNQUFNLG1EQUFtRDtDQUdyRSxNQUFNLE1BQU0sU0FBUyxRQUFTLE1BQU0sT0FBTyxRQUFTO0NBQ3BELElBQUksUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLE9BQzVDLE1BQU0sSUFBSSxNQUFNLDJEQUEyRDtDQUc3RSxJQUFJLGFBQWEsT0FDZixNQUFNLElBQUksTUFBTSx1RUFBdUU7Q0FHekYsT0FBTztFQUFFO0VBQUssU0FBUyxDQUFDO0NBQUU7QUFDNUI7QUFxT0EsU0FBZ0IsYUFBYSxRQUF5RDtDQUNwRixJQUFJLG1CQUFtQixNQUFNLEdBQzNCLE9BQU8sUUFBUSxRQUFRLE9BQU8sQ0FBQztDQUdqQyxPQUFPLFFBQVEsUUFBUSxNQUFNO0FBQy9CO0FBMEJBLGVBQXNCLFdBQ3BCLFVBQ0EsZUFBeUMsaUNBQ2xCO0NBQ3ZCLGlDQUFpQyxRQUFRO0NBRXpDLE1BQU0seUJBQXlCLFFBQVEsSUFBSSxRQUFRLFNBQVMsUUFBUSxJQUFJLFdBQVc7Q0FDbkYsTUFBTSxhQUFhLHlCQUNmLEdBQUcsU0FBUyx5QkFDWixHQUFHLFNBQVM7Q0FFaEIsSUFBSSx3QkFDRixNQUFNLGFBQWEseUJBQXlCLFFBQVE7Q0FHdEQsTUFBTSxFQUFFLFNBQVMsV0FBVyxNQUFNLE9BQU8sVUFBVTtDQUNuRCxPQUFPO0FBQ1Q7OztVQTVXeUQ7b0JBTWM7Q0E4VWpFLGtDQUE0RCxFQUNoRSxNQUFNLHlCQUF5QixVQUFVO0VBRXZDLE9BQU0sTUFEcUIsT0FBTyxvQ0FDNUIsQ0FBYSx5QkFBeUIsUUFBUTtDQUN0RCxFQUNGIn0=
45
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRmFzdGlmeUNvbXByZXNzT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9jb21wcmVzc1wiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5Q29yc09wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvY29yc1wiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2Zvcm1ib2R5XCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHsgdHlwZSBGYXN0aWZ5U3RhdGljT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9zdGF0aWNcIjtcbmltcG9ydCB7IHR5cGUgV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS93ZWJzb2NrZXRcIjtcbmltcG9ydCB7IHR5cGUgQmV0dGVyQXV0aE9wdGlvbnMgfSBmcm9tIFwiYmV0dGVyLWF1dGhcIjtcbmltcG9ydCB7XG4gIHR5cGUgRmFzdGlmeUluc3RhbmNlLFxuICB0eXBlIEZhc3RpZnlSZXBseSxcbiAgdHlwZSBGYXN0aWZ5UmVxdWVzdCxcbiAgdHlwZSBGYXN0aWZ5U2VydmVyT3B0aW9ucyxcbn0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB7IHR5cGUgUXNQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktcXNcIjtcbmltcG9ydCB7IHR5cGUgU3NlUGx1Z2luT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5LXNzZS12Mi9saWIvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmltcG9ydCB7IHR5cGUgQ2FjaGVDb25maWcgfSBmcm9tIFwiLi4vY2FjaGUvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IGFwcGx5Q3VycmVudFNuYXBzaG90VG9Qcm9jZXNzRW52IH0gZnJvbSBcIi4uL2VudlwiO1xuaW1wb3J0IHsgdHlwZSBTb25hbXVMb2dnaW5nT3B0aW9ucyB9IGZyb20gXCIuLi9sb2dnZXIvY29uZmlndXJlXCI7XG5pbXBvcnQgeyB0eXBlIFN0b3JhZ2VDb25maWcgfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBXZWJTb2NrZXRSdW50aW1lT3B0aW9ucyB9IGZyb20gXCIuLi9zdHJlYW0vd3NcIjtcbmltcG9ydCB7IHR5cGUgV29ya2Zsb3dPcHRpb25zIH0gZnJvbSBcIi4uL3Rhc2tzL3dvcmtmbG93LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgRXhlY3V0YWJsZSwgdHlwZSBTb25hbXVGYXN0aWZ5Q29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uVmFsdWUsIGlzT2JqZWN0VmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgdHlwZSBDb250ZXh0LCB0eXBlIFdlYlNvY2tldENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5cbmZ1bmN0aW9uIGlzRXhlY3V0YWJsZUNvbmZpZyhcbiAgdmFsdWU6IEV4ZWN1dGFibGU8U29uYW11Q29uZmlnPixcbik6IHZhbHVlIGlzICgoKSA9PiBTb25hbXVDb25maWcpIHwgKCgpID0+IFByb21pc2U8U29uYW11Q29uZmlnPikge1xuICByZXR1cm4gaXNGdW5jdGlvblZhbHVlKHZhbHVlKTtcbn1cblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VDb25maWcgPSBPbWl0PEtuZXguQ29uZmlnLCBcImNvbm5lY3Rpb25cIj4gJiB7XG4gIGNvbm5lY3Rpb24/OiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbn07XG5cbi8qKlxuICogaTE4biDshKTsoJVcbiAqL1xuZXhwb3J0IHR5cGUgU29uYW11STE4bk9wdGlvbnMgPSB7XG4gIC8qKiDquLDrs7ggbG9jYWxlICjtgqQg7KCV7J2YIOq4sOykgCArIOufsO2DgOyehCDquLDrs7jqsJIpICovXG4gIGRlZmF1bHRMb2NhbGU6IHN0cmluZztcbiAgLyoqIOyngOybkO2VmOuKlCBsb2NhbGUg66qp66GdICovXG4gIHN1cHBvcnRlZExvY2FsZXM6IHN0cmluZ1tdO1xufTtcblxuLyoqXG4gKiBEZXYg7ISc67KEIOuCtCBWaXRlc3Qg7IOB7KO8IOyduOyKpO2EtOyKpCDshKTsoJVcbiAqL1xuZXhwb3J0IHR5cGUgU29uYW11RGV2UnVubmVyQ29uZmlnID0ge1xuICAvKiogRGV2UnVubmVyIO2ZnOyEse2ZlCDsl6zrtoAgKOq4sOuzuDogZmFsc2UpICovXG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKiDthYzsiqTtirgg7JeU65Oc7Y+s7J247Yq4IOqyveuhnCDsoJHrkZDsgqwgKOq4sOuzuDogL19fdGVzdF9fKSAqL1xuICByb3V0ZVByZWZpeD86IHN0cmluZztcbiAgLyoqIHZpdGVzdC5jb25maWcudHMg6rK966GcIChhcGktcm9vdCDsg4HrjIDqsr3roZwpICovXG4gIHZpdGVzdENvbmZpZ1BhdGg/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIO2FjOyKpO2KuCDshKTsoJVcbiAqIHZpdGVzdCDrs5HroKwg7YWM7Iqk7YyF7J2EIHNvbmFtdS5jb25maWcudHMg7ZWcIOqzs+yXkOyEnCDqtIDrpqztlZjquLAg7JyE7ZWcIOyEpOygleyeheuLiOuLpC5cbiAqL1xuZXhwb3J0IHR5cGUgU29uYW11VGVzdENvbmZpZyA9IHtcbiAgLyoqIOuzkeugrCDthYzsiqTtjIUg7Zmc7ISx7ZmUICjquLDrs7g6IGZhbHNlKSAqL1xuICBwYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKiDrs5HroKwg7Iuk7ZaJIOybjOy7pCDsiJggKOq4sOuzuDogNCkgKi9cbiAgbWF4V29ya2Vycz86IG51bWJlcjtcbiAgLyoqIERldiDshJzrsoQg64K0IFZpdGVzdCDsg4Hso7wg7J247Iqk7YS07IqkIOyEpOyglSAqL1xuICBkZXZSdW5uZXI/OiBTb25hbXVEZXZSdW5uZXJDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBab2RDb21waWxlckFwaU1vZGUgPSBmYWxzZSB8IFwiaml0XCIgfCBcImFvdFwiO1xuZXhwb3J0IHR5cGUgWm9kQ29tcGlsZXJDb25maWcgPVxuICB8IGZhbHNlXG4gIHwge1xuICAgICAgYXBpPzogWm9kQ29tcGlsZXJBcGlNb2RlO1xuICAgIH07XG5leHBvcnQgdHlwZSBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3kgPSB7XG4gIGFwaTogWm9kQ29tcGlsZXJBcGlNb2RlO1xuICB0YXJnZXRzOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplWm9kQ29tcGlsZXJQb2xpY3k8VmFsdWU+KFxuICB2YWx1ZTogVmFsdWUsXG4gIF9zeW5jVGFyZ2V0czogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbik6IE5vcm1hbGl6ZWRab2RDb21waWxlclBvbGljeSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgIHJldHVybiB7IGFwaTogZmFsc2UsIHRhcmdldHM6IHt9IH07XG4gIH1cbiAgaWYgKCFpc09iamVjdFZhbHVlKHZhbHVlKSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInZhbGlkYXRpb24uem9kQ29tcGlsZXIgbXVzdCBiZSBmYWxzZSBvciBhbiBvYmplY3RcIik7XG4gIH1cblxuICBjb25zdCBhcGkgPSBcImFwaVwiIGluIHZhbHVlID8gKHZhbHVlLmFwaSA/PyBmYWxzZSkgOiBmYWxzZTtcbiAgaWYgKGFwaSAhPT0gZmFsc2UgJiYgYXBpICE9PSBcImppdFwiICYmIGFwaSAhPT0gXCJhb3RcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcInZhbGlkYXRpb24uem9kQ29tcGlsZXIuYXBpIG11c3QgYmUgZmFsc2UsICdqaXQnLCBvciAnYW90J1wiKTtcbiAgfVxuXG4gIGlmIChcInRhcmdldHNcIiBpbiB2YWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInZhbGlkYXRpb24uem9kQ29tcGlsZXIudGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBBUEktb25seSBwaGFzZVwiKTtcbiAgfVxuXG4gIHJldHVybiB7IGFwaSwgdGFyZ2V0czoge30gfTtcbn1cblxuZXhwb3J0IHR5cGUgU29uYW11Q29uZmlnPFRTaW5rSWQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRGaWx0ZXJJZCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSB7XG4gIHByb2plY3ROYW1lPzogc3RyaW5nO1xuXG4gIGFwaToge1xuICAgIGRpcjogc3RyaW5nO1xuICAgIHJvdXRlOiB7XG4gICAgICBwcmVmaXg6IHN0cmluZztcbiAgICB9O1xuICAgIHRpbWV6b25lPzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBpMThuIOyEpOyglVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGkxOG46IHtcbiAgICogICBkZWZhdWx0TG9jYWxlOiAna28nLFxuICAgKiAgIHN1cHBvcnRlZExvY2FsZXM6IFsna28nLCAnZW4nLCAnamEnXSxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGkxOG46IFNvbmFtdUkxOG5PcHRpb25zO1xuXG4gIHN5bmM6IHtcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTsgLy8gXCJ3ZWJcIiwgXCJhcHBcIiDrk7FcbiAgfTtcblxuICB2YWxpZGF0aW9uPzoge1xuICAgIHpvZENvbXBpbGVyPzogWm9kQ29tcGlsZXJDb25maWc7XG4gIH07XG5cbiAgZGF0YWJhc2U6IHtcbiAgICAvLyDrjbDsnbTthLDrsqDsnbTsiqQocGfripQgcGcg66qo65OILCBwZ25hdGl2ZeuKlCBwZy1uYXRpdmUg66qo65OI7J2YIOyEpOy5mOqwgCDtlYTsmpTtlanri4jri6QuKVxuICAgIGRhdGFiYXNlPzogXCJwZ1wiIHwgXCJwZ25hdGl2ZVwiO1xuICAgIC8vIOuqqOuToCDtmZjqsr3sl5Ag7KCB7Jqp65CgIOq4sOuzuCBLbmV4IOyYteyFmFxuICAgIGRlZmF1bHRPcHRpb25zPzogRGF0YWJhc2VDb25maWc7XG4gIH07XG5cbiAgbG9nZ2luZz86IGZhbHNlIHwgU29uYW11TG9nZ2luZ09wdGlvbnM8VFNpbmtJZCwgVEZpbHRlcklkPjtcbiAgc2VydmVyOiBTb25hbXVTZXJ2ZXJPcHRpb25zO1xuICB0YXNrcz86IFNvbmFtdVRhc2tPcHRpb25zO1xuXG4gIC8qKlxuICAgKiDthYzsiqTtirgg7ISk7KCVICjrs5HroKwg7YWM7Iqk7YyFIOuTsSlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0ZXN0OiB7XG4gICAqICAgcGFyYWxsZWw6IHRydWUsXG4gICAqICAgbWF4V29ya2VyczogNCxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHRlc3Q/OiBTb25hbXVUZXN0Q29uZmlnO1xuXG4gIC8qKlxuICAgKiDsmbjrtoAg7JeQ65SU7YSwIOyEpOyglSAoQ0REIOuTseyXkOyEnCDtjIzsnbwg7Y647KeRIOyLnCDsgqzsmqkpXG4gICAqIOuvuOyEpOyglSDsi5wgXCJ2c2NvZGVcIuulvCDquLDrs7jqsJLsnLzroZwg7IKs7Jqp7ZWp64uI64ukLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGV4dGVybmFsRWRpdG9yOiBcImN1cnNvclwiXG4gICAqIGBgYFxuICAgKi9cbiAgZXh0ZXJuYWxFZGl0b3I/OiBcIlZpc3VhbCBTdHVkaW8gQ29kZVwiIHwgXCJaZWRcIiB8IFwiQ3Vyc29yXCI7XG5cbiAgLyoqXG4gICAqIFNsYWNrIOyKueyduCDshKTsoJUgKFByb2R1Y3Rpb24g66eI7J206re466CI7J207IWY7JqpKVxuICAgKlxuICAgKiBQcm9kdWN0aW9uIERCIOuniOydtOq3uOugiOydtOyFmCDsi5wgU2xhY2vsnYQg7Ya17ZWcIOyKueyduCDtlITroZzshLjsiqTrpbwg7Zmc7ISx7ZmU7ZWp64uI64ukLlxuICAgKiDshKTsoJXsnbQg7JeG7Jy866m0IOq4sOyhtCDrj5nsnpEo67CU66GcIOyLpO2WiSnsnLzroZwg64+Z7J6R7ZWp64uI64ukLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHNsYWNrQ29uZmlybToge1xuICAgKiAgIHRhcmdldHM6IFtcInByb2R1Y3Rpb25cIl0sXG4gICAqICAgYm90VG9rZW46IHByb2Nlc3MuZW52LlNMQUNLX0JPVF9UT0tFTiA/PyBcIlwiLFxuICAgKiAgIGNoYW5uZWxJZDogcHJvY2Vzcy5lbnYuU0xBQ0tfQ0hBTk5FTF9JRCA/PyBcIlwiLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgc2xhY2tDb25maXJtPzoge1xuICAgIC8qKiDsirnsnbjsnbQg7ZWE7JqU7ZWcIERCIO2CpCDrqqnroZ0gKOyYiDogW1wicHJvZHVjdGlvblwiXSkgKi9cbiAgICB0YXJnZXRzOiAoa2V5b2YgU29uYW11REJDb25maWcpW107XG4gICAgLyoqIFNsYWNrIEJvdCBUb2tlbiAoeG94Yi0uLi4pICovXG4gICAgYm90VG9rZW46IHN0cmluZztcbiAgICAvKiogU2xhY2sgQ2hhbm5lbCBJRCAoQy4uLikgKi9cbiAgICBjaGFubmVsSWQ6IHN0cmluZztcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVNlcnZlck9wdGlvbnMgPSB7XG4gIC8vIO2UhOuhnOygne2KuCDsmbjrtoDsl5DshJwg7KCR6re87ZWgIOyImCDsnojripQgVVJMLiDquLDrs7jqsJLsnYAge3NlcnZlci5saXN0ZW4uaG9zdH06e3NlcnZlci5saXN0ZW4ucG9ydH0g7J6F64uI64ukLlxuICBiYXNlVXJsPzogc3RyaW5nO1xuXG4gIGZhc3RpZnk/OiBPbWl0PEZhc3RpZnlTZXJ2ZXJPcHRpb25zLCBcImxvZ2dlclwiIHwgXCJsb2dnZXJJbnN0YW5jZVwiPjtcblxuICBsaXN0ZW4/OiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIGhvc3Q/OiBzdHJpbmc7XG4gIH07XG5cbiAgcGx1Z2lucz86IHtcbiAgICAvKiog7J2R64u1IOyVley2lSDtlIzrn6zqt7jsnbggKEBmYXN0aWZ5L2NvbXByZXNzKSAqL1xuICAgIGNvbXByZXNzPzogYm9vbGVhbiB8IEZhc3RpZnlDb21wcmVzc09wdGlvbnM7XG4gICAgY29ycz86IGJvb2xlYW4gfCBGYXN0aWZ5Q29yc09wdGlvbnM7XG4gICAgZm9ybWJvZHk/OiBib29sZWFuIHwgRmFzdGlmeUZvcm1ib2R5T3B0aW9ucztcbiAgICBtdWx0aXBhcnQ/OiBib29sZWFuIHwgRmFzdGlmeU11bHRpcGFydE9wdGlvbnM7XG4gICAgcXM/OiBib29sZWFuIHwgUXNQbHVnaW5PcHRpb25zO1xuICAgIHNzZT86IGJvb2xlYW4gfCBTc2VQbHVnaW5PcHRpb25zO1xuICAgIHN0YXRpYz86IGJvb2xlYW4gfCBGYXN0aWZ5U3RhdGljT3B0aW9ucztcbiAgICB3cz86IGJvb2xlYW4gfCBXZWJzb2NrZXRQbHVnaW5PcHRpb25zO1xuXG4gICAgY3VzdG9tPzogKHNlcnZlcjogRmFzdGlmeUluc3RhbmNlKSA9PiB2b2lkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBiZXR0ZXItYXV0aCDsnbjspp0g7ISk7KCVXG4gICAqIFNvbmFtdSDtmZXsnqXsnLzroZwgYWRkaXRpb25hbEZpZWxkc+yXkCBzb25hbXVUeXBlIOyGjeyEsSDstpTqsIAg6rCA64qlXG4gICAqIEJldHRlckF1dGjsnZggREJGaWVsZEF0dHJpYnV0ZeulvCDtmZXsnqXtlaAg7IiYIOyXhuyWtOyEnCDsmrDshKAgdXNlcuunjCDsoIHsmqlcbiAgICovXG4gIGF1dGg/OiBCZXR0ZXJBdXRoT3B0aW9ucyAmIHtcbiAgICB1c2VyPzoge1xuICAgICAgYWRkaXRpb25hbEZpZWxkcz86IFJlY29yZDxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBOb25OdWxsYWJsZTxOb25OdWxsYWJsZTxCZXR0ZXJBdXRoT3B0aW9uc1tcInVzZXJcIl0+W1wiYWRkaXRpb25hbEZpZWxkc1wiXT5bc3RyaW5nXSAmIHtcbiAgICAgICAgICBzb25hbXVUeXBlPzogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICA+O1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFdlYlNvY2tldCBydW50aW1lIOyEpOyglS5cbiAgICpcbiAgICog64uo7J28IOyduOyKpO2EtOyKpOyXkOyEnOuKlCDquLDrs7jqsJLsnLzroZwg7Lap67aE7ZWY66mwLCDrqYDti7Ag7J247Iqk7YS07IqkL+uMgOq3nOuqqCDtmZjqsr3sl5DshJzripRcbiAgICogcHJlc2VuY2Ugc3RvcmXsmYAgY2x1c3RlciBidXPrpbwg7Jes6riw7IScIOyjvOyehe2VqeuLiOuLpC5cbiAgICovXG4gIHdlYnNvY2tldD86IFdlYlNvY2tldFJ1bnRpbWVPcHRpb25zO1xuXG4gIGFwaUNvbmZpZzogU29uYW11RmFzdGlmeUNvbmZpZztcblxuICAvKipcbiAgICogU3RvcmFnZSDrk5zrnbzsnbTrsoQg7ISk7KCVLlxuICAgKiBzYXZlVG9EaXNrKGRpc2tOYW1lLCBrZXkpIO2YuOy2nCDsi5wg65Oc65287J2067KE66W8IOuqheyLnOyggeycvOuhnCDsp4DsoJXtlanri4jri6QuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW1wb3J0IHsgZHJpdmVycyB9IGZyb20gXCJzb25hbXUvc3RvcmFnZVwiO1xuICAgKlxuICAgKiBzdG9yYWdlOiB7XG4gICAqICAgZHJpdmVyczoge1xuICAgKiAgICAgZnM6IGRyaXZlcnMuZnMoeyBsb2NhdGlvbjogXCIuL3VwbG9hZHNcIiwgdXJsQnVpbGRlcjogeyAuLi4gfSB9KSxcbiAgICogICAgIHMzOiBkcml2ZXJzLnMzKHsgYnVja2V0OiBcIm15LWJ1Y2tldFwiLCByZWdpb246IFwiYXAtbm9ydGhlYXN0LTJcIiwgLi4uIH0pLFxuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHN0b3JhZ2U/OiBTdG9yYWdlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBDYWNoZSDshKTsoJUgKEJlbnRvQ2FjaGUg6riw67CYKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGltcG9ydCB7IGRyaXZlcnMsIHN0b3JlIH0gZnJvbSBcInNvbmFtdS9jYWNoZVwiO1xuICAgKlxuICAgKiBjYWNoZToge1xuICAgKiAgIGRlZmF1bHQ6ICdtYWluJyxcbiAgICogICBzdG9yZXM6IHtcbiAgICogICAgIG1haW46IHN0b3JlKClcbiAgICogICAgICAgLnVzZUwxTGF5ZXIoZHJpdmVycy5tZW1vcnkoeyBtYXhTaXplOiAnMTAwbWInIH0pKVxuICAgKiAgICAgICAudXNlTDJMYXllcihkcml2ZXJzLnJlZGlzKHsgY29ubmVjdGlvbjogcmVkaXNDb25uZWN0aW9uIH0pKVxuICAgKiAgICAgICAudXNlQnVzKGRyaXZlcnMucmVkaXNCdXMoeyBjb25uZWN0aW9uOiByZWRpc0Nvbm5lY3Rpb24gfSkpXG4gICAqICAgfSxcbiAgICogICB0dGw6ICcxaCcsXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBjYWNoZT86IENhY2hlQ29uZmlnO1xuXG4gIGxpZmVjeWNsZT86IHtcbiAgICBvblN0YXJ0PzogKHNlcnZlcjogRmFzdGlmeUluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgICBvblNodXRkb3duPzogKHNlcnZlcjogRmFzdGlmeUluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgICBvbkVycm9yPzogKGVycm9yOiBFcnJvciwgcmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsIHJlcGx5OiBGYXN0aWZ5UmVwbHkpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgU29uYW11VGFza09wdGlvbnMgPSB7XG4gIC8vIHdvcmtlcuulvCDsgqzsmqntlaDsp4Ag7Jes67aALCDquLDrs7jsoIHsnLzroZwgZGFlbW9uIOuqqOuTnOyXkOyEnOunjCDsgqzsmqnrkKguXG4gIGVuYWJsZVdvcmtlcj86IGJvb2xlYW47XG4gIHdvcmtlck9wdGlvbnM/OiBXb3JrZmxvd09wdGlvbnM7XG4gIGNvbnRleHRQcm92aWRlcjogKFxuICAgIGRlZmF1bHRDb250ZXh0OiBQaWNrPFxuICAgICAgQ29udGV4dCxcbiAgICAgIHwgXCJ0cmFuc3BvcnRcIlxuICAgICAgfCBcInJlcGx5XCJcbiAgICAgIHwgXCJyZXF1ZXN0XCJcbiAgICAgIHwgXCJoZWFkZXJzXCJcbiAgICAgIHwgXCJjcmVhdGVTU0VcIlxuICAgICAgfCBcIm5haXRlU3RvcmVcIlxuICAgICAgfCBcImxvY2FsZVwiXG4gICAgICB8IFwidXNlclwiXG4gICAgICB8IFwic2Vzc2lvblwiXG4gICAgPixcbiAgKSA9PiBDb250ZXh0IHwgUHJvbWlzZTxDb250ZXh0PjtcbiAgd2Vic29ja2V0Q29udGV4dFByb3ZpZGVyPzogKFxuICAgIGRlZmF1bHRDb250ZXh0OiBQaWNrPFxuICAgICAgV2ViU29ja2V0Q29udGV4dCxcbiAgICAgIFwidHJhbnNwb3J0XCIgfCBcInJlcXVlc3RcIiB8IFwiaGVhZGVyc1wiIHwgXCJ3c1wiIHwgXCJuYWl0ZVN0b3JlXCIgfCBcImxvY2FsZVwiIHwgXCJ1c2VyXCIgfCBcInNlc3Npb25cIlxuICAgID4sXG4gICAgcmVxdWVzdDogRmFzdGlmeVJlcXVlc3QsXG4gICkgPT4gV2ViU29ja2V0Q29udGV4dCB8IFByb21pc2U8V2ViU29ja2V0Q29udGV4dD47XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVTU1JPcHRpb25zID0ge1xuICAvKipcbiAgICogSHlkcmF0aW9uIOyghOuetVxuICAgKiAtICdub25lJzog7ZWt7IOBIOyDiOuhnCDroIzrjZTrp4EgKGh5ZHJhdGlvbiBtaXNtYXRjaCDqsbHsoJUg7JeG7J2MLCDqtozsnqUpXG4gICAqIC0gJ2Z1bGwnOiBSZWFjdCBoeWRyYXRpb24g7Iuc64+EICjshJzrsoQgSFRNTCDsnqzsgqzsmqksIG1pc21hdGNoIOyjvOydmClcbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBoeWRyYXRpb24/OiBcIm5vbmVcIiB8IFwiZnVsbFwiO1xufTtcblxuLy8gTk9URShIYXplLCAyNTEyMDkpOiBjb25maWfsl5DripQgVCwgUHJvbWlzZTxUPiwgKCkgPT4gVCwgKCkgPT4gUHJvbWlzZTxUPuqwgCDrqqjrkZAg7JisIOyImCDsnojslrTslbwg7ZWoLlxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbmZpZyhjb25maWc6IEV4ZWN1dGFibGU8U29uYW11Q29uZmlnPik6IFByb21pc2U8U29uYW11Q29uZmlnPiB7XG4gIGlmIChpc0V4ZWN1dGFibGVDb25maWcoY29uZmlnKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29uZmlnKCkpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maWcpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5jb25maWcudHMg7YyM7J287J2EIOuhnOuTnO2VqeuLiOuLpC5cbiAqIOydtCDshKTsoJUg7YyM7J287J2AIO2ZmOqyveyXkCDrlLDrnbwg64uk66W4IOqyveuhnOyXkCDsnojsnYQg7IiYIOyeiOyKteuLiOuLpC5cbiAqIGRpc3Trpbwg67mM65Oc7ZWY64qUIO2ZmOqyveydtOudvOuptCBkaXN0IOuwlOuhnCDslYTrnpjsl5Ag7J6I7J2EIOqyg+ydtOqzoChjbGktd3JhcHBlci50c+yXkOyEnCDruYzrk5wpLFxuICog6re466CH7KeAIOyViuydgCDtmZjqsr3snbTrnbzrqbQg7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkCDsnojsnYQg6rKD7J6F64uI64ukLlxuICpcbiAqIOydtCDtlajsiJjripQg7J2Y64+E7KCB7Jy866GcIOuLpOuluCDsnZjsobTshLHsnZgg7IKs7Jqp7J2EIOy1nOuMgO2VnCDrsLDsoJztlZjsmIDsirXri4jri6QuXG4gKiDsnbTripQg7Iuk7ZaJIOy0iOq4sOyXkCDstZzrjIDtlZwg67mg66W06rKMIOyEpOygleydhCDsnb3slrTsmKwg7IiYIOyeiOuPhOuhnSDtlZjquLAg7JyE7ZWo7J6F64uI64ukLlxuICog65Sw65287IScIOqyveuhnCBjb25jYXTqs7wgVVJMIHNjaGVtZSDstpTqsIDrj4Qg64uo7Iic7ZWcIOusuOyekOyXtCDsobDsnpHsnLzroZwg7LKY66as7ZWY7JiA7Iq164uI64ukLlxuICpcbiAqIEBwYXJhbSByb290UGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdMb2FkZXJEZXBlbmRlbmNpZXMge1xuICBlbnN1cmVUc0xvYWRlclJlZ2lzdGVyZWQocm9vdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG5cbmNvbnN0IGRlZmF1bHRDb25maWdMb2FkZXJEZXBlbmRlbmNpZXM6IENvbmZpZ0xvYWRlckRlcGVuZGVuY2llcyA9IHtcbiAgYXN5bmMgZW5zdXJlVHNMb2FkZXJSZWdpc3RlcmVkKHJvb3RQYXRoKSB7XG4gICAgY29uc3QgcmVnaXN0cmF0aW9uID0gYXdhaXQgaW1wb3J0KFwiLi4vYmluL3RzLWxvYWRlci1yZWdpc3RyYXRpb25cIik7XG4gICAgYXdhaXQgcmVnaXN0cmF0aW9uLmVuc3VyZVRzTG9hZGVyUmVnaXN0ZXJlZChyb290UGF0aCk7XG4gIH0sXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZyhcbiAgcm9vdFBhdGg6IHN0cmluZyxcbiAgZGVwZW5kZW5jaWVzOiBDb25maWdMb2FkZXJEZXBlbmRlbmNpZXMgPSBkZWZhdWx0Q29uZmlnTG9hZGVyRGVwZW5kZW5jaWVzLFxuKTogUHJvbWlzZTxTb25hbXVDb25maWc+IHtcbiAgYXBwbHlDdXJyZW50U25hcHNob3RUb1Byb2Nlc3NFbnYocm9vdFBhdGgpO1xuXG4gIGNvbnN0IHNob3VsZExvYWRTb3VyY2VDb25maWcgPSBwcm9jZXNzLmVudi5IT1QgPT09IFwieWVzXCIgfHwgcHJvY2Vzcy5lbnYuVklURVNUID09PSBcInRydWVcIjtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHNob3VsZExvYWRTb3VyY2VDb25maWdcbiAgICA/IGAke3Jvb3RQYXRofS9zcmMvc29uYW11LmNvbmZpZy50c2BcbiAgICA6IGAke3Jvb3RQYXRofS9kaXN0L3NvbmFtdS5jb25maWcuanNgO1xuXG4gIGlmIChzaG91bGRMb2FkU291cmNlQ29uZmlnKSB7XG4gICAgYXdhaXQgZGVwZW5kZW5jaWVzLmVuc3VyZVRzTG9hZGVyUmVnaXN0ZXJlZChyb290UGF0aCk7XG4gIH1cblxuICBjb25zdCB7IGRlZmF1bHQ6IGNvbmZpZyB9ID0gYXdhaXQgaW1wb3J0KGBmaWxlOi8vJHtjb25maWdQYXRofWApO1xuICByZXR1cm4gY29uZmlnO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBNEJBLFNBQVMsbUJBQ1AsT0FDK0Q7Q0FDL0QsT0FBTyxnQkFBZ0IsS0FBSztBQUM5QjtBQW9EQSxTQUFnQiwyQkFDZCxPQUNBLGVBQWtDLENBQUMsR0FDTjtDQUM3QixJQUFJLFVBQVUsVUFBYSxVQUFVLE9BQ25DLE9BQU87RUFBRSxLQUFLO0VBQU8sU0FBUyxDQUFDO0NBQUU7Q0FFbkMsSUFBSSxDQUFDLGNBQWMsS0FBSyxLQUFLLE1BQU0sUUFBUSxLQUFLLEdBQzlDLE1BQU0sSUFBSSxNQUFNLG1EQUFtRDtDQUdyRSxNQUFNLE1BQU0sU0FBUyxRQUFTLE1BQU0sT0FBTyxRQUFTO0NBQ3BELElBQUksUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLE9BQzVDLE1BQU0sSUFBSSxNQUFNLDJEQUEyRDtDQUc3RSxJQUFJLGFBQWEsT0FDZixNQUFNLElBQUksTUFBTSx1RUFBdUU7Q0FHekYsT0FBTztFQUFFO0VBQUssU0FBUyxDQUFDO0NBQUU7QUFDNUI7QUFxT0EsU0FBZ0IsYUFBYSxRQUF5RDtDQUNwRixJQUFJLG1CQUFtQixNQUFNLEdBQzNCLE9BQU8sUUFBUSxRQUFRLE9BQU8sQ0FBQztDQUdqQyxPQUFPLFFBQVEsUUFBUSxNQUFNO0FBQy9CO0FBMEJBLGVBQXNCLFdBQ3BCLFVBQ0EsZUFBeUMsaUNBQ2xCO0NBQ3ZCLGlDQUFpQyxRQUFRO0NBRXpDLE1BQU0seUJBQXlCLFFBQVEsSUFBSSxRQUFRLFNBQVMsUUFBUSxJQUFJLFdBQVc7Q0FDbkYsTUFBTSxhQUFhLHlCQUNmLEdBQUcsU0FBUyx5QkFDWixHQUFHLFNBQVM7Q0FFaEIsSUFBSSx3QkFDRixNQUFNLGFBQWEseUJBQXlCLFFBQVE7Q0FHdEQsTUFBTSxFQUFFLFNBQVMsV0FBVyxNQUFNLE9BQU8sVUFBVTtDQUNuRCxPQUFPO0FBQ1Q7OztDQTVXeUQsU0FBQTtDQU1jLG1CQUFBO0NBOFVqRSxrQ0FBNEQsRUFDaEUsTUFBTSx5QkFBeUIsVUFBVTtFQUV2QyxPQUFNLE1BRHFCLE9BQU8sb0NBQzVCLENBQWEseUJBQXlCLFFBQVE7Q0FDdEQsRUFDRiJ9
@@ -1,7 +1,6 @@
1
- import { type IncomingHttpHeaders, type IncomingMessage, type Server, type ServerResponse } from "http";
1
+ import { type IncomingHttpHeaders } from "http";
2
2
  import { type Session, type User } from "better-auth";
3
3
  import { type FastifyReply, type FastifyRequest } from "fastify";
4
- import { type RouteGenericInterface } from "fastify/types/route";
5
4
  import { type ZodObject } from "zod";
6
5
  import { type NaiteStore } from "../naite/naite";
7
6
  import { type BufferedFile } from "../storage/buffered-file";
@@ -23,7 +22,7 @@ type BaseContext = {
23
22
  };
24
23
  export type Context = BaseContext & {
25
24
  transport: "http";
26
- reply: FastifyReply<Server, IncomingMessage, ServerResponse, RouteGenericInterface>;
25
+ reply: FastifyReply;
27
26
  createSSE: <T extends ZodObject>(events: T) => ReturnType<typeof createSSEFactory<T>>;
28
27
  /** buffer 모드에서 업로드된 파일 */
29
28
  bufferedFiles?: BufferedFile[];
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,cAAc,EACpB,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD,MAAM,WAAW,aAAa;CAAG;AACjC,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,4BAA4B;IAC5B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,CAAC,CAAC;IACpF,SAAS,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,0BAA0B;IAC1B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,0BAA0B;IAC1B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;CAChC,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,CAC1B,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,GAAG,SAAS,MAAM,GAAG,MAAM,IACzB,WAAW,GAAG;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,EAAE,EAAE,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;CACpC,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAEhD,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD,MAAM,WAAW,aAAa;CAAG;AACjC,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,4BAA4B;IAC5B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,0BAA0B;IAC1B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,0BAA0B;IAC1B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;CAChC,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,CAC1B,IAAI,SAAS,MAAM,GAAG,MAAM,EAC5B,GAAG,SAAS,MAAM,GAAG,MAAM,IACzB,WAAW,GAAG;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,EAAE,EAAE,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;CACpC,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC"}
@@ -1,8 +1,7 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
- //#region src/api/context.ts
2
+ // src/api/context.ts
3
3
  var init_context = __esmMin((() => {}));
4
- //#endregion
5
4
  init_context();
6
5
  export { init_context };
7
6
 
8
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2NvbnRleHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBJbmNvbWluZ0h0dHBIZWFkZXJzLFxuICB0eXBlIEluY29taW5nTWVzc2FnZSxcbiAgdHlwZSBTZXJ2ZXIsXG4gIHR5cGUgU2VydmVyUmVzcG9uc2UsXG59IGZyb20gXCJodHRwXCI7XG5cbmltcG9ydCB7IHR5cGUgU2Vzc2lvbiwgdHlwZSBVc2VyIH0gZnJvbSBcImJldHRlci1hdXRoXCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSwgdHlwZSBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyB0eXBlIFJvdXRlR2VuZXJpY0ludGVyZmFjZSB9IGZyb20gXCJmYXN0aWZ5L3R5cGVzL3JvdXRlXCI7XG5pbXBvcnQgeyB0eXBlIFpvZE9iamVjdCB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBOYWl0ZVN0b3JlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgeyB0eXBlIEJ1ZmZlcmVkRmlsZSB9IGZyb20gXCIuLi9zdG9yYWdlL2J1ZmZlcmVkLWZpbGVcIjtcbmltcG9ydCB7IHR5cGUgVXBsb2FkZWRGaWxlIH0gZnJvbSBcIi4uL3N0b3JhZ2UvdXBsb2FkZWQtZmlsZVwiO1xuaW1wb3J0IHsgdHlwZSBjcmVhdGVTU0VGYWN0b3J5IH0gZnJvbSBcIi4uL3N0cmVhbS9zc2VcIjtcbmltcG9ydCB7IHR5cGUgV2ViU29ja2V0Q29ubmVjdGlvbiB9IGZyb20gXCIuLi9zdHJlYW0vd3NcIjtcblxuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1pbnRlcmZhY2UgLS0gQ29udGV4dCDtmZXsnqUg7YOA7J6FXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHRFeHRlbmQge31cbnR5cGUgQmFzZUNvbnRleHQgPSB7XG4gIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0O1xuICBoZWFkZXJzOiBJbmNvbWluZ0h0dHBIZWFkZXJzO1xuICBuYWl0ZVN0b3JlOiBOYWl0ZVN0b3JlO1xuICAvKiog7ZiE7J6sIOyalOyyreydmCBsb2NhbGUgKi9cbiAgbG9jYWxlOiBzdHJpbmc7XG4gIC8qKiDtmITsnqwg66Gc6re47J247ZWcIOyCrOyaqeyekCAobnVsbOydtOuptCDrr7jsnbjspp0pICovXG4gIHVzZXI6IFVzZXIgfCBudWxsO1xuICAvKiog7ZiE7J6sIOyEuOyFmCDsoJXrs7QgKG51bGzsnbTrqbQg66+47J247KadKSAqL1xuICBzZXNzaW9uOiBTZXNzaW9uIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIENvbnRleHQgPSBCYXNlQ29udGV4dCAmIHtcbiAgdHJhbnNwb3J0OiBcImh0dHBcIjtcbiAgcmVwbHk6IEZhc3RpZnlSZXBseTxTZXJ2ZXIsIEluY29taW5nTWVzc2FnZSwgU2VydmVyUmVzcG9uc2UsIFJvdXRlR2VuZXJpY0ludGVyZmFjZT47XG4gIGNyZWF0ZVNTRTogPFQgZXh0ZW5kcyBab2RPYmplY3Q+KGV2ZW50czogVCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlU1NFRmFjdG9yeTxUPj47XG4gIC8qKiBidWZmZXIg66qo65Oc7JeQ7IScIOyXheuhnOuTnOuQnCDtjIzsnbwgKi9cbiAgYnVmZmVyZWRGaWxlcz86IEJ1ZmZlcmVkRmlsZVtdO1xuICAvKiogc3RyZWFtIOuqqOuTnOyXkOyEnCDsl4XroZzrk5zrkJwg7YyM7J28ICovXG4gIHVwbG9hZGVkRmlsZXM/OiBVcGxvYWRlZEZpbGVbXTtcbn0gJiBDb250ZXh0RXh0ZW5kO1xuXG5leHBvcnQgdHlwZSBXZWJTb2NrZXRDb250ZXh0PFxuICBUT3V0IGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0LFxuICBUSW4gZXh0ZW5kcyBvYmplY3QgPSBvYmplY3QsXG4+ID0gQmFzZUNvbnRleHQgJiB7XG4gIHRyYW5zcG9ydDogXCJ3c1wiO1xuICB3czogV2ViU29ja2V0Q29ubmVjdGlvbjxUT3V0LCBUSW4+O1xufSAmIENvbnRleHRFeHRlbmQ7XG5cbmV4cG9ydCB0eXBlIFJ1bnRpbWVDb250ZXh0ID0gQ29udGV4dCB8IFdlYlNvY2tldENvbnRleHQ7XG4iXSwibWFwcGluZ3MiOiIifQ==
7
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2NvbnRleHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBJbmNvbWluZ0h0dHBIZWFkZXJzIH0gZnJvbSBcImh0dHBcIjtcblxuaW1wb3J0IHsgdHlwZSBTZXNzaW9uLCB0eXBlIFVzZXIgfSBmcm9tIFwiYmV0dGVyLWF1dGhcIjtcbmltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcGx5LCB0eXBlIEZhc3RpZnlSZXF1ZXN0IH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB7IHR5cGUgWm9kT2JqZWN0IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyB0eXBlIE5haXRlU3RvcmUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IHR5cGUgQnVmZmVyZWRGaWxlIH0gZnJvbSBcIi4uL3N0b3JhZ2UvYnVmZmVyZWQtZmlsZVwiO1xuaW1wb3J0IHsgdHlwZSBVcGxvYWRlZEZpbGUgfSBmcm9tIFwiLi4vc3RvcmFnZS91cGxvYWRlZC1maWxlXCI7XG5pbXBvcnQgeyB0eXBlIGNyZWF0ZVNTRUZhY3RvcnkgfSBmcm9tIFwiLi4vc3RyZWFtL3NzZVwiO1xuaW1wb3J0IHsgdHlwZSBXZWJTb2NrZXRDb25uZWN0aW9uIH0gZnJvbSBcIi4uL3N0cmVhbS93c1wiO1xuXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZSAtLSBDb250ZXh0IO2ZleyepSDtg4DsnoVcbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dEV4dGVuZCB7fVxudHlwZSBCYXNlQ29udGV4dCA9IHtcbiAgcmVxdWVzdDogRmFzdGlmeVJlcXVlc3Q7XG4gIGhlYWRlcnM6IEluY29taW5nSHR0cEhlYWRlcnM7XG4gIG5haXRlU3RvcmU6IE5haXRlU3RvcmU7XG4gIC8qKiDtmITsnqwg7JqU7LKt7J2YIGxvY2FsZSAqL1xuICBsb2NhbGU6IHN0cmluZztcbiAgLyoqIO2YhOyerCDroZzqt7jsnbjtlZwg7IKs7Jqp7J6QIChudWxs7J2066m0IOuvuOyduOymnSkgKi9cbiAgdXNlcjogVXNlciB8IG51bGw7XG4gIC8qKiDtmITsnqwg7IS47IWYIOygleuztCAobnVsbOydtOuptCDrr7jsnbjspp0pICovXG4gIHNlc3Npb246IFNlc3Npb24gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgQ29udGV4dCA9IEJhc2VDb250ZXh0ICYge1xuICB0cmFuc3BvcnQ6IFwiaHR0cFwiO1xuICByZXBseTogRmFzdGlmeVJlcGx5O1xuICBjcmVhdGVTU0U6IDxUIGV4dGVuZHMgWm9kT2JqZWN0PihldmVudHM6IFQpID0+IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVNTRUZhY3Rvcnk8VD4+O1xuICAvKiogYnVmZmVyIOuqqOuTnOyXkOyEnCDsl4XroZzrk5zrkJwg7YyM7J28ICovXG4gIGJ1ZmZlcmVkRmlsZXM/OiBCdWZmZXJlZEZpbGVbXTtcbiAgLyoqIHN0cmVhbSDrqqjrk5zsl5DshJwg7JeF66Gc65Oc65CcIO2MjOydvCAqL1xuICB1cGxvYWRlZEZpbGVzPzogVXBsb2FkZWRGaWxlW107XG59ICYgQ29udGV4dEV4dGVuZDtcblxuZXhwb3J0IHR5cGUgV2ViU29ja2V0Q29udGV4dDxcbiAgVE91dCBleHRlbmRzIG9iamVjdCA9IG9iamVjdCxcbiAgVEluIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0LFxuPiA9IEJhc2VDb250ZXh0ICYge1xuICB0cmFuc3BvcnQ6IFwid3NcIjtcbiAgd3M6IFdlYlNvY2tldENvbm5lY3Rpb248VE91dCwgVEluPjtcbn0gJiBDb250ZXh0RXh0ZW5kO1xuXG5leHBvcnQgdHlwZSBSdW50aW1lQ29udGV4dCA9IENvbnRleHQgfCBXZWJTb2NrZXRDb250ZXh0O1xuIl0sIm1hcHBpbmdzIjoiIn0=
@@ -10,7 +10,7 @@ import { getLogger } from "@logtape/logtape";
10
10
  import inflection from "inflection";
11
11
  import { isEqual } from "radashi";
12
12
  import assert from "assert";
13
- //#region src/api/decorators.ts
13
+ // src/api/decorators.ts
14
14
  function checkSingleDecorator(target, propertyKey, decoratorType) {
15
15
  const decoratorTypes = decoratorTypesByTarget.get(target) ?? /* @__PURE__ */ new Map();
16
16
  const existingDecoratorType = decoratorTypes.get(propertyKey);
@@ -270,8 +270,7 @@ var init_decorators = __esmMin((() => {
270
270
  UPLOAD: Symbol("upload")
271
271
  };
272
272
  }));
273
- //#endregion
274
273
  init_decorators();
275
274
  export { api, init_decorators, registeredApis, stream, transactional, upload, websocket };
276
275
 
277
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2RlY29yYXRvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCB7IHR5cGUgRmFzdGlmeU11bHRpcGFydEJhc2VPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IHR5cGUgSFRUUE1ldGhvZHMgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgdHlwZSB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyB0eXBlIENhY2hlQ29udHJvbENvbmZpZyB9IGZyb20gXCIuLi9jYWNoZS1jb250cm9sL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIENvbXByZXNzQ29uZmlnIH0gZnJvbSBcIi4uL2NvbXByZXNzL3R5cGVzXCI7XG5pbXBvcnQgeyBCYXNlTW9kZWxDbGFzcyB9IGZyb20gXCIuLi9kYXRhYmFzZS9iYXNlLW1vZGVsXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHsgUHVyaVRyYW5zYWN0aW9uV3JhcHBlciB9IGZyb20gXCIuLi9kYXRhYmFzZS9wdXJpLXdyYXBwZXJcIjtcbmltcG9ydCB7IHR5cGUgVHJhbnNhY3Rpb25hbE9wdGlvbnMgfSBmcm9tIFwiLi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5pbXBvcnQgeyBVcHNlcnRCdWlsZGVyIH0gZnJvbSBcIi4uL2RhdGFiYXNlL3Vwc2VydC1idWlsZGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSB9IGZyb20gXCIuLi9sb2dnZXIvY2F0ZWdvcnlcIjtcbmltcG9ydCB7IHR5cGUgRHJpdmVyS2V5IH0gZnJvbSBcIi4uL3N0b3JhZ2UvZHJpdmVyc1wiO1xuaW1wb3J0IHsgdHlwZSBLZXlHZW5lcmF0b3IgfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBBcGlQYXJhbSwgdHlwZSBBcGlQYXJhbVR5cGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUgfSBmcm9tIFwiLi4vdXRpbHMvY2xhc3MtbmFtZVwiO1xuaW1wb3J0IHsgQmFzZUZyYW1lQ2xhc3MgfSBmcm9tIFwiLi9iYXNlLWZyYW1lXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3VhcmRLZXlzIHtcbiAgcXVlcnk6IHRydWU7XG4gIGFkbWluOiB0cnVlO1xuICB1c2VyOiB0cnVlO1xufVxuZXhwb3J0IHR5cGUgR3VhcmRLZXkgPSBrZXlvZiBHdWFyZEtleXM7XG5leHBvcnQgdHlwZSBTZXJ2aWNlQ2xpZW50ID1cbiAgfCBcImF4aW9zXCJcbiAgfCBcImF4aW9zLW11bHRpcGFydFwiXG4gIHwgXCJ0YW5zdGFjay1xdWVyeVwiXG4gIHwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXG4gIHwgXCJ0YW5zdGFjay1tdXRhdGlvbi1tdWx0aXBhcnRcIlxuICB8IFwid2luZG93LWZldGNoXCI7XG5leHBvcnQgdHlwZSBBcGlEZWNvcmF0b3JPcHRpb25zID0ge1xuICBodHRwTWV0aG9kPzogSFRUUE1ldGhvZHM7XG4gIGNvbnRlbnRUeXBlPzpcbiAgICB8IFwidGV4dC9wbGFpblwiXG4gICAgfCBcInRleHQvaHRtbFwiXG4gICAgfCBcInRleHQveG1sXCJcbiAgICB8IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuICBjbGllbnRzPzogU2VydmljZUNsaWVudFtdO1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKiogQVBJIOydkeuLteydmCBDYWNoZS1Db250cm9sIO2XpOuNlCDshKTsoJUuIOyEpOygle2VmOyngCDslYrsnLzrqbQgY2FjaGVDb250cm9sSGFuZGxlciDrmJDripQg6riw67O46rCS7J20IOyggeyaqeuQqeuLiOuLpC4gKi9cbiAgY2FjaGVDb250cm9sPzogQ2FjaGVDb250cm9sQ29uZmlnO1xuICAvKiogQVBJIOydkeuLteydmCDslZXstpUg7ISk7KCVLiBmYWxzZeuhnCDshKTsoJXtlZjrqbQg7JWV7LaV7J2EIOu5hO2ZnOyEse2ZlO2VqeuLiOuLpC4gKi9cbiAgY29tcHJlc3M/OiBDb21wcmVzc0NvbmZpZztcbn07XG5leHBvcnQgdHlwZSBTdHJlYW1EZWNvcmF0b3JPcHRpb25zID0ge1xuICB0eXBlOiBcInNzZVwiO1xuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsnbTrsqTtirgg7YKk67OE66GcIOuEmOqyqOyjvOuKlCDqsJLsnbTrr4DroZwg7Ja065akIO2DgOyeheydtOuToCDsg4HqtIDsl4bsnYxcbiAgZXZlbnRzOiB6LlpvZE9iamVjdDxhbnk+O1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFdlYlNvY2tldERlY29yYXRvck9wdGlvbnMgPSB7XG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOydtOuypO2KuCDtgqTrs4TroZwg64SY6rKo7KO864qUIOqwkuydtOuvgOuhnCDslrTrlqQg7YOA7J6F7J2065OgIOyDgeq0gOyXhuydjFxuICBvdXRFdmVudHM6IHouWm9kT2JqZWN0PGFueT47XG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOydtOuypO2KuCDtgqTrs4TroZwg64SY6rKo7KO864qUIOqwkuydtOuvgOuhnCDslrTrlqQg7YOA7J6F7J2065OgIOyDgeq0gOyXhuydjFxuICBpbkV2ZW50czogei5ab2RPYmplY3Q8YW55PjtcbiAgcGF0aD86IHN0cmluZztcbiAgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaGVhcnRiZWF0PzogbnVtYmVyO1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zID0gV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucyAmIHtcbiAgLy8gY29kZWdlbuydtCDtg4DsnoUg7J2066aE7J2EIOyerOyCrOyaqe2VoCDsiJgg7J6I64+E66GdIHN5bmNlcuqwgCBBU1Tsl5DshJwg67O06rCV7ZWY64qUIOuplO2DgOuNsOydtO2EsFxuICBvdXRFdmVudHNUeXBlUmVmPzogQXBpUGFyYW1UeXBlLlJlZjtcbiAgaW5FdmVudHNUeXBlUmVmPzogQXBpUGFyYW1UeXBlLlJlZjtcbn07XG5cbnR5cGUgQnVmZmVyVXBsb2FkT3B0aW9ucyA9IHtcbiAgY29uc3VtZT86IFwiYnVmZmVyXCI7XG59O1xudHlwZSBTdHJlYW1VcGxvYWRPcHRpb25zID0ge1xuICBjb25zdW1lOiBcInN0cmVhbVwiO1xuICBkZXN0aW5hdGlvbjogRHJpdmVyS2V5O1xuICBrZXlHZW5lcmF0b3I/OiBLZXlHZW5lcmF0b3I7XG59O1xuZXhwb3J0IHR5cGUgVXBsb2FkRGVjb3JhdG9yT3B0aW9ucyA9IHtcbiAgZ3VhcmRzPzogR3VhcmRLZXlbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxpbWl0cz86IEZhc3RpZnlNdWx0aXBhcnRCYXNlT3B0aW9uc1tcImxpbWl0c1wiXTtcbn0gJiAoQnVmZmVyVXBsb2FkT3B0aW9ucyB8IFN0cmVhbVVwbG9hZE9wdGlvbnMpO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJlZEFwaXM6IHtcbiAgLyoqXG4gICAqIG1vZGVsTmFtZeydgCDrqqjrjbgg7YG0656Y7IqkIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJNb2RlbFwiKVxuICAgKi9cbiAgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zO1xuICBzdHJlYW1PcHRpb25zPzogU3RyZWFtRGVjb3JhdG9yT3B0aW9ucztcbiAgd2Vic29ja2V0T3B0aW9ucz86IFJlc29sdmVkV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucztcbiAgdXBsb2FkT3B0aW9ucz86IFVwbG9hZERlY29yYXRvck9wdGlvbnM7XG59W10gPSBbXTtcbmV4cG9ydCB0eXBlIEV4dGVuZGVkQXBpID0ge1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB3ZWJzb2NrZXRPcHRpb25zPzogUmVzb2x2ZWRXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbiAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xufTtcbnR5cGUgRGVjb3JhdG9yVGFyZ2V0ID0geyBjb25zdHJ1Y3RvcjogeyBuYW1lOiBzdHJpbmcgfSB9O1xuXG5jb25zdCBkZWNvcmF0b3JUeXBlc0J5VGFyZ2V0ID0gbmV3IFdlYWtNYXA8RGVjb3JhdG9yVGFyZ2V0LCBNYXA8c3RyaW5nLCBzeW1ib2w+PigpO1xuXG5jb25zdCBERUNPUkFUT1JfVFlQRVMgPSB7XG4gIEFQSTogU3ltYm9sKFwiYXBpXCIpLFxuICBTVFJFQU06IFN5bWJvbChcInN0cmVhbVwiKSxcbiAgV0VCU09DS0VUOiBTeW1ib2woXCJ3ZWJzb2NrZXRcIiksXG4gIFVQTE9BRDogU3ltYm9sKFwidXBsb2FkXCIpLFxufSBhcyBjb25zdDtcblxuZnVuY3Rpb24gY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlY29yYXRvclR5cGU6IHN5bWJvbCkge1xuICBjb25zdCBkZWNvcmF0b3JUeXBlcyA9IGRlY29yYXRvclR5cGVzQnlUYXJnZXQuZ2V0KHRhcmdldCkgPz8gbmV3IE1hcDxzdHJpbmcsIHN5bWJvbD4oKTtcbiAgY29uc3QgZXhpc3RpbmdEZWNvcmF0b3JUeXBlID0gZGVjb3JhdG9yVHlwZXMuZ2V0KHByb3BlcnR5S2V5KTtcblxuICBpZiAoZXhpc3RpbmdEZWNvcmF0b3JUeXBlICYmIGV4aXN0aW5nRGVjb3JhdG9yVHlwZSAhPT0gZGVjb3JhdG9yVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBAJHtkZWNvcmF0b3JUeXBlLmRlc2NyaXB0aW9uID8/IFN0cmluZyhkZWNvcmF0b3JUeXBlKX0gZGVjb3JhdG9yIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fS4gWW91IGNhbiB1c2Ugb25seSBvbmUgb2YgQGFwaSwgQHN0cmVhbSwgQHdlYnNvY2tldCwgb3IgQHVwbG9hZCBkZWNvcmF0b3Igb24gdGhlIHNhbWUgbWV0aG9kLmAsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBkZWNvcmF0b3JUeXBlcy5zZXQocHJvcGVydHlLZXksIGRlY29yYXRvclR5cGUpO1xuICAgIGRlY29yYXRvclR5cGVzQnlUYXJnZXQuc2V0KHRhcmdldCwgZGVjb3JhdG9yVHlwZXMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcGkob3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucyA9IHt9KSB7XG4gIG9wdGlvbnMgPSB7XG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgY2xpZW50czogW1wiYXhpb3NcIl0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICByZXR1cm4gKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBnZXRNb2RlbE5hbWVGcm9tQ2xhc3NOYW1lKHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBhcGkgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuQVBJKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuXG4gICAgLy8g6riw7KG0IOuPmeydvO2VnCDrqZTshJzrk5zqsIAg7J6I64qU7KeAIO2ZleyduCDtm4Qg7J6I64qUIOqyveyasCBvdmVycmlkZVxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChyZWdpc3RlcmVkQXBpKSA9PlxuICAgICAgICByZWdpc3RlcmVkQXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIHJlZ2lzdGVyZWRBcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcImFwaVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXCJhcGlcIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnMsIC8vIEBhcGkg642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VNb2RlbENsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLm1vZGVsTmFtZSwgXCJtb2RlbFwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VGcmFtZUNsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLmZyYW1lTmFtZSwgXCJmcmFtZVwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbShvcHRpb25zOiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUodGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHN0cmVhbSBkZWNvcmF0b3Igb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgLy8g66mU7ISc65Oc7JeQIOqxuOumsCDrjbDsvZTroIjsnbTthLAg7KSR67O1IOyytO2BrFxuICAgIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIERFQ09SQVRPUl9UWVBFUy5TVFJFQU0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSBgLyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIG1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKSxcbiAgICAgIHRydWUsXG4gICAgKX0vJHtpbmZsZWN0aW9uLmNhbWVsaXplKHByb3BlcnR5S2V5LCB0cnVlKX1gO1xuICAgIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggPz8gZGVmYXVsdFBhdGg7XG4gICAgLy8gc3RyZWFtIOyghOyaqSDtlYTrk5woZXZlbnRzLCB0eXBlKeuKlCBBcGlEZWNvcmF0b3JPcHRpb25z7JeQIOyGje2VmOyngCDslYrsnLzrr4DroZwg7KCc7Jm4XG4gICAgY29uc3QgeyBldmVudHM6IF8sIHR5cGU6IF90eXBlLCAuLi5hcGlPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSB7XG4gICAgICAuLi5hcGlPcHRpb25zLFxuICAgICAgaHR0cE1ldGhvZDpcbiAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFwiR0VUXCIgYXMgSFRUUE1ldGhvZHMsXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChyZWdpc3RlcmVkQXBpKSA9PlxuICAgICAgICByZWdpc3RlcmVkQXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIHJlZ2lzdGVyZWRBcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcInN0cmVhbVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXG4gICAgICAgIFwic3RyZWFtXCIsXG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICk7XG4gICAgICBleGlzdGluZ0FwaS5vcHRpb25zID0ge1xuICAgICAgICAuLi5leGlzdGluZ0FwaS5vcHRpb25zLCAvLyDquLDsobTsnZgg7Ji17IWY7J2EIOyhtOykke2VmOuQmFxuICAgICAgICAuLi5vcHRpb25zV2l0aERlZmF1bHRzLCAvLyBAc3RyZWFtIOuNsOy9lOugiOydtO2EsOydmCDsmLXshZjsnYQg7LaU6rCA7ZWp64uI64ukLlxuICAgICAgfTtcblxuICAgICAgZXhpc3RpbmdBcGkuc3RyZWFtT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICAgIHN0cmVhbU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInN0cmVhbToge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwic3RyZWFtOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlYnNvY2tldChvcHRpb25zOiBXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUodGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHdlYnNvY2tldCBkZWNvcmF0b3Igb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSwgREVDT1JBVE9SX1RZUEVTLldFQlNPQ0tFVCk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IGAvJHtpbmZsZWN0aW9uLmNhbWVsaXplKFxuICAgICAgbW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpLFxuICAgICAgdHJ1ZSxcbiAgICApfS8ke2luZmxlY3Rpb24uY2FtZWxpemUocHJvcGVydHlLZXksIHRydWUpfWA7XG4gICAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCA/PyBkZWZhdWx0UGF0aDtcbiAgICBjb25zdCB7IG91dEV2ZW50czogX291dEV2ZW50cywgaW5FdmVudHM6IF9pbkV2ZW50cywgLi4uYXBpT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBvcHRpb25zV2l0aERlZmF1bHRzID0ge1xuICAgICAgLi4uYXBpT3B0aW9ucyxcbiAgICAgIGh0dHBNZXRob2Q6XG4gICAgICAgIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBcIkdFVFwiIGFzIEhUVFBNZXRob2RzLFxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZ0FwaSA9IHJlZ2lzdGVyZWRBcGlzLmZpbmQoXG4gICAgICAocmVnaXN0ZXJlZEFwaSkgPT5cbiAgICAgICAgcmVnaXN0ZXJlZEFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiByZWdpc3RlcmVkQXBpLm1ldGhvZE5hbWUgPT09IG1ldGhvZE5hbWUsXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFwid2Vic29ja2V0XCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkucGF0aCwgcGF0aCk7XG4gICAgICBleGlzdGluZ0FwaS5wYXRoID0gcGF0aDtcblxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXG4gICAgICAgIFwid2Vic29ja2V0XCIsXG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICk7XG4gICAgICBleGlzdGluZ0FwaS5vcHRpb25zID0ge1xuICAgICAgICAuLi5leGlzdGluZ0FwaS5vcHRpb25zLFxuICAgICAgICAuLi5vcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgfTtcblxuICAgICAgZXhpc3RpbmdBcGkud2Vic29ja2V0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICAgIHdlYnNvY2tldE9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcIndlYnNvY2tldDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwid2Vic29ja2V0OiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWwob3B0aW9uczogVHJhbnNhY3Rpb25hbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IGlzb2xhdGlvbiwgcmVhZE9ubHksIGRiUHJlc2V0ID0gXCJ3XCIgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUodGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHRyYW5zYWN0aW9uYWwgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJ0cmFuc2FjdGlvbmFsOiB7bW9kZWx9LnttZXRob2R9XCIsIHtcbiAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOyXhuycvOuptCDsg4gg7Yq4656c7J6t7IWY6rO8IHNjb3Bl66W8IO2VqOq7mCDsi5zsnpHtlZzri6QuXG4gICAgICBjb25zdCBzdGFydFRyYW5zYWN0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwdXJpID0gdGhpcy5nZXRQdXJpKGRiUHJlc2V0KTtcblxuICAgICAgICByZXR1cm4gcHVyaS5rbmV4LnRyYW5zYWN0aW9uKFxuICAgICAgICAgIGFzeW5jICh0cngpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwibmV3IHRyYW5zYWN0aW9uIGNvbnRleHQ6IHtkYlByZXNldH1cIiwgeyBkYlByZXNldCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHRyeFdyYXBwZXIgPSBuZXcgUHVyaVRyYW5zYWN0aW9uV3JhcHBlcih0cngsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gREIucnVuV2l0aFRyYW5zYWN0aW9uU2NvcGUoZGJQcmVzZXQsIHRyeFdyYXBwZXIsICgpID0+XG4gICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaXNvbGF0aW9uTGV2ZWw6IGlzb2xhdGlvbiwgcmVhZE9ubHkgfSxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nVHJhbnNhY3Rpb24gPSBEQi50cmFuc2FjdGlvblN0b3JhZ2UuZ2V0U3RvcmUoKT8uZ2V0VHJhbnNhY3Rpb24oZGJQcmVzZXQpO1xuICAgICAgaWYgKGV4aXN0aW5nVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJyZXVzZSB0cmFuc2FjdGlvbiBjb250ZXh0OiB7ZGJQcmVzZXR9XCIsIHsgZGJQcmVzZXQgfSk7XG4gICAgICAgIC8vIOuLpOuluCBwcmVzZXTsnbQg7JWI7Kq97JeQIOyeiOyWtOuPhCDsnbQg66mU7ISc65Oc6rCAIOyerOyCrOyaqe2VnCDtirjrnpzsnq3shZjsnYQg7ZiE7J6sIHNjb3Bl66GcIO2RnOyLnO2VnOuLpC5cbiAgICAgICAgcmV0dXJuIERCLnJ1bldpdGhUcmFuc2FjdGlvblNjb3BlKGRiUHJlc2V0LCBleGlzdGluZ1RyYW5zYWN0aW9uLCAoKSA9PlxuICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDtjIzsnbwg7JeF66Gc65OcIEFQSeulvCDsg53shLHtlbTspI3ri4jri6QuIChAYXBpIOuNsOy9lOugiOydtO2EsCDsl4bsnbQg64+F66a97KCB7Jy866GcIOyCrOyaqSlcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkKG9wdGlvbnM6IFVwbG9hZERlY29yYXRvck9wdGlvbnMgPSB7IGNvbnN1bWU6IFwiYnVmZmVyXCIgfSkge1xuICByZXR1cm4gKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gZ2V0TW9kZWxOYW1lRnJvbUNsYXNzTmFtZSh0YXJnZXQuY29uc3RydWN0b3IubmFtZSk7XG4gICAgYXNzZXJ0KFxuICAgICAgbW9kZWxOYW1lLFxuICAgICAgYG1vZGVsTmFtZSBpcyByZXF1aXJlZCBvbiBAdXBsb2FkIGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICAvLyDrqZTshJzrk5zsl5Ag6rG466awIOuNsOy9lOugiOydtO2EsCDspJHrs7Ug7LK07YGsXG4gICAgY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSwgREVDT1JBVE9SX1RZUEVTLlVQTE9BRCk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IGAvJHtpbmZsZWN0aW9uLmNhbWVsaXplKFxuICAgICAgbW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpLFxuICAgICAgdHJ1ZSxcbiAgICApfS8ke2luZmxlY3Rpb24uY2FtZWxpemUobWV0aG9kTmFtZSwgdHJ1ZSl9YDtcblxuICAgIC8vIHJlZ2lzdGVyZWRBcGlz7JeQ7IScIO2VtOuLuSBBUEkg7LC+7JWE7IScIHVwbG9hZE9wdGlvbnMg7LaU6rCAXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKHJlZ2lzdGVyZWRBcGkpID0+XG4gICAgICAgIHJlZ2lzdGVyZWRBcGkubW9kZWxOYW1lID09PSBtb2RlbE5hbWUgJiYgcmVnaXN0ZXJlZEFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG5cbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIC8vIOyerOuTseuhnSDsi5wg7JeF66Gc65OcIOyYteyFmOunjCDqsLHsi6BcbiAgICAgIGV4aXN0aW5nQXBpLnVwbG9hZE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDsg4jroZwg65Ox66GdXG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoOiBkZWZhdWx0UGF0aCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGNsaWVudHM6IFtcImF4aW9zLW11bHRpcGFydFwiLCBcInRhbnN0YWNrLW11dGF0aW9uLW11bHRpcGFydFwiXSxcbiAgICAgICAgICBndWFyZHM6IG9wdGlvbnMuZ3VhcmRzLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgICB9LFxuICAgICAgICB1cGxvYWRPcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInVwbG9hZDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwidXBsb2FkOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcblxuICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICB9O1xufVxuXG4vKipcbiAqIOq4sOyhtOydmCBwYXRo7JmAIOyDiOuhnOyatCBwYXRo6rCAIOuLpOultOuLpOuptCg96rCS7J20IOyeiOuNmCDsiqTtirjrp4HsnbQg64uk66W4IOqwkuydtCDsnojripQg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gKiBAcGFyYW0gZGVjb3JhdG9yTmFtZSDrjbDsvZTroIjsnbTthLAg7J2066aEXG4gKiBAcGFyYW0gbW9kZWxOYW1lIOuqqOuNuCDsnbTrpoRcbiAqIEBwYXJhbSBtZXRob2ROYW1lIOuplOyEnOuTnCDsnbTrpoRcbiAqIEBwYXJhbSBleGlzdGluZ1BhdGgg6riw7KG07J2YIHBhdGhcbiAqIEBwYXJhbSBuZXdQYXRoIOyDiOuhnOyatCBwYXRoXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIGV4aXN0aW5nUGF0aDogc3RyaW5nLFxuICBuZXdQYXRoOiBzdHJpbmcsXG4pIHtcbiAgaWYgKGV4aXN0aW5nUGF0aCAhPT0gXCJcIiAmJiBuZXdQYXRoICE9PSBcIlwiICYmIGV4aXN0aW5nUGF0aCAhPT0gbmV3UGF0aCkge1xuICAgIC8vIOydtOqyg+ydtCDrrLTsiqgg7IOB7Zmp7J2064OQ66m07JqULCBhcGkucGF0aOqwgCDrja7slrTslIzsm4zsp4DripQg7IOB7Zmp7J6F64uI64ukLlxuICAgIC8vIOqwgOuguSBAYXBpKHsgcGF0aDogXCIvYXBpL3YxL3VzZXJzXCIgfSkg642w7L2U66CI7J207YSw6rCAIOu2meyWtOyeiOuKlCDrqZTshJzrk5zsl5BcbiAgICAvLyBAc3RyZWFtKHsgcGF0aDogXCIvYXBpL3YxL3VzZXJzL3N0cmVhbVwiIH0pIOqwmeydgCDqsoPsnbQg67aZ7Ja0IOyeiOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgLy8g7J2066CH6rKMIOuQmOuptCDrkZAg642w7L2U66CI7J207YSw6rCAIOqwmeydgCBhcGnsnZggcGF0aCDtlYTrk5zrpbwg6rG065Oc66as6rKMIOuQmOuvgOuhnCwg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQCR7ZGVjb3JhdG9yTmFtZX0gZGVjb3JhdG9yIG9uICR7bW9kZWxOYW1lfS4ke21ldGhvZE5hbWV9IGhhcyBjb25mbGljdGluZyBwYXRoOiAke25ld1BhdGh9LiBUaGUgZGVjb3JhdG9yIGlzIHRyeWluZyB0byBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcGF0aCgke2V4aXN0aW5nUGF0aH0pIHdpdGggdGhlIG5ldyBwYXRoKCR7bmV3UGF0aH0pLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICogQHBhcmFtIGRlY29yYXRvck5hbWUg642w7L2U66CI7J207YSwIOydtOumhFxuICogQHBhcmFtIG1vZGVsTmFtZSDrqqjrjbgg7J2066aEXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSDrqZTshJzrk5wg7J2066aEXG4gKiBAcGFyYW0gZXhpc3RpbmdPcHRpb25zIOq4sOyhtOydmCDsmLXshZhcbiAqIEBwYXJhbSBuZXdPcHRpb25zIOyDiOuhnOyatCDsmLXshZhcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnM8RXhpc3RpbmdPcHRpb25zIGV4dGVuZHMgb2JqZWN0LCBOZXdPcHRpb25zIGV4dGVuZHMgb2JqZWN0PihcbiAgZGVjb3JhdG9yTmFtZTogc3RyaW5nLFxuICBtb2RlbE5hbWU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBleGlzdGluZ09wdGlvbnM6IEV4aXN0aW5nT3B0aW9ucyxcbiAgbmV3T3B0aW9uczogTmV3T3B0aW9ucyxcbikge1xuICBjb25zdCBleGlzdGluZ0VudHJpZXMgPSBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKGV4aXN0aW5nT3B0aW9ucykpO1xuICBPYmplY3QuZW50cmllcyhuZXdPcHRpb25zKS5mb3JFYWNoKChba2V5LCBuZXdWYWx1ZV0pID0+IHtcbiAgICBjb25zdCBleGlzdGluZ1ZhbHVlID0gZXhpc3RpbmdFbnRyaWVzLmdldChrZXkpO1xuICAgIGlmIChleGlzdGluZ1ZhbHVlICYmICFpc0VxdWFsKGV4aXN0aW5nVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgLy8g7J206rKD7J20IOustOyKqCDsg4HtmansnbTrg5DrqbTsmpQsIGFwaS5vcHRpb25z6rCAIOuNruyWtOyUjOybjOyngOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgICAvLyDqsIDroLkgQGFwaSh7IHJlc291cmNlTmFtZTogXCJVc2Vyc1wiIH0pIOuNsOy9lOugiOydtO2EsOqwgCDrtpnslrTsnojripQg66mU7ISc65Oc7JeQXG4gICAgICAvLyBAc3RyZWFtKHsgcmVzb3VyY2VOYW1lOiBcIlBvc3RzXCIgfSkg6rCZ7J2AIOqyg+ydtCDrtpnslrQg7J6I64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAgIC8vIOydtOugh+qyjCDrkJjrqbQg65GQIOuNsOy9lOugiOydtO2EsOqwgCDqsJnsnYAgYXBp7J2YIG9wdGlvbnMg7IaNIOqwmeydgCDtlYTrk5zrpbwg6rG065Oc66as6rKMIOuQmOuvgOuhnCwg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEAke2RlY29yYXRvck5hbWV9IGRlY29yYXRvciBvbiAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfSBoYXMgY29uZmxpY3Rpbmcgb3B0aW9uczogJHtrZXl9LiBUaGUgZGVjb3JhdG9yIGlzIHRyeWluZyB0byBvdmVycmlkZSB0aGUgZXhpc3Rpbmcgb3B0aW9uKCR7SlNPTi5zdHJpbmdpZnkoZXhpc3RpbmdWYWx1ZSl9KSB3aXRoIHRoZSBuZXcgb3B0aW9uKCR7SlNPTi5zdHJpbmdpZnkobmV3VmFsdWUpfSkuYCxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQW1JQSxTQUFTLHFCQUFxQixRQUF5QixhQUFxQixlQUF1QjtDQUNqRyxNQUFNLGlCQUFpQix1QkFBdUIsSUFBSSxNQUFNLHFCQUFLLElBQUksSUFBb0I7Q0FDckYsTUFBTSx3QkFBd0IsZUFBZSxJQUFJLFdBQVc7Q0FFNUQsSUFBSSx5QkFBeUIsMEJBQTBCLGVBQ3JELE1BQU0sSUFBSSxNQUNSLElBQUksY0FBYyxlQUFlLE9BQU8sYUFBYSxFQUFFLHNDQUFzQyxPQUFPLFlBQVks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
276
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2RlY29yYXRvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCB7IHR5cGUgRmFzdGlmeU11bHRpcGFydEJhc2VPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IHR5cGUgSFRUUE1ldGhvZHMgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgdHlwZSB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyB0eXBlIENhY2hlQ29udHJvbENvbmZpZyB9IGZyb20gXCIuLi9jYWNoZS1jb250cm9sL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIENvbXByZXNzQ29uZmlnIH0gZnJvbSBcIi4uL2NvbXByZXNzL3R5cGVzXCI7XG5pbXBvcnQgeyBCYXNlTW9kZWxDbGFzcyB9IGZyb20gXCIuLi9kYXRhYmFzZS9iYXNlLW1vZGVsXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHsgUHVyaVRyYW5zYWN0aW9uV3JhcHBlciB9IGZyb20gXCIuLi9kYXRhYmFzZS9wdXJpLXdyYXBwZXJcIjtcbmltcG9ydCB7IHR5cGUgVHJhbnNhY3Rpb25hbE9wdGlvbnMgfSBmcm9tIFwiLi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5pbXBvcnQgeyBVcHNlcnRCdWlsZGVyIH0gZnJvbSBcIi4uL2RhdGFiYXNlL3Vwc2VydC1idWlsZGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSB9IGZyb20gXCIuLi9sb2dnZXIvY2F0ZWdvcnlcIjtcbmltcG9ydCB7IHR5cGUgRHJpdmVyS2V5IH0gZnJvbSBcIi4uL3N0b3JhZ2UvZHJpdmVyc1wiO1xuaW1wb3J0IHsgdHlwZSBLZXlHZW5lcmF0b3IgfSBmcm9tIFwiLi4vc3RvcmFnZS90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBBcGlQYXJhbSwgdHlwZSBBcGlQYXJhbVR5cGUgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUgfSBmcm9tIFwiLi4vdXRpbHMvY2xhc3MtbmFtZVwiO1xuaW1wb3J0IHsgQmFzZUZyYW1lQ2xhc3MgfSBmcm9tIFwiLi9iYXNlLWZyYW1lXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3VhcmRLZXlzIHtcbiAgcXVlcnk6IHRydWU7XG4gIGFkbWluOiB0cnVlO1xuICB1c2VyOiB0cnVlO1xufVxuZXhwb3J0IHR5cGUgR3VhcmRLZXkgPSBrZXlvZiBHdWFyZEtleXM7XG5leHBvcnQgdHlwZSBTZXJ2aWNlQ2xpZW50ID1cbiAgfCBcImF4aW9zXCJcbiAgfCBcImF4aW9zLW11bHRpcGFydFwiXG4gIHwgXCJ0YW5zdGFjay1xdWVyeVwiXG4gIHwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXG4gIHwgXCJ0YW5zdGFjay1tdXRhdGlvbi1tdWx0aXBhcnRcIlxuICB8IFwid2luZG93LWZldGNoXCI7XG5leHBvcnQgdHlwZSBBcGlEZWNvcmF0b3JPcHRpb25zID0ge1xuICBodHRwTWV0aG9kPzogSFRUUE1ldGhvZHM7XG4gIGNvbnRlbnRUeXBlPzpcbiAgICB8IFwidGV4dC9wbGFpblwiXG4gICAgfCBcInRleHQvaHRtbFwiXG4gICAgfCBcInRleHQveG1sXCJcbiAgICB8IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuICBjbGllbnRzPzogU2VydmljZUNsaWVudFtdO1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKiogQVBJIOydkeuLteydmCBDYWNoZS1Db250cm9sIO2XpOuNlCDshKTsoJUuIOyEpOygle2VmOyngCDslYrsnLzrqbQgY2FjaGVDb250cm9sSGFuZGxlciDrmJDripQg6riw67O46rCS7J20IOyggeyaqeuQqeuLiOuLpC4gKi9cbiAgY2FjaGVDb250cm9sPzogQ2FjaGVDb250cm9sQ29uZmlnO1xuICAvKiogQVBJIOydkeuLteydmCDslZXstpUg7ISk7KCVLiBmYWxzZeuhnCDshKTsoJXtlZjrqbQg7JWV7LaV7J2EIOu5hO2ZnOyEse2ZlO2VqeuLiOuLpC4gKi9cbiAgY29tcHJlc3M/OiBDb21wcmVzc0NvbmZpZztcbn07XG5leHBvcnQgdHlwZSBTdHJlYW1EZWNvcmF0b3JPcHRpb25zID0ge1xuICB0eXBlOiBcInNzZVwiO1xuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsnbTrsqTtirgg7YKk67OE66GcIOuEmOqyqOyjvOuKlCDqsJLsnbTrr4DroZwg7Ja065akIO2DgOyeheydtOuToCDsg4HqtIDsl4bsnYxcbiAgZXZlbnRzOiB6LlpvZE9iamVjdDxhbnk+O1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFdlYlNvY2tldERlY29yYXRvck9wdGlvbnMgPSB7XG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOydtOuypO2KuCDtgqTrs4TroZwg64SY6rKo7KO864qUIOqwkuydtOuvgOuhnCDslrTrlqQg7YOA7J6F7J2065OgIOyDgeq0gOyXhuydjFxuICBvdXRFdmVudHM6IHouWm9kT2JqZWN0PGFueT47XG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOydtOuypO2KuCDtgqTrs4TroZwg64SY6rKo7KO864qUIOqwkuydtOuvgOuhnCDslrTrlqQg7YOA7J6F7J2065OgIOyDgeq0gOyXhuydjFxuICBpbkV2ZW50czogei5ab2RPYmplY3Q8YW55PjtcbiAgcGF0aD86IHN0cmluZztcbiAgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaGVhcnRiZWF0PzogbnVtYmVyO1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zID0gV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucyAmIHtcbiAgLy8gY29kZWdlbuydtCDtg4DsnoUg7J2066aE7J2EIOyerOyCrOyaqe2VoCDsiJgg7J6I64+E66GdIHN5bmNlcuqwgCBBU1Tsl5DshJwg67O06rCV7ZWY64qUIOuplO2DgOuNsOydtO2EsFxuICBvdXRFdmVudHNUeXBlUmVmPzogQXBpUGFyYW1UeXBlLlJlZjtcbiAgaW5FdmVudHNUeXBlUmVmPzogQXBpUGFyYW1UeXBlLlJlZjtcbn07XG5cbnR5cGUgQnVmZmVyVXBsb2FkT3B0aW9ucyA9IHtcbiAgY29uc3VtZT86IFwiYnVmZmVyXCI7XG59O1xudHlwZSBTdHJlYW1VcGxvYWRPcHRpb25zID0ge1xuICBjb25zdW1lOiBcInN0cmVhbVwiO1xuICBkZXN0aW5hdGlvbjogRHJpdmVyS2V5O1xuICBrZXlHZW5lcmF0b3I/OiBLZXlHZW5lcmF0b3I7XG59O1xuZXhwb3J0IHR5cGUgVXBsb2FkRGVjb3JhdG9yT3B0aW9ucyA9IHtcbiAgZ3VhcmRzPzogR3VhcmRLZXlbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxpbWl0cz86IEZhc3RpZnlNdWx0aXBhcnRCYXNlT3B0aW9uc1tcImxpbWl0c1wiXTtcbn0gJiAoQnVmZmVyVXBsb2FkT3B0aW9ucyB8IFN0cmVhbVVwbG9hZE9wdGlvbnMpO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJlZEFwaXM6IHtcbiAgLyoqXG4gICAqIG1vZGVsTmFtZeydgCDrqqjrjbgg7YG0656Y7IqkIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJNb2RlbFwiKVxuICAgKi9cbiAgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zO1xuICBzdHJlYW1PcHRpb25zPzogU3RyZWFtRGVjb3JhdG9yT3B0aW9ucztcbiAgd2Vic29ja2V0T3B0aW9ucz86IFJlc29sdmVkV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucztcbiAgdXBsb2FkT3B0aW9ucz86IFVwbG9hZERlY29yYXRvck9wdGlvbnM7XG59W10gPSBbXTtcbmV4cG9ydCB0eXBlIEV4dGVuZGVkQXBpID0ge1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB3ZWJzb2NrZXRPcHRpb25zPzogUmVzb2x2ZWRXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbiAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xufTtcbnR5cGUgRGVjb3JhdG9yVGFyZ2V0ID0geyBjb25zdHJ1Y3RvcjogeyBuYW1lOiBzdHJpbmcgfSB9O1xuXG5jb25zdCBkZWNvcmF0b3JUeXBlc0J5VGFyZ2V0ID0gbmV3IFdlYWtNYXA8RGVjb3JhdG9yVGFyZ2V0LCBNYXA8c3RyaW5nLCBzeW1ib2w+PigpO1xuXG5jb25zdCBERUNPUkFUT1JfVFlQRVMgPSB7XG4gIEFQSTogU3ltYm9sKFwiYXBpXCIpLFxuICBTVFJFQU06IFN5bWJvbChcInN0cmVhbVwiKSxcbiAgV0VCU09DS0VUOiBTeW1ib2woXCJ3ZWJzb2NrZXRcIiksXG4gIFVQTE9BRDogU3ltYm9sKFwidXBsb2FkXCIpLFxufSBhcyBjb25zdDtcblxuZnVuY3Rpb24gY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlY29yYXRvclR5cGU6IHN5bWJvbCkge1xuICBjb25zdCBkZWNvcmF0b3JUeXBlcyA9IGRlY29yYXRvclR5cGVzQnlUYXJnZXQuZ2V0KHRhcmdldCkgPz8gbmV3IE1hcDxzdHJpbmcsIHN5bWJvbD4oKTtcbiAgY29uc3QgZXhpc3RpbmdEZWNvcmF0b3JUeXBlID0gZGVjb3JhdG9yVHlwZXMuZ2V0KHByb3BlcnR5S2V5KTtcblxuICBpZiAoZXhpc3RpbmdEZWNvcmF0b3JUeXBlICYmIGV4aXN0aW5nRGVjb3JhdG9yVHlwZSAhPT0gZGVjb3JhdG9yVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBAJHtkZWNvcmF0b3JUeXBlLmRlc2NyaXB0aW9uID8/IFN0cmluZyhkZWNvcmF0b3JUeXBlKX0gZGVjb3JhdG9yIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fS4gWW91IGNhbiB1c2Ugb25seSBvbmUgb2YgQGFwaSwgQHN0cmVhbSwgQHdlYnNvY2tldCwgb3IgQHVwbG9hZCBkZWNvcmF0b3Igb24gdGhlIHNhbWUgbWV0aG9kLmAsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBkZWNvcmF0b3JUeXBlcy5zZXQocHJvcGVydHlLZXksIGRlY29yYXRvclR5cGUpO1xuICAgIGRlY29yYXRvclR5cGVzQnlUYXJnZXQuc2V0KHRhcmdldCwgZGVjb3JhdG9yVHlwZXMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcGkob3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucyA9IHt9KSB7XG4gIG9wdGlvbnMgPSB7XG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgY2xpZW50czogW1wiYXhpb3NcIl0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICByZXR1cm4gKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBnZXRNb2RlbE5hbWVGcm9tQ2xhc3NOYW1lKHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBhcGkgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuQVBJKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuXG4gICAgLy8g6riw7KG0IOuPmeydvO2VnCDrqZTshJzrk5zqsIAg7J6I64qU7KeAIO2ZleyduCDtm4Qg7J6I64qUIOqyveyasCBvdmVycmlkZVxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChyZWdpc3RlcmVkQXBpKSA9PlxuICAgICAgICByZWdpc3RlcmVkQXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIHJlZ2lzdGVyZWRBcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcImFwaVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXCJhcGlcIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnMsIC8vIEBhcGkg642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VNb2RlbENsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLm1vZGVsTmFtZSwgXCJtb2RlbFwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VGcmFtZUNsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLmZyYW1lTmFtZSwgXCJmcmFtZVwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbShvcHRpb25zOiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUodGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHN0cmVhbSBkZWNvcmF0b3Igb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgLy8g66mU7ISc65Oc7JeQIOqxuOumsCDrjbDsvZTroIjsnbTthLAg7KSR67O1IOyytO2BrFxuICAgIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIERFQ09SQVRPUl9UWVBFUy5TVFJFQU0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSBgLyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIG1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKSxcbiAgICAgIHRydWUsXG4gICAgKX0vJHtpbmZsZWN0aW9uLmNhbWVsaXplKHByb3BlcnR5S2V5LCB0cnVlKX1gO1xuICAgIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggPz8gZGVmYXVsdFBhdGg7XG4gICAgLy8gc3RyZWFtIOyghOyaqSDtlYTrk5woZXZlbnRzLCB0eXBlKeuKlCBBcGlEZWNvcmF0b3JPcHRpb25z7JeQIOyGje2VmOyngCDslYrsnLzrr4DroZwg7KCc7Jm4XG4gICAgY29uc3QgeyBldmVudHM6IF8sIHR5cGU6IF90eXBlLCAuLi5hcGlPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSB7XG4gICAgICAuLi5hcGlPcHRpb25zLFxuICAgICAgaHR0cE1ldGhvZDpcbiAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFwiR0VUXCIgYXMgSFRUUE1ldGhvZHMsXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChyZWdpc3RlcmVkQXBpKSA9PlxuICAgICAgICByZWdpc3RlcmVkQXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIHJlZ2lzdGVyZWRBcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcInN0cmVhbVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXG4gICAgICAgIFwic3RyZWFtXCIsXG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICk7XG4gICAgICBleGlzdGluZ0FwaS5vcHRpb25zID0ge1xuICAgICAgICAuLi5leGlzdGluZ0FwaS5vcHRpb25zLCAvLyDquLDsobTsnZgg7Ji17IWY7J2EIOyhtOykke2VmOuQmFxuICAgICAgICAuLi5vcHRpb25zV2l0aERlZmF1bHRzLCAvLyBAc3RyZWFtIOuNsOy9lOugiOydtO2EsOydmCDsmLXshZjsnYQg7LaU6rCA7ZWp64uI64ukLlxuICAgICAgfTtcblxuICAgICAgZXhpc3RpbmdBcGkuc3RyZWFtT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICAgIHN0cmVhbU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInN0cmVhbToge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwic3RyZWFtOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlYnNvY2tldChvcHRpb25zOiBXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUodGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHdlYnNvY2tldCBkZWNvcmF0b3Igb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSwgREVDT1JBVE9SX1RZUEVTLldFQlNPQ0tFVCk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IGAvJHtpbmZsZWN0aW9uLmNhbWVsaXplKFxuICAgICAgbW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpLFxuICAgICAgdHJ1ZSxcbiAgICApfS8ke2luZmxlY3Rpb24uY2FtZWxpemUocHJvcGVydHlLZXksIHRydWUpfWA7XG4gICAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCA/PyBkZWZhdWx0UGF0aDtcbiAgICBjb25zdCB7IG91dEV2ZW50czogX291dEV2ZW50cywgaW5FdmVudHM6IF9pbkV2ZW50cywgLi4uYXBpT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBvcHRpb25zV2l0aERlZmF1bHRzID0ge1xuICAgICAgLi4uYXBpT3B0aW9ucyxcbiAgICAgIGh0dHBNZXRob2Q6XG4gICAgICAgIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBcIkdFVFwiIGFzIEhUVFBNZXRob2RzLFxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZ0FwaSA9IHJlZ2lzdGVyZWRBcGlzLmZpbmQoXG4gICAgICAocmVnaXN0ZXJlZEFwaSkgPT5cbiAgICAgICAgcmVnaXN0ZXJlZEFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiByZWdpc3RlcmVkQXBpLm1ldGhvZE5hbWUgPT09IG1ldGhvZE5hbWUsXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFwid2Vic29ja2V0XCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkucGF0aCwgcGF0aCk7XG4gICAgICBleGlzdGluZ0FwaS5wYXRoID0gcGF0aDtcblxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXG4gICAgICAgIFwid2Vic29ja2V0XCIsXG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICk7XG4gICAgICBleGlzdGluZ0FwaS5vcHRpb25zID0ge1xuICAgICAgICAuLi5leGlzdGluZ0FwaS5vcHRpb25zLFxuICAgICAgICAuLi5vcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgfTtcblxuICAgICAgZXhpc3RpbmdBcGkud2Vic29ja2V0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICAgIHdlYnNvY2tldE9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcIndlYnNvY2tldDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwid2Vic29ja2V0OiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWwob3B0aW9uczogVHJhbnNhY3Rpb25hbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IGlzb2xhdGlvbiwgcmVhZE9ubHksIGRiUHJlc2V0ID0gXCJ3XCIgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IGdldE1vZGVsTmFtZUZyb21DbGFzc05hbWUodGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHRyYW5zYWN0aW9uYWwgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJ0cmFuc2FjdGlvbmFsOiB7bW9kZWx9LnttZXRob2R9XCIsIHtcbiAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOyXhuycvOuptCDsg4gg7Yq4656c7J6t7IWY6rO8IHNjb3Bl66W8IO2VqOq7mCDsi5zsnpHtlZzri6QuXG4gICAgICBjb25zdCBzdGFydFRyYW5zYWN0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwdXJpID0gdGhpcy5nZXRQdXJpKGRiUHJlc2V0KTtcblxuICAgICAgICByZXR1cm4gcHVyaS5rbmV4LnRyYW5zYWN0aW9uKFxuICAgICAgICAgIGFzeW5jICh0cngpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwibmV3IHRyYW5zYWN0aW9uIGNvbnRleHQ6IHtkYlByZXNldH1cIiwgeyBkYlByZXNldCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHRyeFdyYXBwZXIgPSBuZXcgUHVyaVRyYW5zYWN0aW9uV3JhcHBlcih0cngsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gREIucnVuV2l0aFRyYW5zYWN0aW9uU2NvcGUoZGJQcmVzZXQsIHRyeFdyYXBwZXIsICgpID0+XG4gICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaXNvbGF0aW9uTGV2ZWw6IGlzb2xhdGlvbiwgcmVhZE9ubHkgfSxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nVHJhbnNhY3Rpb24gPSBEQi50cmFuc2FjdGlvblN0b3JhZ2UuZ2V0U3RvcmUoKT8uZ2V0VHJhbnNhY3Rpb24oZGJQcmVzZXQpO1xuICAgICAgaWYgKGV4aXN0aW5nVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJyZXVzZSB0cmFuc2FjdGlvbiBjb250ZXh0OiB7ZGJQcmVzZXR9XCIsIHsgZGJQcmVzZXQgfSk7XG4gICAgICAgIC8vIOuLpOuluCBwcmVzZXTsnbQg7JWI7Kq97JeQIOyeiOyWtOuPhCDsnbQg66mU7ISc65Oc6rCAIOyerOyCrOyaqe2VnCDtirjrnpzsnq3shZjsnYQg7ZiE7J6sIHNjb3Bl66GcIO2RnOyLnO2VnOuLpC5cbiAgICAgICAgcmV0dXJuIERCLnJ1bldpdGhUcmFuc2FjdGlvblNjb3BlKGRiUHJlc2V0LCBleGlzdGluZ1RyYW5zYWN0aW9uLCAoKSA9PlxuICAgICAgICAgIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDtjIzsnbwg7JeF66Gc65OcIEFQSeulvCDsg53shLHtlbTspI3ri4jri6QuIChAYXBpIOuNsOy9lOugiOydtO2EsCDsl4bsnbQg64+F66a97KCB7Jy866GcIOyCrOyaqSlcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkKG9wdGlvbnM6IFVwbG9hZERlY29yYXRvck9wdGlvbnMgPSB7IGNvbnN1bWU6IFwiYnVmZmVyXCIgfSkge1xuICByZXR1cm4gKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gZ2V0TW9kZWxOYW1lRnJvbUNsYXNzTmFtZSh0YXJnZXQuY29uc3RydWN0b3IubmFtZSk7XG4gICAgYXNzZXJ0KFxuICAgICAgbW9kZWxOYW1lLFxuICAgICAgYG1vZGVsTmFtZSBpcyByZXF1aXJlZCBvbiBAdXBsb2FkIGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICAvLyDrqZTshJzrk5zsl5Ag6rG466awIOuNsOy9lOugiOydtO2EsCDspJHrs7Ug7LK07YGsXG4gICAgY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSwgREVDT1JBVE9SX1RZUEVTLlVQTE9BRCk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IGAvJHtpbmZsZWN0aW9uLmNhbWVsaXplKFxuICAgICAgbW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpLFxuICAgICAgdHJ1ZSxcbiAgICApfS8ke2luZmxlY3Rpb24uY2FtZWxpemUobWV0aG9kTmFtZSwgdHJ1ZSl9YDtcblxuICAgIC8vIHJlZ2lzdGVyZWRBcGlz7JeQ7IScIO2VtOuLuSBBUEkg7LC+7JWE7IScIHVwbG9hZE9wdGlvbnMg7LaU6rCAXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKHJlZ2lzdGVyZWRBcGkpID0+XG4gICAgICAgIHJlZ2lzdGVyZWRBcGkubW9kZWxOYW1lID09PSBtb2RlbE5hbWUgJiYgcmVnaXN0ZXJlZEFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG5cbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIC8vIOyerOuTseuhnSDsi5wg7JeF66Gc65OcIOyYteyFmOunjCDqsLHsi6BcbiAgICAgIGV4aXN0aW5nQXBpLnVwbG9hZE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDsg4jroZwg65Ox66GdXG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoOiBkZWZhdWx0UGF0aCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGNsaWVudHM6IFtcImF4aW9zLW11bHRpcGFydFwiLCBcInRhbnN0YWNrLW11dGF0aW9uLW11bHRpcGFydFwiXSxcbiAgICAgICAgICBndWFyZHM6IG9wdGlvbnMuZ3VhcmRzLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgICB9LFxuICAgICAgICB1cGxvYWRPcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInVwbG9hZDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwidXBsb2FkOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcblxuICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICB9O1xufVxuXG4vKipcbiAqIOq4sOyhtOydmCBwYXRo7JmAIOyDiOuhnOyatCBwYXRo6rCAIOuLpOultOuLpOuptCg96rCS7J20IOyeiOuNmCDsiqTtirjrp4HsnbQg64uk66W4IOqwkuydtCDsnojripQg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gKiBAcGFyYW0gZGVjb3JhdG9yTmFtZSDrjbDsvZTroIjsnbTthLAg7J2066aEXG4gKiBAcGFyYW0gbW9kZWxOYW1lIOuqqOuNuCDsnbTrpoRcbiAqIEBwYXJhbSBtZXRob2ROYW1lIOuplOyEnOuTnCDsnbTrpoRcbiAqIEBwYXJhbSBleGlzdGluZ1BhdGgg6riw7KG07J2YIHBhdGhcbiAqIEBwYXJhbSBuZXdQYXRoIOyDiOuhnOyatCBwYXRoXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIGV4aXN0aW5nUGF0aDogc3RyaW5nLFxuICBuZXdQYXRoOiBzdHJpbmcsXG4pIHtcbiAgaWYgKGV4aXN0aW5nUGF0aCAhPT0gXCJcIiAmJiBuZXdQYXRoICE9PSBcIlwiICYmIGV4aXN0aW5nUGF0aCAhPT0gbmV3UGF0aCkge1xuICAgIC8vIOydtOqyg+ydtCDrrLTsiqgg7IOB7Zmp7J2064OQ66m07JqULCBhcGkucGF0aOqwgCDrja7slrTslIzsm4zsp4DripQg7IOB7Zmp7J6F64uI64ukLlxuICAgIC8vIOqwgOuguSBAYXBpKHsgcGF0aDogXCIvYXBpL3YxL3VzZXJzXCIgfSkg642w7L2U66CI7J207YSw6rCAIOu2meyWtOyeiOuKlCDrqZTshJzrk5zsl5BcbiAgICAvLyBAc3RyZWFtKHsgcGF0aDogXCIvYXBpL3YxL3VzZXJzL3N0cmVhbVwiIH0pIOqwmeydgCDqsoPsnbQg67aZ7Ja0IOyeiOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgLy8g7J2066CH6rKMIOuQmOuptCDrkZAg642w7L2U66CI7J207YSw6rCAIOqwmeydgCBhcGnsnZggcGF0aCDtlYTrk5zrpbwg6rG065Oc66as6rKMIOuQmOuvgOuhnCwg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQCR7ZGVjb3JhdG9yTmFtZX0gZGVjb3JhdG9yIG9uICR7bW9kZWxOYW1lfS4ke21ldGhvZE5hbWV9IGhhcyBjb25mbGljdGluZyBwYXRoOiAke25ld1BhdGh9LiBUaGUgZGVjb3JhdG9yIGlzIHRyeWluZyB0byBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcGF0aCgke2V4aXN0aW5nUGF0aH0pIHdpdGggdGhlIG5ldyBwYXRoKCR7bmV3UGF0aH0pLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICogQHBhcmFtIGRlY29yYXRvck5hbWUg642w7L2U66CI7J207YSwIOydtOumhFxuICogQHBhcmFtIG1vZGVsTmFtZSDrqqjrjbgg7J2066aEXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSDrqZTshJzrk5wg7J2066aEXG4gKiBAcGFyYW0gZXhpc3RpbmdPcHRpb25zIOq4sOyhtOydmCDsmLXshZhcbiAqIEBwYXJhbSBuZXdPcHRpb25zIOyDiOuhnOyatCDsmLXshZhcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnM8RXhpc3RpbmdPcHRpb25zIGV4dGVuZHMgb2JqZWN0LCBOZXdPcHRpb25zIGV4dGVuZHMgb2JqZWN0PihcbiAgZGVjb3JhdG9yTmFtZTogc3RyaW5nLFxuICBtb2RlbE5hbWU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBleGlzdGluZ09wdGlvbnM6IEV4aXN0aW5nT3B0aW9ucyxcbiAgbmV3T3B0aW9uczogTmV3T3B0aW9ucyxcbikge1xuICBjb25zdCBleGlzdGluZ0VudHJpZXMgPSBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKGV4aXN0aW5nT3B0aW9ucykpO1xuICBPYmplY3QuZW50cmllcyhuZXdPcHRpb25zKS5mb3JFYWNoKChba2V5LCBuZXdWYWx1ZV0pID0+IHtcbiAgICBjb25zdCBleGlzdGluZ1ZhbHVlID0gZXhpc3RpbmdFbnRyaWVzLmdldChrZXkpO1xuICAgIGlmIChleGlzdGluZ1ZhbHVlICYmICFpc0VxdWFsKGV4aXN0aW5nVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgLy8g7J206rKD7J20IOustOyKqCDsg4HtmansnbTrg5DrqbTsmpQsIGFwaS5vcHRpb25z6rCAIOuNruyWtOyUjOybjOyngOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgICAvLyDqsIDroLkgQGFwaSh7IHJlc291cmNlTmFtZTogXCJVc2Vyc1wiIH0pIOuNsOy9lOugiOydtO2EsOqwgCDrtpnslrTsnojripQg66mU7ISc65Oc7JeQXG4gICAgICAvLyBAc3RyZWFtKHsgcmVzb3VyY2VOYW1lOiBcIlBvc3RzXCIgfSkg6rCZ7J2AIOqyg+ydtCDrtpnslrQg7J6I64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAgIC8vIOydtOugh+qyjCDrkJjrqbQg65GQIOuNsOy9lOugiOydtO2EsOqwgCDqsJnsnYAgYXBp7J2YIG9wdGlvbnMg7IaNIOqwmeydgCDtlYTrk5zrpbwg6rG065Oc66as6rKMIOuQmOuvgOuhnCwg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEAke2RlY29yYXRvck5hbWV9IGRlY29yYXRvciBvbiAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfSBoYXMgY29uZmxpY3Rpbmcgb3B0aW9uczogJHtrZXl9LiBUaGUgZGVjb3JhdG9yIGlzIHRyeWluZyB0byBvdmVycmlkZSB0aGUgZXhpc3Rpbmcgb3B0aW9uKCR7SlNPTi5zdHJpbmdpZnkoZXhpc3RpbmdWYWx1ZSl9KSB3aXRoIHRoZSBuZXcgb3B0aW9uKCR7SlNPTi5zdHJpbmdpZnkobmV3VmFsdWUpfSkuYCxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQW1JQSxTQUFTLHFCQUFxQixRQUF5QixhQUFxQixlQUF1QjtDQUNqRyxNQUFNLGlCQUFpQix1QkFBdUIsSUFBSSxNQUFNLHFCQUFLLElBQUksSUFBb0I7Q0FDckYsTUFBTSx3QkFBd0IsZUFBZSxJQUFJLFdBQVc7Q0FFNUQsSUFBSSx5QkFBeUIsMEJBQTBCLGVBQ3JELE1BQU0sSUFBSSxNQUNSLElBQUksY0FBYyxlQUFlLE9BQU8sYUFBYSxFQUFFLHNDQUFzQyxPQUFPLFlBQVks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
@@ -3,7 +3,7 @@ import { init_runtime_value, isObjectValue } from "../utils/runtime-value.js";
3
3
  import { fastifyCaster, init_caster } from "./caster.js";
4
4
  import { getZodObjectFromApi, init_code_converters } from "./code-converters.js";
5
5
  import { createHash } from "node:crypto";
6
- //#region src/api/http-validator.ts
6
+ // src/api/http-validator.ts
7
7
  function getHttpValidatorRouteKey(api) {
8
8
  return JSON.stringify([
9
9
  api.modelName,
@@ -65,8 +65,7 @@ var init_http_validator = __esmMin((() => {
65
65
  }
66
66
  };
67
67
  }));
68
- //#endregion
69
68
  init_http_validator();
70
69
  export { assertHttpValidatorRegistry, createHttpValidator, defaultHttpValidatorDependencies, getHttpValidatorFingerprint, getHttpValidatorRouteIdentifier, getHttpValidatorRouteKey, init_http_validator };
71
70
 
72
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC12YWxpZGF0b3IuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9odHRwLXZhbGlkYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IHR5cGUgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBMb2FkZWRUeXBlcyB9IGZyb20gXCIuLi9zeW5jZXIvbW9kdWxlLWxvYWRlclwiO1xuaW1wb3J0IHsgaXNPYmplY3RWYWx1ZSB9IGZyb20gXCIuLi91dGlscy9ydW50aW1lLXZhbHVlXCI7XG5pbXBvcnQgeyBmYXN0aWZ5Q2FzdGVyIH0gZnJvbSBcIi4vY2FzdGVyXCI7XG5pbXBvcnQgeyBnZXRab2RPYmplY3RGcm9tQXBpIH0gZnJvbSBcIi4vY29kZS1jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyB0eXBlIE5vcm1hbGl6ZWRab2RDb21waWxlclBvbGljeSB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEFwaSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3RWYWx1ZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IGJpZ2ludFxuICB8IERhdGVcbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkXG4gIHwgSHR0cFJlcXVlc3RWYWx1ZVtdXG4gIHwgeyBba2V5OiBzdHJpbmddOiBIdHRwUmVxdWVzdFZhbHVlIH07XG5leHBvcnQgdHlwZSBIdHRwUmVxdWVzdFBhcmFtZXRlcnMgPSBSZWNvcmQ8c3RyaW5nLCBIdHRwUmVxdWVzdFZhbHVlPjtcbmV4cG9ydCB0eXBlIEh0dHBWYWxpZGF0b3IgPSB6LlpvZFR5cGU8b2JqZWN0PjtcbnR5cGUgRmFzdGlmeUh0dHBWYWxpZGF0b3IgPSBSZXR1cm5UeXBlPHR5cGVvZiBmYXN0aWZ5Q2FzdGVyPjtcbmV4cG9ydCB0eXBlIEh0dHBWYWxpZGF0b3JSZWdpc3RyeSA9IHtcbiAgZmluZ2VycHJpbnQ6IHN0cmluZztcbiAgdmFsaWRhdG9yczogUmVhZG9ubHlNYXA8c3RyaW5nLCBIdHRwVmFsaWRhdG9yPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIdHRwVmFsaWRhdG9yUm91dGVLZXkoYXBpOiBFeHRlbmRlZEFwaSk6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShbYXBpLm1vZGVsTmFtZSwgYXBpLm1ldGhvZE5hbWUsIGFwaS5vcHRpb25zLmh0dHBNZXRob2QgPz8gXCJHRVRcIiwgYXBpLnBhdGhdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEh0dHBWYWxpZGF0b3JSb3V0ZUlkZW50aWZpZXIoYXBpOiBFeHRlbmRlZEFwaSk6IHN0cmluZyB7XG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShnZXRIdHRwVmFsaWRhdG9yUm91dGVLZXkoYXBpKSkuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG5mdW5jdGlvbiBzdGFibGVKc29uPFZhbHVlPih2YWx1ZTogVmFsdWUpOiBzdHJpbmcge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gYFske3ZhbHVlLm1hcCgoaXRlbSkgPT4gc3RhYmxlSnNvbihpdGVtKSkuam9pbihcIixcIil9XWA7XG4gIH1cbiAgaWYgKGlzT2JqZWN0VmFsdWUodmFsdWUpICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGB7JHtPYmplY3QuZW50cmllcyh2YWx1ZSlcbiAgICAgIC50b1NvcnRlZCgoW2xlZnRdLCBbcmlnaHRdKSA9PiBsZWZ0LmxvY2FsZUNvbXBhcmUocmlnaHQpKVxuICAgICAgLm1hcCgoW2tleSwgaXRlbV0pID0+IGAke0pTT04uc3RyaW5naWZ5KGtleSl9OiR7c3RhYmxlSnNvbihpdGVtKX1gKVxuICAgICAgLmpvaW4oXCIsXCIpfX1gO1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIdHRwVmFsaWRhdG9yRmluZ2VycHJpbnQoYXBpczogcmVhZG9ubHkgRXh0ZW5kZWRBcGlbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1ldGFkYXRhID0gYXBpc1xuICAgIC5maWx0ZXIoKGFwaSkgPT4gYXBpLndlYnNvY2tldE9wdGlvbnMgPT09IHVuZGVmaW5lZClcbiAgICAubWFwKChhcGkpID0+ICh7XG4gICAgICBrZXk6IGdldEh0dHBWYWxpZGF0b3JSb3V0ZUtleShhcGkpLFxuICAgICAgcGFyYW1ldGVyczogYXBpLnBhcmFtZXRlcnMsXG4gICAgICB0eXBlUGFyYW1ldGVyczogYXBpLnR5cGVQYXJhbWV0ZXJzLFxuICAgIH0pKVxuICAgIC50b1NvcnRlZCgobGVmdCwgcmlnaHQpID0+IGxlZnQua2V5LmxvY2FsZUNvbXBhcmUocmlnaHQua2V5KSk7XG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShzdGFibGVKc29uKG1ldGFkYXRhKSkuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SHR0cFZhbGlkYXRvclJlZ2lzdHJ5KFxuICBhcGlzOiByZWFkb25seSBFeHRlbmRlZEFwaVtdLFxuICByZWdpc3RyeTogSHR0cFZhbGlkYXRvclJlZ2lzdHJ5LFxuKTogdm9pZCB7XG4gIGNvbnN0IGV4cGVjdGVkQXBpcyA9IGFwaXMuZmlsdGVyKChhcGkpID0+IGFwaS53ZWJzb2NrZXRPcHRpb25zID09PSB1bmRlZmluZWQpO1xuICBjb25zdCBleHBlY3RlZEZpbmdlcnByaW50ID0gZ2V0SHR0cFZhbGlkYXRvckZpbmdlcnByaW50KGV4cGVjdGVkQXBpcyk7XG4gIGlmIChyZWdpc3RyeS5maW5nZXJwcmludCAhPT0gZXhwZWN0ZWRGaW5nZXJwcmludCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBmaW5nZXJwcmludCBtaXNtYXRjaDogZXhwZWN0ZWQgJHtleHBlY3RlZEZpbmdlcnByaW50fSwgcmVjZWl2ZWQgJHtyZWdpc3RyeS5maW5nZXJwcmludH1gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZEtleXMgPSBuZXcgU2V0KGV4cGVjdGVkQXBpcy5tYXAoZ2V0SHR0cFZhbGlkYXRvclJvdXRlS2V5KSk7XG4gIGlmIChyZWdpc3RyeS52YWxpZGF0b3JzLnNpemUgIT09IGV4cGVjdGVkS2V5cy5zaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEhUVFAgdmFsaWRhdG9yIHJlZ2lzdHJ5IGNvdmVyYWdlIG1pc21hdGNoOiBleHBlY3RlZCAke2V4cGVjdGVkS2V5cy5zaXplfSwgcmVjZWl2ZWQgJHtyZWdpc3RyeS52YWxpZGF0b3JzLnNpemV9YCxcbiAgICApO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGV4cGVjdGVkS2V5cykge1xuICAgIGlmICghcmVnaXN0cnkudmFsaWRhdG9ycy5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBpcyBtaXNzaW5nICR7a2V5fWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBWYWxpZGF0b3JEZXBlbmRlbmNpZXMge1xuICBjcmVhdGVTY2hlbWEoYXBpOiBFeHRlbmRlZEFwaSwgdHlwZXM6IExvYWRlZFR5cGVzKTogei5ab2RPYmplY3Q7XG4gIGFwcGx5Q2FzdGVyKHNjaGVtYTogei5ab2RPYmplY3QpOiBGYXN0aWZ5SHR0cFZhbGlkYXRvcjtcbiAgY29tcGlsZUppdChcbiAgICB2YWxpZGF0b3I6IEZhc3RpZnlIdHRwVmFsaWRhdG9yLFxuICAgIG9wdGlvbnM6IHsgZWFnZXI6IHRydWUgfSxcbiAgKTogUHJvbWlzZTxGYXN0aWZ5SHR0cFZhbGlkYXRvcj47XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SHR0cFZhbGlkYXRvckRlcGVuZGVuY2llczogSHR0cFZhbGlkYXRvckRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlU2NoZW1hOiBnZXRab2RPYmplY3RGcm9tQXBpLFxuICBhcHBseUNhc3RlcjogZmFzdGlmeUNhc3RlcixcbiAgYXN5bmMgY29tcGlsZUppdCh2YWxpZGF0b3IsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGppdCB9ID0gYXdhaXQgaW1wb3J0KFwiem9kLWNvbXBpbGVyL2ppdFwiKTtcbiAgICByZXR1cm4gaml0KHZhbGlkYXRvciwgb3B0aW9ucyk7XG4gIH0sXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHR0cFZhbGlkYXRvcihcbiAgb3B0aW9uczoge1xuICAgIGFwaTogRXh0ZW5kZWRBcGk7XG4gICAgcG9saWN5OiBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3k7XG4gICAgdHlwZXM6IExvYWRlZFR5cGVzO1xuICAgIGFvdFJlZ2lzdHJ5PzogSHR0cFZhbGlkYXRvclJlZ2lzdHJ5O1xuICAgIGFsbG93QW90U291cmNlRmFsbGJhY2s/OiBib29sZWFuO1xuICB9LFxuICBkZXBlbmRlbmNpZXM6IEh0dHBWYWxpZGF0b3JEZXBlbmRlbmNpZXMgPSBkZWZhdWx0SHR0cFZhbGlkYXRvckRlcGVuZGVuY2llcyxcbik6IFByb21pc2U8SHR0cFZhbGlkYXRvcj4ge1xuICBpZiAob3B0aW9ucy5wb2xpY3kuYXBpID09PSBcImFvdFwiKSB7XG4gICAgY29uc3Qgcm91dGVLZXkgPSBnZXRIdHRwVmFsaWRhdG9yUm91dGVLZXkob3B0aW9ucy5hcGkpO1xuICAgIGNvbnN0IGNvbXBpbGVkID0gb3B0aW9ucy5hb3RSZWdpc3RyeT8udmFsaWRhdG9ycy5nZXQocm91dGVLZXkpO1xuICAgIGlmIChjb21waWxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29tcGlsZWQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFsbG93QW90U291cmNlRmFsbGJhY2sgPT09IHRydWUpIHtcbiAgICAgIC8vIHNvdXJjZSBkZXbsl5DshJzripQgYnVpbGQgcmVnaXN0cnnrpbwg7Iuk7ZaJ7ZWY7KeAIOyViuycvOuvgOuhnCBjYWNoZWQgcGxhaW4gdmFsaWRhdG9y66GcIOuMgOyytO2VqeuLiOuLpC5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBpcyBtaXNzaW5nICR7cm91dGVLZXl9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJpYyB0eXBlIHBhcmFtZXRlciDsspjrpqwg7KSRIOqzteycoCByZWZlcmVuY2Vz6rCAIOuwlOuAjOuvgOuhnCByb3V0ZeuniOuLpCDsgqzrs7jsnYQg64SY6rmB64uI64ukLlxuICBjb25zdCB2YWxpZGF0b3IgPSBkZXBlbmRlbmNpZXMuYXBwbHlDYXN0ZXIoXG4gICAgZGVwZW5kZW5jaWVzLmNyZWF0ZVNjaGVtYShvcHRpb25zLmFwaSwgeyAuLi5vcHRpb25zLnR5cGVzIH0pLFxuICApO1xuICBpZiAob3B0aW9ucy5wb2xpY3kuYXBpICE9PSBcImppdFwiKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsUGFyc2UgPSB2YWxpZGF0b3IucGFyc2U7XG4gIGNvbnN0IG9yaWdpbmFsU2FmZVBhcnNlID0gdmFsaWRhdG9yLnNhZmVQYXJzZTtcbiAgY29uc3QgY29tcGlsZWQgPSBhd2FpdCBkZXBlbmRlbmNpZXMuY29tcGlsZUppdCh2YWxpZGF0b3IsIHsgZWFnZXI6IHRydWUgfSk7XG5cbiAgLy8gdXBzdHJlYW0gSklU64qUIOy7tO2MjOydvCDsi6TtjKjrpbwg7Iio6riw66+A66GcIOqzteqwnCDrqZTshJzrk5wg7ISk7LmYIOyXrOu2gOulvCDsp4HsoJEg7ZmV7J247ZWp64uI64ukLlxuICBpZiAoY29tcGlsZWQucGFyc2UgPT09IG9yaWdpbmFsUGFyc2UgfHwgY29tcGlsZWQuc2FmZVBhcnNlID09PSBvcmlnaW5hbFNhZmVQYXJzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGB2YWxpZGF0aW9uLnpvZENvbXBpbGVyLmFwaSBKSVQgY29tcGlsYXRpb24gZmFpbGVkIGZvciAke2dldEh0dHBWYWxpZGF0b3JSb3V0ZUtleShvcHRpb25zLmFwaSl9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBpbGVkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUE2QkEsU0FBZ0IseUJBQXlCLEtBQTBCO0NBQ2pFLE9BQU8sS0FBSyxVQUFVO0VBQUMsSUFBSTtFQUFXLElBQUk7RUFBWSxJQUFJLFFBQVEsY0FBYztFQUFPLElBQUk7Q0FBSSxDQUFDO0FBQ2xHO0FBRUEsU0FBZ0IsZ0NBQWdDLEtBQTBCO0NBQ3hFLE9BQU8sV0FBVyxRQUFRLENBQUMsQ0FBQyxPQUFPLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSztBQUNoRjtBQUVBLFNBQVMsV0FBa0IsT0FBc0I7Q0FDL0MsSUFBSSxNQUFNLFFBQVEsS0FBSyxHQUNyQixPQUFPLElBQUksTUFBTSxLQUFLLFNBQVMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0NBRTdELElBQUksY0FBYyxLQUFLLEtBQUssVUFBVSxNQUNwQyxPQUFPLElBQUksT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUM3QixVQUFVLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxjQUFjLEtBQUssQ0FBQyxDQUFDLENBQ3hELEtBQUssQ0FBQyxLQUFLLFVBQVUsR0FBRyxLQUFLLFVBQVUsR0FBRyxFQUFFLEdBQUcsV0FBVyxJQUFJLEdBQUcsQ0FBQyxDQUNsRSxLQUFLLEdBQUcsRUFBRTtDQUVmLE9BQU8sS0FBSyxVQUFVLEtBQUs7QUFDN0I7QUFFQSxTQUFnQiw0QkFBNEIsTUFBc0M7Q0FDaEYsTUFBTSxXQUFXLEtBQ2QsUUFBUSxRQUFRLElBQUkscUJBQXFCLE1BQVMsQ0FBQyxDQUNuRCxLQUFLLFNBQVM7RUFDYixLQUFLLHlCQUF5QixHQUFHO0VBQ2pDLFlBQVksSUFBSTtFQUNoQixnQkFBZ0IsSUFBSTtDQUN0QixFQUFFLENBQUMsQ0FDRixVQUFVLE1BQU0sVUFBVSxLQUFLLElBQUksY0FBYyxNQUFNLEdBQUcsQ0FBQztDQUM5RCxPQUFPLFdBQVcsUUFBUSxDQUFDLENBQUMsT0FBTyxXQUFXLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLO0FBQ3ZFO0FBRUEsU0FBZ0IsNEJBQ2QsTUFDQSxVQUNNO0NBQ04sTUFBTSxlQUFlLEtBQUssUUFBUSxRQUFRLElBQUkscUJBQXFCLE1BQVM7Q0FDNUUsTUFBTSxzQkFBc0IsNEJBQTRCLFlBQVk7Q0FDcEUsSUFBSSxTQUFTLGdCQUFnQixxQkFDM0IsTUFBTSxJQUFJLE1BQ1IsMERBQTBELG9CQUFvQixhQUFhLFNBQVMsYUFDdEc7Q0FHRixNQUFNLGVBQWUsSUFBSSxJQUFJLGFBQWEsSUFBSSx3QkFBd0IsQ0FBQztDQUN2RSxJQUFJLFNBQVMsV0FBVyxTQUFTLGFBQWEsTUFDNUMsTUFBTSxJQUFJLE1BQ1IsdURBQXVELGFBQWEsS0FBSyxhQUFhLFNBQVMsV0FBVyxNQUM1RztDQUVGLEtBQUssTUFBTSxPQUFPLGNBQ2hCLElBQUksQ0FBQyxTQUFTLFdBQVcsSUFBSSxHQUFHLEdBQzlCLE1BQU0sSUFBSSxNQUFNLHNDQUFzQyxLQUFLO0FBR2pFO0FBb0JBLGVBQXNCLG9CQUNwQixTQU9BLGVBQTBDLGtDQUNsQjtDQUN4QixJQUFJLFFBQVEsT0FBTyxRQUFRLE9BQU87RUFDaEMsTUFBTSxXQUFXLHlCQUF5QixRQUFRLEdBQUc7RUFDckQsTUFBTSxXQUFXLFFBQVEsYUFBYSxXQUFXLElBQUksUUFBUTtFQUM3RCxJQUFJLGFBQWEsUUFDZixPQUFPO0VBRVQsSUFBSSxRQUFRLDJCQUEyQixNQUFNLENBRTdDLE9BQ0UsTUFBTSxJQUFJLE1BQU0sc0NBQXNDLFVBQVU7Q0FFcEU7Q0FHQSxNQUFNLFlBQVksYUFBYSxZQUM3QixhQUFhLGFBQWEsUUFBUSxLQUFLLEVBQUUsR0FBRyxRQUFRLE1BQU0sQ0FBQyxDQUM3RDtDQUNBLElBQUksUUFBUSxPQUFPLFFBQVEsT0FDekIsT0FBTztDQUdULE1BQU0sZ0JBQWdCLFVBQVU7Q0FDaEMsTUFBTSxvQkFBb0IsVUFBVTtDQUNwQyxNQUFNLFdBQVcsTUFBTSxhQUFhLFdBQVcsV0FBVyxFQUFFLE9BQU8sS0FBSyxDQUFDO0NBR3pFLElBQUksU0FBUyxVQUFVLGlCQUFpQixTQUFTLGNBQWMsbUJBQzdELE1BQU0sSUFBSSxNQUNSLHlEQUF5RCx5QkFBeUIsUUFBUSxHQUFHLEdBQy9GO0NBR0YsT0FBTztBQUNUOzs7b0JBL0lzRDthQUNkO3NCQUNlO0NBeUYxQyxtQ0FBOEQ7RUFDekUsY0FBYztFQUNkLGFBQWE7RUFDYixNQUFNLFdBQVcsV0FBVyxTQUFTO0dBQ25DLE1BQU0sRUFBRSxRQUFRLE1BQU0sT0FBTztHQUM3QixPQUFPLElBQUksV0FBVyxPQUFPO0VBQy9CO0NBQ0YifQ==
71
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC12YWxpZGF0b3IuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9odHRwLXZhbGlkYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IHR5cGUgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBMb2FkZWRUeXBlcyB9IGZyb20gXCIuLi9zeW5jZXIvbW9kdWxlLWxvYWRlclwiO1xuaW1wb3J0IHsgaXNPYmplY3RWYWx1ZSB9IGZyb20gXCIuLi91dGlscy9ydW50aW1lLXZhbHVlXCI7XG5pbXBvcnQgeyBmYXN0aWZ5Q2FzdGVyIH0gZnJvbSBcIi4vY2FzdGVyXCI7XG5pbXBvcnQgeyBnZXRab2RPYmplY3RGcm9tQXBpIH0gZnJvbSBcIi4vY29kZS1jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyB0eXBlIE5vcm1hbGl6ZWRab2RDb21waWxlclBvbGljeSB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEFwaSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcblxuZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3RWYWx1ZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IGJpZ2ludFxuICB8IERhdGVcbiAgfCBudWxsXG4gIHwgdW5kZWZpbmVkXG4gIHwgSHR0cFJlcXVlc3RWYWx1ZVtdXG4gIHwgeyBba2V5OiBzdHJpbmddOiBIdHRwUmVxdWVzdFZhbHVlIH07XG5leHBvcnQgdHlwZSBIdHRwUmVxdWVzdFBhcmFtZXRlcnMgPSBSZWNvcmQ8c3RyaW5nLCBIdHRwUmVxdWVzdFZhbHVlPjtcbmV4cG9ydCB0eXBlIEh0dHBWYWxpZGF0b3IgPSB6LlpvZFR5cGU8b2JqZWN0PjtcbnR5cGUgRmFzdGlmeUh0dHBWYWxpZGF0b3IgPSBSZXR1cm5UeXBlPHR5cGVvZiBmYXN0aWZ5Q2FzdGVyPjtcbmV4cG9ydCB0eXBlIEh0dHBWYWxpZGF0b3JSZWdpc3RyeSA9IHtcbiAgZmluZ2VycHJpbnQ6IHN0cmluZztcbiAgdmFsaWRhdG9yczogUmVhZG9ubHlNYXA8c3RyaW5nLCBIdHRwVmFsaWRhdG9yPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIdHRwVmFsaWRhdG9yUm91dGVLZXkoYXBpOiBFeHRlbmRlZEFwaSk6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShbYXBpLm1vZGVsTmFtZSwgYXBpLm1ldGhvZE5hbWUsIGFwaS5vcHRpb25zLmh0dHBNZXRob2QgPz8gXCJHRVRcIiwgYXBpLnBhdGhdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEh0dHBWYWxpZGF0b3JSb3V0ZUlkZW50aWZpZXIoYXBpOiBFeHRlbmRlZEFwaSk6IHN0cmluZyB7XG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShnZXRIdHRwVmFsaWRhdG9yUm91dGVLZXkoYXBpKSkuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG5mdW5jdGlvbiBzdGFibGVKc29uPFZhbHVlPih2YWx1ZTogVmFsdWUpOiBzdHJpbmcge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gYFske3ZhbHVlLm1hcCgoaXRlbSkgPT4gc3RhYmxlSnNvbihpdGVtKSkuam9pbihcIixcIil9XWA7XG4gIH1cbiAgaWYgKGlzT2JqZWN0VmFsdWUodmFsdWUpICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGB7JHtPYmplY3QuZW50cmllcyh2YWx1ZSlcbiAgICAgIC50b1NvcnRlZCgoW2xlZnRdLCBbcmlnaHRdKSA9PiBsZWZ0LmxvY2FsZUNvbXBhcmUocmlnaHQpKVxuICAgICAgLm1hcCgoW2tleSwgaXRlbV0pID0+IGAke0pTT04uc3RyaW5naWZ5KGtleSl9OiR7c3RhYmxlSnNvbihpdGVtKX1gKVxuICAgICAgLmpvaW4oXCIsXCIpfX1gO1xuICB9XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIdHRwVmFsaWRhdG9yRmluZ2VycHJpbnQoYXBpczogcmVhZG9ubHkgRXh0ZW5kZWRBcGlbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1ldGFkYXRhID0gYXBpc1xuICAgIC5maWx0ZXIoKGFwaSkgPT4gYXBpLndlYnNvY2tldE9wdGlvbnMgPT09IHVuZGVmaW5lZClcbiAgICAubWFwKChhcGkpID0+ICh7XG4gICAgICBrZXk6IGdldEh0dHBWYWxpZGF0b3JSb3V0ZUtleShhcGkpLFxuICAgICAgcGFyYW1ldGVyczogYXBpLnBhcmFtZXRlcnMsXG4gICAgICB0eXBlUGFyYW1ldGVyczogYXBpLnR5cGVQYXJhbWV0ZXJzLFxuICAgIH0pKVxuICAgIC50b1NvcnRlZCgobGVmdCwgcmlnaHQpID0+IGxlZnQua2V5LmxvY2FsZUNvbXBhcmUocmlnaHQua2V5KSk7XG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShzdGFibGVKc29uKG1ldGFkYXRhKSkuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SHR0cFZhbGlkYXRvclJlZ2lzdHJ5KFxuICBhcGlzOiByZWFkb25seSBFeHRlbmRlZEFwaVtdLFxuICByZWdpc3RyeTogSHR0cFZhbGlkYXRvclJlZ2lzdHJ5LFxuKTogdm9pZCB7XG4gIGNvbnN0IGV4cGVjdGVkQXBpcyA9IGFwaXMuZmlsdGVyKChhcGkpID0+IGFwaS53ZWJzb2NrZXRPcHRpb25zID09PSB1bmRlZmluZWQpO1xuICBjb25zdCBleHBlY3RlZEZpbmdlcnByaW50ID0gZ2V0SHR0cFZhbGlkYXRvckZpbmdlcnByaW50KGV4cGVjdGVkQXBpcyk7XG4gIGlmIChyZWdpc3RyeS5maW5nZXJwcmludCAhPT0gZXhwZWN0ZWRGaW5nZXJwcmludCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBmaW5nZXJwcmludCBtaXNtYXRjaDogZXhwZWN0ZWQgJHtleHBlY3RlZEZpbmdlcnByaW50fSwgcmVjZWl2ZWQgJHtyZWdpc3RyeS5maW5nZXJwcmludH1gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBleHBlY3RlZEtleXMgPSBuZXcgU2V0KGV4cGVjdGVkQXBpcy5tYXAoZ2V0SHR0cFZhbGlkYXRvclJvdXRlS2V5KSk7XG4gIGlmIChyZWdpc3RyeS52YWxpZGF0b3JzLnNpemUgIT09IGV4cGVjdGVkS2V5cy5zaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEhUVFAgdmFsaWRhdG9yIHJlZ2lzdHJ5IGNvdmVyYWdlIG1pc21hdGNoOiBleHBlY3RlZCAke2V4cGVjdGVkS2V5cy5zaXplfSwgcmVjZWl2ZWQgJHtyZWdpc3RyeS52YWxpZGF0b3JzLnNpemV9YCxcbiAgICApO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGV4cGVjdGVkS2V5cykge1xuICAgIGlmICghcmVnaXN0cnkudmFsaWRhdG9ycy5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBpcyBtaXNzaW5nICR7a2V5fWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBWYWxpZGF0b3JEZXBlbmRlbmNpZXMge1xuICBjcmVhdGVTY2hlbWEoYXBpOiBFeHRlbmRlZEFwaSwgdHlwZXM6IExvYWRlZFR5cGVzKTogei5ab2RPYmplY3Q7XG4gIGFwcGx5Q2FzdGVyKHNjaGVtYTogei5ab2RPYmplY3QpOiBGYXN0aWZ5SHR0cFZhbGlkYXRvcjtcbiAgY29tcGlsZUppdChcbiAgICB2YWxpZGF0b3I6IEZhc3RpZnlIdHRwVmFsaWRhdG9yLFxuICAgIG9wdGlvbnM6IHsgZWFnZXI6IHRydWUgfSxcbiAgKTogUHJvbWlzZTxGYXN0aWZ5SHR0cFZhbGlkYXRvcj47XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SHR0cFZhbGlkYXRvckRlcGVuZGVuY2llczogSHR0cFZhbGlkYXRvckRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlU2NoZW1hOiBnZXRab2RPYmplY3RGcm9tQXBpLFxuICBhcHBseUNhc3RlcjogZmFzdGlmeUNhc3RlcixcbiAgYXN5bmMgY29tcGlsZUppdCh2YWxpZGF0b3IsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGppdCB9ID0gYXdhaXQgaW1wb3J0KFwiem9kLWNvbXBpbGVyL2ppdFwiKTtcbiAgICByZXR1cm4gaml0KHZhbGlkYXRvciwgb3B0aW9ucyk7XG4gIH0sXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlSHR0cFZhbGlkYXRvcihcbiAgb3B0aW9uczoge1xuICAgIGFwaTogRXh0ZW5kZWRBcGk7XG4gICAgcG9saWN5OiBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3k7XG4gICAgdHlwZXM6IExvYWRlZFR5cGVzO1xuICAgIGFvdFJlZ2lzdHJ5PzogSHR0cFZhbGlkYXRvclJlZ2lzdHJ5O1xuICAgIGFsbG93QW90U291cmNlRmFsbGJhY2s/OiBib29sZWFuO1xuICB9LFxuICBkZXBlbmRlbmNpZXM6IEh0dHBWYWxpZGF0b3JEZXBlbmRlbmNpZXMgPSBkZWZhdWx0SHR0cFZhbGlkYXRvckRlcGVuZGVuY2llcyxcbik6IFByb21pc2U8SHR0cFZhbGlkYXRvcj4ge1xuICBpZiAob3B0aW9ucy5wb2xpY3kuYXBpID09PSBcImFvdFwiKSB7XG4gICAgY29uc3Qgcm91dGVLZXkgPSBnZXRIdHRwVmFsaWRhdG9yUm91dGVLZXkob3B0aW9ucy5hcGkpO1xuICAgIGNvbnN0IGNvbXBpbGVkID0gb3B0aW9ucy5hb3RSZWdpc3RyeT8udmFsaWRhdG9ycy5nZXQocm91dGVLZXkpO1xuICAgIGlmIChjb21waWxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29tcGlsZWQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFsbG93QW90U291cmNlRmFsbGJhY2sgPT09IHRydWUpIHtcbiAgICAgIC8vIHNvdXJjZSBkZXbsl5DshJzripQgYnVpbGQgcmVnaXN0cnnrpbwg7Iuk7ZaJ7ZWY7KeAIOyViuycvOuvgOuhnCBjYWNoZWQgcGxhaW4gdmFsaWRhdG9y66GcIOuMgOyytO2VqeuLiOuLpC5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBpcyBtaXNzaW5nICR7cm91dGVLZXl9YCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJpYyB0eXBlIHBhcmFtZXRlciDsspjrpqwg7KSRIOqzteycoCByZWZlcmVuY2Vz6rCAIOuwlOuAjOuvgOuhnCByb3V0ZeuniOuLpCDsgqzrs7jsnYQg64SY6rmB64uI64ukLlxuICBjb25zdCB2YWxpZGF0b3IgPSBkZXBlbmRlbmNpZXMuYXBwbHlDYXN0ZXIoXG4gICAgZGVwZW5kZW5jaWVzLmNyZWF0ZVNjaGVtYShvcHRpb25zLmFwaSwgeyAuLi5vcHRpb25zLnR5cGVzIH0pLFxuICApO1xuICBpZiAob3B0aW9ucy5wb2xpY3kuYXBpICE9PSBcImppdFwiKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsUGFyc2UgPSB2YWxpZGF0b3IucGFyc2U7XG4gIGNvbnN0IG9yaWdpbmFsU2FmZVBhcnNlID0gdmFsaWRhdG9yLnNhZmVQYXJzZTtcbiAgY29uc3QgY29tcGlsZWQgPSBhd2FpdCBkZXBlbmRlbmNpZXMuY29tcGlsZUppdCh2YWxpZGF0b3IsIHsgZWFnZXI6IHRydWUgfSk7XG5cbiAgLy8gdXBzdHJlYW0gSklU64qUIOy7tO2MjOydvCDsi6TtjKjrpbwg7Iio6riw66+A66GcIOqzteqwnCDrqZTshJzrk5wg7ISk7LmYIOyXrOu2gOulvCDsp4HsoJEg7ZmV7J247ZWp64uI64ukLlxuICBpZiAoY29tcGlsZWQucGFyc2UgPT09IG9yaWdpbmFsUGFyc2UgfHwgY29tcGlsZWQuc2FmZVBhcnNlID09PSBvcmlnaW5hbFNhZmVQYXJzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGB2YWxpZGF0aW9uLnpvZENvbXBpbGVyLmFwaSBKSVQgY29tcGlsYXRpb24gZmFpbGVkIGZvciAke2dldEh0dHBWYWxpZGF0b3JSb3V0ZUtleShvcHRpb25zLmFwaSl9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBpbGVkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUE2QkEsU0FBZ0IseUJBQXlCLEtBQTBCO0NBQ2pFLE9BQU8sS0FBSyxVQUFVO0VBQUMsSUFBSTtFQUFXLElBQUk7RUFBWSxJQUFJLFFBQVEsY0FBYztFQUFPLElBQUk7Q0FBSSxDQUFDO0FBQ2xHO0FBRUEsU0FBZ0IsZ0NBQWdDLEtBQTBCO0NBQ3hFLE9BQU8sV0FBVyxRQUFRLENBQUMsQ0FBQyxPQUFPLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSztBQUNoRjtBQUVBLFNBQVMsV0FBa0IsT0FBc0I7Q0FDL0MsSUFBSSxNQUFNLFFBQVEsS0FBSyxHQUNyQixPQUFPLElBQUksTUFBTSxLQUFLLFNBQVMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0NBRTdELElBQUksY0FBYyxLQUFLLEtBQUssVUFBVSxNQUNwQyxPQUFPLElBQUksT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUM3QixVQUFVLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxjQUFjLEtBQUssQ0FBQyxDQUFDLENBQ3hELEtBQUssQ0FBQyxLQUFLLFVBQVUsR0FBRyxLQUFLLFVBQVUsR0FBRyxFQUFFLEdBQUcsV0FBVyxJQUFJLEdBQUcsQ0FBQyxDQUNsRSxLQUFLLEdBQUcsRUFBRTtDQUVmLE9BQU8sS0FBSyxVQUFVLEtBQUs7QUFDN0I7QUFFQSxTQUFnQiw0QkFBNEIsTUFBc0M7Q0FDaEYsTUFBTSxXQUFXLEtBQ2QsUUFBUSxRQUFRLElBQUkscUJBQXFCLE1BQVMsQ0FBQyxDQUNuRCxLQUFLLFNBQVM7RUFDYixLQUFLLHlCQUF5QixHQUFHO0VBQ2pDLFlBQVksSUFBSTtFQUNoQixnQkFBZ0IsSUFBSTtDQUN0QixFQUFFLENBQUMsQ0FDRixVQUFVLE1BQU0sVUFBVSxLQUFLLElBQUksY0FBYyxNQUFNLEdBQUcsQ0FBQztDQUM5RCxPQUFPLFdBQVcsUUFBUSxDQUFDLENBQUMsT0FBTyxXQUFXLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLO0FBQ3ZFO0FBRUEsU0FBZ0IsNEJBQ2QsTUFDQSxVQUNNO0NBQ04sTUFBTSxlQUFlLEtBQUssUUFBUSxRQUFRLElBQUkscUJBQXFCLE1BQVM7Q0FDNUUsTUFBTSxzQkFBc0IsNEJBQTRCLFlBQVk7Q0FDcEUsSUFBSSxTQUFTLGdCQUFnQixxQkFDM0IsTUFBTSxJQUFJLE1BQ1IsMERBQTBELG9CQUFvQixhQUFhLFNBQVMsYUFDdEc7Q0FHRixNQUFNLGVBQWUsSUFBSSxJQUFJLGFBQWEsSUFBSSx3QkFBd0IsQ0FBQztDQUN2RSxJQUFJLFNBQVMsV0FBVyxTQUFTLGFBQWEsTUFDNUMsTUFBTSxJQUFJLE1BQ1IsdURBQXVELGFBQWEsS0FBSyxhQUFhLFNBQVMsV0FBVyxNQUM1RztDQUVGLEtBQUssTUFBTSxPQUFPLGNBQ2hCLElBQUksQ0FBQyxTQUFTLFdBQVcsSUFBSSxHQUFHLEdBQzlCLE1BQU0sSUFBSSxNQUFNLHNDQUFzQyxLQUFLO0FBR2pFO0FBb0JBLGVBQXNCLG9CQUNwQixTQU9BLGVBQTBDLGtDQUNsQjtDQUN4QixJQUFJLFFBQVEsT0FBTyxRQUFRLE9BQU87RUFDaEMsTUFBTSxXQUFXLHlCQUF5QixRQUFRLEdBQUc7RUFDckQsTUFBTSxXQUFXLFFBQVEsYUFBYSxXQUFXLElBQUksUUFBUTtFQUM3RCxJQUFJLGFBQWEsUUFDZixPQUFPO0VBRVQsSUFBSSxRQUFRLDJCQUEyQixNQUFNLENBRTdDLE9BQ0UsTUFBTSxJQUFJLE1BQU0sc0NBQXNDLFVBQVU7Q0FFcEU7Q0FHQSxNQUFNLFlBQVksYUFBYSxZQUM3QixhQUFhLGFBQWEsUUFBUSxLQUFLLEVBQUUsR0FBRyxRQUFRLE1BQU0sQ0FBQyxDQUM3RDtDQUNBLElBQUksUUFBUSxPQUFPLFFBQVEsT0FDekIsT0FBTztDQUdULE1BQU0sZ0JBQWdCLFVBQVU7Q0FDaEMsTUFBTSxvQkFBb0IsVUFBVTtDQUNwQyxNQUFNLFdBQVcsTUFBTSxhQUFhLFdBQVcsV0FBVyxFQUFFLE9BQU8sS0FBSyxDQUFDO0NBR3pFLElBQUksU0FBUyxVQUFVLGlCQUFpQixTQUFTLGNBQWMsbUJBQzdELE1BQU0sSUFBSSxNQUNSLHlEQUF5RCx5QkFBeUIsUUFBUSxHQUFHLEdBQy9GO0NBR0YsT0FBTztBQUNUOzs7Q0EvSXNELG1CQUFBO0NBQ2QsWUFBQTtDQUNlLHFCQUFBO0NBeUYxQyxtQ0FBOEQ7RUFDekUsY0FBYztFQUNkLGFBQWE7RUFDYixNQUFNLFdBQVcsV0FBVyxTQUFTO0dBQ25DLE1BQU0sRUFBRSxRQUFRLE1BQU0sT0FBTztHQUM3QixPQUFPLElBQUksV0FBVyxPQUFPO0VBQy9CO0NBQ0YifQ==
package/dist/api/index.js CHANGED
@@ -2,11 +2,11 @@ import { __esmMin, __exportAll } from "../_virtual/_rolldown/runtime.js";
2
2
  import { caster, fastifyCaster, init_caster } from "./caster.js";
3
3
  import { apiParamToTsCode, apiParamToTsCodeAsObject, apiParamTypeToTsType, getZodObjectFromApi, getZodObjectFromApiParams, getZodTypeFromApiParamType, init_code_converters, parseApiParamType, unwrapPromiseOnce } from "./code-converters.js";
4
4
  import { getSecrets, init_secret } from "./secret.js";
5
- import { createWebSocketReplyStub, resolveWebSocketCloseDescriptor, resolveWebSocketPluginOptions } from "./websocket-helpers.js";
5
+ import { createWebSocketReplyStub, init_websocket_helpers, resolveWebSocketCloseDescriptor, resolveWebSocketPluginOptions } from "./websocket-helpers.js";
6
6
  import { Sonamu, defaultSonamuHttpValidatorDependencies, init_sonamu } from "./sonamu.js";
7
7
  import { init_context } from "./context.js";
8
8
  import { api, init_decorators, registeredApis, stream, transactional, upload, websocket } from "./decorators.js";
9
- //#region src/api/index.ts
9
+ // src/api/index.ts
10
10
  var api_exports = /* @__PURE__ */ __exportAll({
11
11
  Sonamu: () => Sonamu,
12
12
  api: () => api,
@@ -39,7 +39,12 @@ var init_api = __esmMin((() => {
39
39
  init_secret();
40
40
  init_sonamu();
41
41
  }));
42
- //#endregion
42
+ init_caster();
43
+ init_code_converters();
44
+ init_secret();
45
+ init_websocket_helpers();
46
+ init_sonamu();
47
+ init_decorators();
43
48
  init_api();
44
49
  export { Sonamu, api, apiParamToTsCode, apiParamToTsCodeAsObject, apiParamTypeToTsType, api_exports, caster, createWebSocketReplyStub, defaultSonamuHttpValidatorDependencies, fastifyCaster, getSecrets, getZodObjectFromApi, getZodObjectFromApiParams, getZodTypeFromApiParamType, init_api, parseApiParamType, registeredApis, resolveWebSocketCloseDescriptor, resolveWebSocketPluginOptions, stream, transactional, unwrapPromiseOnce, upload, websocket };
45
50
 
@@ -1,5 +1,5 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
- //#region src/api/secret.ts
2
+ // src/api/secret.ts
3
3
  function getSecrets() {
4
4
  const secrets = {};
5
5
  for (const key of [
@@ -13,7 +13,6 @@ function getSecrets() {
13
13
  return secrets;
14
14
  }
15
15
  var init_secret = __esmMin((() => {}));
16
- //#endregion
17
16
  init_secret();
18
17
  export { getSecrets, init_secret };
19
18
 
@@ -3,7 +3,7 @@ import { type IncomingMessage, type Server, type ServerResponse } from "http";
3
3
  import "@fastify/websocket";
4
4
  import { type Auth, type BetterAuthOptions } from "better-auth";
5
5
  import { type FSWatcher } from "chokidar";
6
- import { type FastifyInstance, type FastifyReply, type FastifyRequest } from "fastify";
6
+ import { type FastifyBaseLogger, type FastifyInstance, type FastifyReply, type FastifyRequest } from "fastify";
7
7
  import { type WebSocket } from "ws";
8
8
  import { type CacheManager } from "../cache/types";
9
9
  import { type SonamuDBConfig } from "../database/db";
@@ -97,7 +97,7 @@ declare class SonamuClass {
97
97
  createServer(initOptions?: {
98
98
  enableSync?: boolean;
99
99
  doSilent?: boolean;
100
- }): Promise<FastifyInstance<import("fastify").RawServerDefault, IncomingMessage, ServerResponse<IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>>;
100
+ }): Promise<FastifyInstance<import("fastify").RawServerDefault, IncomingMessage, ServerResponse<IncomingMessage>, FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>>;
101
101
  withFastify(server: FastifyInstance<Server, IncomingMessage, ServerResponse>, config: SonamuFastifyConfig, options?: {
102
102
  enableSync?: boolean;
103
103
  doSilent?: boolean;
@@ -131,9 +131,7 @@ declare class SonamuClass {
131
131
  refreshHttpValidators(dependencies?: SonamuHttpValidatorDependencies): Promise<void>;
132
132
  private createWebSocketUpgradeRequiredHandler;
133
133
  private handleDevWebSocketRequest;
134
- createWebSocketHandlerForTesting(api: ExtendedApi, config: SonamuFastifyConfig): (connection: {
135
- socket: WebSocket;
136
- }, request: FastifyRequest) => Promise<void>;
134
+ createWebSocketHandlerForTesting(api: ExtendedApi, config: SonamuFastifyConfig): (socket: WebSocket, request: FastifyRequest) => Promise<void>;
137
135
  private createWebSocketHandler;
138
136
  private createScopedWebSocketConnection;
139
137
  createScopedWebSocketConnectionForTesting<TOut extends object, TIn extends object>(ws: WebSocketConnection<TOut, TIn>, getContext: () => WebSocketContext | null): WebSocketConnection<TOut, TIn>;
@@ -1 +1 @@
1
- {"version":3,"file":"sonamu.d.ts","sourceRoot":"","sources":["../../src/api/sonamu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sonamu.d.ts","sourceRoot":"","sources":["../../src/api/sonamu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,MAAM,CAAC;AAI9E,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAOpC,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAIrE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAOrD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAIjE,OAAO,EACL,KAAK,sBAAsB,EAC3B,gBAAgB,EAChB,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AAKtB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAI1D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAUxD,OAAO,EAEL,KAAK,YAAY,EAGlB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACrF,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EAEnB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAQ9C,OAAO,EACL,wBAAwB,EACxB,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAO7B,KAAK,WAAW,GACZ,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,gBAAgB,GAChB,MAAM,GACN,IAAI,GACJ,SAAS,CAAC;AACd,KAAK,eAAe,GAAG,WAAW,GAAG,IAAI,CAAC;AAoC1C,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,YAAY,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACpD,qBAAqB,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IACpE,wBAAwB,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC5D,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IACrC,cAAc,EAAE,YAAY,CAAC;IAC7B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,+BAA+B;IAC9C,eAAe,EAAE,OAAO,mBAAmB,CAAC;IAC5C,cAAc,EAAE,OAAO,2BAA2B,CAAC;CACpD;AAED,eAAO,MAAM,sCAAsC,EAAE,+BAGpD,CAAC;AAEF,cAAM,WAAW;IACR,aAAa,EAAE,OAAO,CAAS;IAC/B,UAAU,EAAE,OAAO,CAAS;IAC5B,iBAAiB,EAAE,iBAAiB,CAAC;QAC1C,OAAO,EAAE,cAAc,CAAC;KACzB,CAAC,CAA2B;IAC7B,OAAO,CAAC,cAAc,CAAsD;IAC5E,OAAO,CAAC,qBAAqB,CAA+D;IAC5F,OAAO,CAAC,wBAAwB,CAAoC;IACpE,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,cAAc,CAAoB;IAEnC,UAAU,CAAC,CAAC,SAAS,cAAc,GAAG,OAAO,KAAK,CAAC,CAyBzD;IAED,OAAO,CAAC,gBAAgB,CAA6B;IACrD,IAAI,WAAW,CAAC,WAAW,EAAE,YAAY,EAExC;IACD,IAAI,WAAW,IAAI,YAAY,CAK9B;IACD,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,OAAO,CAAC,aAAa,CAA+B;IACpD,IAAI,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAEpC;IACD,IAAI,QAAQ,IAAI,cAAc,CAK7B;IAED,OAAO,CAAC,WAAW,CAAuB;IAC1C,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAExB;IACD,IAAI,MAAM,IAAI,MAAM,CAKnB;IAED,OAAO,CAAC,WAAW,CAA6B;IAChD,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,EAE9B;IACD,IAAI,MAAM,IAAI,YAAY,CAKzB;IAED,SAAgB,OAAO,EAAE,aAAa,CAAgB;IAEtD,OAAO,CAAC,YAAY,CAA+B;IACnD;;OAEG;IACH,IAAI,OAAO,IAAI,cAAc,CAK5B;IAED,OAAO,CAAC,UAAU,CAA6B;IAC/C;;OAEG;IACH,IAAI,KAAK,IAAI,YAAY,CAKxB;IAED,OAAO,CAAC,cAAc,CAAgC;IACtD,IAAI,SAAS,IAAI,eAAe,CAM/B;IAED,OAAO,CAAC,SAAS,CAAwC;IACzD,IAAI,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAKlC;IAED,OAAO,CAAC,qBAAqB,CAAiC;IAC9D,IAAI,gBAAgB,IAAI,gBAAgB,GAAG,IAAI,CAE9C;IACD,IAAI,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAEpD;IAGD,OAAO,CAAC,qBAAqB,CAAiC;IAE9D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAEnC;IACJ,IAAI,gBAAgB,IAAI,gBAAgB,CAKvC;IACD,IAAI,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAEpD;IAED,sBAAsB,IAAI,qBAAqB,CAY9C;IAED,sBAAsB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAU5D;IAGM,OAAO,EAAE,SAAS,GAAG,IAAI,CAAQ;IAEjC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAQ;IAEvC,cAAc,kBAEnB;IAEK,IAAI,CACR,QAAQ,GAAE,OAAe,EACzB,UAAU,GAAE,OAAc,EAC1B,WAAW,CAAC,EAAE,YAAY,EAC1B,UAAU,GAAE,OAAe,iBAwG5B;IAED,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAK;IAEpB,YAAY,CAAC,WAAW,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,mLAoD5E;IAEK,WAAW,CACf,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,cAAc,CAAC,EAChE,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,iBA4HF;IAED;;;;;;OAMG;YACW,mBAAmB;IAkBjC,OAAO,CAAC,cAAc;IAwBtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,UAAU,CAAa;IAE/B;;;OAGG;YACW,sBAAsB;YAsItB,oBAAoB;IA8KlC,gBAAgB,CACd,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,mBAAmB,EAC3B,MAAM,GAAE,YAAiC,EACzC,YAAY,GAAE,+BAAwE,GACrF,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,eAAe,CAAC,CAsJ5E;IAED,OAAO,CAAC,wBAAwB;YA0BlB,kBAAkB;IAmBhC,OAAO,CAAC,mBAAmB;YASb,4BAA4B;IA2CpC,qBAAqB,CACzB,YAAY,GAAE,+BAAwE,GACrF,OAAO,CAAC,IAAI,CAAC,CAwCf;IAGD,OAAO,CAAC,qCAAqC;YAS/B,yBAAyB;IAmCvC,gCAAgC,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,mBAAmB,YAMtD,SAAS,WAAW,cAAc,KAAG,OAAO,CAAC,IAAI,CAAC,CAJzE;IAED,OAAO,CAAC,sBAAsB;IA2G9B,OAAO,CAAC,+BAA+B;IA+HvC,yCAAyC,CAAC,IAAI,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAC/E,EAAE,EAAE,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,EAClC,UAAU,EAAE,MAAM,gBAAgB,GAAG,IAAI,GACxC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAEhC;YAEa,2BAA2B;IA8BzC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,wBAAwB;IAkBhC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;;OAGG;IACG,eAAe,CACnB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,GAAG,EAAE,EACb,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,eAAe,CAAC,CAkB1B;IAEK,6BAA6B,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,mBAAmB,sBA3mClE,cAAc,SAAS,YAAY,KAAK,OAAO,CAAC,eAAe,CAAC,UA6mCrF;IAGK,iBAAiB,CACrB,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,OAAO,EAAE,EACf,KAAK,CAAC,EAAE,YAAY,EACpB,MAAM,GAAE,YAAiC,GACxC,OAAO,CAAC,eAAe,CAAC,CAgB1B;IAEK,aAAa,CACjB,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,OAAO,CAAC,CAqClB;IAIK,sBAAsB,CAC1B,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,sBAAsB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CA6D3B;IAED;;;OAGG;IACH,OAAO,CAAC,YAAY;IAed,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAIlC;IAED;;;OAGG;YACW,eAAe;IAoBvB,SAAS,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,iBAOtC;YAEa,eAAe;YAoEf,qBAAqB;IA2BnC,OAAO,CAAC,wCAAwC;IA4BhD;;;OAGG;YACW,kBAAkB;YA0BlB,mBAAmB;YAyCnB,eAAe;YAuBf,mBAAmB;YAuBnB,IAAI;IAuCZ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAmB7B;CACF;AAkBD,eAAO,MAAM,MAAM,aAAoB,CAAC"}