sonamu 0.9.19 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +36 -0
  2. package/dist/ai/agents/agent.js +5 -7
  3. package/dist/ai/agents/index.js +1 -2
  4. package/dist/ai/agents/types.js +1 -1
  5. package/dist/ai/index.js +1 -2
  6. package/dist/ai/providers/rtzr/api.js +2 -3
  7. package/dist/ai/providers/rtzr/error.js +14 -29
  8. package/dist/ai/providers/rtzr/index.js +1 -2
  9. package/dist/ai/providers/rtzr/model.js +13 -20
  10. package/dist/ai/providers/rtzr/options.js +2 -3
  11. package/dist/ai/providers/rtzr/provider.js +2 -3
  12. package/dist/ai/providers/rtzr/utils.js +12 -21
  13. package/dist/api/base-frame.js +4 -4
  14. package/dist/api/caster.js +21 -38
  15. package/dist/api/code-converters.js +41 -98
  16. package/dist/api/config.d.ts +1 -10
  17. package/dist/api/config.d.ts.map +1 -1
  18. package/dist/api/config.js +9 -8
  19. package/dist/api/context.js +2 -3
  20. package/dist/api/decorators.js +80 -116
  21. package/dist/api/index.js +2 -3
  22. package/dist/api/secret.js +6 -10
  23. package/dist/api/sonamu.d.ts.map +1 -1
  24. package/dist/api/sonamu.js +200 -387
  25. package/dist/api/validator.js +5 -8
  26. package/dist/api/websocket-helpers.js +21 -32
  27. package/dist/auth/audit-log/builders.js +2 -3
  28. package/dist/auth/audit-log/events.js +2 -2
  29. package/dist/auth/audit-log/plugin.js +30 -61
  30. package/dist/auth/audit-log-ingestor.js +19 -41
  31. package/dist/auth/auth-generator.js +16 -41
  32. package/dist/auth/better-auth-entities.js +3 -4
  33. package/dist/auth/index.js +2 -3
  34. package/dist/auth/knex-adapter.js +18 -45
  35. package/dist/auth/plugins/entity-definitions/admin.js +2 -2
  36. package/dist/auth/plugins/entity-definitions/anonymous.js +2 -2
  37. package/dist/auth/plugins/entity-definitions/api-key.js +2 -2
  38. package/dist/auth/plugins/entity-definitions/audit-log.js +2 -2
  39. package/dist/auth/plugins/entity-definitions/index.js +2 -3
  40. package/dist/auth/plugins/entity-definitions/jwt.js +2 -2
  41. package/dist/auth/plugins/entity-definitions/organization.js +2 -2
  42. package/dist/auth/plugins/entity-definitions/passkey.js +2 -2
  43. package/dist/auth/plugins/entity-definitions/phone-number.js +2 -2
  44. package/dist/auth/plugins/entity-definitions/sso.js +2 -2
  45. package/dist/auth/plugins/entity-definitions/two-factor.js +2 -2
  46. package/dist/auth/plugins/entity-definitions/types.js +1 -1
  47. package/dist/auth/plugins/entity-definitions/username.js +2 -2
  48. package/dist/auth/plugins/index.js +1 -2
  49. package/dist/auth/plugins/wrappers/admin.js +2 -3
  50. package/dist/auth/plugins/wrappers/anonymous.js +2 -3
  51. package/dist/auth/plugins/wrappers/api-key.js +2 -3
  52. package/dist/auth/plugins/wrappers/index.js +1 -2
  53. package/dist/auth/plugins/wrappers/jwt.js +2 -3
  54. package/dist/auth/plugins/wrappers/organization.js +2 -3
  55. package/dist/auth/plugins/wrappers/passkey.js +2 -3
  56. package/dist/auth/plugins/wrappers/phone-number.js +2 -3
  57. package/dist/auth/plugins/wrappers/sso.js +2 -3
  58. package/dist/auth/plugins/wrappers/two-factor.js +2 -3
  59. package/dist/auth/plugins/wrappers/username.js +2 -3
  60. package/dist/bin/build-config.js +2 -2
  61. package/dist/bin/cli.js +151 -258
  62. package/dist/bin/fixture.d.ts.map +1 -1
  63. package/dist/bin/fixture.js +55 -97
  64. package/dist/bin/hmr-hook-register.js +3 -3
  65. package/dist/bin/migrate-targets.d.ts +3 -0
  66. package/dist/bin/migrate-targets.d.ts.map +1 -0
  67. package/dist/bin/migrate-targets.js +11 -0
  68. package/dist/bin/test-command.js +25 -55
  69. package/dist/bin/ts-loader-register.js +5 -6
  70. package/dist/bin/ts-loader-registration.js +6 -13
  71. package/dist/cache/cache-manager.js +3 -4
  72. package/dist/cache/decorator.js +11 -21
  73. package/dist/cache/drivers.js +2 -3
  74. package/dist/cache/index.js +2 -3
  75. package/dist/cache/types.js +1 -1
  76. package/dist/cache-control/cache-control.js +21 -34
  77. package/dist/cache-control/types.js +1 -1
  78. package/dist/compress/compress.js +10 -10
  79. package/dist/compress/index.js +1 -2
  80. package/dist/compress/types.js +1 -1
  81. package/dist/cone/cone-generator.js +25 -63
  82. package/dist/database/_batch_update.js +26 -46
  83. package/dist/database/base-model.js +44 -97
  84. package/dist/database/base-model.types.js +1 -1
  85. package/dist/database/db.d.ts +8 -14
  86. package/dist/database/db.d.ts.map +1 -1
  87. package/dist/database/db.js +127 -72
  88. package/dist/database/knex.js +5 -8
  89. package/dist/database/puri-subset.types.js +1 -1
  90. package/dist/database/puri-wrapper.js +11 -15
  91. package/dist/database/puri.js +117 -234
  92. package/dist/database/puri.types.js +3 -4
  93. package/dist/database/transaction-context.js +4 -5
  94. package/dist/database/upsert-builder.js +109 -176
  95. package/dist/dict/en.d.ts +1 -0
  96. package/dist/dict/en.d.ts.map +1 -1
  97. package/dist/dict/en.js +4 -4
  98. package/dist/dict/index.js +2 -3
  99. package/dist/dict/ko.d.ts +1 -0
  100. package/dist/dict/ko.d.ts.map +1 -1
  101. package/dist/dict/ko.js +4 -4
  102. package/dist/dict/rc-keys.js +3 -4
  103. package/dist/dict/sd.js +8 -19
  104. package/dist/dict/sonamu-dictionary.js +141 -284
  105. package/dist/dict/types.js +1 -1
  106. package/dist/dict/utils.js +4 -5
  107. package/dist/entity/entity-manager.d.ts +2 -2
  108. package/dist/entity/entity-manager.js +34 -82
  109. package/dist/entity/entity-template-cone.js +33 -66
  110. package/dist/entity/entity.js +156 -310
  111. package/dist/env.d.ts +14 -0
  112. package/dist/env.d.ts.map +1 -0
  113. package/dist/env.js +75 -0
  114. package/dist/exceptions/error-handler.js +2 -3
  115. package/dist/exceptions/so-exceptions.js +7 -5
  116. package/dist/filter/index.js +1 -2
  117. package/dist/filter/types.js +3 -4
  118. package/dist/filter/utils.js +21 -54
  119. package/dist/index.js +8 -7
  120. package/dist/logger/category.js +6 -12
  121. package/dist/logger/configure.js +23 -34
  122. package/dist/migration/code-generation.js +146 -314
  123. package/dist/migration/index-where-predicate.js +52 -144
  124. package/dist/migration/migration-set.js +19 -33
  125. package/dist/migration/migrator.d.ts +2 -0
  126. package/dist/migration/migrator.d.ts.map +1 -1
  127. package/dist/migration/migrator.js +69 -53
  128. package/dist/migration/postgresql-schema-reader.js +126 -225
  129. package/dist/migration/slack-confirm.d.ts +1 -0
  130. package/dist/migration/slack-confirm.d.ts.map +1 -1
  131. package/dist/migration/slack-confirm.js +28 -38
  132. package/dist/migration/types.js +1 -1
  133. package/dist/naite/messaging-types.js +1 -1
  134. package/dist/naite/naite-reporter.js +15 -32
  135. package/dist/naite/naite.js +43 -76
  136. package/dist/ssr/index.js +6 -9
  137. package/dist/ssr/registry.js +10 -18
  138. package/dist/ssr/renderer.js +10 -21
  139. package/dist/ssr/types.js +1 -1
  140. package/dist/storage/base-file.js +5 -10
  141. package/dist/storage/buffered-file.js +3 -4
  142. package/dist/storage/drivers.js +2 -3
  143. package/dist/storage/index.js +2 -3
  144. package/dist/storage/s3-driver.js +5 -9
  145. package/dist/storage/storage-manager.js +5 -5
  146. package/dist/storage/types.js +1 -1
  147. package/dist/storage/uploaded-file.js +4 -6
  148. package/dist/stream/index.js +1 -2
  149. package/dist/stream/sse.js +8 -13
  150. package/dist/stream/ws-audience-resolver.js +5 -5
  151. package/dist/stream/ws-audience.js +3 -4
  152. package/dist/stream/ws-cluster-bus.js +3 -4
  153. package/dist/stream/ws-core.js +1 -1
  154. package/dist/stream/ws-delivery.js +11 -25
  155. package/dist/stream/ws-local-connection-store.js +9 -18
  156. package/dist/stream/ws-presence-store.js +43 -97
  157. package/dist/stream/ws-registry.js +17 -22
  158. package/dist/stream/ws-telemetry-memory.js +38 -45
  159. package/dist/stream/ws-telemetry-trace.js +4 -6
  160. package/dist/stream/ws-telemetry.js +82 -135
  161. package/dist/stream/ws.js +47 -91
  162. package/dist/syncer/api-parser.js +81 -147
  163. package/dist/syncer/checksum.js +9 -20
  164. package/dist/syncer/code-generator.js +29 -47
  165. package/dist/syncer/entity-operations.js +17 -27
  166. package/dist/syncer/event-batcher.js +8 -15
  167. package/dist/syncer/file-patterns.js +3 -4
  168. package/dist/syncer/file-tracking.js +6 -10
  169. package/dist/syncer/index.js +1 -2
  170. package/dist/syncer/module-loader.js +10 -26
  171. package/dist/syncer/syncer-actions.js +19 -37
  172. package/dist/syncer/syncer.js +46 -98
  173. package/dist/syncer/watcher.js +12 -26
  174. package/dist/tasks/decorator.js +7 -11
  175. package/dist/tasks/step-wrapper.js +7 -8
  176. package/dist/tasks/workflow-manager.js +18 -25
  177. package/dist/template/entity-converter.js +40 -64
  178. package/dist/template/helpers.js +32 -63
  179. package/dist/template/implementations/entity.template.js +7 -11
  180. package/dist/template/implementations/entry-server.template.js +2 -3
  181. package/dist/template/implementations/generated.template.js +25 -51
  182. package/dist/template/implementations/generated_http.template.js +31 -58
  183. package/dist/template/implementations/generated_sso.template.js +45 -85
  184. package/dist/template/implementations/init_types.template.js +4 -7
  185. package/dist/template/implementations/model.template.js +5 -10
  186. package/dist/template/implementations/model_test.template.js +2 -3
  187. package/dist/template/implementations/queries.template.js +4 -7
  188. package/dist/template/implementations/sd.template.js +17 -35
  189. package/dist/template/implementations/services.template.js +18 -30
  190. package/dist/template/implementations/view_form.template.js +72 -125
  191. package/dist/template/implementations/view_id_all_select.template.js +2 -3
  192. package/dist/template/implementations/view_list.template.js +86 -143
  193. package/dist/template/implementations/view_search_input.template.js +2 -3
  194. package/dist/template/index.js +5 -8
  195. package/dist/template/template-manager.js +13 -26
  196. package/dist/template/template-types.js +2 -3
  197. package/dist/template/template.js +7 -11
  198. package/dist/template/zod-converter.js +173 -348
  199. package/dist/testing/_relation-graph.js +18 -37
  200. package/dist/testing/bootstrap.js +5 -8
  201. package/dist/testing/data-explorer.js +34 -78
  202. package/dist/testing/dev-test-routes.js +54 -60
  203. package/dist/testing/dev-vitest-manager.js +33 -84
  204. package/dist/testing/faker-mappings.js +3 -4
  205. package/dist/testing/fixture-generator.d.ts +2 -1
  206. package/dist/testing/fixture-generator.d.ts.map +1 -1
  207. package/dist/testing/fixture-generator.js +159 -321
  208. package/dist/testing/fixture-loader.js +2 -2
  209. package/dist/testing/fixture-manager.d.ts.map +1 -1
  210. package/dist/testing/fixture-manager.js +124 -227
  211. package/dist/testing/global-setup.d.ts.map +1 -1
  212. package/dist/testing/global-setup.js +29 -17
  213. package/dist/testing/index.js +1 -2
  214. package/dist/testing/naite-vitest-reporter.js +2 -3
  215. package/dist/testing/parallel-db-manager.js +5 -3
  216. package/dist/testing/vitest-helpers.d.ts.map +1 -1
  217. package/dist/testing/vitest-helpers.js +15 -12
  218. package/dist/types/types.d.ts +14 -14
  219. package/dist/types/types.js +27 -50
  220. package/dist/ui/ai-api.js +6 -11
  221. package/dist/ui/ai-client.js +86 -134
  222. package/dist/ui/api.js +99 -195
  223. package/dist/ui/cdd-service.js +78 -130
  224. package/dist/ui/cdd-types.js +1 -1
  225. package/dist/ui-web/assets/{index-Df8q-fhb.js → index-DFStGyd0.js} +49 -49
  226. package/dist/ui-web/assets/index-Dx4ap5i4.css +1 -0
  227. package/dist/ui-web/index.html +2 -2
  228. package/dist/utils/async-utils.js +13 -25
  229. package/dist/utils/class-name.js +3 -4
  230. package/dist/utils/console-util.js +11 -26
  231. package/dist/utils/controller.d.ts.map +1 -1
  232. package/dist/utils/controller.js +14 -12
  233. package/dist/utils/esm-utils.js +5 -8
  234. package/dist/utils/formatter.js +10 -22
  235. package/dist/utils/fs-utils.js +14 -25
  236. package/dist/utils/lodash-able.js +3 -4
  237. package/dist/utils/model.js +7 -14
  238. package/dist/utils/object-utils.js +41 -73
  239. package/dist/utils/path-utils.js +5 -9
  240. package/dist/utils/process-utils.js +4 -7
  241. package/dist/utils/sql-parser.js +6 -13
  242. package/dist/utils/type-utils.js +16 -26
  243. package/dist/utils/utils.js +18 -40
  244. package/dist/utils/zod-error.js +9 -16
  245. package/dist/vector/chunking.js +24 -37
  246. package/dist/vector/config.js +2 -2
  247. package/dist/vector/embedding.js +8 -19
  248. package/dist/vector/index.js +1 -2
  249. package/dist/vector/types.js +1 -1
  250. package/package.json +7 -7
  251. package/src/__tests__/env.test.ts +127 -0
  252. package/src/api/__tests__/config.test.ts +10 -1
  253. package/src/api/config.ts +4 -12
  254. package/src/api/sonamu.ts +14 -4
  255. package/src/bin/__tests__/migrate-targets.test.ts +28 -0
  256. package/src/bin/__tests__/test-command.test.ts +82 -1
  257. package/src/bin/cli.ts +9 -18
  258. package/src/bin/fixture.ts +5 -4
  259. package/src/bin/migrate-targets.ts +7 -0
  260. package/src/bin/test-command.ts +2 -2
  261. package/src/database/__tests__/db.test.ts +175 -0
  262. package/src/database/db.ts +193 -71
  263. package/src/dict/en.ts +2 -0
  264. package/src/dict/ko.ts +2 -0
  265. package/src/env.ts +123 -0
  266. package/src/migration/__tests__/migrator.test.ts +149 -0
  267. package/src/migration/migrator.ts +74 -17
  268. package/src/migration/slack-confirm.ts +21 -0
  269. package/src/skills/sonamu/database.md +1 -1
  270. package/src/skills/sonamu/entity-basic.md +31 -0
  271. package/src/skills/sonamu/puri.md +22 -0
  272. package/src/skills/sonamu/testing-devrunner.md +1 -1
  273. package/src/skills/sonamu/upsert.md +53 -6
  274. package/src/stream/ws-telemetry-memory.ts +2 -2
  275. package/src/testing/fixture-generator.ts +2 -1
  276. package/src/testing/fixture-manager.ts +3 -4
  277. package/src/testing/global-setup.ts +42 -18
  278. package/src/testing/vitest-helpers.ts +14 -0
  279. package/src/utils/controller.ts +14 -7
  280. package/tsdown.api.config.ts +6 -0
  281. package/dist/_virtual/rolldown_runtime.js +0 -39
  282. package/dist/ui-web/assets/index-D4rYm-Xz.css +0 -1
