sonamu 0.9.3 → 0.9.4

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 (82) hide show
  1. package/dist/api/config.d.ts +0 -8
  2. package/dist/api/config.d.ts.map +1 -1
  3. package/dist/api/config.js +1 -1
  4. package/dist/api/sonamu.d.ts +0 -1
  5. package/dist/api/sonamu.d.ts.map +1 -1
  6. package/dist/api/sonamu.js +2 -41
  7. package/dist/auth/audit-log/builders.d.ts +216 -0
  8. package/dist/auth/audit-log/builders.d.ts.map +1 -0
  9. package/dist/auth/audit-log/builders.js +307 -0
  10. package/dist/auth/audit-log/events.d.ts +143 -0
  11. package/dist/auth/audit-log/events.d.ts.map +1 -0
  12. package/dist/auth/audit-log/events.js +74 -0
  13. package/dist/auth/audit-log/plugin.d.ts +11 -0
  14. package/dist/auth/audit-log/plugin.d.ts.map +1 -0
  15. package/dist/auth/audit-log/plugin.js +427 -0
  16. package/dist/auth/audit-log-ingestor.d.ts +3 -3
  17. package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
  18. package/dist/auth/audit-log-ingestor.js +44 -50
  19. package/dist/auth/index.d.ts +2 -0
  20. package/dist/auth/index.d.ts.map +1 -1
  21. package/dist/auth/index.js +4 -4
  22. package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
  23. package/dist/auth/plugins/entity-definitions/admin.js +4 -4
  24. package/dist/auth/plugins/entity-definitions/audit-log.d.ts +2 -2
  25. package/dist/auth/plugins/entity-definitions/audit-log.js +3 -3
  26. package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
  27. package/dist/auth/plugins/wrappers/sso.d.ts +1 -1
  28. package/dist/bin/fixture.d.ts.map +1 -1
  29. package/dist/bin/fixture.js +111 -1
  30. package/dist/database/_batch_update.d.ts +1 -1
  31. package/dist/database/_batch_update.js +2 -2
  32. package/dist/entity/entity-manager.d.ts +2 -2
  33. package/dist/entity/entity-manager.d.ts.map +1 -1
  34. package/dist/entity/entity-manager.js +14 -4
  35. package/dist/index.js +4 -3
  36. package/dist/syncer/syncer.d.ts.map +1 -1
  37. package/dist/syncer/syncer.js +2 -9
  38. package/dist/template/implementations/entry-server.template.js +3 -2
  39. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  40. package/dist/template/implementations/generated.template.js +2 -1
  41. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  42. package/dist/template/implementations/generated_sso.template.js +2 -1
  43. package/dist/template/implementations/queries.template.d.ts.map +1 -1
  44. package/dist/template/implementations/queries.template.js +3 -1
  45. package/dist/template/implementations/sd.template.js +3 -2
  46. package/dist/template/implementations/services.template.d.ts.map +1 -1
  47. package/dist/template/implementations/services.template.js +44 -7
  48. package/dist/template/zod-converter.d.ts.map +1 -1
  49. package/dist/template/zod-converter.js +2 -2
  50. package/dist/types/types.d.ts +14 -14
  51. package/dist/ui-web/assets/{index-DrTfl0Ts.js → index-C5KUjXm0.js} +46 -46
  52. package/dist/ui-web/index.html +1 -1
  53. package/dist/utils/fs-utils.d.ts.map +1 -1
  54. package/dist/utils/fs-utils.js +4 -4
  55. package/package.json +1 -2
  56. package/src/api/config.ts +0 -8
  57. package/src/api/sonamu.ts +1 -51
  58. package/src/auth/audit-log/builders.ts +791 -0
  59. package/src/auth/audit-log/events.ts +149 -0
  60. package/src/auth/audit-log/plugin.ts +913 -0
  61. package/src/auth/audit-log-ingestor.ts +3 -4
  62. package/src/auth/index.ts +2 -0
  63. package/src/auth/plugins/entity-definitions/admin.ts +3 -3
  64. package/src/auth/plugins/entity-definitions/audit-log.ts +2 -2
  65. package/src/bin/fixture.ts +143 -0
  66. package/src/database/_batch_update.ts +1 -1
  67. package/src/entity/entity-manager.ts +10 -3
  68. package/src/shared/app.shared.ts.txt +2 -3
  69. package/src/shared/web.shared.ts.txt +2 -2
  70. package/src/syncer/syncer.ts +1 -11
  71. package/src/template/implementations/entry-server.template.ts +1 -1
  72. package/src/template/implementations/generated.template.ts +1 -0
  73. package/src/template/implementations/generated_sso.template.ts +1 -0
  74. package/src/template/implementations/queries.template.ts +10 -1
  75. package/src/template/implementations/sd.template.ts +1 -1
  76. package/src/template/implementations/services.template.ts +62 -6
  77. package/src/template/zod-converter.ts +2 -1
  78. package/src/utils/fs-utils.ts +6 -4
  79. package/dist/auth/audit-log-proxy-types.d.ts +0 -23
  80. package/dist/auth/audit-log-proxy-types.d.ts.map +0 -1
  81. package/dist/auth/audit-log-proxy-types.js +0 -1
  82. package/src/auth/audit-log-proxy-types.ts +0 -23
@@ -1,7 +1,46 @@
1
- import { __esmMin } from "../_virtual/rolldown_runtime.js";
2
1
  import { createHash } from "node:crypto";
3
2
 
4
3
  //#region src/auth/audit-log-ingestor.ts