@@ -3,7 +3,6 @@ import { Template, init_template } from "../template.js";
3
3
  import { getEnumInfoFromColName, getRelationNameFromColumnName, getRelationPropFromColName, init_helpers } from "../helpers.js";
4
4
  import { z as z$1 } from "zod";
5
5
  import { unique } from "radashi";
6
-
7
6
  //#region src/template/implementations/view_form.template.ts
8
7
  init_entity_manager();
9
8
  init_helpers();
@@ -44,40 +43,30 @@ var Template__view_form = class extends Template {
44
43
  type: "enum",
45
44
  enumId: id
46
45
  };
47
- } else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") {
48
- try {
49
- const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
50
- return {
51
- type: "fk",
52
- entityId: relProp.with
53
- };
54
- } catch {
55
- return null;
56
- }
57
- } else if (col.renderType === "array" && col.name.endsWith("_ids")) {
58
- try {
59
- const baseName = col.name.replace(/_ids$/, "");
60
- const relProp = getRelationPropFromColName(entityId, baseName);
61
- return {
62
- type: "fk",
63
- entityId: relProp.with
64
- };
65
- } catch {
66
- return null;
67
- }
46
+ } else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") try {
47
+ return {
48
+ type: "fk",
49
+ entityId: getRelationPropFromColName(entityId, col.name.replace("_id", "")).with
50
+ };
51
+ } catch {
52
+ return null;
53
+ }
54
+ else if (col.renderType === "array" && col.name.endsWith("_ids")) try {
55
+ return {
56
+ type: "fk",
57
+ entityId: getRelationPropFromColName(entityId, col.name.replace(/_ids$/, "")).with
58
+ };
59
+ } catch {
60
+ return null;
68
61
  }
69
62
  return null;
70
63
  }