4
+ const AUDIT_EVENT_SOURCE = "better_auth";
5
+ const AUDIT_EVENT_SOURCE_VERSION = "better-auth|@better-auth/infra";
6
+ const SESSION_EVENT_TYPES = new Set([
7
+ "user_signed_in",
8
+ "user_signed_out",
9
+ "user_sign_in_failed",
10
+ "session_created",
11
+ "session_revoked",
12
+ "all_sessions_revoked",
13
+ "user_impersonated",
14
+ "user_impersonated_stopped"
15
+ ]);
16
+ const ACCOUNT_EVENT_TYPES = new Set([
17
+ "account_linked",
18
+ "account_unlinked",
19
+ "password_changed",
20
+ "two_factor_enabled",
21
+ "two_factor_disabled",
22
+ "two_factor_verified"
23
+ ]);
24
+ const VERIFICATION_EVENT_TYPES = new Set([
25
+ "email_verification_sent",
26
+ "password_reset_requested",
27
+ "password_reset_completed"
28
+ ]);
29
+ const SECURITY_EVENT_TYPES = new Set([
30
+ "security_blocked",
31
+ "security_allowed",
32
+ "security_challenged",
33
+ "security_stale_account"
34
+ ]);
35
+ const USER_EVENT_TYPES = new Set([
36
+ "user_created",
37
+ "profile_updated",
38
+ "profile_image_updated",
39
+ "email_verified",
40
+ "user_banned",
41
+ "user_unbanned",
42
+ "user_deleted"
43
+ ]);
5
44
  function pickString(source, key) {
6
45
  const value = source[key];
7
46
  return typeof value === "string" ? value : null;
@@ -67,9 +106,9 @@ function computeDedupeKey(parts) {
67
106
  return createHash("sha256").update(raw).digest("hex");
68
107
  }
69
108
  /**
70
- * Better Auth dash() 이벤트를 audit_events 테이블에 적재합니다.
109
+ * sonamuAuditLog 플러그인이 구성한 AuditLogEvent를 audit_events 테이블에 적재합니다.
71
110
  * ON CONFLICT (dedupe_key) DO NOTHING으로 중복을 silent 무시합니다.
72
- * auth.auditLog: true 설정 시 sonamu 내부에서 자동으로 호출됩니다.
111
+ * auth.plugins에 sonamuAuditLog() 추가 시 sonamu 내부에서 자동으로 호출됩니다.
73
112
  */
74
113
  async function ingestAuditEvent(db, event) {
75
114
  const eventData = event.eventData;
@@ -149,52 +188,7 @@ async function ingestAuditEvent(db, event) {
149
188
  return;
150
189
  }
151
190
  }
152
- var AUDIT_EVENT_SOURCE, AUDIT_EVENT_SOURCE_VERSION, SESSION_EVENT_TYPES, ACCOUNT_EVENT_TYPES, VERIFICATION_EVENT_TYPES, SECURITY_EVENT_TYPES, USER_EVENT_TYPES;
153
- var init_audit_log_ingestor = __esmMin((() => {
154
- AUDIT_EVENT_SOURCE = "better_auth";
155
- AUDIT_EVENT_SOURCE_VERSION = "better-auth|@better-auth/infra";
156
- SESSION_EVENT_TYPES = new Set([
157
- "user_signed_in",
158
- "user_signed_out",
159
- "user_sign_in_failed",
160
- "session_created",
161
- "session_revoked",
162
- "all_sessions_revoked",
163
- "user_impersonated",
164
- "user_impersonated_stopped"
165
- ]);
166
- ACCOUNT_EVENT_TYPES = new Set([
167
- "account_linked",
168
- "account_unlinked",
169
- "password_changed",
170
- "two_factor_enabled",
171
- "two_factor_disabled",
172
- "two_factor_verified"
173
- ]);
174
- VERIFICATION_EVENT_TYPES = new Set([
175
- "email_verification_sent",
176
- "password_reset_requested",
177
- "password_reset_completed"
178
- ]);
179
- SECURITY_EVENT_TYPES = new Set([
180
- "security_blocked",
181
- "security_allowed",
182
- "security_challenged",
183
- "security_stale_account"
184
- ]);
185
- USER_EVENT_TYPES = new Set([
186
- "user_created",
187
- "profile_updated",
188
- "profile_image_updated",
189
- "email_verified",
190
- "email_changed",
191
- "user_banned",
192
- "user_unbanned",
193
- "user_deleted"
194
- ]);
195
- }));
196
191
 
197
192
  //#endregion
198
- init_audit_log_ingestor();
199
- export { ingestAuditEvent, init_audit_log_ingestor };
200
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLWluZ2VzdG9yLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2F1ZGl0LWxvZy1pbmdlc3Rvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmltcG9ydCB7IHR5cGUgQXVkaXRMb2dFdmVudCB9IGZyb20gXCIuL2F1ZGl0LWxvZy1wcm94eS10eXBlc1wiO1xuXG5jb25zdCBBVURJVF9FVkVOVF9TT1VSQ0UgPSBcImJldHRlcl9hdXRoXCI7XG5jb25zdCBBVURJVF9FVkVOVF9TT1VSQ0VfVkVSU0lPTiA9IFwiYmV0dGVyLWF1dGh8QGJldHRlci1hdXRoL2luZnJhXCI7XG5cbmNvbnN0IFNFU1NJT05fRVZFTlRfVFlQRVMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICBcInVzZXJfc2lnbmVkX2luXCIsXG4gIFwidXNlcl9zaWduZWRfb3V0XCIsXG4gIFwidXNlcl9zaWduX2luX2ZhaWxlZFwiLFxuICBcInNlc3Npb25fY3JlYXRlZFwiLFxuICBcInNlc3Npb25fcmV2b2tlZFwiLFxuICBcImFsbF9zZXNzaW9uc19yZXZva2VkXCIsXG4gIFwidXNlcl9pbXBlcnNvbmF0ZWRcIixcbiAgXCJ1c2VyX2ltcGVyc29uYXRlZF9zdG9wcGVkXCIsXG5dKTtcblxuY29uc3QgQUNDT1VOVF9FVkVOVF9UWVBFUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIFwiYWNjb3VudF9saW5rZWRcIixcbiAgXCJhY2NvdW50X3VubGlua2VkXCIsXG4gIFwicGFzc3dvcmRfY2hhbmdlZFwiLFxuXG4gIC8vIEBiZXR0ZXItYXV0aC9pbmZyYUAwLjEuMTQg6riw7KSAIEVWRU5UX1RZUEVTIOyDgeyImOyXkOuKlCDsoJXsnZjrkJjslrQg7J6I7Jy864KYIOyLpOygnCB0cmFja0V2ZW50KCkg7Zi47Lac7J20IOyXhuuKlCDrr7jqtaztmIQg7J2067Kk7Yq47J6EXG4gIC8vIO2Wpe2bhCDrsoTsoITsl5DshJwgZW1pdOuQoCDqsr3smrDrpbwg64yA67mE7ZW0IGFjY291bnTroZwg7J6E7IucIOuTseuhnVxuICBcInR3b19mYWN0b3JfZW5hYmxlZFwiLFxuICBcInR3b19mYWN0b3JfZGlzYWJsZWRcIixcbiAgXCJ0d29fZmFjdG9yX3ZlcmlmaWVkXCIsXG5dKTtcblxuY29uc3QgVkVSSUZJQ0FUSU9OX0VWRU5UX1RZUEVTID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgXCJlbWFpbF92ZXJpZmljYXRpb25fc2VudFwiLFxuICBcInBhc3N3b3JkX3Jlc2V0X3JlcXVlc3RlZFwiLFxuICBcInBhc3N3b3JkX3Jlc2V0X2NvbXBsZXRlZFwiLFxuXSk7XG5cbmNvbnN0IFNFQ1VSSVRZX0VWRU5UX1RZUEVTID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgXCJzZWN1cml0eV9ibG9ja2VkXCIsXG4gIFwic2VjdXJpdHlfYWxsb3dlZFwiLFxuICBcInNlY3VyaXR5X2NoYWxsZW5nZWRcIixcbiAgXCJzZWN1cml0eV9zdGFsZV9hY2NvdW50XCIsXG5dKTtcblxuY29uc3QgVVNFUl9FVkVOVF9UWVBFUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIFwidXNlcl9jcmVhdGVkXCIsXG4gIFwicHJvZmlsZV91cGRhdGVkXCIsXG4gIFwicHJvZmlsZV9pbWFnZV91cGRhdGVkXCIsXG4gIFwiZW1haWxfdmVyaWZpZWRcIixcbiAgXCJlbWFpbF9jaGFuZ2VkXCIsXG4gIFwidXNlcl9iYW5uZWRcIixcbiAgXCJ1c2VyX3VuYmFubmVkXCIsXG4gIFwidXNlcl9kZWxldGVkXCIsXG5dKTtcblxuZnVuY3Rpb24gcGlja1N0cmluZyhzb3VyY2U6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBwaWNrRmlyc3RTdHJpbmcoc291cmNlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwga2V5czogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IHZhbHVlID0gcGlja1N0cmluZyhzb3VyY2UsIGtleSk7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwYXJzZU9jY3VycmVkQXQocmF3OiB1bmtub3duKTogRGF0ZSB7XG4gIGlmIChyYXcgaW5zdGFuY2VvZiBEYXRlICYmICFOdW1iZXIuaXNOYU4ocmF3LmdldFRpbWUoKSkpIHtcbiAgICByZXR1cm4gcmF3O1xuICB9XG4gIGlmICh0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUocmF3KTtcbiAgICBpZiAoIU51bWJlci5pc05hTihwYXJzZWQuZ2V0VGltZSgpKSkge1xuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKCk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzaWZ5Q2F0ZWdvcnkoXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuKTogXCJ1c2VyXCIgfCBcInNlc3Npb25cIiB8IFwiYWNjb3VudFwiIHwgXCJ2ZXJpZmljYXRpb25cIiB8IFwib3JnYW5pemF0aW9uXCIgfCBcInNlY3VyaXR5XCIge1xuICBpZiAoZXZlbnRUeXBlLnN0YXJ0c1dpdGgoXCJvcmdhbml6YXRpb25fXCIpKSB7XG4gICAgcmV0dXJuIFwib3JnYW5pemF0aW9uXCI7XG4gIH1cbiAgaWYgKFNFU1NJT05fRVZFTlRfVFlQRVMuaGFzKGV2ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gXCJzZXNzaW9uXCI7XG4gIH1cbiAgaWYgKEFDQ09VTlRfRVZFTlRfVFlQRVMuaGFzKGV2ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gXCJhY2NvdW50XCI7XG4gIH1cbiAgaWYgKFZFUklGSUNBVElPTl9FVkVOVF9UWVBFUy5oYXMoZXZlbnRUeXBlKSkge1xuICAgIHJldHVybiBcInZlcmlmaWNhdGlvblwiO1xuICB9XG4gIGlmIChTRUNVUklUWV9FVkVOVF9UWVBFUy5oYXMoZXZlbnRUeXBlKSkge1xuICAgIHJldHVybiBcInNlY3VyaXR5XCI7XG4gIH1cbiAgaWYgKFVTRVJfRVZFTlRfVFlQRVMuaGFzKGV2ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gXCJ1c2VyXCI7XG4gIH1cbiAgcmV0dXJuIFwidXNlclwiO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVkdXBlS2V5KHBhcnRzOiB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBldmVudF90eXBlOiBzdHJpbmc7XG4gIGV2ZW50X2tleTogc3RyaW5nO1xuICBhY3Rvcl91c2VyX2lkOiBzdHJpbmcgfCBudWxsO1xuICBzdWJqZWN0X3VzZXJfaWQ6IHN0cmluZyB8IG51bGw7XG4gIG9yZ2FuaXphdGlvbl9pZDogc3RyaW5nIHwgbnVsbDtcbiAgdGVhbV9pZDogc3RyaW5nIHwgbnVsbDtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nIHwgbnVsbDtcbiAgaWRlbnRpZmllcjogc3RyaW5nIHwgbnVsbDtcbiAgcmVhc29uOiBzdHJpbmcgfCBudWxsO1xuICBhY3Rpb246IHN0cmluZyB8IG51bGw7XG4gIG9jY3VycmVkX2F0OiBEYXRlO1xufSk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm0gPSAodjogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyA9PiB2ID8/IFwiXCI7XG4gIGNvbnN0IHJhdyA9IFtcbiAgICBwYXJ0cy5zb3VyY2UsXG4gICAgcGFydHMuZXZlbnRfdHlwZSxcbiAgICBwYXJ0cy5ldmVudF9rZXksXG4gICAgbm9ybShwYXJ0cy5hY3Rvcl91c2VyX2lkKSxcbiAgICBub3JtKHBhcnRzLnN1YmplY3RfdXNlcl9pZCksXG4gICAgbm9ybShwYXJ0cy5vcmdhbml6YXRpb25faWQpLFxuICAgIG5vcm0ocGFydHMudGVhbV9pZCksXG4gICAgbm9ybShwYXJ0cy5zZXNzaW9uX2lkKSxcbiAgICBub3JtKHBhcnRzLmlkZW50aWZpZXIpLFxuICAgIG5vcm0ocGFydHMucmVhc29uKSxcbiAgICBub3JtKHBhcnRzLmFjdGlvbiksXG4gICAgcGFydHMub2NjdXJyZWRfYXQudG9JU09TdHJpbmcoKSxcbiAgXS5qb2luKFwifFwiKTtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHJhdykuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vKipcbiAqIEJldHRlciBBdXRoIGRhc2goKSDsnbTrsqTtirjrpbwgYXVkaXRfZXZlbnRzIO2FjOydtOu4lOyXkCDsoIHsnqztlanri4jri6QuXG4gKiBPTiBDT05GTElDVCAoZGVkdXBlX2tleSkgRE8gTk9USElOR+ycvOuhnCDspJHrs7XsnYQgc2lsZW50IOustOyLnO2VqeuLiOuLpC5cbiAqIGF1dGguYXVkaXRMb2c6IHRydWUg7ISk7KCVIOyLnCBzb25hbXUg64K067aA7JeQ7IScIOyekOuPmeycvOuhnCDtmLjstpzrkKnri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbmdlc3RBdWRpdEV2ZW50KGRiOiBLbmV4LCBldmVudDogQXVkaXRMb2dFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBldmVudERhdGEgPSBldmVudC5ldmVudERhdGE7XG4gIGNvbnN0IG9jY3VycmVkX2F0ID0gcGFyc2VPY2N1cnJlZEF0KGV2ZW50RGF0YVtcIm9jY3VycmVkQXRcIl0pO1xuXG4gIGNvbnN0IGFjdG9yX3VzZXJfaWQgPSBwaWNrU3RyaW5nKGV2ZW50RGF0YSwgXCJ0cmlnZ2VyZWRCeVwiKTtcbiAgY29uc3Qgc3ViamVjdF91c2VyX2lkID0gcGlja0ZpcnN0U3RyaW5nKGV2ZW50RGF0YSwgW1xuICAgIFwidXNlcklkXCIsXG4gICAgXCJ1c2VyaWRcIixcbiAgICBcImFjY2VwdGVkQnlJZFwiLFxuICAgIFwicmVqZWN0ZWRCeUlkXCIsXG4gIF0pO1xuICBjb25zdCBvcmdhbml6YXRpb25faWQgPSBwaWNrU3RyaW5nKGV2ZW50RGF0YSwgXCJvcmdhbml6YXRpb25JZFwiKTtcbiAgY29uc3QgdGVhbV9pZCA9IHBpY2tGaXJzdFN0cmluZyhldmVudERhdGEsIFtcInRlYW1JZFwiLCBcImludml0ZWVUZWFtSWRcIl0pO1xuICBjb25zdCBzZXNzaW9uX2lkID0gcGlja1N0cmluZyhldmVudERhdGEsIFwic2Vzc2lvbklkXCIpO1xuICBjb25zdCBwcm92aWRlcl9pZCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcInByb3ZpZGVySWRcIik7XG4gIGNvbnN0IGxvZ2luX21ldGhvZCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcImxvZ2luTWV0aG9kXCIpO1xuICBjb25zdCBpZGVudGlmaWVyID0gcGlja0ZpcnN0U3RyaW5nKGV2ZW50RGF0YSwgW1xuICAgIFwiaWRlbnRpZmllclwiLFxuICAgIFwidXNlckVtYWlsXCIsXG4gICAgXCJtZW1iZXJFbWFpbFwiLFxuICAgIFwiaW52aXRlZUVtYWlsXCIsXG4gICAgXCJhY2NlcHRlZEJ5RW1haWxcIixcbiAgICBcInJlamVjdGVkQnlFbWFpbFwiLFxuICBdKTtcbiAgY29uc3QgdmlzaXRvcl9pZCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcInZpc2l0b3JJZFwiKTtcbiAgY29uc3QgcmVhc29uID0gcGlja0ZpcnN0U3RyaW5nKGV2ZW50RGF0YSwgW1wicmVhc29uXCIsIFwiYmFuUmVhc29uXCJdKTtcbiAgY29uc3QgYWN0aW9uID0gcGlja1N0cmluZyhldmVudERhdGEsIFwiYWN0aW9uXCIpO1xuICBjb25zdCB0cmlnZ2VyX2NvbnRleHQgPSBwaWNrU3RyaW5nKGV2ZW50RGF0YSwgXCJ0cmlnZ2VyQ29udGV4dFwiKTtcbiAgY29uc3QgdXNlcl9hZ2VudCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcInVzZXJBZ2VudFwiKTtcblxuICBjb25zdCBpcF9hZGRyZXNzID0gZXZlbnQuaXBBZGRyZXNzID8/IG51bGw7XG4gIGNvbnN0IGNpdHkgPSBldmVudC5jaXR5ID8/IG51bGw7XG4gIGNvbnN0IGNvdW50cnkgPSBldmVudC5jb3VudHJ5ID8/IG51bGw7XG4gIGNvbnN0IGNvdW50cnlfY29kZSA9IGV2ZW50LmNvdW50cnlDb2RlID8/IG51bGw7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSBjbGFzc2lmeUNhdGVnb3J5KGV2ZW50LmV2ZW50VHlwZSk7XG4gIGNvbnN0IGRlZHVwZV9rZXkgPSBjb21wdXRlRGVkdXBlS2V5KHtcbiAgICBzb3VyY2U6IEFVRElUX0VWRU5UX1NPVVJDRSxcbiAgICBldmVudF90eXBlOiBldmVudC5ldmVudFR5cGUsXG4gICAgZXZlbnRfa2V5OiBldmVudC5ldmVudEtleSxcbiAgICBhY3Rvcl91c2VyX2lkLFxuICAgIHN1YmplY3RfdXNlcl9pZCxcbiAgICBvcmdhbml6YXRpb25faWQsXG4gICAgdGVhbV9pZCxcbiAgICBzZXNzaW9uX2lkLFxuICAgIGlkZW50aWZpZXIsXG4gICAgcmVhc29uLFxuICAgIGFjdGlvbixcbiAgICBvY2N1cnJlZF9hdCxcbiAgfSk7XG5cbiAgLy8gT04gQ09ORkxJQ1QgRE8gTk9USElORzogZGVkdXBlX2tleSBVTklRVUUg7JyE67CY7J2EIHNpbGVudCDrrLTsi5wuXG4gIC8vIHRyeS9jYXRjaCDrsKnsi53snYAgUEcg7Luk64Sl7IWY7J2EIGFib3J0ZWQg7IOB7YOc66GcIOunjOuTnOuvgOuhnCDsgqzsmqntlZjsp4Ag7JWK64qU64ukLlxuICBjb25zdCBpbnNlcnRlZCA9IGF3YWl0IGRiKFwiYXVkaXRfZXZlbnRzXCIpXG4gICAgLmluc2VydCh7XG4gICAgICBzb3VyY2U6IEFVRElUX0VWRU5UX1NPVVJDRSxcbiAgICAgIHNvdXJjZV92ZXJzaW9uOiBBVURJVF9FVkVOVF9TT1VSQ0VfVkVSU0lPTixcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgZXZlbnRfdHlwZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgZXZlbnRfa2V5OiBldmVudC5ldmVudEtleSxcbiAgICAgIGRlZHVwZV9rZXksXG4gICAgICBhY3Rvcl91c2VyX2lkLFxuICAgICAgc3ViamVjdF91c2VyX2lkLFxuICAgICAgb3JnYW5pemF0aW9uX2lkLFxuICAgICAgdGVhbV9pZCxcbiAgICAgIHNlc3Npb25faWQsXG4gICAgICBwcm92aWRlcl9pZCxcbiAgICAgIGxvZ2luX21ldGhvZCxcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICB2aXNpdG9yX2lkLFxuICAgICAgcmVhc29uLFxuICAgICAgYWN0aW9uLFxuICAgICAgdHJpZ2dlcl9jb250ZXh0LFxuICAgICAgaXBfYWRkcmVzcyxcbiAgICAgIGNvdW50cnlfY29kZSxcbiAgICAgIGNvdW50cnksXG4gICAgICBjaXR5LFxuICAgICAgdXNlcl9hZ2VudCxcbiAgICAgIHBheWxvYWRfanNvbjogZXZlbnREYXRhLFxuICAgICAgb2NjdXJyZWRfYXQsXG4gICAgfSlcbiAgICAub25Db25mbGljdChcImRlZHVwZV9rZXlcIilcbiAgICAuaWdub3JlKClcbiAgICAucmV0dXJuaW5nKFwiZGVkdXBlX2tleVwiKTtcblxuICBpZiAoaW5zZXJ0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuOyAvLyBzaWxlbnQgZGVkdXBlXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztBQXdEQSxTQUFTLFdBQVcsUUFBaUMsS0FBNEI7Q0FDL0UsTUFBTSxRQUFRLE9BQU87QUFDckIsUUFBTyxPQUFPLFVBQVUsV0FBVyxRQUFROztBQUc3QyxTQUFTLGdCQUFnQixRQUFpQyxNQUF3QztBQUNoRyxNQUFLLE1BQU0sT0FBTyxNQUFNO0VBQ3RCLE1BQU0sUUFBUSxXQUFXLFFBQVEsSUFBSTtBQUNyQyxNQUFJLFVBQVUsTUFBTTtBQUNsQixVQUFPOzs7QUFHWCxRQUFPOztBQUdULFNBQVMsZ0JBQWdCLEtBQW9CO0FBQzNDLEtBQUksZUFBZSxRQUFRLENBQUMsT0FBTyxN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
193
+ export { ingestAuditEvent };
194
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLWluZ2VzdG9yLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2F1ZGl0LWxvZy1pbmdlc3Rvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmltcG9ydCB7IHR5cGUgQXVkaXRMb2dFdmVudCB9IGZyb20gXCIuL2F1ZGl0LWxvZy9ldmVudHNcIjtcblxuY29uc3QgQVVESVRfRVZFTlRfU09VUkNFID0gXCJiZXR0ZXJfYXV0aFwiO1xuY29uc3QgQVVESVRfRVZFTlRfU09VUkNFX1ZFUlNJT04gPSBcImJldHRlci1hdXRofEBiZXR0ZXItYXV0aC9pbmZyYVwiO1xuXG5jb25zdCBTRVNTSU9OX0VWRU5UX1RZUEVTID0gbmV3IFNldDxzdHJpbmc+KFtcbiAgXCJ1c2VyX3NpZ25lZF9pblwiLFxuICBcInVzZXJfc2lnbmVkX291dFwiLFxuICBcInVzZXJfc2lnbl9pbl9mYWlsZWRcIixcbiAgXCJzZXNzaW9uX2NyZWF0ZWRcIixcbiAgXCJzZXNzaW9uX3Jldm9rZWRcIixcbiAgXCJhbGxfc2Vzc2lvbnNfcmV2b2tlZFwiLFxuICBcInVzZXJfaW1wZXJzb25hdGVkXCIsXG4gIFwidXNlcl9pbXBlcnNvbmF0ZWRfc3RvcHBlZFwiLFxuXSk7XG5cbmNvbnN0IEFDQ09VTlRfRVZFTlRfVFlQRVMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICBcImFjY291bnRfbGlua2VkXCIsXG4gIFwiYWNjb3VudF91bmxpbmtlZFwiLFxuICBcInBhc3N3b3JkX2NoYW5nZWRcIixcblxuICAvLyBAYmV0dGVyLWF1dGgvaW5mcmFAMC4xLjE0IOq4sOykgCBFVkVOVF9UWVBFUyDsg4HsiJjsl5DripQg7KCV7J2Y65CY7Ja0IOyeiOycvOuCmCDsi6TsoJwgdHJhY2tFdmVudCgpIO2YuOy2nOydtCDsl4bripQg66+46rWs7ZiEIOydtOuypO2KuOyehFxuICAvLyDtlqXtm4Qg67KE7KCE7JeQ7IScIGVtaXTrkKAg6rK97Jqw66W8IOuMgOu5hO2VtCBhY2NvdW5066GcIOyehOyLnCDrk7HroZ1cbiAgXCJ0d29fZmFjdG9yX2VuYWJsZWRcIixcbiAgXCJ0d29fZmFjdG9yX2Rpc2FibGVkXCIsXG4gIFwidHdvX2ZhY3Rvcl92ZXJpZmllZFwiLFxuXSk7XG5cbmNvbnN0IFZFUklGSUNBVElPTl9FVkVOVF9UWVBFUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIFwiZW1haWxfdmVyaWZpY2F0aW9uX3NlbnRcIixcbiAgXCJwYXNzd29yZF9yZXNldF9yZXF1ZXN0ZWRcIixcbiAgXCJwYXNzd29yZF9yZXNldF9jb21wbGV0ZWRcIixcbl0pO1xuXG5jb25zdCBTRUNVUklUWV9FVkVOVF9UWVBFUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIFwic2VjdXJpdHlfYmxvY2tlZFwiLFxuICBcInNlY3VyaXR5X2FsbG93ZWRcIixcbiAgXCJzZWN1cml0eV9jaGFsbGVuZ2VkXCIsXG4gIFwic2VjdXJpdHlfc3RhbGVfYWNjb3VudFwiLFxuXSk7XG5cbmNvbnN0IFVTRVJfRVZFTlRfVFlQRVMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICBcInVzZXJfY3JlYXRlZFwiLFxuICBcInByb2ZpbGVfdXBkYXRlZFwiLFxuICBcInByb2ZpbGVfaW1hZ2VfdXBkYXRlZFwiLFxuICBcImVtYWlsX3ZlcmlmaWVkXCIsXG4gIFwidXNlcl9iYW5uZWRcIixcbiAgXCJ1c2VyX3VuYmFubmVkXCIsXG4gIFwidXNlcl9kZWxldGVkXCIsXG5dKTtcblxuZnVuY3Rpb24gcGlja1N0cmluZyhzb3VyY2U6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBwaWNrRmlyc3RTdHJpbmcoc291cmNlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwga2V5czogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IHZhbHVlID0gcGlja1N0cmluZyhzb3VyY2UsIGtleSk7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwYXJzZU9jY3VycmVkQXQocmF3OiB1bmtub3duKTogRGF0ZSB7XG4gIGlmIChyYXcgaW5zdGFuY2VvZiBEYXRlICYmICFOdW1iZXIuaXNOYU4ocmF3LmdldFRpbWUoKSkpIHtcbiAgICByZXR1cm4gcmF3O1xuICB9XG4gIGlmICh0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiKSB7XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUocmF3KTtcbiAgICBpZiAoIU51bWJlci5pc05hTihwYXJzZWQuZ2V0VGltZSgpKSkge1xuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKCk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzaWZ5Q2F0ZWdvcnkoXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuKTogXCJ1c2VyXCIgfCBcInNlc3Npb25cIiB8IFwiYWNjb3VudFwiIHwgXCJ2ZXJpZmljYXRpb25cIiB8IFwib3JnYW5pemF0aW9uXCIgfCBcInNlY3VyaXR5XCIge1xuICBpZiAoZXZlbnRUeXBlLnN0YXJ0c1dpdGgoXCJvcmdhbml6YXRpb25fXCIpKSB7XG4gICAgcmV0dXJuIFwib3JnYW5pemF0aW9uXCI7XG4gIH1cbiAgaWYgKFNFU1NJT05fRVZFTlRfVFlQRVMuaGFzKGV2ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gXCJzZXNzaW9uXCI7XG4gIH1cbiAgaWYgKEFDQ09VTlRfRVZFTlRfVFlQRVMuaGFzKGV2ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gXCJhY2NvdW50XCI7XG4gIH1cbiAgaWYgKFZFUklGSUNBVElPTl9FVkVOVF9UWVBFUy5oYXMoZXZlbnRUeXBlKSkge1xuICAgIHJldHVybiBcInZlcmlmaWNhdGlvblwiO1xuICB9XG4gIGlmIChTRUNVUklUWV9FVkVOVF9UWVBFUy5oYXMoZXZlbnRUeXBlKSkge1xuICAgIHJldHVybiBcInNlY3VyaXR5XCI7XG4gIH1cbiAgaWYgKFVTRVJfRVZFTlRfVFlQRVMuaGFzKGV2ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gXCJ1c2VyXCI7XG4gIH1cbiAgcmV0dXJuIFwidXNlclwiO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVkdXBlS2V5KHBhcnRzOiB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBldmVudF90eXBlOiBzdHJpbmc7XG4gIGV2ZW50X2tleTogc3RyaW5nO1xuICBhY3Rvcl91c2VyX2lkOiBzdHJpbmcgfCBudWxsO1xuICBzdWJqZWN0X3VzZXJfaWQ6IHN0cmluZyB8IG51bGw7XG4gIG9yZ2FuaXphdGlvbl9pZDogc3RyaW5nIHwgbnVsbDtcbiAgdGVhbV9pZDogc3RyaW5nIHwgbnVsbDtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nIHwgbnVsbDtcbiAgaWRlbnRpZmllcjogc3RyaW5nIHwgbnVsbDtcbiAgcmVhc29uOiBzdHJpbmcgfCBudWxsO1xuICBhY3Rpb246IHN0cmluZyB8IG51bGw7XG4gIG9jY3VycmVkX2F0OiBEYXRlO1xufSk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm0gPSAodjogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyA9PiB2ID8/IFwiXCI7XG4gIGNvbnN0IHJhdyA9IFtcbiAgICBwYXJ0cy5zb3VyY2UsXG4gICAgcGFydHMuZXZlbnRfdHlwZSxcbiAgICBwYXJ0cy5ldmVudF9rZXksXG4gICAgbm9ybShwYXJ0cy5hY3Rvcl91c2VyX2lkKSxcbiAgICBub3JtKHBhcnRzLnN1YmplY3RfdXNlcl9pZCksXG4gICAgbm9ybShwYXJ0cy5vcmdhbml6YXRpb25faWQpLFxuICAgIG5vcm0ocGFydHMudGVhbV9pZCksXG4gICAgbm9ybShwYXJ0cy5zZXNzaW9uX2lkKSxcbiAgICBub3JtKHBhcnRzLmlkZW50aWZpZXIpLFxuICAgIG5vcm0ocGFydHMucmVhc29uKSxcbiAgICBub3JtKHBhcnRzLmFjdGlvbiksXG4gICAgcGFydHMub2NjdXJyZWRfYXQudG9JU09TdHJpbmcoKSxcbiAgXS5qb2luKFwifFwiKTtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHJhdykuZGlnZXN0KFwiaGV4XCIpO1xufVxuXG4vKipcbiAqIHNvbmFtdUF1ZGl0TG9nIO2UjOufrOq3uOyduOydtCDqtazshLHtlZwgQXVkaXRMb2dFdmVudOulvCBhdWRpdF9ldmVudHMg7YWM7J2067iU7JeQIOyggeyerO2VqeuLiOuLpC5cbiAqIE9OIENPTkZMSUNUIChkZWR1cGVfa2V5KSBETyBOT1RISU5H7Jy866GcIOykkeuzteydhCBzaWxlbnQg66y07Iuc7ZWp64uI64ukLlxuICogYXV0aC5wbHVnaW5z7JeQIHNvbmFtdUF1ZGl0TG9nKCkg7LaU6rCAIOyLnCBzb25hbXUg64K067aA7JeQ7IScIOyekOuPmeycvOuhnCDtmLjstpzrkKnri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbmdlc3RBdWRpdEV2ZW50KGRiOiBLbmV4LCBldmVudDogQXVkaXRMb2dFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBldmVudERhdGEgPSBldmVudC5ldmVudERhdGE7XG4gIGNvbnN0IG9jY3VycmVkX2F0ID0gcGFyc2VPY2N1cnJlZEF0KGV2ZW50RGF0YVtcIm9jY3VycmVkQXRcIl0pO1xuXG4gIGNvbnN0IGFjdG9yX3VzZXJfaWQgPSBwaWNrU3RyaW5nKGV2ZW50RGF0YSwgXCJ0cmlnZ2VyZWRCeVwiKTtcbiAgY29uc3Qgc3ViamVjdF91c2VyX2lkID0gcGlja0ZpcnN0U3RyaW5nKGV2ZW50RGF0YSwgW1xuICAgIFwidXNlcklkXCIsXG4gICAgXCJ1c2VyaWRcIixcbiAgICBcImFjY2VwdGVkQnlJZFwiLFxuICAgIFwicmVqZWN0ZWRCeUlkXCIsXG4gIF0pO1xuICBjb25zdCBvcmdhbml6YXRpb25faWQgPSBwaWNrU3RyaW5nKGV2ZW50RGF0YSwgXCJvcmdhbml6YXRpb25JZFwiKTtcbiAgY29uc3QgdGVhbV9pZCA9IHBpY2tGaXJzdFN0cmluZyhldmVudERhdGEsIFtcInRlYW1JZFwiLCBcImludml0ZWVUZWFtSWRcIl0pO1xuICBjb25zdCBzZXNzaW9uX2lkID0gcGlja1N0cmluZyhldmVudERhdGEsIFwic2Vzc2lvbklkXCIpO1xuICBjb25zdCBwcm92aWRlcl9pZCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcInByb3ZpZGVySWRcIik7XG4gIGNvbnN0IGxvZ2luX21ldGhvZCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcImxvZ2luTWV0aG9kXCIpO1xuICBjb25zdCBpZGVudGlmaWVyID0gcGlja0ZpcnN0U3RyaW5nKGV2ZW50RGF0YSwgW1xuICAgIFwiaWRlbnRpZmllclwiLFxuICAgIFwidXNlckVtYWlsXCIsXG4gICAgXCJtZW1iZXJFbWFpbFwiLFxuICAgIFwiaW52aXRlZUVtYWlsXCIsXG4gICAgXCJhY2NlcHRlZEJ5RW1haWxcIixcbiAgICBcInJlamVjdGVkQnlFbWFpbFwiLFxuICBdKTtcbiAgY29uc3QgdmlzaXRvcl9pZCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcInZpc2l0b3JJZFwiKTtcbiAgY29uc3QgcmVhc29uID0gcGlja0ZpcnN0U3RyaW5nKGV2ZW50RGF0YSwgW1wicmVhc29uXCIsIFwiYmFuUmVhc29uXCJdKTtcbiAgY29uc3QgYWN0aW9uID0gcGlja1N0cmluZyhldmVudERhdGEsIFwiYWN0aW9uXCIpO1xuICBjb25zdCB0cmlnZ2VyX2NvbnRleHQgPSBwaWNrU3RyaW5nKGV2ZW50RGF0YSwgXCJ0cmlnZ2VyQ29udGV4dFwiKTtcbiAgY29uc3QgdXNlcl9hZ2VudCA9IHBpY2tTdHJpbmcoZXZlbnREYXRhLCBcInVzZXJBZ2VudFwiKTtcblxuICBjb25zdCBpcF9hZGRyZXNzID0gZXZlbnQuaXBBZGRyZXNzID8/IG51bGw7XG4gIGNvbnN0IGNpdHkgPSBldmVudC5jaXR5ID8/IG51bGw7XG4gIGNvbnN0IGNvdW50cnkgPSBldmVudC5jb3VudHJ5ID8/IG51bGw7XG4gIGNvbnN0IGNvdW50cnlfY29kZSA9IGV2ZW50LmNvdW50cnlDb2RlID8/IG51bGw7XG5cbiAgY29uc3QgY2F0ZWdvcnkgPSBjbGFzc2lmeUNhdGVnb3J5KGV2ZW50LmV2ZW50VHlwZSk7XG4gIGNvbnN0IGRlZHVwZV9rZXkgPSBjb21wdXRlRGVkdXBlS2V5KHtcbiAgICBzb3VyY2U6IEFVRElUX0VWRU5UX1NPVVJDRSxcbiAgICBldmVudF90eXBlOiBldmVudC5ldmVudFR5cGUsXG4gICAgZXZlbnRfa2V5OiBldmVudC5ldmVudEtleSxcbiAgICBhY3Rvcl91c2VyX2lkLFxuICAgIHN1YmplY3RfdXNlcl9pZCxcbiAgICBvcmdhbml6YXRpb25faWQsXG4gICAgdGVhbV9pZCxcbiAgICBzZXNzaW9uX2lkLFxuICAgIGlkZW50aWZpZXIsXG4gICAgcmVhc29uLFxuICAgIGFjdGlvbixcbiAgICBvY2N1cnJlZF9hdCxcbiAgfSk7XG5cbiAgLy8gT04gQ09ORkxJQ1QgRE8gTk9USElORzogZGVkdXBlX2tleSBVTklRVUUg7JyE67CY7J2EIHNpbGVudCDrrLTsi5wuXG4gIC8vIHRyeS9jYXRjaCDrsKnsi53snYAgUEcg7Luk64Sl7IWY7J2EIGFib3J0ZWQg7IOB7YOc66GcIOunjOuTnOuvgOuhnCDsgqzsmqntlZjsp4Ag7JWK64qU64ukLlxuICBjb25zdCBpbnNlcnRlZCA9IGF3YWl0IGRiKFwiYXVkaXRfZXZlbnRzXCIpXG4gICAgLmluc2VydCh7XG4gICAgICBzb3VyY2U6IEFVRElUX0VWRU5UX1NPVVJDRSxcbiAgICAgIHNvdXJjZV92ZXJzaW9uOiBBVURJVF9FVkVOVF9TT1VSQ0VfVkVSU0lPTixcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgZXZlbnRfdHlwZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgZXZlbnRfa2V5OiBldmVudC5ldmVudEtleSxcbiAgICAgIGRlZHVwZV9rZXksXG4gICAgICBhY3Rvcl91c2VyX2lkLFxuICAgICAgc3ViamVjdF91c2VyX2lkLFxuICAgICAgb3JnYW5pemF0aW9uX2lkLFxuICAgICAgdGVhbV9pZCxcbiAgICAgIHNlc3Npb25faWQsXG4gICAgICBwcm92aWRlcl9pZCxcbiAgICAgIGxvZ2luX21ldGhvZCxcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICB2aXNpdG9yX2lkLFxuICAgICAgcmVhc29uLFxuICAgICAgYWN0aW9uLFxuICAgICAgdHJpZ2dlcl9jb250ZXh0LFxuICAgICAgaXBfYWRkcmVzcyxcbiAgICAgIGNvdW50cnlfY29kZSxcbiAgICAgIGNvdW50cnksXG4gICAgICBjaXR5LFxuICAgICAgdXNlcl9hZ2VudCxcbiAgICAgIHBheWxvYWRfanNvbjogZXZlbnREYXRhLFxuICAgICAgb2NjdXJyZWRfYXQsXG4gICAgfSlcbiAgICAub25Db25mbGljdChcImRlZHVwZV9rZXlcIilcbiAgICAuaWdub3JlKClcbiAgICAucmV0dXJuaW5nKFwiZGVkdXBlX2tleVwiKTtcblxuICBpZiAoaW5zZXJ0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuOyAvLyBzaWxlbnQgZGVkdXBlXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsTUFBTSxxQkFBcUI7QUFDM0IsTUFBTSw2QkFBNkI7QUFFbkMsTUFBTSxzQkFBc0IsSUFBSSxJQUFZO0NBQzFDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDRCxDQUFDO0FBRUYsTUFBTSxzQkFBc0IsSUFBSSxJQUFZO0NBQzFDO0NBQ0E7Q0FDQTtDQUlBO0NBQ0E7Q0FDQTtDQUNELENBQUM7QUFFRixNQUFNLDJCQUEyQixJQUFJLElBQVk7Q0FDL0M7Q0FDQTtDQUNBO0NBQ0QsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLElBQUks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
@@ -1,6 +1,8 @@
1
1
  export type { GenerateBetterAuthEntitiesOptions } from "./auth-generator";
2
2
  export { generateBetterAuthEntities } from "./auth-generator";
3
3
  export { ingestAuditEvent } from "./audit-log-ingestor";
4
+ export { type AuditLogEvent } from "./audit-log/events";
5
+ export { sonamuAuditLog } from "./audit-log/plugin";
4
6
  export { BASE_FIELD_MAPPINGS, betterAuthV1 } from "./better-auth-entities";
5
7
  export { sonamuKnexAdapter } from "./knex-adapter";
6
8
  export * from "./plugins";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iCAAiC,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,cAAc,WAAW,CAAC"}
@@ -1,5 +1,6 @@
1
- import { ingestAuditEvent, init_audit_log_ingestor } from "./audit-log-ingestor.js";
2
1
  import { BASE_FIELD_MAPPINGS, betterAuthV1, init_better_auth_entities } from "./better-auth-entities.js";
2
+ import { ingestAuditEvent } from "./audit-log-ingestor.js";
3
+ import { sonamuAuditLog } from "./audit-log/plugin.js";
3
4
  import { generateBetterAuthEntities } from "./auth-generator.js";
4
5
  import { init_knex_adapter, sonamuKnexAdapter } from "./knex-adapter.js";
5
6
  import { ADMIN_SCHEMA, admin } from "./plugins/wrappers/admin.js";
@@ -15,10 +16,9 @@ import { USERNAME_SCHEMA, username } from "./plugins/wrappers/username.js";
15
16
  import "./plugins/index.js";
16
17
 
17
18
  //#region src/auth/index.ts
18
- init_audit_log_ingestor();
19
19
  init_better_auth_entities();
20
20
  init_knex_adapter();
21
21
 
22
22
  //#endregion
23
- export { ADMIN_SCHEMA, ANONYMOUS_SCHEMA, API_KEY_SCHEMA, BASE_FIELD_MAPPINGS, JWT_SCHEMA, ORGANIZATION_SCHEMA, PASSKEY_SCHEMA, PHONE_NUMBER_SCHEMA, SSO_SCHEMA, TWO_FACTOR_SCHEMA, USERNAME_SCHEMA, admin, anonymous, apiKey, betterAuthV1, generateBetterAuthEntities, ingestAuditEvent, jwt, organization, passkey, phoneNumber, sonamuKnexAdapter, sso, twoFactor, username };
24
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgeyBHZW5lcmF0ZUJldHRlckF1dGhFbnRpdGllc09wdGlvbnMgfSBmcm9tIFwiLi9hdXRoLWdlbmVyYXRvclwiO1xuZXhwb3J0IHsgZ2VuZXJhdGVCZXR0ZXJBdXRoRW50aXRpZXMgfSBmcm9tIFwiLi9hdXRoLWdlbmVyYXRvclwiO1xuZXhwb3J0IHsgaW5nZXN0QXVkaXRFdmVudCB9IGZyb20gXCIuL2F1ZGl0LWxvZy1pbmdlc3RvclwiO1xuZXhwb3J0IHsgQkFTRV9GSUVMRF9NQVBQSU5HUywgYmV0dGVyQXV0aFYxIH0gZnJvbSBcIi4vYmV0dGVyLWF1dGgtZW50aXRpZXNcIjtcbmV4cG9ydCB7IHNvbmFtdUtuZXhBZGFwdGVyIH0gZnJvbSBcIi4va25leC1hZGFwdGVyXCI7XG5cbi8vIOyZuOu2gOuhnOuKlCB3cmFwcGVyc+unjCBleHBvcnQgKGFkbWluLCB0d29GYWN0b3Ig65OxIOuemO2NvCDtlajsiJjsmYAgU0NIRU1BKVxuZXhwb3J0ICogZnJvbSBcIi4vcGx1Z2luc1wiO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozt5QkFFd0Q7MkJBQ21CO21CQUN4QiJ9
23
+ export { ADMIN_SCHEMA, ANONYMOUS_SCHEMA, API_KEY_SCHEMA, BASE_FIELD_MAPPINGS, JWT_SCHEMA, ORGANIZATION_SCHEMA, PASSKEY_SCHEMA, PHONE_NUMBER_SCHEMA, SSO_SCHEMA, TWO_FACTOR_SCHEMA, USERNAME_SCHEMA, admin, anonymous, apiKey, betterAuthV1, generateBetterAuthEntities, ingestAuditEvent, jwt, organization, passkey, phoneNumber, sonamuAuditLog, sonamuKnexAdapter, sso, twoFactor, username };
24
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgeyBHZW5lcmF0ZUJldHRlckF1dGhFbnRpdGllc09wdGlvbnMgfSBmcm9tIFwiLi9hdXRoLWdlbmVyYXRvclwiO1xuZXhwb3J0IHsgZ2VuZXJhdGVCZXR0ZXJBdXRoRW50aXRpZXMgfSBmcm9tIFwiLi9hdXRoLWdlbmVyYXRvclwiO1xuZXhwb3J0IHsgaW5nZXN0QXVkaXRFdmVudCB9IGZyb20gXCIuL2F1ZGl0LWxvZy1pbmdlc3RvclwiO1xuZXhwb3J0IHsgdHlwZSBBdWRpdExvZ0V2ZW50IH0gZnJvbSBcIi4vYXVkaXQtbG9nL2V2ZW50c1wiO1xuZXhwb3J0IHsgc29uYW11QXVkaXRMb2cgfSBmcm9tIFwiLi9hdWRpdC1sb2cvcGx1Z2luXCI7XG5leHBvcnQgeyBCQVNFX0ZJRUxEX01BUFBJTkdTLCBiZXR0ZXJBdXRoVjEgfSBmcm9tIFwiLi9iZXR0ZXItYXV0aC1lbnRpdGllc1wiO1xuZXhwb3J0IHsgc29uYW11S25leEFkYXB0ZXIgfSBmcm9tIFwiLi9rbmV4LWFkYXB0ZXJcIjtcblxuLy8g7Jm467aA66Gc64qUIHdyYXBwZXJz66eMIGV4cG9ydCAoYWRtaW4sIHR3b0ZhY3RvciDrk7Eg656Y7Y28IO2VqOyImOyZgCBTQ0hFTUEpXG5leHBvcnQgKiBmcm9tIFwiLi9wbHVnaW5zXCI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQkFLMkU7bUJBQ3hCIn0=
@@ -9,7 +9,7 @@ import { type BetterAuthEntityDef } from "./types";
9
9
  * - role: 사용자 역할 (기본값: "user")
10
10
  * - banned: 차단 여부
11
11
  * - ban_reason: 차단 사유
12
- * - ban_expires: 차단 만료 시간 (Unix timestamp)
12
+ * - ban_expires: 차단 만료 시간 (Date)
13
13
  *
14
14
  * Session 테이블:
15
15
  * - impersonated_by: 대리 로그인한 관리자 ID
@@ -9,7 +9,7 @@
9
9
  * - role: 사용자 역할 (기본값: "user")
10
10
  * - banned: 차단 여부
11
11
  * - ban_reason: 차단 사유
12
- * - ban_expires: 차단 만료 시간 (Unix timestamp)
12
+ * - ban_expires: 차단 만료 시간 (Date)
13
13
  *
14
14
  * Session 테이블:
15
15
  * - impersonated_by: 대리 로그인한 관리자 ID
@@ -42,9 +42,9 @@ const adminEntityDef = {
42
42
  },
43
43
  {
44
44
  name: "ban_expires",
45
- type: "bigInteger",
45
+ type: "date",
46
46
  nullable: true,
47
- desc: "차단 만료 (Unix timestamp)"
47
+ desc: "차단 만료"
48
48
  }
49
49
  ],