71
64
  renderColumn(entityId, col) {
72
65
  const regExpr = `{...register("${col.name}")}`;
73
- const placeholderName = getRelationNameFromColumnName(entityId, col.name);
74
- const placeholder = `{SD("entity.${entityId}.${placeholderName}")}`;
66
+ const placeholder = `{SD("entity.${entityId}.${getRelationNameFromColumnName(entityId, col.name)}")}`;
75
67
  switch (col.renderType) {
76
- case "string-plain": if (col.zodType instanceof z$1.ZodString && (col.zodType.maxLength ?? 0) <= 256) {
77
- return `<Input className="h-8 text-xs bg-white" placeholder=${placeholder} ${regExpr} />`;
78
- } else {
79
- return `<Textarea className="text-xs bg-white" rows={4} placeholder=${placeholder} ${regExpr} />`;
80
- }
68
+ case "string-plain": if (col.zodType instanceof z$1.ZodString && (col.zodType.maxLength ?? 0) <= 256) return `<Input className="h-8 text-xs bg-white" placeholder=${placeholder} ${regExpr} />`;
69
+ else return `<Textarea className="text-xs bg-white" rows={4} placeholder=${placeholder} ${regExpr} />`;
81
70
  case "datetime": return `<DateInput
82
71
  className="h-8 text-xs bg-white"
83
72
  ${regExpr}
@@ -112,9 +101,8 @@ var Template__view_form = class extends Template {
112
101
  }
113
102
  case "number-fk_id":
114
103
  case "string-fk_id": try {
115
- const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
116
104
  return `<IdAsyncSelect
117
- config={${relProp.with}AsyncIdConfig}
105
+ config={${getRelationPropFromColName(entityId, col.name.replace("_id", "")).with}AsyncIdConfig}
118
106
  subset="A"
119
107
  ${regExpr}
120
108
  />`;
@@ -122,19 +110,15 @@ var Template__view_form = class extends Template {
122
110
  return `<Input type="number" className="h-8 text-xs bg-white" placeholder=${placeholder} ${regExpr} />`;
123
111
  }
124
112
  case "array":
125
- if (col.name.endsWith("_ids")) {
126
- try {
127
- const baseName = col.name.replace(/_ids$/, "");
128
- const relProp = getRelationPropFromColName(entityId, baseName);
129
- return `<IdAsyncSelect
130
- config={${relProp.with}AsyncIdConfig}
113
+ if (col.name.endsWith("_ids")) try {
114
+ return `<IdAsyncSelect
115
+ config={${getRelationPropFromColName(entityId, col.name.replace(/_ids$/, "")).with}AsyncIdConfig}
131
116
  subset="A"
132
117
  multiple
133
118
  ${regExpr}
134
119
  />`;
135
- } catch {
136
- return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
137
- }
120
+ } catch {
121
+ return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
138
122
  }
139
123
  return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
140
124
  case "object": return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
@@ -143,29 +127,16 @@ var Template__view_form = class extends Template {
143
127
  }
144
128
  resolveDefaultValue(columns) {
145
129
  return columns.reduce((result, col) => {
146
- if (col.optional) {
147
- return result;
148
- }
130
+ if (col.optional) return result;
149
131
  let value;
150
- if (col.nullable === true) {
151
- value = null;
152
- } else if (col.zodType instanceof z$1.ZodNumber) {
153
- value = 0;
154
- } else if (col.zodType instanceof z$1.ZodEnum) {
155
- value = Object.keys(col.zodType.enum)[0];
156
- } else if (col.zodType instanceof z$1.ZodBoolean) {
157
- value = false;
158
- } else if (col.zodType instanceof z$1.core.$ZodString) {
159
- if (col.renderType === "string-datetime") {
160
- value = "now()";
161
- } else {
162
- value = "";
163
- }
164
- } else if (col.zodType instanceof z$1.ZodArray) {
165
- value = [];
166
- } else if (col.zodType instanceof z$1.ZodObject) {
167
- value = {};
168
- }
132
+ if (col.nullable === true) value = null;
133
+ else if (col.zodType instanceof z$1.ZodNumber) value = 0;
134
+ else if (col.zodType instanceof z$1.ZodEnum) value = Object.keys(col.zodType.enum)[0];
135
+ else if (col.zodType instanceof z$1.ZodBoolean) value = false;
136
+ else if (col.zodType instanceof z$1.core.$ZodString) if (col.renderType === "string-datetime") value = "now()";
137
+ else value = "";
138
+ else if (col.zodType instanceof z$1.ZodArray) value = [];
139
+ else if (col.zodType instanceof z$1.ZodObject) value = {};
169
140
  result[col.name] = value;
170
141
  return result;
171
142
  }, {});
@@ -177,44 +148,33 @@ var Template__view_form = class extends Template {
177
148
  const idTsType = pkType === "string" || pkType === "uuid" ? "string" : "number";
178
149
  const idZodType = pkType === "string" || pkType === "uuid" ? "z.string().optional()" : "z.number().optional()";
179
150
  const { loadTypes } = await import("../../syncer/module-loader.js");
180
- const loadedTypes = await loadTypes();
181
- const SaveParamsZodType = loadedTypes[`${entityId}SaveParams`];
182
- if (!SaveParamsZodType) {
183
- throw new Error(`SaveParams for ${entityId} not found. Did you run 'sonamu sync'?`);
184
- }
151
+ const SaveParamsZodType = (await loadTypes())[`${entityId}SaveParams`];
152
+ if (!SaveParamsZodType) throw new Error(`SaveParams for ${entityId} not found. Did you run 'sonamu sync'?`);
185
153
  const { zodTypeToRenderingNode } = await import("../zod-converter.js");
186
- const saveParamsNode = zodTypeToRenderingNode(SaveParamsZodType);
187
- const columns = (saveParamsNode?.children ?? []).filter((col) => col.name !== "id").map((col) => {
188
- const propCandidate = entity.props.find((prop) => prop.name === col.name);
189
- col.label = propCandidate?.desc ?? col.label;
154
+ const columns = (zodTypeToRenderingNode(SaveParamsZodType)?.children ?? []).filter((col) => col.name !== "id").map((col) => {
155
+ col.label = entity.props.find((prop) => prop.name === col.name)?.desc ?? col.label;
190
156
  return col;
191
157
  });
192
158
  const defaultValue = this.resolveDefaultValue(columns);
193
- const enumImports = new Set();
194
- const fkConfigImports = new Set();
159
+ const enumImports = /* @__PURE__ */ new Set();
160
+ const fkConfigImports = /* @__PURE__ */ new Set();
195
161
  columns.forEach((col) => {
196
- if (col.renderType === "enums") {
197
- try {
198
- const { id } = getEnumInfoFromColName(entityId, col.name);
199
- enumImports.add(id);
200
- } catch {}
201
- } else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") {
202
- try {
203
- const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
204
- fkConfigImports.add(relProp.with);
205
- } catch {}
206
- } else if (col.renderType === "string-plain" && col.name.endsWith("_id") && col.name !== "id") {
207
- try {
208
- const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
209
- fkConfigImports.add(relProp.with);
210
- } catch {}
211
- } else if (col.renderType === "array" && col.name.endsWith("_ids")) {
212
- try {
213
- const baseName = col.name.replace(/_ids$/, "");
214
- const relProp = getRelationPropFromColName(entityId, baseName);
215
- fkConfigImports.add(relProp.with);
216
- } catch {}
217
- }
162
+ if (col.renderType === "enums") try {
163
+ const { id } = getEnumInfoFromColName(entityId, col.name);
164
+ enumImports.add(id);
165
+ } catch {}
166
+ else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") try {
167
+ const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
168
+ fkConfigImports.add(relProp.with);
169
+ } catch {}
170
+ else if (col.renderType === "string-plain" && col.name.endsWith("_id") && col.name !== "id") try {
171
+ const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
172
+ fkConfigImports.add(relProp.with);
173
+ } catch {}
174
+ else if (col.renderType === "array" && col.name.endsWith("_ids")) try {
175
+ const relProp = getRelationPropFromColName(entityId, col.name.replace(/_ids$/, ""));
176
+ fkConfigImports.add(relProp.with);
177
+ } catch {}
218
178
  });
219
179
  return {
220
180
  ...this.getTargetAndPath(names),
@@ -246,7 +206,7 @@ import type { ${names.capital}SubsetA } from "@/services/sonamu.generated";${col
246
206
  }
247
207
  })).filter(Boolean).join(", ") + " } from \"@/services/sonamu.generated\";" : ""}
248
208
  import { defaultCatch } from "@/services/sonamu.shared";
249
- import { ${names.capital}SaveParams } from "@/services/${names.fs}/${names.fs}.types";${fkConfigImports.size > 0 ? `\nimport { ${Array.from(fkConfigImports).map((entity$1) => `${entity$1}AsyncIdConfig`).join(", ")} } from "@/services/services.generated";` : ""}
209
+ import { ${names.capital}SaveParams } from "@/services/${names.fs}/${names.fs}.types";${fkConfigImports.size > 0 ? `\nimport { ${Array.from(fkConfigImports).map((entity) => `${entity}AsyncIdConfig`).join(", ")} } from "@/services/services.generated";` : ""}
250
210
  import { SD } from "@/i18n/sd.generated";
251
211
 
252
212
  import ArrowLeftIcon from "~icons/lucide/arrow-left";
@@ -282,8 +242,7 @@ ${(() => {
282
242
  const hasDate = columns.some((col) => col.renderType === "string-date");
283
243
  if (!hasDatetime && !hasDate) return "";
284
244
  let helpers = "\n";
285
- if (hasDatetime) {
286
- helpers += ` // datetime-local 형식으로 변환 (YYYY-MM-DDTHH:MM)
245
+ if (hasDatetime) helpers += ` // datetime-local 형식으로 변환 (YYYY-MM-DDTHH:MM)
287
246
  const toDatetimeLocalString = (date: Date | string | null | undefined): string => {
288
247
  if (!date) return "";
289
248
  const d = typeof date === "string" ? new Date(date) : date;
@@ -296,9 +255,7 @@ ${(() => {
296
255
  return new Date(value);
297
256
  };
298
257
  `;
299
- }
300
- if (hasDate) {
301
- helpers += ` // date 형식으로 변환 (YYYY-MM-DD)
258
+ if (hasDate) helpers += ` // date 형식으로 변환 (YYYY-MM-DD)
302
259
  const toDateString = (date: Date | string | null | undefined): string => {
303
260
  if (!date) return "";
304
261
  const d = typeof date === "string" ? new Date(date) : date;
@@ -311,7 +268,6 @@ ${(() => {
311
268
  return new Date(value);
312
269
  };
313
270
  `;
314
- }
315
271
  return helpers;
316
272
  })()}
317
273
  useEffect(() => {
@@ -320,19 +276,15 @@ ${(() => {
320
276
  setForm((prevForm) => ({
321
277
  ...prevForm,
322
278
  ...row,${(() => {
323
- const relationFields = columns.filter((col) => col.renderType === "number-fk_id" || col.renderType === "string-fk_id" || col.renderType === "array" && col.name.endsWith("_ids")).map((col) => {
279
+ return columns.filter((col) => col.renderType === "number-fk_id" || col.renderType === "string-fk_id" || col.renderType === "array" && col.name.endsWith("_ids")).map((col) => {
324
280
  if (col.renderType === "array" && col.name.endsWith("_ids")) {
325
- const relationName$1 = getRelationNameFromColumnName(entityId, col.name);
326
- return `\n ${col.name}: row.${relationName$1}?.map((r) => r.id) ?? [],`;
281
+ const relationName = getRelationNameFromColumnName(entityId, col.name);
282
+ return `\n ${col.name}: row.${relationName}?.map((r) => r.id) ?? [],`;
327
283
  }
328
284
  const relationName = getRelationNameFromColumnName(entityId, col.name);
329
- if (col.nullable) {
330
- return `\n ${col.name}: row.${relationName}?.id ?? null,`;
331
- } else {
332
- return `\n ${col.name}: row.${relationName}?.id,`;
333
- }
285
+ if (col.nullable) return `\n ${col.name}: row.${relationName}?.id ?? null,`;
286
+ else return `\n ${col.name}: row.${relationName}?.id,`;
334
287
  }).join("");
335
- return relationFields;
336
288
  })()}
337
289
  }));
338
290
  });
@@ -413,21 +365,16 @@ ${(() => {
413
365
  <CardContent className="p-6">
414
366
  <div className="space-y-6">
415
367
  ${columns.filter((col) => col.name !== "created_at").map((col) => {
416
- const label = (() => {
417
- if (col.label.endsWith("Id")) {
418
- try {
419
- const entity$1 = EntityManager.get(col.label.replace("Id", ""));
420
- return entity$1.title ?? col.label;
421
- } catch {
422
- return col.label;
423
- }
368
+ return ` {/* ${(() => {
369
+ if (col.label.endsWith("Id")) try {
370
+ return EntityManager.get(col.label.replace("Id", "")).title ?? col.label;
371
+ } catch {
372
+ return col.label;
424
373
  }
425
374
  return col.label;
426
- })();
427
- const labelName = getRelationNameFromColumnName(entityId, col.name);
428
- return ` {/* ${label} */}
375
+ })()} */}
429
376
  <div className="space-y-2">
430
- <label className="block text-xs mb-1 text-gray-600">{SD("entity.${entityId}.${labelName}")}</label>
377
+ <label className="block text-xs mb-1 text-gray-600">{SD("entity.${entityId}.${getRelationNameFromColumnName(entityId, col.name)}")}</label>
431
378
  ${this.renderColumn(entityId, col)}
432
379
  </div>`;
433
380
  }).join("\n\n")}
@@ -462,7 +409,7 @@ ${columns.filter((col) => col.name !== "created_at").map((col) => {
462
409
  };
463
410
  }
464
411
  };
465
-
466
412
  //#endregion
467
413
  export { Template__view_form };
468
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19mb3JtLnRlbXBsYXRlLmpzIiwibmFtZXMiOlsieiIsInZhbHVlOiB1bmtub3duIiwiZW50aXR5IiwicmVsYXRpb25OYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy92aWV3X2Zvcm0udGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBSZW5kZXJpbmdOb2RlLCB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSxcbiAgZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUsXG4gIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lLFxufSBmcm9tIFwiLi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX192aWV3X2Zvcm0gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19mb3JtXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvcm91dGVzL2FkbWluXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc1BsdXJhbH0vZm9ybS50c3hgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImVudGl0eS5jcmVhdGVcIiwgXCJlbnRpdHkuZWRpdFwiLCBcImNvbW1vbi5iYWNrVG9MaXN0XCIsIFwiZm9ybS5jcmVhdGVkQXRcIiwgXCJjb21tb24uc2F2ZVwiXTtcbiAgfVxuXG4gIHdyYXBGQyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgYDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+JHtsYWJlbCA/IGBcXG4gIDxMYWJlbD4ke2xhYmVsfTwvTGFiZWw+YCA6IFwiXCJ9YCxcbiAgICAgIGAgICR7Ym9keX1gLFxuICAgICAgYDwvZGl2PmAsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHdyYXBGRyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53cmFwRkMoYm9keSwgbGFiZWwpO1xuICB9XG5cbiAgcmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSkge1xuICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICBjb25zdCB7IGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICByZXR1cm4geyB0eXBlOiBcImVudW1cIiBhcyBjb25zdCwgZW51bUlkOiBpZCB9O1xuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHwgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiZmtcIiBhcyBjb25zdCwgZW50aXR5SWQ6IHJlbFByb3Aud2l0aCB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpIHtcbiAgICAgIC8vIE1hbnlUb01hbnkgcmVsYXRpb27snZggRksg67Cw7Je0XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImZrXCIgYXMgY29uc3QsIGVudGl0eUlkOiByZWxQcm9wLndpdGggfTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZW5kZXJDb2x1bW4oZW50aXR5SWQ6IHN0cmluZywgY29sOiBSZW5kZXJpbmdOb2RlKTogc3RyaW5nIHtcbiAgICBjb25zdCByZWdFeHByID0gYHsuLi5yZWdpc3RlcihcIiR7Y29sLm5hbWV9XCIpfWA7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJOYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGB7U0QoXCJlbnRpdHkuJHtlbnRpdHlJZH0uJHtwbGFjZWhvbGRlck5hbWV9XCIpfWA7XG5cbiAgICBzd2l0Y2ggKGNvbC5yZW5kZXJUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nLXBsYWluXCI6XG4gICAgICAgIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nICYmIChjb2wuem9kVHlwZS5tYXhMZW5ndGggPz8gMCkgPD0gMjU2KSB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYDxUZXh0YXJlYSBjbGFzc05hbWU9XCJ0ZXh0LXhzIGJnLXdoaXRlXCIgcm93cz17NH0gcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICByZXR1cm4gYDxEYXRlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLWlkXCI6XG4gICAgICBjYXNlIFwic3RyaW5nLWlkXCI6XG4gICAgICAgIHJldHVybiBgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItcGxhaW5cIjpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gYDxTd2l0Y2ggJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwianNvbi1zb25hbXVmaWxlXCI6XG4gICAgICAgIHJldHVybiBgPEZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRNb2RlPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlPVwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3U2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiOlxuICAgICAgICByZXR1cm4gYDxGaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1vZGU9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU9XCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdTaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICBtYXhGaWxlcz17MTB9XG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJlbnVtc1wiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICByZXR1cm4gYDxFbnVtU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGVudW09eyR7aWR9fVxuICAgICAgICAgICAgICAgICAgICBsYWJlbHM9eyR7aWR9TGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIm51bWJlci1ma19pZFwiOlxuICAgICAgY2FzZSBcInN0cmluZy1ma19pZFwiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgcmV0dXJuIGA8SWRBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjb25maWc9eyR7cmVsUHJvcC53aXRofUFzeW5jSWRDb25maWd9XG4gICAgICAgICAgICAgICAgICAgIHN1YnNldD1cIkFcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBgPElucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9ICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgLy8gTWFueVRvTWFueSByZWxhdGlvbuydmCBGSyDrsLDsl7Tsnbjsp4Ag7ZmV7J24XG4gICAgICAgIGlmIChjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYmFzZU5hbWUgPSBjb2wubmFtZS5yZXBsYWNlKC9faWRzJC8sIFwiXCIpO1xuICAgICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gYDxJZEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZz17JHtyZWxQcm9wLndpdGh9QXN5bmNJZENvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgc3Vic2V0PVwiQVwiXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPVwiJHtjb2wubmFtZX1cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj1cIiR7Y29sLm5hbWV9XCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiICR7cmVnRXhwcn0gLz5gO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVEZWZhdWx0VmFsdWUoY29sdW1uczogUmVuZGVyaW5nTm9kZVtdKTogb2JqZWN0IHtcbiAgICByZXR1cm4gY29sdW1ucy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCBjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5vcHRpb25hbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsdWU6IHVua25vd247XG4gICAgICAgIGlmIChjb2wubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcikge1xuICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgICAgICAgIHZhbHVlID0gT2JqZWN0LmtleXMoY29sLnpvZFR5cGUuZW51bSlbMF07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEJvb2xlYW4pIHtcbiAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5jb3JlLiRab2RTdHJpbmcpIHtcbiAgICAgICAgICAvLyBOT1RFOiB6LlpvZFN0cmluZ+ycvOuhnCDruYTqtZDtlZjrqbQgei51cmwoKSwgei5lbWFpbCgpIOuTseydmCDtg4DsnoXsl5DshJwg66y47KCc6rCAIOyDneq4sOuvgOuhnCB6LmNvcmUuJFpvZFN0cmluZ+ycvOuhnCDruYTqtZDtlahcbiAgICAgICAgICAvLyBGSVhNRTogZW1haWzsnbTrgpggdXJsIO2DgOyehSDrk7Hsl5Ag64yA7ZWcIOyymOumrOqwgCDtlYTsmpTtlahcbiAgICAgICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGV0aW1lXCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gXCJub3coKVwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RBcnJheSkge1xuICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgICAgICAgIHZhbHVlID0ge307XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHRbY29sLm5hbWVdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgICAge30gYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0sXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlbmRlcih7IGVudGl0eUlkIH06IFRlbXBsYXRlT3B0aW9uc1tcInZpZXdfZm9ybVwiXSkge1xuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgLy8gUEsg7YOA7J6FIOqwkOyngFxuICAgIGNvbnN0IHBrVHlwZSA9IGVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICBjb25zdCBpZFRzVHlwZSA9IHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiID8gXCJzdHJpbmdcIiA6IFwibnVtYmVyXCI7XG4gICAgY29uc3QgaWRab2RUeXBlID1cbiAgICAgIHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiID8gXCJ6LnN0cmluZygpLm9wdGlvbmFsKClcIiA6IFwiei5udW1iZXIoKS5vcHRpb25hbCgpXCI7XG5cbiAgICAvLyBTYXZlUGFyYW1zIO2DgOyeheydhCDroZzrk5ztlZjsl6wgc2F2ZVBhcmFtc05vZGUg7IOd7ISxXG4gICAgY29uc3QgeyBsb2FkVHlwZXMgfSA9IGF3YWl0IGltcG9ydChcIi4uLy4uL3N5bmNlci9tb2R1bGUtbG9hZGVyXCIpO1xuICAgIGNvbnN0IGxvYWRlZFR5cGVzID0gYXdhaXQgbG9hZFR5cGVzKCk7XG4gICAgY29uc3QgU2F2ZVBhcmFtc1pvZFR5cGUgPSBsb2FkZWRUeXBlc1tgJHtlbnRpdHlJZH1TYXZlUGFyYW1zYF07XG5cbiAgICBpZiAoIVNhdmVQYXJhbXNab2RUeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNhdmVQYXJhbXMgZm9yICR7ZW50aXR5SWR9IG5vdCBmb3VuZC4gRGlkIHlvdSBydW4gJ3NvbmFtdSBzeW5jJz9gKTtcbiAgICB9XG5cbiAgICAvLyBab2Qg7YOA7J6F7J2EIFJlbmRlcmluZ05vZGXroZwg67OA7ZmYXG4gICAgY29uc3QgeyB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi96b2QtY29udmVydGVyXCIpO1xuICAgIGNvbnN0IHNhdmVQYXJhbXNOb2RlID0gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShTYXZlUGFyYW1zWm9kVHlwZSk7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gKHNhdmVQYXJhbXNOb2RlPy5jaGlsZHJlbiA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLm5hbWUgIT09IFwiaWRcIilcbiAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wQ2FuZGlkYXRlID0gZW50aXR5LnByb3BzLmZpbmQoKHByb3ApID0+IHByb3AubmFtZSA9PT0gY29sLm5hbWUpO1xuICAgICAgICBjb2wubGFiZWwgPSBwcm9wQ2FuZGlkYXRlPy5kZXNjID8/IGNvbC5sYWJlbDtcbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5yZXNvbHZlRGVmYXVsdFZhbHVlKGNvbHVtbnMpO1xuXG4gICAgLy8gZW51beqzvCBGS+yXkCDrjIDtlZwgaW1wb3J0IOygleuztCDsiJjsp5FcbiAgICBjb25zdCBlbnVtSW1wb3J0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGZrQ29uZmlnSW1wb3J0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgIGVudW1JbXBvcnRzLmFkZChpZCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHwgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLXBsYWluXCIgJiZcbiAgICAgICAgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRcIikgJiZcbiAgICAgICAgY29sLm5hbWUgIT09IFwiaWRcIlxuICAgICAgKSB7XG4gICAgICAgIC8vIHN0cmluZyBGSyDsspjrpqwgKOyekOyLoOydmCBQS+yduCBpZOuKlCDsoJzsmbgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICBma0NvbmZpZ0ltcG9ydHMuYWRkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpIHtcbiAgICAgICAgLy8gTWFueVRvTWFueSByZWxhdGlvbuydmCBGSyDrsLDsl7RcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICAgICAgZmtDb25maWdJbXBvcnRzLmFkZChyZWxQcm9wLndpdGgpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2FyZCxcbiAgQ2FyZENvbnRlbnQsXG4gIENhcmRIZWFkZXIsXG4gIENhcmRUaXRsZSxcbiAgSW5wdXQsJHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLXBsYWluXCIgJiYgY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFN0cmluZyAmJiAoY29sLnpvZFR5cGUubWF4TGVuZ3RoID8/IDApID4gMjU2KSA/IFwiXFxuICBUZXh0YXJlYSxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikgPyBcIlxcbiAgRW51bVNlbGVjdCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHwgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIgfHwgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSkgPyBcIlxcbiAgSWRBc3luY1NlbGVjdCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiYm9vbGVhblwiKSA/IFwiXFxuICBTd2l0Y2gsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIEZpbGVJbnB1dCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wic3RyaW5nLWRhdGV0aW1lXCIsIFwic3RyaW5nLWRhdGVcIiwgXCJkYXRldGltZVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIERhdGVJbnB1dCxcIiA6IFwiXCJ9XG59IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IHVzZVR5cGVGb3JtIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvbGliXCI7XG5pbXBvcnQgeyB1c2VRdWVyeUNsaWVudCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGNyZWF0ZUZpbGVSb3V0ZSwgdXNlUm91dGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlIH0gZnJvbSBcIkAvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgdHlwZSB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiOyR7XG4gICAgICAgIGNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFwiXFxuaW1wb3J0IHsgXCIgK1xuICAgICAgICAgICAgdW5pcXVlKFxuICAgICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7aWR9LCAke2lkfUxhYmVsYDtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgICcgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7J1xuICAgICAgICAgIDogXCJcIlxuICAgICAgfVxuaW1wb3J0IHsgZGVmYXVsdENhdGNoIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LnNoYXJlZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMgfSBmcm9tIFwiQC9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlc1wiOyR7XG4gICAgICAgIGZrQ29uZmlnSW1wb3J0cy5zaXplID4gMFxuICAgICAgICAgID8gYFxcbmltcG9ydCB7ICR7QXJyYXkuZnJvbShma0NvbmZpZ0ltcG9ydHMpXG4gICAgICAgICAgICAgIC5tYXAoKGVudGl0eSkgPT4gYCR7ZW50aXR5fUFzeW5jSWRDb25maWdgKVxuICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfSB9IGZyb20gXCJAL3NlcnZpY2VzL3NlcnZpY2VzLmdlbmVyYXRlZFwiO2BcbiAgICAgICAgICA6IFwiXCJcbiAgICAgIH1cbmltcG9ydCB7IFNEIH0gZnJvbSBcIkAvaTE4bi9zZC5nZW5lcmF0ZWRcIjtcblxuaW1wb3J0IEFycm93TGVmdEljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvYXJyb3ctbGVmdFwiO1xuaW1wb3J0IFNhdmVJY29uIGZyb20gXCJ+aWNvbnMvbHVjaWRlL3NhdmVcIjtcbmltcG9ydCBGb3JtSWNvbiBmcm9tIFwifmljb25zL21kaS9mb3JtLXNlbGVjdFwiO1xuXG5jb25zdCBmb3JtU2VhcmNoU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogJHtpZFpvZFR5cGV9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBSb3V0ZSA9IGNyZWF0ZUZpbGVSb3V0ZShcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfS9mb3JtXCIpKHtcbiAgdmFsaWRhdGVTZWFyY2g6IGZvcm1TZWFyY2hTY2hlbWEsXG4gIGNvbXBvbmVudDogJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1QYWdlLFxufSk7XG5cbmZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUGFnZSgpIHtcbiAgY29uc3QgeyBpZCB9ID0gUm91dGUudXNlU2VhcmNoKCk7XG4gIHJldHVybiA8JHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0gaWQ9e2lkfSAvPjtcbn1cblxudHlwZSAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzID0ge1xuICBpZD86ICR7aWRUc1R5cGV9O1xuICBtb2RlPzogXCJwYWdlXCIgfCBcIm1vZGFsXCI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0oeyBpZCwgbW9kZSB9OiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzKSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBmb3JtLCBzZXRGb3JtLCByZWdpc3RlciR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCIsIHN1Ym1pdFwiIDogXCJcIn0gfSA9IHVzZVR5cGVGb3JtKCR7bmFtZXMuY2FwaXRhbH1TYXZlUGFyYW1zLCAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRWYWx1ZSkucmVwbGFjZSgvXCJub3dcXChcXClcIi9nLCAnXCJcIicpfSk7XG4keygoKSA9PiB7XG4gIGNvbnN0IGhhc0RhdGV0aW1lID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKTtcbiAgY29uc3QgaGFzRGF0ZSA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZVwiKTtcbiAgaWYgKCFoYXNEYXRldGltZSAmJiAhaGFzRGF0ZSkgcmV0dXJuIFwiXCI7XG5cbiAgbGV0IGhlbHBlcnMgPSBcIlxcblwiO1xuICBpZiAoaGFzRGF0ZXRpbWUpIHtcbiAgICBoZWxwZXJzICs9IGAgIC8vIGRhdGV0aW1lLWxvY2FsIO2YleyLneycvOuhnCDrs4DtmZggKFlZWVktTU0tRERUSEg6TU0pXG4gIGNvbnN0IHRvRGF0ZXRpbWVMb2NhbFN0cmluZyA9IChkYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBkID0gdHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxNik7XG4gIH07XG5cbiAgLy8gZGF0ZXRpbWUtbG9jYWwg66y47J6Q7Je07J2EIERhdGXroZwg67OA7ZmYXG4gIGNvbnN0IGZyb21EYXRldGltZUxvY2FsU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfTtcbmA7XG4gIH1cbiAgaWYgKGhhc0RhdGUpIHtcbiAgICBoZWxwZXJzICs9IGAgIC8vIGRhdGUg7ZiV7Iud7Jy866GcIOuzgO2ZmCAoWVlZWS1NTS1ERClcbiAgY29uc3QgdG9EYXRlU3RyaW5nID0gKGRhdGU6IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGQgPSB0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIiA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZTtcbiAgICByZXR1cm4gZC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXTtcbiAgfTtcblxuICAvLyBkYXRlIOusuOyekOyXtOydhCBEYXRl66GcIOuzgO2ZmFxuICBjb25zdCBmcm9tRGF0ZVN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwgPT4ge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIH07XG5gO1xuICB9XG4gIHJldHVybiBoZWxwZXJzO1xufSkoKX1cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaWQpIHtcbiAgICAgICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLmdldCR7bmFtZXMuY2FwaXRhbH0oXCJBXCIsIGlkKS50aGVuKChyb3cpID0+IHtcbiAgICAgICAgc2V0Rm9ybSgocHJldkZvcm0pID0+ICh7XG4gICAgICAgICAgLi4ucHJldkZvcm0sXG4gICAgICAgICAgLi4ucm93LCR7KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHJlbGF0aW9uIO2VhOuTnOuTpOydhCDssL7slYTshJwg67OA7ZmYIOy9lOuTnCDsg53shLFcbiAgICAgICAgICAgIC8vIG51bWJlciBGSywgc3RyaW5nIEZLICjsnpDsi6DsnZggUEsg7KCc7Jm4KSwgTWFueVRvTWFueSBGSyDrsLDsl7Trp4wg7ZWE7YSw66eBXG4gICAgICAgICAgICBjb25zdCByZWxhdGlvbkZpZWxkcyA9IGNvbHVtbnNcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoY29sKSA9PlxuICAgICAgICAgICAgICAgICAgY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHxcbiAgICAgICAgICAgICAgICAgIGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1ma19pZFwiIHx8XG4gICAgICAgICAgICAgICAgICAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1hbnlUb01hbnkoYXJyYXkpIOyymOumrFxuICAgICAgICAgICAgICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVsYXRpb25OYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5tYXAoKHIpID0+IHIuaWQpID8/IFtdLGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZLKG51bWJlciwgc3RyaW5nKSDsspjrpqxcbiAgICAgICAgICAgICAgICBjb25zdCByZWxhdGlvbk5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjb2wubnVsbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCA/PyBudWxsLGA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCxgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVsYXRpb25GaWVsZHM7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbaWQsIHNldEZvcm1dKTtcblxuICBjb25zdCBzYXZlTXV0YXRpb24gPSAke25hbWVzLmNhcGl0YWx9U2VydmljZS51c2VTYXZlTXV0YXRpb24oKTtcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gJHtcbiAgICBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSlcbiAgICAgID8gYHN1Ym1pdChhc3luYyAoZm9ybSkgPT4ge1xuICAgIHNhdmVNdXRhdGlvbi5tdXRhdGUoXG4gICAgICB7IHNwYTogW2Zvcm1dIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBbXCIke25hbWVzLmNhcGl0YWx9XCJdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG1vZGUgPT09IFwibW9kYWxcIikge1xuICAgICAgICAgICAgLy8gbW9kYWwgbW9kZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGRlZmF1bHRDYXRjaCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSlgXG4gICAgICA6IGAoKSA9PiB7XG4gICAgc2F2ZU11dGF0aW9uLm11dGF0ZShcbiAgICAgIHsgc3BhOiBbZm9ybV0gfSxcbiAgICAgIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgICAgcXVlcnlLZXk6IFtcIiR7bmFtZXMuY2FwaXRhbH1cIl0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAobW9kZSA9PT0gXCJtb2RhbFwiKSB7XG4gICAgICAgICAgICAvLyBtb2RhbCBtb2RlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZSh7IHRvOiBcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfVwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZGVmYXVsdENhdGNoLFxuICAgICAgfSxcbiAgICApO1xuICB9YFxuICB9O1xuXG4gIGNvbnN0IFBBR0UgPSB7XG4gICAgdGl0bGU6IGlkID8gU0QoXCJlbnRpdHkuZWRpdFwiKShTRChcImVudGl0eS4ke2VudGl0eUlkfVwiKSwgaWQpIDogU0QoXCJlbnRpdHkuY3JlYXRlXCIpKFNEKFwiZW50aXR5LiR7ZW50aXR5SWR9XCIpKSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctWzE4MDBweF0gbXgtYXV0byBwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTYgbWItOFwiPlxuICAgICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPEZvcm1JY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgaC01XCI+e1BBR0UudGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7bW9kZSAhPT0gXCJtb2RhbFwiICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KX1cbiAgICAgICAgICAgICAgICBpY29uPXs8QXJyb3dMZWZ0SWNvbiAvPn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtTRChcImNvbW1vbi5iYWNrVG9MaXN0XCIpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogRm9ybSBDYXJkICovfVxuICAgICAgICAgIDxDYXJkIGNsYXNzTmFtZT1cImJvcmRlci1ib3JkZXIvNDAgYmctZ3JheS01MCBzaGFkb3ctc21cIj5cbiAgICAgICAgICAgIDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInB4LTQgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgbS0wXCI+XG4gICAgICAgICAgICAgICAge1BBR0UudGl0bGV9XG4gICAgICAgICAgICAgIDwvQ2FyZFRpdGxlPlxuICAgICAgICAgICAgPC9DYXJkSGVhZGVyPlxuICAgICAgICAgICAgPENhcmRDb250ZW50IGNsYXNzTmFtZT1cInAtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNlwiPlxuJHtjb2x1bW5zXG4gIC5maWx0ZXIoKGNvbCkgPT4gY29sLm5hbWUgIT09IFwiY3JlYXRlZF9hdFwiKVxuICAubWFwKChjb2wpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9ICgoKSA9PiB7XG4gICAgICBpZiAoY29sLmxhYmVsLmVuZHNXaXRoKFwiSWRcIikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChjb2wubGFiZWwucmVwbGFjZShcIklkXCIsIFwiXCIpKTtcbiAgICAgICAgICByZXR1cm4gZW50aXR5LnRpdGxlID8/IGNvbC5sYWJlbDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbC5sYWJlbDtcbiAgICB9KSgpO1xuICAgIGNvbnN0IGxhYmVsTmFtZSA9IGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgcmV0dXJuIGAgICAgICAgICAgICAgICAgey8qICR7bGFiZWx9ICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC14cyBtYi0xIHRleHQtZ3JheS02MDBcIj57U0QoXCJlbnRpdHkuJHtlbnRpdHlJZH0uJHtsYWJlbE5hbWV9XCIpfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyQ29sdW1uKGVudGl0eUlkLCBjb2wpfVxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gIH0pXG4gIC5qb2luKFwiXFxuXFxuXCIpfVxuXG4gICAgICAgICAgICAgICAgey8qIFNhdmUgQnV0dG9uICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB0LTRcIj5cbiAgICAgICAgICAgICAgICAgIHtmb3JtLmlkICYmIGZvcm0uY3JlYXRlZF9hdCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwibXItMiB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj57U0QoXCJmb3JtLmNyZWF0ZWRBdFwiKX06PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmcoZm9ybS5jcmVhdGVkX2F0KX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3VibWl0fVxuICAgICAgICAgICAgICAgICAgICBpY29uPXs8U2F2ZUljb24gLz59XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtTRChcImNvbW1vbi5zYXZlXCIpfVxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9DYXJkQ29udGVudD5cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG4gICAgICBgLnRyaW0oKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7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
414
+
415
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19mb3JtLnRlbXBsYXRlLmpzIiwibmFtZXMiOlsieiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgUmVuZGVyaW5nTm9kZSwgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIGdldEVudW1JbmZvRnJvbUNvbE5hbWUsXG4gIGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lLFxuICBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZSxcbn0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19mb3JtIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfZm9ybVwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCJ3ZWIvc3JjL3JvdXRlcy9hZG1pblwiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnNQbHVyYWx9L2Zvcm0udHN4YCxcbiAgICB9O1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0UmVxdWlyZWREaWN0S2V5cygpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgIHJldHVybiBbXCJlbnRpdHkuY3JlYXRlXCIsIFwiZW50aXR5LmVkaXRcIiwgXCJjb21tb24uYmFja1RvTGlzdFwiLCBcImZvcm0uY3JlYXRlZEF0XCIsIFwiY29tbW9uLnNhdmVcIl07XG4gIH1cblxuICB3cmFwRkMoYm9keTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPiR7bGFiZWwgPyBgXFxuICA8TGFiZWw+JHtsYWJlbH08L0xhYmVsPmAgOiBcIlwifWAsXG4gICAgICBgICAke2JvZHl9YCxcbiAgICAgIGA8L2Rpdj5gLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfVxuICB3cmFwRkcoYm9keTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMud3JhcEZDKGJvZHksIGxhYmVsKTtcbiAgfVxuXG4gIHJlbmRlckNvbHVtbkltcG9ydChlbnRpdHlJZDogc3RyaW5nLCBjb2w6IFJlbmRlcmluZ05vZGUpIHtcbiAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikge1xuICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJlbnVtXCIgYXMgY29uc3QsIGVudW1JZDogaWQgfTtcbiAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiIHx8IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1ma19pZFwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImZrXCIgYXMgY29uc3QsIGVudGl0eUlkOiByZWxQcm9wLndpdGggfTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgICAvLyBNYW55VG9NYW55IHJlbGF0aW9u7J2YIEZLIOuwsOyXtFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYmFzZU5hbWUgPSBjb2wubmFtZS5yZXBsYWNlKC9faWRzJC8sIFwiXCIpO1xuICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGJhc2VOYW1lKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJma1wiIGFzIGNvbnN0LCBlbnRpdHlJZDogcmVsUHJvcC53aXRoIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyQ29sdW1uKGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVnRXhwciA9IGB7Li4ucmVnaXN0ZXIoXCIke2NvbC5uYW1lfVwiKX1gO1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyTmFtZSA9IGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSBge1NEKFwiZW50aXR5LiR7ZW50aXR5SWR9LiR7cGxhY2Vob2xkZXJOYW1lfVwiKX1gO1xuXG4gICAgc3dpdGNoIChjb2wucmVuZGVyVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZy1wbGFpblwiOlxuICAgICAgICBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFN0cmluZyAmJiAoY29sLnpvZFR5cGUubWF4TGVuZ3RoID8/IDApIDw9IDI1Nikge1xuICAgICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGA8VGV4dGFyZWEgY2xhc3NOYW1lPVwidGV4dC14cyBiZy13aGl0ZVwiIHJvd3M9ezR9IHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9ICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcbiAgICAgICAgcmV0dXJuIGA8RGF0ZUlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcIm51bWJlci1pZFwiOlxuICAgICAgY2FzZSBcInN0cmluZy1pZFwiOlxuICAgICAgICByZXR1cm4gYDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLXBsYWluXCI6XG4gICAgICAgIHJldHVybiBgPElucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9ICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgcmV0dXJuIGA8U3dpdGNoICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcImpzb24tc29uYW11ZmlsZVwiOlxuICAgICAgICByZXR1cm4gYDxGaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkTW9kZT1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZT1cImltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld1NpemU9XCJtZFwiXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIjpcbiAgICAgICAgcmV0dXJuIGA8RmlsZUlucHV0XG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRNb2RlPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlPVwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3U2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4RmlsZXM9ezEwfVxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwiZW51bXNcIjpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGA8RW51bVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBlbnVtPXske2lkfX1cbiAgICAgICAgICAgICAgICAgICAgbGFiZWxzPXske2lkfUxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJudW1iZXItZmtfaWRcIjpcbiAgICAgIGNhc2UgXCJzdHJpbmctZmtfaWRcIjpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgIHJldHVybiBgPElkQXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnPXske3JlbFByb3Aud2l0aH1Bc3luY0lkQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgICBzdWJzZXQ9XCJBXCJcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgIC8vIE1hbnlUb01hbnkgcmVsYXRpb27snZggRksg67Cw7Je07J247KeAIO2ZleyduFxuICAgICAgICBpZiAoY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VOYW1lID0gY29sLm5hbWUucmVwbGFjZSgvX2lkcyQvLCBcIlwiKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIGA8SWRBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjb25maWc9eyR7cmVsUHJvcC53aXRofUFzeW5jSWRDb25maWd9XG4gICAgICAgICAgICAgICAgICAgIHN1YnNldD1cIkFcIlxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPVwiJHtjb2wubmFtZX1cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj1cIiR7Y29sLm5hbWV9XCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlRGVmYXVsdFZhbHVlKGNvbHVtbnM6IFJlbmRlcmluZ05vZGVbXSk6IG9iamVjdCB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wub3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duO1xuICAgICAgICBpZiAoY29sLm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICAgICAgICB2YWx1ZSA9IE9iamVjdC5rZXlzKGNvbC56b2RUeXBlLmVudW0pWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouY29yZS4kWm9kU3RyaW5nKSB7XG4gICAgICAgICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgICAgICAgLy8gRklYTUU6IGVtYWls7J2064KYIHVybCDtg4DsnoUg65Ox7JeQIOuMgO2VnCDsspjrpqzqsIAg7ZWE7JqU7ZWoXG4gICAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwibm93KClcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W2NvbC5uYW1lXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2Zvcm1cIl0pIHtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIC8vIFBLIO2DgOyehSDqsJDsp4BcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRUc1R5cGUgPSBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwic3RyaW5nXCIgOiBcIm51bWJlclwiO1xuICAgIGNvbnN0IGlkWm9kVHlwZSA9XG4gICAgICBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwiei5zdHJpbmcoKS5vcHRpb25hbCgpXCIgOiBcInoubnVtYmVyKCkub3B0aW9uYWwoKVwiO1xuXG4gICAgLy8gU2F2ZVBhcmFtcyDtg4DsnoXsnYQg66Gc65Oc7ZWY7JesIHNhdmVQYXJhbXNOb2RlIOyDneyEsVxuICAgIGNvbnN0IHsgbG9hZFR5cGVzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi8uLi9zeW5jZXIvbW9kdWxlLWxvYWRlclwiKTtcbiAgICBjb25zdCBsb2FkZWRUeXBlcyA9IGF3YWl0IGxvYWRUeXBlcygpO1xuICAgIGNvbnN0IFNhdmVQYXJhbXNab2RUeXBlID0gbG9hZGVkVHlwZXNbYCR7ZW50aXR5SWR9U2F2ZVBhcmFtc2BdO1xuXG4gICAgaWYgKCFTYXZlUGFyYW1zWm9kVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTYXZlUGFyYW1zIGZvciAke2VudGl0eUlkfSBub3QgZm91bmQuIERpZCB5b3UgcnVuICdzb25hbXUgc3luYyc/YCk7XG4gICAgfVxuXG4gICAgLy8gWm9kIO2DgOyeheydhCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmFxuICAgIGNvbnN0IHsgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vem9kLWNvbnZlcnRlclwiKTtcbiAgICBjb25zdCBzYXZlUGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoU2F2ZVBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3QgY29sdW1ucyA9IChzYXZlUGFyYW1zTm9kZT8uY2hpbGRyZW4gPz8gW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImlkXCIpXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcENhbmRpZGF0ZSA9IGVudGl0eS5wcm9wcy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IGNvbC5uYW1lKTtcbiAgICAgICAgY29sLmxhYmVsID0gcHJvcENhbmRpZGF0ZT8uZGVzYyA/PyBjb2wubGFiZWw7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zKTtcblxuICAgIC8vIGVudW3qs7wgRkvsl5Ag64yA7ZWcIGltcG9ydCDsoJXrs7Qg7IiY7KeRXG4gICAgY29uc3QgZW51bUltcG9ydHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBma0NvbmZpZ0ltcG9ydHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICBlbnVtSW1wb3J0cy5hZGQoaWQpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiIHx8IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1ma19pZFwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICBma0NvbmZpZ0ltcG9ydHMuYWRkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1wbGFpblwiICYmXG4gICAgICAgIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkXCIpICYmXG4gICAgICAgIGNvbC5uYW1lICE9PSBcImlkXCJcbiAgICAgICkge1xuICAgICAgICAvLyBzdHJpbmcgRksg7LKY66asICjsnpDsi6DsnZggUEvsnbggaWTripQg7KCc7Jm4KVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgZmtDb25maWdJbXBvcnRzLmFkZChyZWxQcm9wLndpdGgpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgICAgIC8vIE1hbnlUb01hbnkgcmVsYXRpb27snZggRksg67Cw7Je0XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYmFzZU5hbWUgPSBjb2wubmFtZS5yZXBsYWNlKC9faWRzJC8sIFwiXCIpO1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcyksXG4gICAgICBib2R5OiBgXG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENhcmQsXG4gIENhcmRDb250ZW50LFxuICBDYXJkSGVhZGVyLFxuICBDYXJkVGl0bGUsXG4gIElucHV0LCR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1wbGFpblwiICYmIGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiYgKGNvbC56b2RUeXBlLm1heExlbmd0aCA/PyAwKSA+IDI1NikgPyBcIlxcbiAgVGV4dGFyZWEsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpID8gXCJcXG4gIEVudW1TZWxlY3QsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiIHx8IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1ma19pZFwiIHx8IChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkpID8gXCJcXG4gIElkQXN5bmNTZWxlY3QsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImJvb2xlYW5cIikgPyBcIlxcbiAgU3dpdGNoLFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJqc29uLXNvbmFtdWZpbGVcIiwgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKSA/IFwiXFxuICBGaWxlSW5wdXQsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcInN0cmluZy1kYXRldGltZVwiLCBcInN0cmluZy1kYXRlXCIsIFwiZGF0ZXRpbWVcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKSA/IFwiXFxuICBEYXRlSW5wdXQsXCIgOiBcIlwifVxufSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9jb21wb25lbnRzXCI7XG5pbXBvcnQgeyB1c2VUeXBlRm9ybSB9IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2xpYlwiO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBjcmVhdGVGaWxlUm91dGUsIHVzZVJvdXRlciB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2VydmljZSB9IGZyb20gXCJAL3NlcnZpY2VzL3NlcnZpY2VzLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHR5cGUgeyAke25hbWVzLmNhcGl0YWx9U3Vic2V0QSB9IGZyb20gXCJAL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWRcIjske1xuICAgICAgICBjb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKS5sZW5ndGggPiAwXG4gICAgICAgICAgPyBcIlxcbmltcG9ydCB7IFwiICtcbiAgICAgICAgICAgIHVuaXF1ZShcbiAgICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIilcbiAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2lkfSwgJHtpZH1MYWJlbGA7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKSArXG4gICAgICAgICAgICAnIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiOydcbiAgICAgICAgICA6IFwiXCJcbiAgICAgIH1cbmltcG9ydCB7IGRlZmF1bHRDYXRjaCB9IGZyb20gXCJAL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWRcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TYXZlUGFyYW1zIH0gZnJvbSBcIkAvc2VydmljZXMvJHtuYW1lcy5mc30vJHtuYW1lcy5mc30udHlwZXNcIjske1xuICAgICAgICBma0NvbmZpZ0ltcG9ydHMuc2l6ZSA+IDBcbiAgICAgICAgICA/IGBcXG5pbXBvcnQgeyAke0FycmF5LmZyb20oZmtDb25maWdJbXBvcnRzKVxuICAgICAgICAgICAgICAubWFwKChlbnRpdHkpID0+IGAke2VudGl0eX1Bc3luY0lkQ29uZmlnYClcbiAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX0gfSBmcm9tIFwiQC9zZXJ2aWNlcy9zZXJ2aWNlcy5nZW5lcmF0ZWRcIjtgXG4gICAgICAgICAgOiBcIlwiXG4gICAgICB9XG5pbXBvcnQgeyBTRCB9IGZyb20gXCJAL2kxOG4vc2QuZ2VuZXJhdGVkXCI7XG5cbmltcG9ydCBBcnJvd0xlZnRJY29uIGZyb20gXCJ+aWNvbnMvbHVjaWRlL2Fycm93LWxlZnRcIjtcbmltcG9ydCBTYXZlSWNvbiBmcm9tIFwifmljb25zL2x1Y2lkZS9zYXZlXCI7XG5pbXBvcnQgRm9ybUljb24gZnJvbSBcIn5pY29ucy9tZGkvZm9ybS1zZWxlY3RcIjtcblxuY29uc3QgZm9ybVNlYXJjaFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6ICR7aWRab2RUeXBlfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgUm91dGUgPSBjcmVhdGVGaWxlUm91dGUoXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH0vZm9ybVwiKSh7XG4gIHZhbGlkYXRlU2VhcmNoOiBmb3JtU2VhcmNoU2NoZW1hLFxuICBjb21wb25lbnQ6ICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUGFnZSxcbn0pO1xuXG5mdW5jdGlvbiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVBhZ2UoKSB7XG4gIGNvbnN0IHsgaWQgfSA9IFJvdXRlLnVzZVNlYXJjaCgpO1xuICByZXR1cm4gPCR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtIGlkPXtpZH0gLz47XG59XG5cbnR5cGUgJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1Qcm9wcyA9IHtcbiAgaWQ/OiAke2lkVHNUeXBlfTtcbiAgbW9kZT86IFwicGFnZVwiIHwgXCJtb2RhbFwiO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtKHsgaWQsIG1vZGUgfTogJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1Qcm9wcykge1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgZm9ybSwgc2V0Rm9ybSwgcmVnaXN0ZXIke2NvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJqc29uLXNvbmFtdWZpbGVcIiwgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKSA/IFwiLCBzdWJtaXRcIiA6IFwiXCJ9IH0gPSB1c2VUeXBlRm9ybSgke25hbWVzLmNhcGl0YWx9U2F2ZVBhcmFtcywgJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0VmFsdWUpLnJlcGxhY2UoL1wibm93XFwoXFwpXCIvZywgJ1wiXCInKX0pO1xuJHsoKCkgPT4ge1xuICBjb25zdCBoYXNEYXRldGltZSA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZXRpbWVcIik7XG4gIGNvbnN0IGhhc0RhdGUgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGVcIik7XG4gIGlmICghaGFzRGF0ZXRpbWUgJiYgIWhhc0RhdGUpIHJldHVybiBcIlwiO1xuXG4gIGxldCBoZWxwZXJzID0gXCJcXG5cIjtcbiAgaWYgKGhhc0RhdGV0aW1lKSB7XG4gICAgaGVscGVycyArPSBgICAvLyBkYXRldGltZS1sb2NhbCDtmJXsi53snLzroZwg67OA7ZmYIChZWVlZLU1NLUREVEhIOk1NKVxuICBjb25zdCB0b0RhdGV0aW1lTG9jYWxTdHJpbmcgPSAoZGF0ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgZCA9IHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlO1xuICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTYpO1xuICB9O1xuXG4gIC8vIGRhdGV0aW1lLWxvY2FsIOusuOyekOyXtOydhCBEYXRl66GcIOuzgO2ZmFxuICBjb25zdCBmcm9tRGF0ZXRpbWVMb2NhbFN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwgPT4ge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIH07XG5gO1xuICB9XG4gIGlmIChoYXNEYXRlKSB7XG4gICAgaGVscGVycyArPSBgICAvLyBkYXRlIO2YleyLneycvOuhnCDrs4DtmZggKFlZWVktTU0tREQpXG4gIGNvbnN0IHRvRGF0ZVN0cmluZyA9IChkYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBkID0gdHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07XG4gIH07XG5cbiAgLy8gZGF0ZSDrrLjsnpDsl7TsnYQgRGF0ZeuhnCDrs4DtmZhcbiAgY29uc3QgZnJvbURhdGVTdHJpbmcgPSAodmFsdWU6IHN0cmluZyk6IERhdGUgfCBudWxsID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9O1xuYDtcbiAgfVxuICByZXR1cm4gaGVscGVycztcbn0pKCl9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlkKSB7XG4gICAgICAke25hbWVzLmNhcGl0YWx9U2VydmljZS5nZXQke25hbWVzLmNhcGl0YWx9KFwiQVwiLCBpZCkudGhlbigocm93KSA9PiB7XG4gICAgICAgIHNldEZvcm0oKHByZXZGb3JtKSA9PiAoe1xuICAgICAgICAgIC4uLnByZXZGb3JtLFxuICAgICAgICAgIC4uLnJvdywkeygoKSA9PiB7XG4gICAgICAgICAgICAvLyByZWxhdGlvbiDtlYTrk5zrk6TsnYQg7LC+7JWE7IScIOuzgO2ZmCDsvZTrk5wg7IOd7ISxXG4gICAgICAgICAgICAvLyBudW1iZXIgRkssIHN0cmluZyBGSyAo7J6Q7Iug7J2YIFBLIOygnOyZuCksIE1hbnlUb01hbnkgRksg67Cw7Je066eMIO2VhO2EsOungVxuICAgICAgICAgICAgY29uc3QgcmVsYXRpb25GaWVsZHMgPSBjb2x1bW5zXG4gICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGNvbCkgPT5cbiAgICAgICAgICAgICAgICAgIGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiIHx8XG4gICAgICAgICAgICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIiB8fFxuICAgICAgICAgICAgICAgICAgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBNYW55VG9NYW55KGFycmF5KSDsspjrpqxcbiAgICAgICAgICAgICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uTmFtZSA9IGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYFxcbiAgICAgICAgICAke2NvbC5uYW1lfTogcm93LiR7cmVsYXRpb25OYW1lfT8ubWFwKChyKSA9PiByLmlkKSA/PyBbXSxgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBGSyhudW1iZXIsIHN0cmluZykg7LKY66asXG4gICAgICAgICAgICAgICAgY29uc3QgcmVsYXRpb25OYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sLm51bGxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYFxcbiAgICAgICAgICAke2NvbC5uYW1lfTogcm93LiR7cmVsYXRpb25OYW1lfT8uaWQgPz8gbnVsbCxgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYFxcbiAgICAgICAgICAke2NvbC5uYW1lfTogcm93LiR7cmVsYXRpb25OYW1lfT8uaWQsYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlbGF0aW9uRmllbGRzO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2lkLCBzZXRGb3JtXSk7XG5cbiAgY29uc3Qgc2F2ZU11dGF0aW9uID0gJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UudXNlU2F2ZU11dGF0aW9uKCk7XG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICR7XG4gICAgY29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpXG4gICAgICA/IGBzdWJtaXQoYXN5bmMgKGZvcm0pID0+IHtcbiAgICBzYXZlTXV0YXRpb24ubXV0YXRlKFxuICAgICAgeyBzcGE6IFtmb3JtXSB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgICAgICBxdWVyeUtleTogW1wiJHtuYW1lcy5jYXBpdGFsfVwiXSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChtb2RlID09PSBcIm1vZGFsXCIpIHtcbiAgICAgICAgICAgIC8vIG1vZGFsIG1vZGVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKHsgdG86IFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9XCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiBkZWZhdWx0Q2F0Y2gsXG4gICAgICB9LFxuICAgICk7XG4gIH0pYFxuICAgICAgOiBgKCkgPT4ge1xuICAgIHNhdmVNdXRhdGlvbi5tdXRhdGUoXG4gICAgICB7IHNwYTogW2Zvcm1dIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBbXCIke25hbWVzLmNhcGl0YWx9XCJdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG1vZGUgPT09IFwibW9kYWxcIikge1xuICAgICAgICAgICAgLy8gbW9kYWwgbW9kZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGRlZmF1bHRDYXRjaCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfWBcbiAgfTtcblxuICBjb25zdCBQQUdFID0ge1xuICAgIHRpdGxlOiBpZCA/IFNEKFwiZW50aXR5LmVkaXRcIikoU0QoXCJlbnRpdHkuJHtlbnRpdHlJZH1cIiksIGlkKSA6IFNEKFwiZW50aXR5LmNyZWF0ZVwiKShTRChcImVudGl0eS4ke2VudGl0eUlkfVwiKSksXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LVsxODAwcHhdIG14LWF1dG8gcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS02IG1iLThcIj5cbiAgICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxGb3JtSWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkIGgtNVwiPntQQUdFLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge21vZGUgIT09IFwibW9kYWxcIiAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcm91dGVyLm5hdmlnYXRlKHsgdG86IFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9XCIgfSl9XG4gICAgICAgICAgICAgICAgaWNvbj17PEFycm93TGVmdEljb24gLz59XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7U0QoXCJjb21tb24uYmFja1RvTGlzdFwiKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIEZvcm0gQ2FyZCAqL31cbiAgICAgICAgICA8Q2FyZCBjbGFzc05hbWU9XCJib3JkZXItYm9yZGVyLzQwIGJnLWdyYXktNTAgc2hhZG93LXNtXCI+XG4gICAgICAgICAgICA8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJweC00IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIG0tMFwiPlxuICAgICAgICAgICAgICAgIHtQQUdFLnRpdGxlfVxuICAgICAgICAgICAgICA8L0NhcmRUaXRsZT5cbiAgICAgICAgICAgIDwvQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgIDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwLTZcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTZcIj5cbiR7Y29sdW1uc1xuICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImNyZWF0ZWRfYXRcIilcbiAgLm1hcCgoY29sKSA9PiB7XG4gICAgY29uc3QgbGFiZWwgPSAoKCkgPT4ge1xuICAgICAgaWYgKGNvbC5sYWJlbC5lbmRzV2l0aChcIklkXCIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoY29sLmxhYmVsLnJlcGxhY2UoXCJJZFwiLCBcIlwiKSk7XG4gICAgICAgICAgcmV0dXJuIGVudGl0eS50aXRsZSA/PyBjb2wubGFiZWw7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgfSkoKTtcbiAgICBjb25zdCBsYWJlbE5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgIHJldHVybiBgICAgICAgICAgICAgICAgIHsvKiAke2xhYmVsfSAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQteHMgbWItMSB0ZXh0LWdyYXktNjAwXCI+e1NEKFwiZW50aXR5LiR7ZW50aXR5SWR9LiR7bGFiZWxOYW1lfVwiKX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlckNvbHVtbihlbnRpdHlJZCwgY29sKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICB9KVxuICAuam9pbihcIlxcblxcblwiKX1cblxuICAgICAgICAgICAgICAgIHsvKiBTYXZlIEJ1dHRvbiAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwdC00XCI+XG4gICAgICAgICAgICAgICAgICB7Zm9ybS5pZCAmJiBmb3JtLmNyZWF0ZWRfYXQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cIm1yLTIgdGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+e1NEKFwiZm9ybS5jcmVhdGVkQXRcIil9OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nKGZvcm0uY3JlYXRlZF9hdCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICAgICAgaWNvbj17PFNhdmVJY29uIC8+fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7U0QoXCJjb21tb24uc2F2ZVwiKX1cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvQ2FyZENvbnRlbnQ+XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztvQkFHMkQ7YUFPeEM7Y0FDbUI7QUFFdEMsSUFBYSxzQkFBYixjQUF5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
@@ -1,6 +1,5 @@
1
1
  import { EntityManager, init_entity_manager } from "../../entity/entity-manager.js";
2
2
  import { Template, init_template } from "../template.js";
3
-
4
3
  //#region src/template/implementations/view_id_all_select.template.ts
5
4
  init_entity_manager();
6
5
  init_template();
@@ -31,7 +30,7 @@ ${JSON.stringify({
31
30
  };
32
31
  }
33
32
  };
34
-
35
33
  //#endregion
36
34
  export { Template__view_id_all_select };
37
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19pZF9hbGxfc2VsZWN0LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hbGxfc2VsZWN0LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19pZF9hbGxfc2VsZWN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfaWRfYWxsX3NlbGVjdFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCJ3ZWIvc3JjL2NvbXBvbmVudHNcIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzfS8ke25hbWVzLmNhcGl0YWx9SWRBbGxTZWxlY3QudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHsgZW50aXR5SWQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19pZF9hbGxfc2VsZWN0XCJdKSB7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuLypcbnZpZXdfaWRfYWxsX3NlbGVjdFxuJHtKU09OLnN0cmluZ2lmeSh7XG4gIGtleTogdGhpcy5rZXksXG4gIG9wdGlvbnM6IGVudGl0eUlkLFxufSl9XG4qL1xuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7cUJBQTREO2VBR3JCO0FBRXZDLElBQWEsK0JBQWIsY0FBa0QsU0FBUztDQUN6RCxjQUFjO0FBQ1osUUFBTSxxQkFBcUI7O0NBRzdCLGlCQUFpQixPQUEwQjtBQUN6QyxTQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVE7R0FDcEM7O0NBR0gsT0FBTyxFQUFFLFlBQW1EO0VBQzFELE1BQU0sUUFBUSxjQUFjLGVBQWUsU0FBUztBQUVwRCxTQUFPO0dBQ0wsR0FBRyxLQUFLLGlCQUFpQixNQUFNO0dBQy9CLE1BQU07OztFQUdWLEtBQUssVUFBVTtJQUNmLEtBQUssS0FBSztJQUNWLFNBQVM7SUFDVixDQUFDLENBQUM7O1FBRUssTUFBTTtHQUNSLFlBQVksRUFBRTtHQUNmIn0=
35
+
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19pZF9hbGxfc2VsZWN0LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hbGxfc2VsZWN0LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19pZF9hbGxfc2VsZWN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfaWRfYWxsX3NlbGVjdFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCJ3ZWIvc3JjL2NvbXBvbmVudHNcIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzfS8ke25hbWVzLmNhcGl0YWx9SWRBbGxTZWxlY3QudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHsgZW50aXR5SWQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19pZF9hbGxfc2VsZWN0XCJdKSB7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuLypcbnZpZXdfaWRfYWxsX3NlbGVjdFxuJHtKU09OLnN0cmluZ2lmeSh7XG4gIGtleTogdGhpcy5rZXksXG4gIG9wdGlvbnM6IGVudGl0eUlkLFxufSl9XG4qL1xuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7OztvQkFBMkQ7Y0FHckI7QUFFdEMsSUFBYSwrQkFBYixjQUFrRCxTQUFTO0NBQ3pELGNBQWM7RUFDWixNQUFNLG9CQUFvQjtDQUM1QjtDQUVBLGlCQUFpQixPQUEwQjtFQUN6QyxPQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVE7RUFDckM7Q0FDRjtDQUVBLE9BQU8sRUFBRSxZQUFtRDtFQUMxRCxNQUFNLFFBQVEsY0FBYyxlQUFlLFFBQVE7RUFFbkQsT0FBTztHQUNMLEdBQUcsS0FBSyxpQkFBaUIsS0FBSztHQUM5QixNQUFNOzs7RUFHVixLQUFLLFVBQVU7SUFDZixLQUFLLEtBQUs7SUFDVixTQUFTO0dBQ1gsQ0FBQyxFQUFFOztRQUVLLEtBQUs7R0FDUCxZQUFZLENBQUM7RUFDZjtDQUNGO0FBQ0YifQ==