50
50
  Session: [{
@@ -58,4 +58,4 @@ const adminEntityDef = {
58
58
 
59
59
  //#endregion
60
60
  export { adminEntityDef };
61
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJuYW1lcyI6WyJhZG1pbkVudGl0eURlZjogQmV0dGVyQXV0aEVudGl0eURlZiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zL2FkbWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQmV0dGVyQXV0aEVudGl0eURlZiB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogYmV0dGVyLWF1dGggYWRtaW4g7ZSM65+s6re47J24IOyXlO2LsO2LsCDsoJXsnZhcbiAqIGh0dHBzOi8vd3d3LmJldHRlci1hdXRoLmNvbS9kb2NzL3BsdWdpbnMvYWRtaW5cbiAqXG4gKiDqtIDrpqzsnpAg6riw64ql7J2EIOychO2VnCDtlYTrk5zrpbwg7LaU6rCA7ZWp64uI64ukOlxuICpcbiAqIFVzZXIg7YWM7J2067iUOlxuICogLSByb2xlOiDsgqzsmqnsnpAg7Jet7ZWgICjquLDrs7jqsJI6IFwidXNlclwiKVxuICogLSBiYW5uZWQ6IOywqOuLqCDsl6zrtoBcbiAqIC0gYmFuX3JlYXNvbjog7LCo64uoIOyCrOycoFxuICogLSBiYW5fZXhwaXJlczog7LCo64uoIOunjOujjCDsi5zqsIQgKFVuaXggdGltZXN0YW1wKVxuICpcbiAqIFNlc3Npb24g7YWM7J2067iUOlxuICogLSBpbXBlcnNvbmF0ZWRfYnk6IOuMgOumrCDroZzqt7jsnbjtlZwg6rSA66as7J6QIElEXG4gKi9cbmV4cG9ydCBjb25zdCBhZG1pbkVudGl0eURlZjogQmV0dGVyQXV0aEVudGl0eURlZiA9IHtcbiAgaWQ6IFwiYWRtaW5cIixcbiAgbmFtZTogXCJBZG1pblwiLFxuICBlbnRpdGllczogW10sXG4gIGFkZGl0aW9uYWxQcm9wczoge1xuICAgIFVzZXI6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJyb2xlXCIsXG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICBkYkRlZmF1bHQ6ICdcInVzZXJcIicsXG4gICAgICAgIGRlc2M6IFwi7IKs7Jqp7J6QIOyXre2VoFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJiYW5uZWRcIixcbiAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICBkYkRlZmF1bHQ6IFwiZmFsc2VcIixcbiAgICAgICAgZGVzYzogXCLssKjri6gg7Jes67aAXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcImJhbl9yZWFzb25cIixcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgIGRlc2M6IFwi7LCo64uoIOyCrOycoFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJiYW5fZXhwaXJlc1wiLFxuICAgICAgICB0eXBlOiBcImJpZ0ludGVnZXJcIixcbiAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgIGRlc2M6IFwi7LCo64uoIOunjOujjCAoVW5peCB0aW1lc3RhbXApXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgU2Vzc2lvbjogW1xuICAgICAge1xuICAgICAgICBuYW1lOiBcImltcGVyc29uYXRlZF9ieVwiLFxuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgZGVzYzogXCLrjIDrpqwg66Gc6re47J247ZWcIOq0gOumrOyekCBJRFwiLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQSxNQUFhQSxpQkFBc0M7Q0FDakQsSUFBSTtDQUNKLE1BQU07Q0FDTixVQUFVLEVBQUU7Q0FDWixpQkFBaUI7RUFDZixNQUFNO0dBQ0o7SUFDRSxNQUFNO0lBQ04sTUFBTTtJQUNOLFVBQVU7SUFDVixXQUFXO0lBQ1gsTUFBTTtJQUNQO0dBQ0Q7SUFDRSxNQUFNO0lBQ04sTUFBTTtJQUNOLFVBQVU7SUFDVixXQUFXO0lBQ1gsTUFBTTtJQUNQO0dBQ0Q7SUFDRSxNQUFNO0lBQ04sTUFBTTtJQUNOLFVBQVU7SUFDVixNQUFNO0lBQ1A7R0FDRDtJQUNFLE1BQU07SUFDTixNQUFNO0lBQ04sVUFBVTtJQUNWLE1BQU07SUFDUDtHQUNGO0VBQ0QsU0FBUyxDQUNQO0dBQ0UsTUFBTTtHQUNOLE1BQU07R0FDTixVQUFVO0dBQ1YsTUFBTTtHQUNQLENBQ0Y7RUFDRjtDQUNGIn0=
61
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJuYW1lcyI6WyJhZG1pbkVudGl0eURlZjogQmV0dGVyQXV0aEVudGl0eURlZiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zL2FkbWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQmV0dGVyQXV0aEVudGl0eURlZiB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogYmV0dGVyLWF1dGggYWRtaW4g7ZSM65+s6re47J24IOyXlO2LsO2LsCDsoJXsnZhcbiAqIGh0dHBzOi8vd3d3LmJldHRlci1hdXRoLmNvbS9kb2NzL3BsdWdpbnMvYWRtaW5cbiAqXG4gKiDqtIDrpqzsnpAg6riw64ql7J2EIOychO2VnCDtlYTrk5zrpbwg7LaU6rCA7ZWp64uI64ukOlxuICpcbiAqIFVzZXIg7YWM7J2067iUOlxuICogLSByb2xlOiDsgqzsmqnsnpAg7Jet7ZWgICjquLDrs7jqsJI6IFwidXNlclwiKVxuICogLSBiYW5uZWQ6IOywqOuLqCDsl6zrtoBcbiAqIC0gYmFuX3JlYXNvbjog7LCo64uoIOyCrOycoFxuICogLSBiYW5fZXhwaXJlczog7LCo64uoIOunjOujjCDsi5zqsIQgKERhdGUpXG4gKlxuICogU2Vzc2lvbiDthYzsnbTruJQ6XG4gKiAtIGltcGVyc29uYXRlZF9ieTog64yA66asIOuhnOq3uOyduO2VnCDqtIDrpqzsnpAgSURcbiAqL1xuZXhwb3J0IGNvbnN0IGFkbWluRW50aXR5RGVmOiBCZXR0ZXJBdXRoRW50aXR5RGVmID0ge1xuICBpZDogXCJhZG1pblwiLFxuICBuYW1lOiBcIkFkbWluXCIsXG4gIGVudGl0aWVzOiBbXSxcbiAgYWRkaXRpb25hbFByb3BzOiB7XG4gICAgVXNlcjogW1xuICAgICAge1xuICAgICAgICBuYW1lOiBcInJvbGVcIixcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgIGRiRGVmYXVsdDogJ1widXNlclwiJyxcbiAgICAgICAgZGVzYzogXCLsgqzsmqnsnpAg7Jet7ZWgXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcImJhbm5lZFwiLFxuICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgIGRiRGVmYXVsdDogXCJmYWxzZVwiLFxuICAgICAgICBkZXNjOiBcIuywqOuLqCDsl6zrtoBcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiYmFuX3JlYXNvblwiLFxuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgZGVzYzogXCLssKjri6gg7IKs7JygXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcImJhbl9leHBpcmVzXCIsXG4gICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgZGVzYzogXCLssKjri6gg66eM66OMXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgU2Vzc2lvbjogW1xuICAgICAge1xuICAgICAgICBuYW1lOiBcImltcGVyc29uYXRlZF9ieVwiLFxuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgZGVzYzogXCLrjIDrpqwg66Gc6re47J247ZWcIOq0gOumrOyekCBJRFwiLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQSxNQUFhQSxpQkFBc0M7Q0FDakQsSUFBSTtDQUNKLE1BQU07Q0FDTixVQUFVLEVBQUU7Q0FDWixpQkFBaUI7RUFDZixNQUFNO0dBQ0o7SUFDRSxNQUFNO0lBQ04sTUFBTTtJQUNOLFVBQVU7SUFDVixXQUFXO0lBQ1gsTUFBTTtJQUNQO0dBQ0Q7SUFDRSxNQUFNO0lBQ04sTUFBTTtJQUNOLFVBQVU7SUFDVixXQUFXO0lBQ1gsTUFBTTtJQUNQO0dBQ0Q7SUFDRSxNQUFNO0lBQ04sTUFBTTtJQUNOLFVBQVU7SUFDVixNQUFNO0lBQ1A7R0FDRDtJQUNFLE1BQU07SUFDTixNQUFNO0lBQ04sVUFBVTtJQUNWLE1BQU07SUFDUDtHQUNGO0VBQ0QsU0FBUyxDQUNQO0dBQ0UsTUFBTTtHQUNOLE1BQU07R0FDTixVQUFVO0dBQ1YsTUFBTTtHQUNQLENBQ0Y7RUFDRjtDQUNGIn0=
@@ -2,8 +2,8 @@ import { type BetterAuthEntityDef } from "./types";
2
2
  /**
3
3
  * better-auth AuditLog 플러그인 엔티티 정의
4
4
  *
5
- * auth.auditLog: true 활성화되며 audit_events 테이블을 생성합니다.
6
- * - Better Auth dash() 플러그인이 전송하는 이벤트를 1건씩 적재합니다.
5
+ * auth.plugins에 sonamuAuditLog() 추가 audit_events 테이블이 사용됩니다.
6
+ * - sonamuAuditLog 플러그인이 Better Auth databaseHooks/organizationHooks/middleware에서 수신한 이벤트를 1건씩 적재합니다.
7
7
  * - dedupe_key(sha256 hex)로 중복 적재를 방지합니다.
8
8
  *
9
9
  * 생성 방법: pnpm sonamu auth generate --plugins audit-log
@@ -2,8 +2,8 @@
2
2
  /**
3
3
  * better-auth AuditLog 플러그인 엔티티 정의
4
4
  *
5
- * auth.auditLog: true 활성화되며 audit_events 테이블을 생성합니다.
6
- * - Better Auth dash() 플러그인이 전송하는 이벤트를 1건씩 적재합니다.
5
+ * auth.plugins에 sonamuAuditLog() 추가 audit_events 테이블이 사용됩니다.
6
+ * - sonamuAuditLog 플러그인이 Better Auth databaseHooks/organizationHooks/middleware에서 수신한 이벤트를 1건씩 적재합니다.
7
7
  * - dedupe_key(sha256 hex)로 중복 적재를 방지합니다.
8
8
  *
9
9
  * 생성 방법: pnpm sonamu auth generate --plugins audit-log
@@ -288,4 +288,4 @@ const auditLogEntityDef = {
288
288
 
289
289
  //#endregion
290
290
  export { auditLogEntityDef };
291
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLmpzIiwibmFtZXMiOlsiYXVkaXRMb2dFbnRpdHlEZWY6IEJldHRlckF1dGhFbnRpdHlEZWYiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXV0aC9wbHVnaW5zL2VudGl0eS1kZWZpbml0aW9ucy9hdWRpdC1sb2cudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBCZXR0ZXJBdXRoRW50aXR5RGVmIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBiZXR0ZXItYXV0aCBBdWRpdExvZyDtlIzrn6zqt7jsnbgg7JeU7Yuw7YuwIOygleydmFxuICpcbiAqIGF1dGguYXVkaXRMb2c6IHRydWUg66GcIO2ZnOyEse2ZlOuQmOupsCBhdWRpdF9ldmVudHMg7YWM7J2067iU7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqIC0gQmV0dGVyIEF1dGggZGFzaCgpIO2UjOufrOq3uOyduOydtCDsoITshqHtlZjripQg7J2067Kk7Yq466W8IDHqsbTslKkg7KCB7J6s7ZWp64uI64ukLlxuICogLSBkZWR1cGVfa2V5KHNoYTI1NiBoZXgp66GcIOykkeuztSDsoIHsnqzrpbwg67Cp7KeA7ZWp64uI64ukLlxuICpcbiAqIOyDneyEsSDrsKnrspU6IHBucG0gc29uYW11IGF1dGggZ2VuZXJhdGUgLS1wbHVnaW5zIGF1ZGl0LWxvZ1xuICovXG5leHBvcnQgY29uc3QgYXVkaXRMb2dFbnRpdHlEZWY6IEJldHRlckF1dGhFbnRpdHlEZWYgPSB7XG4gIGlkOiBcImF1ZGl0LWxvZ1wiLFxuICBuYW1lOiBcIkF1ZGl0TG9nXCIsXG4gIGVudGl0aWVzOiBbXG4gICAge1xuICAgICAgaWQ6IFwiQXVkaXRFdmVudFwiLFxuICAgICAgdGFibGU6IFwiYXVkaXRfZXZlbnRzXCIsXG4gICAgICB0aXRsZTogXCLqsJDsgqzsnbTrsqTtirhcIixcbiAgICAgIHByb3BzOiBbXG4gICAgICAgIHsgbmFtZTogXCJpZFwiLCB0eXBlOiBcImludGVnZXJcIiwgZGVzYzogXCJJRFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzb3VyY2VcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAzMiwgZGVzYzogXCLsnbTrsqTtirgg7IaM7IqkXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInNvdXJjZV92ZXJzaW9uXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogOTYsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuyGjOyKpCDrsoTsoIRcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiY2F0ZWdvcnlcIiwgdHlwZTogXCJlbnVtXCIsIGlkOiBcIkF1ZGl0RXZlbnRDYXRlZ29yeVwiLCBkZXNjOiBcIuy5tO2FjOqzoOumrFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJldmVudF90eXBlXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogNjQsIGRlc2M6IFwi7J2067Kk7Yq4IO2DgOyehVwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJldmVudF9rZXlcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAxOTEsIGRlc2M6IFwi7J2067Kk7Yq4IO2CpFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJkZWR1cGVfa2V5XCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogNjQsIGRlc2M6IFwi7KSR67O1IOygnOqxsCDtgqRcIiB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJhY3Rvcl91c2VyX2lkXCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBsZW5ndGg6IDE5MSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBkZXNjOiBcIuyVoe2EsCDsgqzsmqnsnpAgSURcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic3ViamVjdF91c2VyX2lkXCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBsZW5ndGg6IDE5MSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBkZXNjOiBcIuuMgOyDgSDsgqzsmqnsnpAgSURcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwib3JnYW5pemF0aW9uX2lkXCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBsZW5ndGg6IDE5MSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBkZXNjOiBcIuyhsOyngSBJRFwiLFxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6IFwidGVhbV9pZFwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDE5MSwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi7YyAIElEXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInNlc3Npb25faWRcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAxOTEsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuyEuOyFmCBJRFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJwcm92aWRlcl9pZFwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDY0LCBudWxsYWJsZTogdHJ1ZSwgZGVzYzogXCLtlITroZzrsJTsnbTrjZQgSURcIiB9LFxuICAgICAgICB7IG5hbWU6IFwibG9naW5fbWV0aG9kXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogNjQsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuuhnOq3uOyduCDrsKnsi51cIiB9LFxuICAgICAgICB7IG5hbWU6IFwiaWRlbnRpZmllclwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDI1NSwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi7Iud67OE7J6QXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInZpc2l0b3JfaWRcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAxOTEsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuuwqeusuOyekCBJRFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJyZWFzb25cIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAxMjgsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuyCrOycoFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJhY3Rpb25cIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiA2NCwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi7JWh7IWYXCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidHJpZ2dlcl9jb250ZXh0XCIsXG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBsZW5ndGg6IDY0LFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGRlc2M6IFwi7Yq466as6rGwIOy7qO2FjeyKpO2KuFwiLFxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6IFwiaXBfYWRkcmVzc1wiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDQ1LCBudWxsYWJsZTogdHJ1ZSwgZGVzYzogXCJJUCDso7zshoxcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiY291bnRyeV9jb2RlXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogOCwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi6rWt6rCAIOy9lOuTnFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJjb3VudHJ5XCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogMTAwLCBudWxsYWJsZTogdHJ1ZSwgZGVzYzogXCLqta3qsIBcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiY2l0eVwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDEwMCwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi64+E7IucXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcInVzZXJfYWdlbnRcIiwgdHlwZTogXCJzdHJpbmdcIiwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwiVXNlci1BZ2VudFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJwYXlsb2FkX2pzb25cIiwgdHlwZTogXCJqc29uXCIsIGlkOiBcIkF1ZGl0RXZlbnRQYXlsb2FkXCIsIGRlc2M6IFwi7JuQ67O4IHBheWxvYWRcIiB9LFxuICAgICAgICB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiwgdHlwZTogXCJkYXRlXCIsIGRlc2M6IFwi67Cc7IOdIOyLnOqwgVwiIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImluZ2VzdGVkX2F0XCIsXG4gICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgZGJEZWZhdWx0OiBcIkNVUlJFTlRfVElNRVNUQU1QXCIsXG4gICAgICAgICAgZGVzYzogXCLsoIHsnqwg7Iuc6rCBXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgaW5kZXhlczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJ1bmlxdWVcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c19kZWR1cGVfa2V5X3VuaXF1ZVwiLFxuICAgICAgICAgIGNvbHVtbnM6IFt7IG5hbWU6IFwiZGVkdXBlX2tleVwiIH1dLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJpbmRleFwiLFxuICAgICAgICAgIG5hbWU6IFwiYXVkaXRfZXZlbnRzX29jY3VycmVkX2F0X2luZGV4XCIsXG4gICAgICAgICAgY29sdW1uczogW3sgbmFtZTogXCJvY2N1cnJlZF9hdFwiIH1dLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJpbmRleFwiLFxuICAgICAgICAgIG5hbWU6IFwiYXVkaXRfZXZlbnRzX2V2ZW50X3R5cGVfb2NjdXJyZWRfYXRfaW5kZXhcIixcbiAgICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcImV2ZW50X3R5cGVcIiB9LCB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiaW5kZXhcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c19zdWJqZWN0X3VzZXJfaWRfb2NjdXJyZWRfYXRfaW5kZXhcIixcbiAgICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcInN1YmplY3RfdXNlcl9pZFwiIH0sIHsgbmFtZTogXCJvY2N1cnJlZF9hdFwiIH1dLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJpbmRleFwiLFxuICAgICAgICAgIG5hbWU6IFwiYXVkaXRfZXZlbnRzX2FjdG9yX3VzZXJfaWRfb2NjdXJyZWRfYXRfaW5kZXhcIixcbiAgICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcImFjdG9yX3VzZXJfaWRcIiB9LCB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiaW5kZXhcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c19vcmdhbml6YXRpb25faWRfb2NjdXJyZWRfYXRfaW5kZXhcIixcbiAgICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcIm9yZ2FuaXphdGlvbl9pZFwiIH0sIHsgbmFtZTogXCJvY2N1cnJlZF9hdFwiIH1dLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJpbmRleFwiLFxuICAgICAgICAgIG5hbWU6IFwiYXVkaXRfZXZlbnRzX3RlYW1faWRfb2NjdXJyZWRfYXRfaW5kZXhcIixcbiAgICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcInRlYW1faWRcIiB9LCB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiaW5kZXhcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c19zZXNzaW9uX2lkX2luZGV4XCIsXG4gICAgICAgICAgY29sdW1uczogW3sgbmFtZTogXCJzZXNzaW9uX2lkXCIgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcImluZGV4XCIsXG4gICAgICAgICAgbmFtZTogXCJhdWRpdF9ldmVudHNfcmVhc29uX29jY3VycmVkX2F0X2luZGV4XCIsXG4gICAgICAgICAgY29sdW1uczogW3sgbmFtZTogXCJyZWFzb25cIiB9LCB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBzdWJzZXRzOiB7XG4gICAgICAgIEE6IFtcbiAgICAgICAgICBcImlkXCIsXG4gICAgICAgICAgXCJzb3VyY2VcIixcbiAgICAgICAgICBcInNvdXJjZV92ZXJzaW9uXCIsXG4gICAgICAgICAgXCJjYXRlZ29yeVwiLFxuICAgICAgICAgIFwiZXZlbnRfdHlwZVwiLFxuICAgICAgICAgIFwiZXZlbnRfa2V5XCIsXG4gICAgICAgICAgXCJkZWR1cGVfa2V5XCIsXG4gICAgICAgICAgXCJhY3Rvcl91c2VyX2lkXCIsXG4gICAgICAgICAgXCJzdWJqZWN0X3VzZXJfaWRcIixcbiAgICAgICAgICBcIm9yZ2FuaXphdGlvbl9pZFwiLFxuICAgICAgICAgIFwidGVhbV9pZFwiLFxuICAgICAgICAgIFwic2Vzc2lvbl9pZFwiLFxuICAgICAgICAgIFwicHJvdmlkZXJfaWRcIixcbiAgICAgICAgICBcImxvZ2luX21ldGhvZFwiLFxuICAgICAgICAgIFwiaWRlbnRpZmllclwiLFxuICAgICAgICAgIFwidmlzaXRvcl9pZFwiLFxuICAgICAgICAgIFwicmVhc29uXCIsXG4gICAgICAgICAgXCJhY3Rpb25cIixcbiAgICAgICAgICBcInRyaWdnZXJfY29udGV4dFwiLFxuICAgICAgICAgIFwiaXBfYWRkcmVzc1wiLFxuICAgICAgICAgIFwiY291bnRyeV9jb2RlXCIsXG4gICAgICAgICAgXCJjb3VudHJ5XCIsXG4gICAgICAgICAgXCJjaXR5XCIsXG4gICAgICAgICAgXCJ1c2VyX2FnZW50XCIsXG4gICAgICAgICAgXCJwYXlsb2FkX2pzb25cIixcbiAgICAgICAgICBcIm9jY3VycmVkX2F0XCIsXG4gICAgICAgICAgXCJpbmdlc3RlZF9hdFwiLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGVudW1zOiB7XG4gICAgICAgIEF1ZGl0RXZlbnRPcmRlckJ5OiB7IFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIgfSxcbiAgICAgICAgQXVkaXRFdmVudFNlYXJjaEZpZWxkOiB7IGlkOiBcIklEXCIgfSxcbiAgICAgICAgQXVkaXRFdmVudENhdGVnb3J5OiB7XG4gICAgICAgICAgdXNlcjogXCLsgqzsmqnsnpBcIixcbiAgICAgICAgICBzZXNzaW9uOiBcIuyEuOyFmFwiLFxuICAgICAgICAgIGFjY291bnQ6IFwi6rOE7KCVXCIsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uOiBcIuyduOymnVwiLFxuICAgICAgICAgIG9yZ2FuaXphdGlvbjogXCLsobDsp4FcIixcbiAgICAgICAgICBzZWN1cml0eTogXCLrs7TslYhcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSxcbiAgYWRkaXRpb25hbFByb3BzOiB7fSxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFXQSxNQUFhQSxvQkFBeUM7Q0FDcEQsSUFBSTtDQUNKLE1BQU07Q0FDTixVQUFVLENBQ1I7RUFDRSxJQUFJO0VBQ0osT0FBTztFQUNQLE9BQU87RUFDUCxPQUFPO0dBQ0w7SUFBRSxNQUFNO0lBQU0sTUFBTTtJQUFXLE1BQU07SUFBTTtHQUMzQztJQUFFLE1BQU07SUFBVSxNQUFNO0lBQVUsUUFBUTtJQUFJLE1BQU07SUFBVTtHQUM5RDtJQUFFLE1BQU07SUFBa0IsTUFBTTtJQUFVLFFBQVE7SUFBSSxVQUFVO0lBQU0sTUFBTTtJQUFTO0dBQ3JGO0lBQUUsTUFBTTtJQUFZLE1BQU07SUFBUSxJQUFJO0lBQXNCLE1BQU07SUFBUTtHQUMxRTtJQUFFLE1BQU07SUFBYyxNQUFNO0lBQVUsUUFBUTtJQUFJLE1BQU07SUFBVTtHQUNsRTtJQUFFLE1BQU07SUFBYSxNQUFNO0lBQVUsUUFBUTtJQUFLLE1BQU07SUFBUztHQUNqRTtJQUFFLE1BQU07SUFBYyxNQUFNO0lBQVUsUUFBUTtJQUFJLE1BQU07SUFBVztHQUNuRTtJQUNFLE1BQU07SUFDTixNQUFNO0lBQ04sUUFBUTtJQUNSLFVBQVU7SUFDVixNQUFNO0lBQ1A7R0FDRDtJQUNFLE1BQU07SUFDTixNQUFNO0lBQ04sUUFBUTtJQUNSLFVBQVU7SUFDVixNQUFNO0lBQ1A7R0FDRDtJQUNFLE1BQU07SUFDTixNQUFNO0lBQ04sUUFBUTtJQUNSLFVBQVU7SUFDVixNQUFNO0lBQ1A7R0FDRDtJQUFFLE1BQU07SUFBVyxNQUFNO0lBQVUsUUFBUTtJQUFLLFVBQVU7SUFBTSxNQUFNO0lBQVE7R0FDOUU7SUFBRSxNQUFNO0lBQWMsTUFBTTtJQUFVLFFBQVE7SUFBSyxVQUFVO0lBQU0sTUFBTTtJQUFTO0dBQ2xGO0lBQUUsTUFBTTtJQUFlLE1BQU07SUFBVSxRQUFRO0lBQUksVUFBVTtJQUFNLE1BQU07SUFBWTtHQUNyRjtJQUFFLE1BQU07SUFBZ0IsTUFBTTtJQUFVLFFBQVE7SUFBSSxVQUFVO0lBQU0sTUFBTTtJQUFVO0dBQ3BGO0lBQUUsTUFBTTtJQUFjLE1BQU07SUFBVSxRQUFRO0lBQUssVUFBVTtJQUFNLE1BQU07SUFBTztHQUNoRjtJQUFFLE1BQU07SUFBYyxNQUFNO0lBQVUsUUFBUTtJQUFLLFVBQVU7SUFBTSxNQUFNO0lBQVU7R0FDbkY7SUFBRSxNQUFNO0lBQVUsTUFBTTtJQUFVLFFBQVE7SUFBSyxVQUFVO0lBQU0sTUFBTTtJQUFNO0dBQzNFO0lBQUUsTUFBTTtJQUFVLE1BQU07SUFBVSxRQUFRO0lBQUksVUFBVTtJQUFNLE1BQU07SUFBTTtHQUMxRTtJQUNFLE1BQU07SUFDTixNQUFNO0lBQ04sUUFBUTtJQUNSLFVBQVU7SUFDVixNQUFNO0lBQ1A7R0FDRDtJQUFFLE1BQU07SUFBYyxNQUFNO0lBQVUsUUFBUTtJQUFJLFVBQVU7SUFBTSxNQUFNO0lBQVM7R0FDakY7SUFBRSxNQUFNO0lBQWdCLE1BQU07SUFBVSxRQUFRO0lBQUcsVUFBVTtJQUFNLE1BQU07SUFBUztHQUNsRjtJQUFFLE1BQU07SUFBVyxNQUFNO0lBQVUsUUFBUTtJQUFLLFVBQVU7SUFBTSxNQUFNO0lBQU07R0FDNUU7SUFBRSxNQUFNO0lBQVEsTUFBTTtJQUFVLFFBQVE7SUFBSyxVQUFVO0lBQU0sTUFBTTtJQUFNO0dBQ3pFO0lBQUUsTUFBTTtJQUFjLE1BQU07SUFBVSxVQUFVO0lBQU0sTUFBTTtJQUFjO0dBQzFFO0lBQUUsTUFBTTtJQUFnQixNQUFNO0lBQVEsSUFBSTtJQUFxQixNQUFNO0lBQWM7R0FDbkY7SUFBRSxNQUFNO0lBQWUsTUFBTTtJQUFRLE1BQU07SUFBUztHQUNwRDtJQUNFLE1BQU07SUFDTixNQUFNO0lBQ04sV0FBVztJQUNYLE1BQU07SUFDUDtHQUNGO0VBQ0QsU0FBUztHQUNQO0lBQ0UsTUFBTTtJQUNOLE1BQU07SUFDTixTQUFTLENBQUMsRUFBRSxNQUFNLGNBQWMsQ0FBQztJQUNsQztHQUNEO0lBQ0UsTUFBTTtJQUNOLE1BQU07SUFDTixTQUFTLENBQUMsRUFBRSxNQUFNLGVBQWUsQ0FBQztJQUNuQztHQUNEO0lBQ0UsTUFBTTtJQUNOLE1BQU07SUFDTixTQUFTLENBQUMsRUFBRSxNQUFNLGNBQWMsRUFBRSxFQUFFLE1BQU0sZUFBZSxDQUFDO0lBQzNEO0dBQ0Q7SUFDRSxNQUFNO0lBQ04sTUFBTTtJQUNOLFNBQVMsQ0FBQyxFQUFFLE1BQU0sbUJBQW1CLEVBQUUsRUFBRSxNQUFNLGVBQWUsQ0FBQztJQUNoRTtHQUNEO0lBQ0UsTUFBTTtJQUNOLE1BQU07SUFDTixTQUFTLENBQUMsRUFBRSxNQUFNLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxlQUFlLENBQUM7SUFDOUQ7R0FDRDtJQUNFLE1BQU07SUFDTixNQUFNO0lBQ04sU0FBUyxDQUFDLEVBQUUsTUFBTSxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sZUFBZSxDQUFDO0lBQ2hFO0dBQ0Q7SUFDRSxNQUFNO0lBQ04sTUFBTTtJQUNOLFNBQVMsQ0FBQyxFQUFFLE1BQU0sV0FBVyxFQUFFLEVBQUUsTUFBTSxlQUFlLENBQUM7SUFDeEQ7R0FDRDtJQUNFLE1BQU07SUFDTixNQUFNO0lBQ04sU0FBUyxDQUFDLEVBQUUsTUFBTSxjQUFjLENBQUM7SUFDbEM7R0FDRDtJQUNFLE1BQU07SUFDTixNQUFNO0lBQ04sU0FBUyxDQUFDLEVBQUUsTUFBTSxVQUFVLEVBQUUsRUFBRSxNQUFNLGVBQWUsQ0FBQztJQUN2RDtHQUNGO0VBQ0QsU0FBUyxFQUNQLEdBQUc7R0FDRDtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDRCxFQUNGO0VBQ0QsT0FBTztHQUNMLG1CQUFtQixFQUFFLFdBQVcsU0FBUztHQUN6Qyx1QkFBdUIsRUFBRSxJQUFJLE1BQU07R0FDbkMsb0JBQW9CO0lBQ2xCLE1BQU07SUFDTixTQUFTO0lBQ1QsU0FBUztJQUNULGNBQWM7SUFDZCxjQUFjO0lBQ2QsVUFBVTtJQUNYO0dBQ0Y7RUFDRixDQUNGO0NBQ0QsaUJBQWlCLEVBQUU7Q0FDcEIifQ==
291
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLmpzIiwibmFtZXMiOlsiYXVkaXRMb2dFbnRpdHlEZWY6IEJldHRlckF1dGhFbnRpdHlEZWYiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXV0aC9wbHVnaW5zL2VudGl0eS1kZWZpbml0aW9ucy9hdWRpdC1sb2cudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBCZXR0ZXJBdXRoRW50aXR5RGVmIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBiZXR0ZXItYXV0aCBBdWRpdExvZyDtlIzrn6zqt7jsnbgg7JeU7Yuw7YuwIOygleydmFxuICpcbiAqIGF1dGgucGx1Z2luc+yXkCBzb25hbXVBdWRpdExvZygpIOy2lOqwgCDsi5wgYXVkaXRfZXZlbnRzIO2FjOydtOu4lOydtCDsgqzsmqnrkKnri4jri6QuXG4gKiAtIHNvbmFtdUF1ZGl0TG9nIO2UjOufrOq3uOyduOydtCBCZXR0ZXIgQXV0aCBkYXRhYmFzZUhvb2tzL29yZ2FuaXphdGlvbkhvb2tzL21pZGRsZXdhcmXsl5DshJwg7IiY7Iug7ZWcIOydtOuypO2KuOulvCAx6rG07JSpIOyggeyerO2VqeuLiOuLpC5cbiAqIC0gZGVkdXBlX2tleShzaGEyNTYgaGV4KeuhnCDspJHrs7Ug7KCB7J6s66W8IOuwqeyngO2VqeuLiOuLpC5cbiAqXG4gKiDsg53shLEg67Cp67KVOiBwbnBtIHNvbmFtdSBhdXRoIGdlbmVyYXRlIC0tcGx1Z2lucyBhdWRpdC1sb2dcbiAqL1xuZXhwb3J0IGNvbnN0IGF1ZGl0TG9nRW50aXR5RGVmOiBCZXR0ZXJBdXRoRW50aXR5RGVmID0ge1xuICBpZDogXCJhdWRpdC1sb2dcIixcbiAgbmFtZTogXCJBdWRpdExvZ1wiLFxuICBlbnRpdGllczogW1xuICAgIHtcbiAgICAgIGlkOiBcIkF1ZGl0RXZlbnRcIixcbiAgICAgIHRhYmxlOiBcImF1ZGl0X2V2ZW50c1wiLFxuICAgICAgdGl0bGU6IFwi6rCQ7IKs7J2067Kk7Yq4XCIsXG4gICAgICBwcm9wczogW1xuICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIsIGRlc2M6IFwiSURcIiB9LFxuICAgICAgICB7IG5hbWU6IFwic291cmNlXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogMzIsIGRlc2M6IFwi7J2067Kk7Yq4IOyGjOyKpFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzb3VyY2VfdmVyc2lvblwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDk2LCBudWxsYWJsZTogdHJ1ZSwgZGVzYzogXCLshozsiqQg67KE7KCEXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImNhdGVnb3J5XCIsIHR5cGU6IFwiZW51bVwiLCBpZDogXCJBdWRpdEV2ZW50Q2F0ZWdvcnlcIiwgZGVzYzogXCLsubTthYzqs6DrpqxcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiZXZlbnRfdHlwZVwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDY0LCBkZXNjOiBcIuydtOuypO2KuCDtg4DsnoVcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiZXZlbnRfa2V5XCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogMTkxLCBkZXNjOiBcIuydtOuypO2KuCDtgqRcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiZGVkdXBlX2tleVwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDY0LCBkZXNjOiBcIuykkeuztSDsoJzqsbAg7YKkXCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiYWN0b3JfdXNlcl9pZFwiLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgbGVuZ3RoOiAxOTEsXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZGVzYzogXCLslaHthLAg7IKs7Jqp7J6QIElEXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInN1YmplY3RfdXNlcl9pZFwiLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgbGVuZ3RoOiAxOTEsXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZGVzYzogXCLrjIDsg4Eg7IKs7Jqp7J6QIElEXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm9yZ2FuaXphdGlvbl9pZFwiLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgbGVuZ3RoOiAxOTEsXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZGVzYzogXCLsobDsp4EgSURcIixcbiAgICAgICAgfSxcbiAgICAgICAgeyBuYW1lOiBcInRlYW1faWRcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAxOTEsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIu2MgCBJRFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJzZXNzaW9uX2lkXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogMTkxLCBudWxsYWJsZTogdHJ1ZSwgZGVzYzogXCLshLjshZggSURcIiB9LFxuICAgICAgICB7IG5hbWU6IFwicHJvdmlkZXJfaWRcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiA2NCwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi7ZSE66Gc67CU7J20642UIElEXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImxvZ2luX21ldGhvZFwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDY0LCBudWxsYWJsZTogdHJ1ZSwgZGVzYzogXCLroZzqt7jsnbgg67Cp7IudXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImlkZW50aWZpZXJcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAyNTUsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuyLneuzhOyekFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJ2aXNpdG9yX2lkXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogMTkxLCBudWxsYWJsZTogdHJ1ZSwgZGVzYzogXCLrsKnrrLjsnpAgSURcIiB9LFxuICAgICAgICB7IG5hbWU6IFwicmVhc29uXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogMTI4LCBudWxsYWJsZTogdHJ1ZSwgZGVzYzogXCLsgqzsnKBcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiYWN0aW9uXCIsIHR5cGU6IFwic3RyaW5nXCIsIGxlbmd0aDogNjQsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuyVoeyFmFwiIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRyaWdnZXJfY29udGV4dFwiLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgbGVuZ3RoOiA2NCxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBkZXNjOiBcIu2KuOumrOqxsCDsu6jthY3siqTtirhcIixcbiAgICAgICAgfSxcbiAgICAgICAgeyBuYW1lOiBcImlwX2FkZHJlc3NcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiA0NSwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwiSVAg7KO87IaMXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImNvdW50cnlfY29kZVwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDgsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuq1reqwgCDsvZTrk5xcIiB9LFxuICAgICAgICB7IG5hbWU6IFwiY291bnRyeVwiLCB0eXBlOiBcInN0cmluZ1wiLCBsZW5ndGg6IDEwMCwgbnVsbGFibGU6IHRydWUsIGRlc2M6IFwi6rWt6rCAXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcImNpdHlcIiwgdHlwZTogXCJzdHJpbmdcIiwgbGVuZ3RoOiAxMDAsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIuuPhOyLnFwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJ1c2VyX2FnZW50XCIsIHR5cGU6IFwic3RyaW5nXCIsIG51bGxhYmxlOiB0cnVlLCBkZXNjOiBcIlVzZXItQWdlbnRcIiB9LFxuICAgICAgICB7IG5hbWU6IFwicGF5bG9hZF9qc29uXCIsIHR5cGU6IFwianNvblwiLCBpZDogXCJBdWRpdEV2ZW50UGF5bG9hZFwiLCBkZXNjOiBcIuybkOuzuCBwYXlsb2FkXCIgfSxcbiAgICAgICAgeyBuYW1lOiBcIm9jY3VycmVkX2F0XCIsIHR5cGU6IFwiZGF0ZVwiLCBkZXNjOiBcIuuwnOyDnSDsi5zqsIFcIiB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpbmdlc3RlZF9hdFwiLFxuICAgICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICAgIGRiRGVmYXVsdDogXCJDVVJSRU5UX1RJTUVTVEFNUFwiLFxuICAgICAgICAgIGRlc2M6IFwi7KCB7J6sIOyLnOqwgVwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGluZGV4ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwidW5pcXVlXCIsXG4gICAgICAgICAgbmFtZTogXCJhdWRpdF9ldmVudHNfZGVkdXBlX2tleV91bmlxdWVcIixcbiAgICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcImRlZHVwZV9rZXlcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiaW5kZXhcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c19vY2N1cnJlZF9hdF9pbmRleFwiLFxuICAgICAgICAgIGNvbHVtbnM6IFt7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiaW5kZXhcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c19ldmVudF90eXBlX29jY3VycmVkX2F0X2luZGV4XCIsXG4gICAgICAgICAgY29sdW1uczogW3sgbmFtZTogXCJldmVudF90eXBlXCIgfSwgeyBuYW1lOiBcIm9jY3VycmVkX2F0XCIgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcImluZGV4XCIsXG4gICAgICAgICAgbmFtZTogXCJhdWRpdF9ldmVudHNfc3ViamVjdF91c2VyX2lkX29jY3VycmVkX2F0X2luZGV4XCIsXG4gICAgICAgICAgY29sdW1uczogW3sgbmFtZTogXCJzdWJqZWN0X3VzZXJfaWRcIiB9LCB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiaW5kZXhcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c19hY3Rvcl91c2VyX2lkX29jY3VycmVkX2F0X2luZGV4XCIsXG4gICAgICAgICAgY29sdW1uczogW3sgbmFtZTogXCJhY3Rvcl91c2VyX2lkXCIgfSwgeyBuYW1lOiBcIm9jY3VycmVkX2F0XCIgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcImluZGV4XCIsXG4gICAgICAgICAgbmFtZTogXCJhdWRpdF9ldmVudHNfb3JnYW5pemF0aW9uX2lkX29jY3VycmVkX2F0X2luZGV4XCIsXG4gICAgICAgICAgY29sdW1uczogW3sgbmFtZTogXCJvcmdhbml6YXRpb25faWRcIiB9LCB7IG5hbWU6IFwib2NjdXJyZWRfYXRcIiB9XSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiaW5kZXhcIixcbiAgICAgICAgICBuYW1lOiBcImF1ZGl0X2V2ZW50c190ZWFtX2lkX29jY3VycmVkX2F0X2luZGV4XCIsXG4gICAgICAgICAgY29sdW1uczogW3sgbmFtZTogXCJ0ZWFtX2lkXCIgfSwgeyBuYW1lOiBcIm9jY3VycmVkX2F0XCIgfV0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcImluZGV4XCIsXG4gICAgICAgICAgbmFtZTogXCJhdWRpdF9ldmVudHNfc2Vzc2lvbl9pZF9pbmRleFwiLFxuICAgICAgICAgIGNvbHVtbnM6IFt7IG5hbWU6IFwic2Vzc2lvbl9pZFwiIH1dLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJpbmRleFwiLFxuICAgICAgICAgIG5hbWU6IFwiYXVkaXRfZXZlbnRzX3JlYXNvbl9vY2N1cnJlZF9hdF9pbmRleFwiLFxuICAgICAgICAgIGNvbHVtbnM6IFt7IG5hbWU6IFwicmVhc29uXCIgfSwgeyBuYW1lOiBcIm9jY3VycmVkX2F0XCIgfV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgc3Vic2V0czoge1xuICAgICAgICBBOiBbXG4gICAgICAgICAgXCJpZFwiLFxuICAgICAgICAgIFwic291cmNlXCIsXG4gICAgICAgICAgXCJzb3VyY2VfdmVyc2lvblwiLFxuICAgICAgICAgIFwiY2F0ZWdvcnlcIixcbiAgICAgICAgICBcImV2ZW50X3R5cGVcIixcbiAgICAgICAgICBcImV2ZW50X2tleVwiLFxuICAgICAgICAgIFwiZGVkdXBlX2tleVwiLFxuICAgICAgICAgIFwiYWN0b3JfdXNlcl9pZFwiLFxuICAgICAgICAgIFwic3ViamVjdF91c2VyX2lkXCIsXG4gICAgICAgICAgXCJvcmdhbml6YXRpb25faWRcIixcbiAgICAgICAgICBcInRlYW1faWRcIixcbiAgICAgICAgICBcInNlc3Npb25faWRcIixcbiAgICAgICAgICBcInByb3ZpZGVyX2lkXCIsXG4gICAgICAgICAgXCJsb2dpbl9tZXRob2RcIixcbiAgICAgICAgICBcImlkZW50aWZpZXJcIixcbiAgICAgICAgICBcInZpc2l0b3JfaWRcIixcbiAgICAgICAgICBcInJlYXNvblwiLFxuICAgICAgICAgIFwiYWN0aW9uXCIsXG4gICAgICAgICAgXCJ0cmlnZ2VyX2NvbnRleHRcIixcbiAgICAgICAgICBcImlwX2FkZHJlc3NcIixcbiAgICAgICAgICBcImNvdW50cnlfY29kZVwiLFxuICAgICAgICAgIFwiY291bnRyeVwiLFxuICAgICAgICAgIFwiY2l0eVwiLFxuICAgICAgICAgIFwidXNlcl9hZ2VudFwiLFxuICAgICAgICAgIFwicGF5bG9hZF9qc29uXCIsXG4gICAgICAgICAgXCJvY2N1cnJlZF9hdFwiLFxuICAgICAgICAgIFwiaW5nZXN0ZWRfYXRcIixcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBlbnVtczoge1xuICAgICAgICBBdWRpdEV2ZW50T3JkZXJCeTogeyBcImlkLWRlc2NcIjogXCJJROy1nOyLoOyInFwiIH0sXG4gICAgICAgIEF1ZGl0RXZlbnRTZWFyY2hGaWVsZDogeyBpZDogXCJJRFwiIH0sXG4gICAgICAgIEF1ZGl0RXZlbnRDYXRlZ29yeToge1xuICAgICAgICAgIHVzZXI6IFwi7IKs7Jqp7J6QXCIsXG4gICAgICAgICAgc2Vzc2lvbjogXCLshLjshZhcIixcbiAgICAgICAgICBhY2NvdW50OiBcIuqzhOyglVwiLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbjogXCLsnbjspp1cIixcbiAgICAgICAgICBvcmdhbml6YXRpb246IFwi7KGw7KeBXCIsXG4gICAgICAgICAgc2VjdXJpdHk6IFwi67O07JWIXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIF0sXG4gIGFkZGl0aW9uYWxQcm9wczoge30sXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBV0EsTUFBYUEsb0JBQXlDO0NBQ3BELElBQUk7Q0FDSixNQUFNO0NBQ04sVUFBVSxDQUNSO0VBQ0UsSUFBSTtFQUNKLE9BQU87RUFDUCxPQUFPO0VBQ1AsT0FBTztHQUNMO0lBQUUsTUFBTTtJQUFNLE1BQU07SUFBVyxNQUFNO0lBQU07R0FDM0M7SUFBRSxNQUFNO0lBQVUsTUFBTTtJQUFVLFFBQVE7SUFBSSxNQUFNO0lBQVU7R0FDOUQ7SUFBRSxNQUFNO0lBQWtCLE1BQU07SUFBVSxRQUFRO0lBQUksVUFBVTtJQUFNLE1BQU07SUFBUztHQUNyRjtJQUFFLE1BQU07SUFBWSxNQUFNO0lBQVEsSUFBSTtJQUFzQixNQUFNO0lBQVE7R0FDMUU7SUFBRSxNQUFNO0lBQWMsTUFBTTtJQUFVLFFBQVE7SUFBSSxNQUFNO0lBQVU7R0FDbEU7SUFBRSxNQUFNO0lBQWEsTUFBTTtJQUFVLFFBQVE7SUFBSyxN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
@@ -826,8 +826,8 @@ export declare const admin: (options?: AdminOptions) => {
826
826
  $Infer: {
827
827
  body: {
828
828
  permissions: {
829
- readonly user?: ("update" | "delete" | "create" | "get" | "set-password" | "list" | "set-role" | "ban" | "impersonate" | "impersonate-admins")[] | undefined;
830
- readonly session?: ("delete" | "revoke" | "list")[] | undefined;
829
+ readonly user?: ("update" | "delete" | "create" | "get" | "list" | "set-role" | "ban" | "impersonate" | "impersonate-admins" | "set-password")[] | undefined;
830
+ readonly session?: ("delete" | "list" | "revoke")[] | undefined;
831
831
  };
832
832
  } & {
833
833
  userId?: string | undefined;
@@ -316,7 +316,7 @@ export declare const sso: (options?: SSOOptions) => {
316
316
  providerId: string;
317
317
  organizationId?: string | undefined;
318
318
  domain: string;
319
- }, "samlConfig" | "oidcConfig">>;
319
+ }, "oidcConfig" | "samlConfig">>;
320
320
  signInSSO: ReturnType<(options?: SSOOptions) => import("better-auth").StrictEndpoint<"/sign-in/sso", {
321
321
  method: "POST";
322
322
  body: import("zod").ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/bin/fixture.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,UAAU,qBAAqB;IAC7B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,iBAyLrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,iBAgEvE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,iBAgDzE"}
1
+ {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/bin/fixture.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGrE,UAAU,qBAAqB;IAC7B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAmBD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,iBAuTrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,iBAgEvE;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,iBAgDzE"}
@@ -15,6 +15,19 @@ init_entity_manager();
15
15
  init_data_explorer();
16
16
  init_fixture_generator();
17
17
  /**
18
+ * username을 일반적인 규칙(영문자 시작, 영문자/숫자만, 1-20자)에 맞도록 정규화합니다.
19
+ */
20
+ function sanitizeUsername(raw) {
21
+ let username = raw.toLowerCase().replace(/[^a-z0-9]/g, "");
22
+ if (username.length === 0) {
23
+ username = "user";
24
+ }
25
+ if (/^[0-9]/.test(username)) {
26
+ username = `u${username}`;
27
+ }
28
+ return username.slice(0, 20);
29
+ }
30
+ /**
18
31
  * fixture gen 명령어 - cone 메타데이터를 활용하여 자동으로 fixture를 생성합니다.
19
32
  */
20
33
  async function fixtureGenCommand(options) {
@@ -63,6 +76,103 @@ async function fixtureGenCommand(options) {
63
76
  }
64
77
  count = result.count;
65
78
  }
79
+ const hasUser = entityNames.includes("User");
80
+ if (hasUser) {
81
+ const userModeResult = await prompts({
82
+ type: "select",
83
+ name: "userMode",
84
+ message: "User 엔티티가 포함되어 있습니다. 생성 방식을 선택하세요:",
85
+ choices: [{
86
+ title: "1. 로그인 가능한 사용자 fixture 생성",
87
+ value: "login"
88
+ }, {
89
+ title: "2. 확인용 데이터(로그인 불가) 생성",
90
+ value: "dummy"
91
+ }]
92
+ });
93
+ if (!userModeResult.userMode) {
94
+ console.log(chalk.yellow("취소되었습니다."));
95
+ return;
96
+ }
97
+ if (userModeResult.userMode === "login") {
98
+ let useLLM$1 = options["use-llm"] ?? false;
99
+ if (!options["use-llm"]) {
100
+ const llmResult = await prompts({
101
+ type: "confirm",
102
+ name: "useLLM",
103
+ message: "LLM으로 더 현실적인 데이터를 생성할까요? (fixtureHint 기반, ANTHROPIC_API_KEY 필요)",
104
+ initial: false
105
+ });
106
+ useLLM$1 = llmResult.useLLM ?? false;
107
+ }
108
+ const enableLLMCache$1 = !options["no-cache"];
109
+ const DEFAULT_PASSWORD = "Test1234!";
110
+ const sourceDb = DB.getDB("r");
111
+ const generator$1 = new FixtureGenerator(sourceDb, sourceDb, "production_master", EntityManager, {
112
+ useLLM: useLLM$1,
113
+ enableLLMCache: enableLLMCache$1
114
+ });
115
+ const createdCredentials = [];
116
+ const basePath = Sonamu.config.server.auth?.basePath ?? "/api/auth";
117
+ if (useLLM$1) {
118
+ console.log(chalk.cyan(`\nLLM 모드로 로그인 가능한 사용자 ${count}명 생성 중... (캐싱: ${enableLLMCache$1 ? "ON" : "OFF"})`));
119
+ } else {
120
+ console.log(chalk.cyan(`\n로그인 가능한 사용자 ${count}명 생성 중...`));
121
+ }
122
+ for (let i = 0; i < count; i++) {
123
+ const userData = await generator$1.generate("User");
124
+ const name = String(userData.name ?? "");
125
+ const email = String(userData.email ?? "");
126
+ const username = sanitizeUsername(String(userData.username ?? ""));
127
+ const displayUsername = userData.display_username !== undefined ? String(userData.display_username) : undefined;
128
+ const body = {
129
+ name,
130
+ email,
131
+ username,
132
+ password: DEFAULT_PASSWORD
133
+ };
134
+ if (displayUsername !== undefined) {
135
+ body.display_username = displayUsername;
136
+ }
137
+ const req = new Request(`http://localhost${basePath}/sign-up/email`, {
138
+ method: "POST",
139
+ headers: { "Content-Type": "application/json" },
140
+ body: JSON.stringify(body)
141
+ });
142
+ const response = await Sonamu.auth.handler(req);
143
+ if (!response.ok) {
144
+ const responseData = await response.json();
145
+ const code = typeof responseData.code === "string" ? responseData.code : undefined;
146
+ if (code === "USER_ALREADY_EXISTS") {
147
+ console.log(chalk.yellow(` ⚠️ ${email} 이미 존재 - 건너뜁니다.`));
148
+ continue;
149
+ }
150
+ console.log(chalk.red(` ❌ ${email} 생성 실패: ${JSON.stringify(responseData)}`));
151
+ continue;
152
+ }
153
+ createdCredentials.push({
154
+ email,
155
+ password: DEFAULT_PASSWORD
156
+ });
157
+ console.log(chalk.green(` ✅ ${email} 생성 완료`));
158
+ }
159
+ if (createdCredentials.length > 0) {
160
+ const emails = createdCredentials.map((c) => c.email);
161
+ await DB.getDB("w")("users").whereIn("email", emails).update({ email_verified: true });
162
+ console.log(chalk.green(`\nemail_verified = true 업데이트 완료`));
163
+ }
164
+ if (useLLM$1) {
165
+ const stats = generator$1.getLLMCacheStats();
166
+ console.log(chalk.cyan(`[LLM Cache] 캐시 크기: ${stats.size}`));
167
+ }
168
+ console.log(chalk.green(`\n✅ ${createdCredentials.length}명의 로그인 가능한 사용자 생성 완료`));
169
+ if (createdCredentials.length > 0) {
170
+ console.log("\n생성된 계정 목록:");
171
+ console.table(createdCredentials);
172
+ }
173
+ return;
174
+ }
175
+ }
66
176
  let saveTarget = options["save-to"] || "db";
67
177
  if (!options["save-to"]) {
68
178
  const result = await prompts({
@@ -272,4 +382,4 @@ async function fixtureExploreCommand(options) {
272
382
 
273
383
  //#endregion
274
384
  export { fixtureExploreCommand, fixtureFetchCommand, fixtureGenCommand };
275
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5qcyIsIm5hbWVzIjpbImVudGl0eU5hbWVzOiBzdHJpbmdbXSIsImZpbGVuYW1lOiBzdHJpbmciLCJzdHJhdGVneTogRGF0YUV4cGxvcmVyU3RyYXRlZ3kiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2ZpeHR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IERhdGFFeHBsb3JlciB9IGZyb20gXCIuLi90ZXN0aW5nL2RhdGEtZXhwbG9yZXJcIjtcbmltcG9ydCB7IHR5cGUgRGF0YUV4cGxvcmVyU3RyYXRlZ3kgfSBmcm9tIFwiLi4vdGVzdGluZy9kYXRhLWV4cGxvcmVyXCI7XG5pbXBvcnQgeyBGaXh0dXJlR2VuZXJhdG9yIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1nZW5lcmF0b3JcIjtcblxuaW50ZXJmYWNlIEZpeHR1cmVDb21tYW5kT3B0aW9ucyB7XG4gIF8/OiBzdHJpbmdbXTtcbiAgYWxsPzogYm9vbGVhbjtcbiAgaW5jbHVkZT86IHN0cmluZztcbiAgZXhjbHVkZT86IHN0cmluZztcbiAgY291bnQ/OiBzdHJpbmc7XG4gIFwic2F2ZS10b1wiPzogc3RyaW5nO1xuICBzdHJhdGVneT86IERhdGFFeHBsb3JlclN0cmF0ZWd5O1xuICBsaW1pdD86IHN0cmluZztcbiAgXCJ1c2UtbGxtXCI/OiBib29sZWFuO1xuICBcIm5vLWNhY2hlXCI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZ2VuIOuqheugueyWtCAtIGNvbmUg66mU7YOA642w7J207YSw66W8IO2ZnOyaqe2VmOyXrCDsnpDrj5nsnLzroZwgZml4dHVyZeulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaXh0dXJlR2VuQ29tbWFuZChvcHRpb25zOiBGaXh0dXJlQ29tbWFuZE9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKCk7XG4gICAgfVxuXG4gICAgbGV0IGVudGl0eU5hbWVzOiBzdHJpbmdbXTtcblxuICAgIGlmIChvcHRpb25zLmFsbCkge1xuICAgICAgZW50aXR5TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgaWYgKG9wdGlvbnMuZXhjbHVkZSkge1xuICAgICAgICBjb25zdCBleGNsdWRlTGlzdCA9IG9wdGlvbnMuZXhjbHVkZS5zcGxpdChcIixcIikubWFwKChzOiBzdHJpbmcpID0+IHMudHJpbSgpKTtcbiAgICAgICAgZW50aXR5TmFtZXMgPSBlbnRpdHlOYW1lcy5maWx0ZXIoKG5hbWUpID0+ICFleGNsdWRlTGlzdC5pbmNsdWRlcyhuYW1lKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgIGVudGl0eU5hbWVzID0gb3B0aW9ucy5pbmNsdWRlLnNwbGl0KFwiLFwiKS5tYXAoKHM6IHN0cmluZykgPT4gcy50cmltKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBuYW1lOiBcImVudGl0aWVzXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRml4dHVyZeulvCDsg53shLHtlaAgRW50aXR566W8IOyEoO2Dne2VmOyEuOyalDpcIixcbiAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5tYXAoKGlkKSA9PiAoeyB0aXRsZTogaWQsIHZhbHVlOiBpZCB9KSksXG4gICAgICAgIG1pbjogMSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3VsdC5lbnRpdGllcyB8fCByZXN1bHQuZW50aXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVudGl0eU5hbWVzID0gcmVzdWx0LmVudGl0aWVzO1xuICAgIH1cblxuICAgIGxldCBjb3VudCA9IG9wdGlvbnMuY291bnQgPyBOdW1iZXIucGFyc2VJbnQob3B0aW9ucy5jb3VudCwgMTApIDogNTtcbiAgICBpZiAoIW9wdGlvbnMuY291bnQpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21wdHMoe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBuYW1lOiBcImNvdW50XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwi6rCBIEVudGl0eeuzhCDsg53shLEg6rCc7IiYOlwiLFxuICAgICAgICBpbml0aWFsOiA1LFxuICAgICAgICBtaW46IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuY291bnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwi7Leo7IaM65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY291bnQgPSByZXN1bHQuY291bnQ7XG4gICAgfVxuXG4gICAgbGV0IHNhdmVUYXJnZXQgPSBvcHRpb25zW1wic2F2ZS10b1wiXSB8fCBcImRiXCI7XG4gICAgaWYgKCFvcHRpb25zW1wic2F2ZS10b1wiXSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwic2F2ZVRhcmdldFwiLFxuICAgICAgICBtZXNzYWdlOiBcIuyggOyepSDrsKnsi506XCIsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICB7IHRpdGxlOiBcIkZpeHR1cmUgRELsl5Ag7KCA7J6lXCIsIHZhbHVlOiBcImRiXCIgfSxcbiAgICAgICAgICB7IHRpdGxlOiBcIu2MjOydvOuhnCDsoIDsnqUgKOyekOuPmSDtjIzsnbzrqoUpXCIsIHZhbHVlOiBcImZpbGVcIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwi7YyM7J2866GcIOyggOyepSAo7YyM7J2866qFIOyngOyglSlcIiwgdmFsdWU6IFwiZmlsZTpjdXN0b21cIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwi7KCA7J6lIOyViCDtlaggKOy2nOugpeunjClcIiwgdmFsdWU6IFwibm9uZVwiIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgc2F2ZVRhcmdldCA9IHJlc3VsdC5zYXZlVGFyZ2V0O1xuXG4gICAgICBpZiAoc2F2ZVRhcmdldCA9PT0gXCJmaWxlOmN1c3RvbVwiKSB7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgbmFtZTogXCJmaWxlbmFtZVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwi7YyM7J2866qFOlwiLFxuICAgICAgICAgIGluaXRpYWw6IFwiZml4dHVyZXMuanNvblwiLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWZpbGVuYW1lUmVzdWx0LmZpbGVuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwi7Leo7IaM65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2F2ZVRhcmdldCA9IGBmaWxlOiR7ZmlsZW5hbWVSZXN1bHQuZmlsZW5hbWV9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMTE0g7IKs7JqpIOyXrOu2gCDqsrDsoJVcbiAgICBsZXQgdXNlTExNID0gb3B0aW9uc1tcInVzZS1sbG1cIl0gPz8gZmFsc2U7XG4gICAgaWYgKCFvcHRpb25zW1widXNlLWxsbVwiXSkge1xuICAgICAgY29uc3QgbGxtUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgICBuYW1lOiBcInVzZUxMTVwiLFxuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgIFwiTExN7Jy866GcIOuNlCDtmITsi6TsoIHsnbgg642w7J207YSw66W8IOyDneyEse2VoOq5jOyalD8gKGZpeHR1cmVIaW50IOq4sOuwmCwgQU5USFJPUElDX0FQSV9LRVkg7ZWE7JqUKVwiLFxuICAgICAgICBpbml0aWFsOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgdXNlTExNID0gbGxtUmVzdWx0LnVzZUxMTSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmFibGVMTE1DYWNoZSA9ICFvcHRpb25zW1wibm8tY2FjaGVcIl07XG5cbiAgICAvLyBmaXh0dXJlIGdlbjogZml4dHVyZSBEQiDrgrTsl5DshJwg7LC47KGwIOq0gOqzhOulvCDtlbTqsrDtlZjqs6Ag7KCA7J6l7ZWp64uI64ukXG4gICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcbiAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihmaXh0dXJlRGIsIGZpeHR1cmVEYiwgXCJmaXh0dXJlXCIsIEVudGl0eU1hbmFnZXIsIHtcbiAgICAgIHVzZUxMTSxcbiAgICAgIGVuYWJsZUxMTUNhY2hlLFxuICAgIH0pO1xuXG4gICAgaWYgKHVzZUxMTSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNoYWxrLmN5YW4oXG4gICAgICAgICAgYFxcbkxMTSDrqqjrk5zroZwgJHtlbnRpdHlOYW1lcy5qb2luKFwiLCBcIil9IOyDneyEsSDspJEuLi4gKOy6kOyLsTogJHtlbmFibGVMTE1DYWNoZSA/IFwiT05cIiA6IFwiT0ZGXCJ9KWAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWVzLmpvaW4oXCIsIFwiKX0g7IOd7ISxIOykkS4uLmApKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjcyA9IGVudGl0eU5hbWVzLm1hcCgoZW50aXR5TmFtZSkgPT4gKHtcbiAgICAgIGVudGl0eTogZW50aXR5TmFtZSxcbiAgICAgIGNvdW50LFxuICAgICAgb3ZlcnJpZGVzOiB7fSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgZ2VuZXJhdG9yLmdlbmVyYXRlQmF0Y2goc3BlY3MpO1xuXG4gICAgaWYgKHVzZUxMTSkge1xuICAgICAgY29uc3Qgc3RhdHMgPSBnZW5lcmF0b3IuZ2V0TExNQ2FjaGVTdGF0cygpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgW0xMTSBDYWNoZV0g7LqQ7IucIO2BrOq4sDogJHtzdGF0cy5zaXplfWApKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgXFxu4pyFICR7cmVzdWx0cy5sZW5ndGh96rCcIGZpeHR1cmUg7IOd7ISxIOyZhOujjGApKTtcblxuICAgIGlmIChzYXZlVGFyZ2V0ID09PSBcIm5vbmVcIikge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzdWx0cywgbnVsbCwgMikpO1xuICAgIH0gZWxzZSBpZiAoc2F2ZVRhcmdldCA9PT0gXCJkYlwiKSB7XG4gICAgICAvLyBnZW5lcmF0ZUJhdGNo6rCAIOydtOuvuCBEQuyXkCDsoIDsnqXtlojsnLzrr4DroZwg67OE64+EIOyggOyepeydtCDrtojtlYTsmpTtlanri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihcIkZpeHR1cmUgRELsl5Ag7KCA7J6l65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgfSBlbHNlIGlmIChzYXZlVGFyZ2V0LnN0YXJ0c1dpdGgoXCJmaWxlXCIpKSB7XG4gICAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gICAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuXG4gICAgICBjb25zdCBmaXh0dXJlc0RpciA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInRlc3RcIiwgXCJmaXh0dXJlc1wiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaXh0dXJlc0Rpcik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgYXdhaXQgZnMubWtkaXIoZml4dHVyZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGVudGl0eU5hbWUgb2YgZW50aXR5TmFtZXMpIHtcbiAgICAgICAgY29uc3QgZW50aXR5UmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiByLmVudGl0eUlkID09PSBlbnRpdHlOYW1lKTtcblxuICAgICAgICBpZiAoZW50aXR5UmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAoc2F2ZVRhcmdldCA9PT0gXCJmaWxlXCIpIHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlOYW1lKTtcbiAgICAgICAgICBmaWxlbmFtZSA9IGAke2VudGl0eS50YWJsZX0uanNvbmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBzYXZlVGFyZ2V0LnJlcGxhY2UoXCJmaWxlOlwiLCBcIlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVwYXRoID0gcGF0aC5qb2luKGZpeHR1cmVzRGlyLCBmaWxlbmFtZSk7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgICAgICBmaWxlcGF0aCxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIGVudGl0eVJlc3VsdHMubWFwKChyKSA9PiByLmRhdGEpLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIDIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKchSAke2ZpbGVwYXRofSDsoIDsnqUg7JmE66OMYCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgY2hhbGsucmVkKFxuICAgICAgICBcIkZpeHR1cmUg7IOd7ISxIOykkSDsmKTrpZjqsIAg67Cc7IOd7ZaI7Iq164uI64ukLlxcblwiICtcbiAgICAgICAgICBcIuybkOyduDogRW50aXR5IOygleydmOuCmCBEQiDsl7DqsrDsnYQg7ZmV7J247ZW07KO87IS47JqULlxcblwiICtcbiAgICAgICAgICBcIuyekOyEuO2VnCDrgrTsmqk6XCIsXG4gICAgICApLFxuICAgICAgZXJyb3IsXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIGZpeHR1cmUgZmV0Y2gg66qF66C57Ja0IC0g7Iuk7KCcIOyatOyYgSBEQuyXkOyEnCDrjbDsnbTthLDrpbwg6rCA7KC47JmAIGZpeHR1cmXroZwg7KCA7J6l7ZWp64uI64ukLlxuICog6rSA6rOE65CcIOuNsOydtO2EsOuPhCDtlajqu5gg6rCA7KC47Jik66+A66GcIO2YhOyLpOyggeyduCDthYzsiqTtirgg642w7J207YSw66W8IO2ZleuztO2VoCDsiJgg7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml4dHVyZUZldGNoQ29tbWFuZChvcHRpb25zOiBGaXh0dXJlQ29tbWFuZE9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKCk7XG4gICAgfVxuXG4gICAgbGV0IGVudGl0eU5hbWVzOiBzdHJpbmdbXTtcblxuICAgIGlmIChvcHRpb25zLmFsbCkge1xuICAgICAgZW50aXR5TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgaWYgKG9wdGlvbnMuZXhjbHVkZSkge1xuICAgICAgICBjb25zdCBleGNsdWRlTGlzdCA9IG9wdGlvbnMuZXhjbHVkZS5zcGxpdChcIixcIikubWFwKChzOiBzdHJpbmcpID0+IHMudHJpbSgpKTtcbiAgICAgICAgZW50aXR5TmFtZXMgPSBlbnRpdHlOYW1lcy5maWx0ZXIoKG5hbWUpID0+ICFleGNsdWRlTGlzdC5pbmNsdWRlcyhuYW1lKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgIGVudGl0eU5hbWVzID0gb3B0aW9ucy5pbmNsdWRlLnNwbGl0KFwiLFwiKS5tYXAoKHM6IHN0cmluZykgPT4gcy50cmltKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBuYW1lOiBcImVudGl0aWVzXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiSW1wb3J07ZWgIEVudGl0eeulvCDshKDtg53tlZjshLjsmpQ6XCIsXG4gICAgICAgIGNob2ljZXM6IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkubWFwKChpZCkgPT4gKHsgdGl0bGU6IGlkLCB2YWx1ZTogaWQgfSkpLFxuICAgICAgICBtaW46IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuZW50aXRpZXMgfHwgcmVzdWx0LmVudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBlbnRpdHlOYW1lcyA9IHJlc3VsdC5lbnRpdGllcztcbiAgICB9XG5cbiAgICBjb25zdCBzdHJhdGVneTogRGF0YUV4cGxvcmVyU3RyYXRlZ3kgPSBvcHRpb25zLnN0cmF0ZWd5ID8/IFwicmVjZW50XCI7XG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zLmxpbWl0ID8gTnVtYmVyLnBhcnNlSW50KG9wdGlvbnMubGltaXQsIDEwKSA6IDEwO1xuXG4gICAgLy8gZml4dHVyZSBmZXRjaDogcHJvZHVjdGlvbiDrjbDsnbTthLDrpbwgZml4dHVyZSBEQuuhnCBpbXBvcnTtlanri4jri6RcbiAgICBjb25zdCBzb3VyY2VEYiA9IERCLmdldERCKFwiclwiKTsgLy8gcHJvZHVjdGlvbl9tYXN0ZXIgKOuYkOuKlCBkZXZlbG9wbWVudF9tYXN0ZXIpXG4gICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcbiAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihzb3VyY2VEYiwgZml4dHVyZURiLCBcImZpeHR1cmVcIiwgRW50aXR5TWFuYWdlcik7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWVzLmpvaW4oXCIsIFwiKX0gaW1wb3J0IOykkS4uLmApKTtcblxuICAgIGZvciAoY29uc3QgZW50aXR5TmFtZSBvZiBlbnRpdHlOYW1lcykge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGdlbmVyYXRvci5pbXBvcnRGcm9tU291cmNlKGVudGl0eU5hbWUsIHtcbiAgICAgICAgc3RyYXRlZ3ksXG4gICAgICAgIGxpbWl0LFxuICAgICAgICBpbmNsdWRlUmVsYXRpb25zOiB0cnVlLFxuICAgICAgICBtYXhEZXB0aDogMixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyFICR7ZW50aXR5TmFtZX06ICR7cmVzdWx0cy5sZW5ndGh96rCcIGltcG9ydCDsmYTro4xgKSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIFwi7Iuk7KCcIERC7JeQ7IScIOuNsOydtO2EsOulvCDqsIDsoLjsmKTripQg7KSRIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6QuXFxuXCIgK1xuICAgICAgICAgIFwi7JuQ7J24OiDshozsiqQgREIg7Jew6rKwIOyEpOyglShzb25hbXUuY29uZmlnLnRzKeydtOuCmCBFbnRpdHkg6rSA6rOEIOygleydmOulvCDtmZXsnbjtlbTso7zshLjsmpQuXFxuXCIgK1xuICAgICAgICAgIFwi7J6Q7IS47ZWcIOuCtOyaqTpcIixcbiAgICAgICksXG4gICAgICBlcnJvcixcbiAgICApO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogZml4dHVyZSBleHBsb3JlIOuqheugueyWtCAtIERC7J2YIOyLpOygnCDrjbDsnbTthLDrpbwg7KGw7ZqM7ZWY7JesIO2ZleyduO2VqeuLiOuLpC5cbiAqIOyggOyepe2VmOyngCDslYrqs6Ag7KGw7ZqM66eMIO2VmOuvgOuhnCDrjbDsnbTthLDrpbwg67mg66W06rKMIO2ZleyduO2VoCDrlYwg7Jyg7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml4dHVyZUV4cGxvcmVDb21tYW5kKG9wdGlvbnM6IEZpeHR1cmVDb21tYW5kT3B0aW9ucykge1xuICB0cnkge1xuICAgIGlmICghRW50aXR5TWFuYWdlci5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIGF3YWl0IEVudGl0eU1hbmFnZXIuYXV0b2xvYWQoKTtcbiAgICB9XG5cbiAgICBsZXQgZW50aXR5TmFtZSA9IG9wdGlvbnMuaW5jbHVkZTtcblxuICAgIGlmICghZW50aXR5TmFtZSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwiZW50aXR5XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwi7YOQ7IOJ7ZWgIEVudGl0eTpcIixcbiAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5tYXAoKGlkKSA9PiAoeyB0aXRsZTogaWQsIHZhbHVlOiBpZCB9KSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuZW50aXR5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVudGl0eU5hbWUgPSByZXN1bHQuZW50aXR5O1xuICAgIH1cblxuICAgIGlmICghZW50aXR5TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW50aXR5IG5hbWUgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyYXRlZ3k6IERhdGFFeHBsb3JlclN0cmF0ZWd5ID0gb3B0aW9ucy5zdHJhdGVneSA/PyBcInNhbXBsZVwiO1xuICAgIGNvbnN0IGxpbWl0ID0gb3B0aW9ucy5saW1pdCA/IE51bWJlci5wYXJzZUludChvcHRpb25zLmxpbWl0LCAxMCkgOiAxMDtcblxuICAgIGNvbnN0IGRiID0gREIuZ2V0REIoXCJyXCIpO1xuICAgIGNvbnN0IGV4cGxvcmVyID0gbmV3IERhdGFFeHBsb3JlcihkYiwgRW50aXR5TWFuYWdlcik7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGV4cGxvcmVyLmV4cGxvcmUoZW50aXR5TmFtZSwgeyBzdHJhdGVneSwgbGltaXQgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWV9ICR7ZGF0YS5sZW5ndGh96rCcIOyhsO2ajCDsmYTro4w6YCkpO1xuICAgIGNvbnNvbGUudGFibGUoZGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgXCLrjbDsnbTthLAg7KGw7ZqMIOykkSDsmKTrpZjqsIAg67Cc7IOd7ZaI7Iq164uI64ukLlxcblwiICtcbiAgICAgICAgICBcIuybkOyduDogREIg7Jew6rKw7J2064KYIEVudGl0eSDsoJXsnZjrpbwg7ZmV7J247ZW07KO87IS47JqULlxcblwiICtcbiAgICAgICAgICBcIuyekOyEuO2VnCDrgrTsmqk6XCIsXG4gICAgICApLFxuICAgICAgZXJyb3IsXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O2FBR3VDO1NBQ0g7V0FDa0I7cUJBQ0c7b0JBQ0Q7d0JBRVE7Ozs7QUFrQmhFLGVBQXNCLGtCQUFrQixTQUFnQztBQUN0RSxLQUFJO0FBQ0YsTUFBSSxDQUFDLGNBQWMsY0FBYztBQUMvQixTQUFNLGNBQWMsVUFBVTs7RUFHaEMsSUFBSUE7QUFFSixNQUFJLFFBQVEsS0FBSztBQUNmLGlCQUFjLGNBQWMsV0FBVztBQUN2QyxPQUFJLFFBQVEsU0FBUztJQUNuQixNQUFNLGNBQWMsUUFBUSxRQUFRLE1BQU0sSUFBSSxDQUFDLEtBQUssTUFBYyxFQUFFLE1BQU0sQ0FBQztBQUMzRSxrQkFBYyxZQUFZLFFBQVEsU0FBUyxDQUFDLFlBQVksU0FBUyxLQUFLLENBQUM7O2FBRWhFLFFBQVEsU0FBUztBQUMxQixpQkFBYyxRQUFRLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxNQUFjLEVBQUUsTUFBTSxDQUFDO1NBQ2hFO0dBQ0wsTUFBTSxTQUFTLE1BQU0sUUFBUTtJQUMzQixNQUFNO0lBQ04sTUFBTTtJQUNOLFNBQVM7SUFDVCxTQUFTLGNBQWMsV0FBVyxDQUFDLEtBQUssUUFBUTtLQUFFLE9BQU87S0FBSSxPQUFPO0tBQUksRUFBRTtJQUMxRSxLQUFLO0lBQ04sQ0FBQztBQUVGLE9BQUksQ0FBQyxPQUFPLFlBQVksT0FBTyxTQUFTLFdBQVcsR0FBRztBQUNwRCxZQUFRLElBQUksTUFBTSxPQUFPLFdBQVcsQ0FBQztBQUNyQzs7QUFHRixpQkFBYyxPQUFPOztFQUd2QixJQUFJLFFBQVEsUUFBUSxRQUFRLE9BQU8sU0FBUyxRQUFRLE9BQU8sR0FBRyxHQUFHO0FBQ2pFLE1BQUksQ0FBQyxRQUFRLE9BQU87R0FDbEIsTUFBTSxTQUFTLE1BQU0sUUFBUTtJQUMzQixNQUFNO0lBQ04sTUFBTTtJQUNOLFNBQVM7SUFDVCxTQUFTO0lBQ1QsS0FBSztJQUNOLENBQUM7QUFFRixPQUFJLENBQUMsT0FBTyxPQUFPO0FBQ2pCLFlBQVEsSUFBSSxNQUFNLE9BQU8sV0FBVyxDQUFDO0FBQ3JDOztBQUdGLFdBQVEsT0FBTzs7RUFHakIsSUFBSSxhQUFhLFFBQVEsY0FBYztBQUN2QyxNQUFJLENBQUMsUUFBUSxZQUFZO0dBQ3ZCLE1BQU0sU0FBUyxNQUFNLFFBQVE7SUFDM0IsTUFBTTtJQUNOLE1BQU07SUFDTixTQUFTO0lBQ1QsU0FBUztLQUNQO01BQUUsT0FBTztNQUFrQixPQUFPO01BQU07S0FDeEM7TUFBRSxPQUFPO01BQW1CLE9BQU87TUFBUTtLQUMzQztNQUFFLE9BQU87TUFBbUIsT0FBTztNQUFlO0tBQ2xEO01BQUUsT0FBTztNQUFnQixPQUFPO01BQVE7S0FDekM7SUFDRixDQUFDO0FBRUYsZ0JBQWEsT0FBTztBQUVwQixPQUFJLGVBQWUsZUFBZTtJQUNoQyxNQUFNLGlCQUFpQixNQUFNLFFBQVE7S0FDbkMsTUFBTTtLQUNOLE1BQU07S0FDTixTQUFTO0tBQ1QsU0FBUztLQUNWLENBQUM7QUFFRixRQUFJLENBQUMsZUFBZSxVQUFVO0FBQzVCLGFBQVEsSUFBSSxNQUFNLE9BQU8sV0FBVyxDQUFDO0FBQ3JDOztBQUdGLGlCQUFhLFFBQVEsZUFBZTs7O0VBS3hDLElBQUksU0FBUyxRQUFRLGNBQWM7QUFDbkMsTUFBSSxDQUFDLFFBQVEsWUFBWTtHQUN2QixNQUFNLFlBQVksTUFBTSxRQUFRO0lBQzlCLE1BQU07SUFDTixNQUFNO0lBQ04sU0FDRTtJQUNGLFNBQVM7SUFDVixDQUFDO0FBQ0YsWUFBUyxVQUFVLFVBQVU7O0VBRy9CLE1BQU0saUJBQWlCLENBQUMsUUFBUTtFQUdoQyxNQUFNLFlBQVksbUJBQW1CLE9BQU8sU0FBUyxRQUFRO0VBQzdELE1BQU0sWUFBWSxJQUFJLGlCQUFpQixXQUFXLFdBQVcsV0FBVyxlQUFlO0dBQ3JGO0dBQ0E7R0FDRCxDQUFDO0FBRUYsTUFBSSxRQUFRO0FBQ1YsV0FBUSxJQUNOLE1BQU0sS0FDSixhQUFhLFlBQVksS0FBSyxLQUFLLENBQUMsZ0JBQWdCLGlCQUFpQixPQUFPLE1BQU0sR0FDbkYsQ0FDRjtTQUNJO0FBQ0wsV0FBUSxJQUFJLE1BQU0sS0FBSyxLQUFLLFlBQVksS0FBSyxLQUFLLENBQUMsVUFBVSxDQUFDOztFQUdoRSxNQUFNLFFBQVEsWUFBWSxLQUFLLGdCQUFnQjtHQUM3QyxRQUFRO0dBQ1I7R0FDQSxXQUFXLEVBQUU7R0FDZCxFQUFFO0VBRUgsTUFBTSxVQUFVLE1BQU0sVUFBVSxjQUFjLE1BQU07QUFFcEQsTUFBSSxRQUFRO0dBQ1YsTUFBTSxRQUFRLFVBQVUsa0JBQWtCO0FBQzFDLFdBQVEsSUFBSSxNQUFNLEtBQUssc0JBQXNCLE1BQU0sT0FBTyxDQUFDOztBQUc3RCxVQUFRLElBQUksTUFBTSxNQUFNLE9BQU8sUUFBUSxPQUFPLGlCQUFpQixDQUFDO0FBRWhFLE1BQUksZUFBZSxRQUFRO0FBQ3pCLFdBQVEsSUFBSSxLQUFLLFVBQVUsU0FBUyxNQUFNLEVBQUUsQ0FBQzthQUNwQyxlQUFlLE1BQU07QUFFOUIsV0FBUSxJQUFJLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQzthQUN2QyxXQUFXLFdBQVcsT0FBTyxFQUFFO0dBQ3hDLE1BQU0sS0FBSyxNQUFNLE9BQU87R0FDeEIsTUFBTSxPQUFPLE1BQU0sT0FBTztHQUUxQixNQUFNLGNBQWMsS0FBSyxLQUFLLFFBQVEsS0FBSyxFQUFFLFFBQVEsV0FBVztBQUNoRSxPQUFJO0FBQ0YsVUFBTSxHQUFHLE9BQU8sWUFBWTtXQUN0QjtBQUNOLFVBQU0sR0FBRyxNQUFNLGFBQWEsRUFBRSxXQUFXLE1BQU0sQ0FBQzs7QUFHbEQsUUFBSyxNQUFNLGNBQWMsYUFBYTtJQUNwQyxNQUFNLGdCQUFnQixRQUFRLFFBQVEsTUFBTSxFQUFFLGFBQWEsV0FBVztBQUV0RSxRQUFJLGNBQWMsV0FBVyxHQUFHO0FBQzlCOztJQUdGLElBQUlDO0FBQ0osUUFBSSxlQUFlLFFBQVE7S0FDekIsTUFBTSxTQUFTLGNBQWMsSUFBSSxXQUFXO0FBQzVDLGdCQUFXLEdBQUcsT0FBTyxNQUFNO1dBQ3RCO0FBQ0wsZ0JBQVcsV0FBVyxRQUFRLFNBQVMsR0FBRzs7SUFHNUMsTUFBTSxXQUFXLEtBQUssS0FBSyxhQUFhLFNBQVM7QUFDakQsVUFBTSxHQUFHLFVBQ1AsVUFDQSxLQUFLLFVBQ0gsY0FBYyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQ2hDLE1BQ0EsRUFDRCxDQUNGO0FBQ0QsWUFBUSxJQUFJLE1BQU0sTUFBTSxLQUFLLFNBQVMsUUFBUSxDQUFDOzs7VUFHNUMsT0FBTztBQUNkLFVBQVEsTUFDTixNQUFNLElBQ0osK0JBQ0Usb0NBQ0EsVUFDSCxFQUNELE1BQ0Q7QUFDRCxRQUFNOzs7Ozs7O0FBUVYsZUFBc0Isb0JBQW9CLFNBQWdDO0FBQ3hFLEtBQUk7QUFDRixNQUFJLENBQUMsY0FBYyxjQUFjO0FBQy9CLFNBQU0sY0FBYyxVQUFVOztFQUdoQyxJQUFJRDtBQUVKLE1BQUksUUFBUSxLQUFLO0FBQ2YsaUJBQWMsY0FBYyxXQUFXO0FBQ3ZDLE9BQUksUUFBUSxTQUFTO0lBQ25CLE1BQU0sY0FBYyxRQUFRLFFBQVEsTUFBTSxJQUFJLENBQUMsS0FBSyxNQUFjLEVBQUUsTUFBTSxDQUFDO0FBQzNFLGtCQUFjLFlBQVksUUFBUSxTQUFTLENBQUMsWUFBWSxTQUFTLEtBQUssQ0FBQzs7YUFFaEUsUUFBUSxTQUFTO0FBQzFCLGlCQUFjLFFBQVEsUUFBUSxNQUFNLElBQUksQ0FBQyxLQUFLLE1BQWMsRUFBRSxNQUFNLENBQUM7U0FDaEU7R0FDTCxNQUFNLFNBQVMsTUFBTSxRQUFRO0lBQzNCLE1BQU07SUFDTixNQUFNO0lBQ04sU0FBUztJQUNULFNBQVMsY0FBYyxXQUFXLENBQUMsS0FBSyxRQUFRO0tBQUUsT0FBTztLQUFJLE9BQU87S0FBSSxFQUFFO0lBQzFFLEtBQUs7SUFDTixDQUFDO0FBRUYsT0FBSSxDQUFDLE9BQU8sWUFBWSxPQUFPLFNBQVMsV0FBVyxHQUFHO0FBQ3BELFlBQVEsSUFBSSxNQUFNLE9BQU8sV0FBVyxDQUFDO0FBQ3JDOztBQUdGLGlCQUFjLE9BQU87O0VBR3ZCLE1BQU1FLFdBQWlDLFFBQVEsWUFBWTtFQUMzRCxNQUFNLFFBQVEsUUFBUSxRQUFRLE9BQU8sU0FBUyxRQUFRLE9BQU8sR0FBRyxHQUFHO0VBR25FLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSTtFQUM5QixNQUFNLFlBQVksbUJBQW1CLE9BQU8sU0FBUyxRQUFRO0VBQzdELE1BQU0sWUFBWSxJQUFJLGlCQUFpQixVQUFVLFdBQVcsV0FBVyxjQUFjO0FBRXJGLFVBQVEsSUFBSSxNQUFNLEtBQUssS0FBSyxZQUFZLEtBQUssS0FBSyxDQUFDLGNBQWMsQ0FBQztBQUVsRSxPQUFLLE1BQU0sY0FBYyxhQUFhO0dBQ3BDLE1BQU0sVUFBVSxNQUFNLFVBQVUsaUJBQWlCLFlBQVk7SUFDM0Q7SUFDQTtJQUNBLGtCQUFrQjtJQUNsQixVQUFVO0lBQ1gsQ0FBQztBQUVGLFdBQVEsSUFBSSxNQUFNLE1BQU0sS0FBSyxXQUFXLElBQUksUUFBUSxPQUFPLGFBQWEsQ0FBQzs7VUFFcEUsT0FBTztBQUNkLFVBQVEsTUFDTixNQUFNLElBQ0osc0NBQ0UsZ0VBQ0EsVUFDSCxFQUNELE1BQ0Q7QUFDRCxRQUFNOzs7Ozs7O0FBUVYsZUFBc0Isc0JBQXNCLFNBQWdDO0FBQzFFLEtBQUk7QUFDRixNQUFJLENBQUMsY0FBYyxjQUFjO0FBQy9CLFNBQU0sY0FBYyxVQUFVOztFQUdoQyxJQUFJLGFBQWEsUUFBUTtBQUV6QixNQUFJLENBQUMsWUFBWTtHQUNmLE1BQU0sU0FBUyxNQUFNLFFBQVE7SUFDM0IsTUFBTTtJQUNOLE1BQU07SUFDTixTQUFTO0lBQ1QsU0FBUyxjQUFjLFdBQVcsQ0FBQyxLQUFLLFFBQVE7S0FBRSxPQUFPO0tBQUksT0FBTztLQUFJLEVBQUU7SUFDM0UsQ0FBQztBQUVGLE9BQUksQ0FBQyxPQUFPLFFBQVE7QUFDbEIsWUFBUSxJQUFJLE1BQU0sT0FBTyxXQUFXLENBQUM7QUFDckM7O0FBR0YsZ0JBQWEsT0FBTzs7QUFHdEIsTUFBSSxDQUFDLFlBQVk7QUFDZixTQUFNLElBQUksTUFBTSwwQkFBMEI7O0VBRzVDLE1BQU1BLFdBQWlDLFFBQVEsWUFBWTtFQUMzRCxNQUFNLFFBQVEsUUFBUSxRQUFRLE9BQU8sU0FBUyxRQUFRLE9BQU8sR0FBRyxHQUFHO0VBRW5FLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSTtFQUN4QixNQUFNLFdBQVcsSUFBSSxhQUFhLElBQUksY0FBYztFQUNwRCxNQUFNLE9BQU8sTUFBTSxTQUFTLFFBQVEsWUFBWTtHQUFFO0dBQVU7R0FBTyxDQUFDO0FBRXBFLFVBQVEsSUFBSSxNQUFNLEtBQUssS0FBSyxXQUFXLEdBQUcsS0FBSyxPQUFPLFVBQVUsQ0FBQztBQUNqRSxVQUFRLE1BQU0sS0FBSztVQUNaLE9BQU87QUFDZCxVQUFRLE1BQ04sTUFBTSxJQUNKLDJCQUNFLHFDQUNBLFVBQ0gsRUFDRCxNQUNEO0FBQ0QsUUFBTSJ9
385
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5qcyIsIm5hbWVzIjpbImVudGl0eU5hbWVzOiBzdHJpbmdbXSIsInVzZUxMTSIsImVuYWJsZUxMTUNhY2hlIiwiZ2VuZXJhdG9yIiwiY3JlYXRlZENyZWRlbnRpYWxzOiBBcnJheTx7IGVtYWlsOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfT4iLCJib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsImZpbGVuYW1lOiBzdHJpbmciLCJzdHJhdGVneTogRGF0YUV4cGxvcmVyU3RyYXRlZ3kiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2ZpeHR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IERhdGFFeHBsb3JlciB9IGZyb20gXCIuLi90ZXN0aW5nL2RhdGEtZXhwbG9yZXJcIjtcbmltcG9ydCB7IHR5cGUgRGF0YUV4cGxvcmVyU3RyYXRlZ3kgfSBmcm9tIFwiLi4vdGVzdGluZy9kYXRhLWV4cGxvcmVyXCI7XG5pbXBvcnQgeyBGaXh0dXJlR2VuZXJhdG9yIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1nZW5lcmF0b3JcIjtcblxuaW50ZXJmYWNlIEZpeHR1cmVDb21tYW5kT3B0aW9ucyB7XG4gIF8/OiBzdHJpbmdbXTtcbiAgYWxsPzogYm9vbGVhbjtcbiAgaW5jbHVkZT86IHN0cmluZztcbiAgZXhjbHVkZT86IHN0cmluZztcbiAgY291bnQ/OiBzdHJpbmc7XG4gIFwic2F2ZS10b1wiPzogc3RyaW5nO1xuICBzdHJhdGVneT86IERhdGFFeHBsb3JlclN0cmF0ZWd5O1xuICBsaW1pdD86IHN0cmluZztcbiAgXCJ1c2UtbGxtXCI/OiBib29sZWFuO1xuICBcIm5vLWNhY2hlXCI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIHVzZXJuYW1l7J2EIOydvOuwmOyggeyduCDqt5zsuZko7JiB66y47J6QIOyLnOyekSwg7JiB66y47J6QL+yIq+yekOunjCwgMS0yMOyekCnsl5Ag66ee64+E66GdIOygleq3nO2ZlO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVVc2VybmFtZShyYXc6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIOyGjOusuOyekCDrs4DtmZgg7ZuEIOyYgeusuOyekC/siKvsnpAg7Jm4IOusuOyekCDsoJzqsbBcbiAgbGV0IHVzZXJuYW1lID0gcmF3LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csIFwiXCIpO1xuICBpZiAodXNlcm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgdXNlcm5hbWUgPSBcInVzZXJcIjtcbiAgfVxuICAvLyDssqsg6riA7J6Q6rCAIOyIq+yekOuptCAndScg7KCR65GQ7Ja0IOy2lOqwgFxuICBpZiAoL15bMC05XS8udGVzdCh1c2VybmFtZSkpIHtcbiAgICB1c2VybmFtZSA9IGB1JHt1c2VybmFtZX1gO1xuICB9XG4gIC8vIDIw7J6QIOy0iOqzvCDsi5wgdHJ1bmNhdGVcbiAgcmV0dXJuIHVzZXJuYW1lLnNsaWNlKDAsIDIwKTtcbn1cblxuLyoqXG4gKiBmaXh0dXJlIGdlbiDrqoXroLnslrQgLSBjb25lIOuplO2DgOuNsOydtO2EsOulvCDtmZzsmqntlZjsl6wg7J6Q64+Z7Jy866GcIGZpeHR1cmXrpbwg7IOd7ISx7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml4dHVyZUdlbkNvbW1hbmQob3B0aW9uczogRml4dHVyZUNvbW1hbmRPcHRpb25zKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFFbnRpdHlNYW5hZ2VyLmlzQXV0b2xvYWRlZCkge1xuICAgICAgYXdhaXQgRW50aXR5TWFuYWdlci5hdXRvbG9hZCgpO1xuICAgIH1cblxuICAgIGxldCBlbnRpdHlOYW1lczogc3RyaW5nW107XG5cbiAgICBpZiAob3B0aW9ucy5hbGwpIHtcbiAgICAgIGVudGl0eU5hbWVzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICAgIGlmIChvcHRpb25zLmV4Y2x1ZGUpIHtcbiAgICAgICAgY29uc3QgZXhjbHVkZUxpc3QgPSBvcHRpb25zLmV4Y2x1ZGUuc3BsaXQoXCIsXCIpLm1hcCgoczogc3RyaW5nKSA9PiBzLnRyaW0oKSk7XG4gICAgICAgIGVudGl0eU5hbWVzID0gZW50aXR5TmFtZXMuZmlsdGVyKChuYW1lKSA9PiAhZXhjbHVkZUxpc3QuaW5jbHVkZXMobmFtZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pbmNsdWRlKSB7XG4gICAgICBlbnRpdHlOYW1lcyA9IG9wdGlvbnMuaW5jbHVkZS5zcGxpdChcIixcIikubWFwKChzOiBzdHJpbmcpID0+IHMudHJpbSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgbmFtZTogXCJlbnRpdGllc1wiLFxuICAgICAgICBtZXNzYWdlOiBcIkZpeHR1cmXrpbwg7IOd7ISx7ZWgIEVudGl0eeulvCDshKDtg53tlZjshLjsmpQ6XCIsXG4gICAgICAgIGNob2ljZXM6IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkubWFwKChpZCkgPT4gKHsgdGl0bGU6IGlkLCB2YWx1ZTogaWQgfSkpLFxuICAgICAgICBtaW46IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuZW50aXRpZXMgfHwgcmVzdWx0LmVudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBlbnRpdHlOYW1lcyA9IHJlc3VsdC5lbnRpdGllcztcbiAgICB9XG5cbiAgICBsZXQgY291bnQgPSBvcHRpb25zLmNvdW50ID8gTnVtYmVyLnBhcnNlSW50KG9wdGlvbnMuY291bnQsIDEwKSA6IDU7XG4gICAgaWYgKCFvcHRpb25zLmNvdW50KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgbmFtZTogXCJjb3VudFwiLFxuICAgICAgICBtZXNzYWdlOiBcIuqwgSBFbnRpdHnrs4Qg7IOd7ISxIOqwnOyImDpcIixcbiAgICAgICAgaW5pdGlhbDogNSxcbiAgICAgICAgbWluOiAxLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzdWx0LmNvdW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvdW50ID0gcmVzdWx0LmNvdW50O1xuICAgIH1cblxuICAgIC8vIFVzZXIg7JeU7Yuw7Yuw6rCAIO2PrO2VqOuQnCDqsr3smrA6IOuhnOq3uOyduCDqsIDriqUv7ZmV7J247JqpIOu2hOq4sCDshKDtg51cbiAgICBjb25zdCBoYXNVc2VyID0gZW50aXR5TmFtZXMuaW5jbHVkZXMoXCJVc2VyXCIpO1xuXG4gICAgaWYgKGhhc1VzZXIpIHtcbiAgICAgIGNvbnN0IHVzZXJNb2RlUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwidXNlck1vZGVcIixcbiAgICAgICAgbWVzc2FnZTogXCJVc2VyIOyXlO2LsO2LsOqwgCDtj6ztlajrkJjslrQg7J6I7Iq164uI64ukLiDsg53shLEg67Cp7Iud7J2EIOyEoO2Dne2VmOyEuOyalDpcIixcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgdGl0bGU6IFwiMS4g66Gc6re47J24IOqwgOuKpe2VnCDsgqzsmqnsnpAgZml4dHVyZSDsg53shLFcIiwgdmFsdWU6IFwibG9naW5cIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwiMi4g7ZmV7J247JqpIOuNsOydtO2EsCjroZzqt7jsnbgg67aI6rCAKSDsg53shLFcIiwgdmFsdWU6IFwiZHVtbXlcIiB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghdXNlck1vZGVSZXN1bHQudXNlck1vZGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwi7Leo7IaM65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHVzZXJNb2RlUmVzdWx0LnVzZXJNb2RlID09PSBcImxvZ2luXCIpIHtcbiAgICAgICAgLy8gTExNIOyCrOyaqSDsl6zrtoBcbiAgICAgICAgbGV0IHVzZUxMTSA9IG9wdGlvbnNbXCJ1c2UtbGxtXCJdID8/IGZhbHNlO1xuICAgICAgICBpZiAoIW9wdGlvbnNbXCJ1c2UtbGxtXCJdKSB7XG4gICAgICAgICAgY29uc3QgbGxtUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgICAgICB0eXBlOiBcImNvbmZpcm1cIixcbiAgICAgICAgICAgIG5hbWU6IFwidXNlTExNXCIsXG4gICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICBcIkxMTeycvOuhnCDrjZQg7ZiE7Iuk7KCB7J24IOuNsOydtO2EsOulvCDsg53shLHtlaDquYzsmpQ/IChmaXh0dXJlSGludCDquLDrsJgsIEFOVEhST1BJQ19BUElfS0VZIO2VhOyalClcIixcbiAgICAgICAgICAgIGluaXRpYWw6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHVzZUxMTSA9IGxsbVJlc3VsdC51c2VMTE0gPz8gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbmFibGVMTE1DYWNoZSA9ICFvcHRpb25zW1wibm8tY2FjaGVcIl07XG4gICAgICAgIGNvbnN0IERFRkFVTFRfUEFTU1dPUkQgPSBcIlRlc3QxMjM0IVwiO1xuXG4gICAgICAgIC8vIOuhnOq3uOyduCDqsIDriqUg6rK966Gc7JeQ7ISc64qUIHNvdXJjZURi66GcIGRldmVsb3BtZW50X21hc3RlciDsgqzsmqlcbiAgICAgICAgY29uc3Qgc291cmNlRGIgPSBEQi5nZXREQihcInJcIik7XG4gICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBGaXh0dXJlR2VuZXJhdG9yKFxuICAgICAgICAgIHNvdXJjZURiLFxuICAgICAgICAgIHNvdXJjZURiLFxuICAgICAgICAgIFwicHJvZHVjdGlvbl9tYXN0ZXJcIixcbiAgICAgICAgICBFbnRpdHlNYW5hZ2VyLFxuICAgICAgICAgIHsgdXNlTExNLCBlbmFibGVMTE1DYWNoZSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRDcmVkZW50aWFsczogQXJyYXk8eyBlbWFpbDogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH0+ID0gW107XG4gICAgICAgIGNvbnN0IGJhc2VQYXRoID0gU29uYW11LmNvbmZpZy5zZXJ2ZXIuYXV0aD8uYmFzZVBhdGggPz8gXCIvYXBpL2F1dGhcIjtcblxuICAgICAgICBpZiAodXNlTExNKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBjaGFsay5jeWFuKFxuICAgICAgICAgICAgICBgXFxuTExNIOuqqOuTnOuhnCDroZzqt7jsnbgg6rCA64ql7ZWcIOyCrOyaqeyekCAke2NvdW50feuqhSDsg53shLEg7KSRLi4uICjsupDsi7E6ICR7ZW5hYmxlTExNQ2FjaGUgPyBcIk9OXCIgOiBcIk9GRlwifSlgLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFxcbuuhnOq3uOyduCDqsIDriqXtlZwg7IKs7Jqp7J6QICR7Y291bnR966qFIOyDneyEsSDspJEuLi5gKSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICBjb25zdCB1c2VyRGF0YSA9IGF3YWl0IGdlbmVyYXRvci5nZW5lcmF0ZShcIlVzZXJcIik7XG5cbiAgICAgICAgICBjb25zdCBuYW1lID0gU3RyaW5nKHVzZXJEYXRhLm5hbWUgPz8gXCJcIik7XG4gICAgICAgICAgY29uc3QgZW1haWwgPSBTdHJpbmcodXNlckRhdGEuZW1haWwgPz8gXCJcIik7XG4gICAgICAgICAgY29uc3QgdXNlcm5hbWUgPSBzYW5pdGl6ZVVzZXJuYW1lKFN0cmluZyh1c2VyRGF0YS51c2VybmFtZSA/PyBcIlwiKSk7XG4gICAgICAgICAgY29uc3QgZGlzcGxheVVzZXJuYW1lID1cbiAgICAgICAgICAgIHVzZXJEYXRhLmRpc3BsYXlfdXNlcm5hbWUgIT09IHVuZGVmaW5lZCA/IFN0cmluZyh1c2VyRGF0YS5kaXNwbGF5X3VzZXJuYW1lKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGNvbnN0IGJvZHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgICBwYXNzd29yZDogREVGQVVMVF9QQVNTV09SRCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChkaXNwbGF5VXNlcm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYm9keS5kaXNwbGF5X3VzZXJuYW1lID0gZGlzcGxheVVzZXJuYW1lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlcSA9IG5ldyBSZXF1ZXN0KGBodHRwOi8vbG9jYWxob3N0JHtiYXNlUGF0aH0vc2lnbi11cC9lbWFpbGAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgU29uYW11LmF1dGguaGFuZGxlcihyZXEpO1xuXG4gICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gdHlwZW9mIHJlc3BvbnNlRGF0YS5jb2RlID09PSBcInN0cmluZ1wiID8gcmVzcG9uc2VEYXRhLmNvZGUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gXCJVU0VSX0FMUkVBRFlfRVhJU1RTXCIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAgIOKaoO+4jyAgJHtlbWFpbH0g7J2066+4IOyhtOyerCAtIOqxtOuEiOucgeuLiOuLpC5gKSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAgIOKdjCAke2VtYWlsfSDsg53shLEg7Iuk7YyoOiAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlRGF0YSl9YCkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3JlYXRlZENyZWRlbnRpYWxzLnB1c2goeyBlbWFpbCwgcGFzc3dvcmQ6IERFRkFVTFRfUEFTU1dPUkQgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYCAg4pyFICR7ZW1haWx9IOyDneyEsSDsmYTro4xgKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbWFpbF92ZXJpZmllZCA9IHRydWUg7KeB7KCRIOyXheuNsOydtO2KuCAoZGV2IO2OuOydmClcbiAgICAgICAgaWYgKGNyZWF0ZWRDcmVkZW50aWFscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZW1haWxzID0gY3JlYXRlZENyZWRlbnRpYWxzLm1hcCgoYykgPT4gYy5lbWFpbCk7XG4gICAgICAgICAgYXdhaXQgREIuZ2V0REIoXCJ3XCIpKFwidXNlcnNcIikud2hlcmVJbihcImVtYWlsXCIsIGVtYWlscykudXBkYXRlKHsgZW1haWxfdmVyaWZpZWQ6IHRydWUgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYFxcbmVtYWlsX3ZlcmlmaWVkID0gdHJ1ZSDsl4XrjbDsnbTtirgg7JmE66OMYCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZUxMTSkge1xuICAgICAgICAgIGNvbnN0IHN0YXRzID0gZ2VuZXJhdG9yLmdldExMTUNhY2hlU3RhdHMoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBbTExNIENhY2hlXSDsupDsi5wg7YGs6riwOiAke3N0YXRzLnNpemV9YCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY2hhbGsuZ3JlZW4oYFxcbuKchSAke2NyZWF0ZWRDcmVkZW50aWFscy5sZW5ndGh966qF7J2YIOuhnOq3uOyduCDqsIDriqXtlZwg7IKs7Jqp7J6QIOyDneyEsSDsmYTro4xgKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNyZWF0ZWRDcmVkZW50aWFscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJcXG7sg53shLHrkJwg6rOE7KCVIOuqqeuhnTpcIik7XG4gICAgICAgICAgY29uc29sZS50YWJsZShjcmVhdGVkQ3JlZGVudGlhbHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gdXNlck1vZGUgPT09IFwiZHVtbXlcIjog6riw7KG0IGdlbmVyYXRlQmF0Y2goKSDtnZDrpoQg6rOE7IaNXG4gICAgfVxuXG4gICAgbGV0IHNhdmVUYXJnZXQgPSBvcHRpb25zW1wic2F2ZS10b1wiXSB8fCBcImRiXCI7XG4gICAgaWYgKCFvcHRpb25zW1wic2F2ZS10b1wiXSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwic2F2ZVRhcmdldFwiLFxuICAgICAgICBtZXNzYWdlOiBcIuyggOyepSDrsKnsi506XCIsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICB7IHRpdGxlOiBcIkZpeHR1cmUgRELsl5Ag7KCA7J6lXCIsIHZhbHVlOiBcImRiXCIgfSxcbiAgICAgICAgICB7IHRpdGxlOiBcIu2MjOydvOuhnCDsoIDsnqUgKOyekOuPmSDtjIzsnbzrqoUpXCIsIHZhbHVlOiBcImZpbGVcIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwi7YyM7J2866GcIOyggOyepSAo7YyM7J2866qFIOyngOyglSlcIiwgdmFsdWU6IFwiZmlsZTpjdXN0b21cIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwi7KCA7J6lIOyViCDtlaggKOy2nOugpeunjClcIiwgdmFsdWU6IFwibm9uZVwiIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgc2F2ZVRhcmdldCA9IHJlc3VsdC5zYXZlVGFyZ2V0O1xuXG4gICAgICBpZiAoc2F2ZVRhcmdldCA9PT0gXCJmaWxlOmN1c3RvbVwiKSB7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgbmFtZTogXCJmaWxlbmFtZVwiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwi7YyM7J2866qFOlwiLFxuICAgICAgICAgIGluaXRpYWw6IFwiZml4dHVyZXMuanNvblwiLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWZpbGVuYW1lUmVzdWx0LmZpbGVuYW1lKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwi7Leo7IaM65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2F2ZVRhcmdldCA9IGBmaWxlOiR7ZmlsZW5hbWVSZXN1bHQuZmlsZW5hbWV9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMTE0g7IKs7JqpIOyXrOu2gCDqsrDsoJVcbiAgICBsZXQgdXNlTExNID0gb3B0aW9uc1tcInVzZS1sbG1cIl0gPz8gZmFsc2U7XG4gICAgaWYgKCFvcHRpb25zW1widXNlLWxsbVwiXSkge1xuICAgICAgY29uc3QgbGxtUmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgICBuYW1lOiBcInVzZUxMTVwiLFxuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgIFwiTExN7Jy866GcIOuNlCDtmITsi6TsoIHsnbgg642w7J207YSw66W8IOyDneyEse2VoOq5jOyalD8gKGZpeHR1cmVIaW50IOq4sOuwmCwgQU5USFJPUElDX0FQSV9LRVkg7ZWE7JqUKVwiLFxuICAgICAgICBpbml0aWFsOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgdXNlTExNID0gbGxtUmVzdWx0LnVzZUxMTSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmFibGVMTE1DYWNoZSA9ICFvcHRpb25zW1wibm8tY2FjaGVcIl07XG5cbiAgICAvLyBmaXh0dXJlIGdlbjogZml4dHVyZSBEQiDrgrTsl5DshJwg7LC47KGwIOq0gOqzhOulvCDtlbTqsrDtlZjqs6Ag7KCA7J6l7ZWp64uI64ukXG4gICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcbiAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihmaXh0dXJlRGIsIGZpeHR1cmVEYiwgXCJmaXh0dXJlXCIsIEVudGl0eU1hbmFnZXIsIHtcbiAgICAgIHVzZUxMTSxcbiAgICAgIGVuYWJsZUxMTUNhY2hlLFxuICAgIH0pO1xuXG4gICAgaWYgKHVzZUxMTSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNoYWxrLmN5YW4oXG4gICAgICAgICAgYFxcbkxMTSDrqqjrk5zroZwgJHtlbnRpdHlOYW1lcy5qb2luKFwiLCBcIil9IOyDneyEsSDspJEuLi4gKOy6kOyLsTogJHtlbmFibGVMTE1DYWNoZSA/IFwiT05cIiA6IFwiT0ZGXCJ9KWAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWVzLmpvaW4oXCIsIFwiKX0g7IOd7ISxIOykkS4uLmApKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjcyA9IGVudGl0eU5hbWVzLm1hcCgoZW50aXR5TmFtZSkgPT4gKHtcbiAgICAgIGVudGl0eTogZW50aXR5TmFtZSxcbiAgICAgIGNvdW50LFxuICAgICAgb3ZlcnJpZGVzOiB7fSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgZ2VuZXJhdG9yLmdlbmVyYXRlQmF0Y2goc3BlY3MpO1xuXG4gICAgaWYgKHVzZUxMTSkge1xuICAgICAgY29uc3Qgc3RhdHMgPSBnZW5lcmF0b3IuZ2V0TExNQ2FjaGVTdGF0cygpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgW0xMTSBDYWNoZV0g7LqQ7IucIO2BrOq4sDogJHtzdGF0cy5zaXplfWApKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgXFxu4pyFICR7cmVzdWx0cy5sZW5ndGh96rCcIGZpeHR1cmUg7IOd7ISxIOyZhOujjGApKTtcblxuICAgIGlmIChzYXZlVGFyZ2V0ID09PSBcIm5vbmVcIikge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzdWx0cywgbnVsbCwgMikpO1xuICAgIH0gZWxzZSBpZiAoc2F2ZVRhcmdldCA9PT0gXCJkYlwiKSB7XG4gICAgICAvLyBnZW5lcmF0ZUJhdGNo6rCAIOydtOuvuCBEQuyXkCDsoIDsnqXtlojsnLzrr4DroZwg67OE64+EIOyggOyepeydtCDrtojtlYTsmpTtlanri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihcIkZpeHR1cmUgRELsl5Ag7KCA7J6l65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgfSBlbHNlIGlmIChzYXZlVGFyZ2V0LnN0YXJ0c1dpdGgoXCJmaWxlXCIpKSB7XG4gICAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gICAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuXG4gICAgICBjb25zdCBmaXh0dXJlc0RpciA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInRlc3RcIiwgXCJmaXh0dXJlc1wiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2VzcyhmaXh0dXJlc0Rpcik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgYXdhaXQgZnMubWtkaXIoZml4dHVyZXNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGVudGl0eU5hbWUgb2YgZW50aXR5TmFtZXMpIHtcbiAgICAgICAgY29uc3QgZW50aXR5UmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiByLmVudGl0eUlkID09PSBlbnRpdHlOYW1lKTtcblxuICAgICAgICBpZiAoZW50aXR5UmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAoc2F2ZVRhcmdldCA9PT0gXCJmaWxlXCIpIHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlOYW1lKTtcbiAgICAgICAgICBmaWxlbmFtZSA9IGAke2VudGl0eS50YWJsZX0uanNvbmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsZW5hbWUgPSBzYXZlVGFyZ2V0LnJlcGxhY2UoXCJmaWxlOlwiLCBcIlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVwYXRoID0gcGF0aC5qb2luKGZpeHR1cmVzRGlyLCBmaWxlbmFtZSk7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgICAgICBmaWxlcGF0aCxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIGVudGl0eVJlc3VsdHMubWFwKChyKSA9PiByLmRhdGEpLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIDIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKchSAke2ZpbGVwYXRofSDsoIDsnqUg7JmE66OMYCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgY2hhbGsucmVkKFxuICAgICAgICBcIkZpeHR1cmUg7IOd7ISxIOykkSDsmKTrpZjqsIAg67Cc7IOd7ZaI7Iq164uI64ukLlxcblwiICtcbiAgICAgICAgICBcIuybkOyduDogRW50aXR5IOygleydmOuCmCBEQiDsl7DqsrDsnYQg7ZmV7J247ZW07KO87IS47JqULlxcblwiICtcbiAgICAgICAgICBcIuyekOyEuO2VnCDrgrTsmqk6XCIsXG4gICAgICApLFxuICAgICAgZXJyb3IsXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIGZpeHR1cmUgZmV0Y2gg66qF66C57Ja0IC0g7Iuk7KCcIOyatOyYgSBEQuyXkOyEnCDrjbDsnbTthLDrpbwg6rCA7KC47JmAIGZpeHR1cmXroZwg7KCA7J6l7ZWp64uI64ukLlxuICog6rSA6rOE65CcIOuNsOydtO2EsOuPhCDtlajqu5gg6rCA7KC47Jik66+A66GcIO2YhOyLpOyggeyduCDthYzsiqTtirgg642w7J207YSw66W8IO2ZleuztO2VoCDsiJgg7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml4dHVyZUZldGNoQ29tbWFuZChvcHRpb25zOiBGaXh0dXJlQ29tbWFuZE9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKCk7XG4gICAgfVxuXG4gICAgbGV0IGVudGl0eU5hbWVzOiBzdHJpbmdbXTtcblxuICAgIGlmIChvcHRpb25zLmFsbCkge1xuICAgICAgZW50aXR5TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgaWYgKG9wdGlvbnMuZXhjbHVkZSkge1xuICAgICAgICBjb25zdCBleGNsdWRlTGlzdCA9IG9wdGlvbnMuZXhjbHVkZS5zcGxpdChcIixcIikubWFwKChzOiBzdHJpbmcpID0+IHMudHJpbSgpKTtcbiAgICAgICAgZW50aXR5TmFtZXMgPSBlbnRpdHlOYW1lcy5maWx0ZXIoKG5hbWUpID0+ICFleGNsdWRlTGlzdC5pbmNsdWRlcyhuYW1lKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgIGVudGl0eU5hbWVzID0gb3B0aW9ucy5pbmNsdWRlLnNwbGl0KFwiLFwiKS5tYXAoKHM6IHN0cmluZykgPT4gcy50cmltKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBuYW1lOiBcImVudGl0aWVzXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiSW1wb3J07ZWgIEVudGl0eeulvCDshKDtg53tlZjshLjsmpQ6XCIsXG4gICAgICAgIGNob2ljZXM6IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkubWFwKChpZCkgPT4gKHsgdGl0bGU6IGlkLCB2YWx1ZTogaWQgfSkpLFxuICAgICAgICBtaW46IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuZW50aXRpZXMgfHwgcmVzdWx0LmVudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBlbnRpdHlOYW1lcyA9IHJlc3VsdC5lbnRpdGllcztcbiAgICB9XG5cbiAgICBjb25zdCBzdHJhdGVneTogRGF0YUV4cGxvcmVyU3RyYXRlZ3kgPSBvcHRpb25zLnN0cmF0ZWd5ID8/IFwicmVjZW50XCI7XG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zLmxpbWl0ID8gTnVtYmVyLnBhcnNlSW50KG9wdGlvbnMubGltaXQsIDEwKSA6IDEwO1xuXG4gICAgLy8gZml4dHVyZSBmZXRjaDogcHJvZHVjdGlvbiDrjbDsnbTthLDrpbwgZml4dHVyZSBEQuuhnCBpbXBvcnTtlanri4jri6RcbiAgICBjb25zdCBzb3VyY2VEYiA9IERCLmdldERCKFwiclwiKTsgLy8gcHJvZHVjdGlvbl9tYXN0ZXIgKOuYkOuKlCBkZXZlbG9wbWVudF9tYXN0ZXIpXG4gICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcbiAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihzb3VyY2VEYiwgZml4dHVyZURiLCBcImZpeHR1cmVcIiwgRW50aXR5TWFuYWdlcik7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWVzLmpvaW4oXCIsIFwiKX0gaW1wb3J0IOykkS4uLmApKTtcblxuICAgIGZvciAoY29uc3QgZW50aXR5TmFtZSBvZiBlbnRpdHlOYW1lcykge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGdlbmVyYXRvci5pbXBvcnRGcm9tU291cmNlKGVudGl0eU5hbWUsIHtcbiAgICAgICAgc3RyYXRlZ3ksXG4gICAgICAgIGxpbWl0LFxuICAgICAgICBpbmNsdWRlUmVsYXRpb25zOiB0cnVlLFxuICAgICAgICBtYXhEZXB0aDogMixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyFICR7ZW50aXR5TmFtZX06ICR7cmVzdWx0cy5sZW5ndGh96rCcIGltcG9ydCDsmYTro4xgKSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIFwi7Iuk7KCcIERC7JeQ7IScIOuNsOydtO2EsOulvCDqsIDsoLjsmKTripQg7KSRIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6QuXFxuXCIgK1xuICAgICAgICAgIFwi7JuQ7J24OiDshozsiqQgREIg7Jew6rKwIOyEpOyglShzb25hbXUuY29uZmlnLnRzKeydtOuCmCBFbnRpdHkg6rSA6rOEIOygleydmOulvCDtmZXsnbjtlbTso7zshLjsmpQuXFxuXCIgK1xuICAgICAgICAgIFwi7J6Q7IS47ZWcIOuCtOyaqTpcIixcbiAgICAgICksXG4gICAgICBlcnJvcixcbiAgICApO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogZml4dHVyZSBleHBsb3JlIOuqheugueyWtCAtIERC7J2YIOyLpOygnCDrjbDsnbTthLDrpbwg7KGw7ZqM7ZWY7JesIO2ZleyduO2VqeuLiOuLpC5cbiAqIOyggOyepe2VmOyngCDslYrqs6Ag7KGw7ZqM66eMIO2VmOuvgOuhnCDrjbDsnbTthLDrpbwg67mg66W06rKMIO2ZleyduO2VoCDrlYwg7Jyg7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZml4dHVyZUV4cGxvcmVDb21tYW5kKG9wdGlvbnM6IEZpeHR1cmVDb21tYW5kT3B0aW9ucykge1xuICB0cnkge1xuICAgIGlmICghRW50aXR5TWFuYWdlci5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIGF3YWl0IEVudGl0eU1hbmFnZXIuYXV0b2xvYWQoKTtcbiAgICB9XG5cbiAgICBsZXQgZW50aXR5TmFtZSA9IG9wdGlvbnMuaW5jbHVkZTtcblxuICAgIGlmICghZW50aXR5TmFtZSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbXB0cyh7XG4gICAgICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwiZW50aXR5XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwi7YOQ7IOJ7ZWgIEVudGl0eTpcIixcbiAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5tYXAoKGlkKSA9PiAoeyB0aXRsZTogaWQsIHZhbHVlOiBpZCB9KSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuZW50aXR5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVudGl0eU5hbWUgPSByZXN1bHQuZW50aXR5O1xuICAgIH1cblxuICAgIGlmICghZW50aXR5TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW50aXR5IG5hbWUgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyYXRlZ3k6IERhdGFFeHBsb3JlclN0cmF0ZWd5ID0gb3B0aW9ucy5zdHJhdGVneSA/PyBcInNhbXBsZVwiO1xuICAgIGNvbnN0IGxpbWl0ID0gb3B0aW9ucy5saW1pdCA/IE51bWJlci5wYXJzZUludChvcHRpb25zLmxpbWl0LCAxMCkgOiAxMDtcblxuICAgIGNvbnN0IGRiID0gREIuZ2V0REIoXCJyXCIpO1xuICAgIGNvbnN0IGV4cGxvcmVyID0gbmV3IERhdGFFeHBsb3JlcihkYiwgRW50aXR5TWFuYWdlcik7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IGV4cGxvcmVyLmV4cGxvcmUoZW50aXR5TmFtZSwgeyBzdHJhdGVneSwgbGltaXQgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4ke2VudGl0eU5hbWV9ICR7ZGF0YS5sZW5ndGh96rCcIOyhsO2ajCDsmYTro4w6YCkpO1xuICAgIGNvbnNvbGUudGFibGUoZGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgXCLrjbDsnbTthLAg7KGw7ZqMIOykkSDsmKTrpZjqsIAg67Cc7IOd7ZaI7Iq164uI64ukLlxcblwiICtcbiAgICAgICAgICBcIuybkOyduDogREIg7Jew6rKw7J2064KYIEVudGl0eSDsoJXsnZjrpbwg7ZmV7J247ZW07KO87IS47JqULlxcblwiICtcbiAgICAgICAgICBcIuyekOyEuO2VnCDrgrTsmqk6XCIsXG4gICAgICApLFxuICAgICAgZXJyb3IsXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O2FBR3VDO1NBQ0g7V0FDa0I7cUJBQ0c7b0JBQ0Q7d0JBRVE7Ozs7QUFrQmhFLFNBQVMsaUJBQWlCLEtBQXFCO0NBRTdDLElBQUksV0FBVyxJQUFJLGFBQWEsQ0FBQyxRQUFRLGNBQWMsR0FBRztBQUMxRCxLQUFJLFNBQVMsV0FBVyxHQUFHO0FBQ3pCLGFBQVc7O0FBR2IsS0FBSSxTQUFTLEtBQUssU0FBUyxFQUFFO0FBQzNCLGFBQVcsSUFBSTs7QUFHakIsUUFBTyxTQUFTLE1BQU0sR0FBRyxHQUFHOzs7OztBQU05QixlQUFzQixrQkFBa0IsU0FBZ0M7QUFDdEUsS0FBSTtBQUNGLE1BQUksQ0FBQyxjQUFj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