gitx.do 0.1.1 → 0.1.2

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 (356) hide show
  1. package/README.md +40 -353
  2. package/dist/do/logger.d.ts +50 -0
  3. package/dist/do/logger.d.ts.map +1 -0
  4. package/dist/do/logger.js +122 -0
  5. package/dist/do/logger.js.map +1 -0
  6. package/dist/{durable-object → do}/schema.d.ts +3 -3
  7. package/dist/do/schema.d.ts.map +1 -0
  8. package/dist/{durable-object → do}/schema.js +4 -3
  9. package/dist/do/schema.js.map +1 -0
  10. package/dist/do/types.d.ts +267 -0
  11. package/dist/do/types.d.ts.map +1 -0
  12. package/dist/do/types.js +62 -0
  13. package/dist/do/types.js.map +1 -0
  14. package/dist/index.d.ts +14 -469
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +31 -483
  17. package/dist/index.js.map +1 -1
  18. package/package.json +13 -21
  19. package/dist/cli/commands/add.d.ts +0 -176
  20. package/dist/cli/commands/add.d.ts.map +0 -1
  21. package/dist/cli/commands/add.js +0 -979
  22. package/dist/cli/commands/add.js.map +0 -1
  23. package/dist/cli/commands/blame.d.ts +0 -259
  24. package/dist/cli/commands/blame.d.ts.map +0 -1
  25. package/dist/cli/commands/blame.js +0 -609
  26. package/dist/cli/commands/blame.js.map +0 -1
  27. package/dist/cli/commands/branch.d.ts +0 -249
  28. package/dist/cli/commands/branch.d.ts.map +0 -1
  29. package/dist/cli/commands/branch.js +0 -693
  30. package/dist/cli/commands/branch.js.map +0 -1
  31. package/dist/cli/commands/checkout.d.ts +0 -73
  32. package/dist/cli/commands/checkout.d.ts.map +0 -1
  33. package/dist/cli/commands/checkout.js +0 -725
  34. package/dist/cli/commands/checkout.js.map +0 -1
  35. package/dist/cli/commands/commit.d.ts +0 -182
  36. package/dist/cli/commands/commit.d.ts.map +0 -1
  37. package/dist/cli/commands/commit.js +0 -457
  38. package/dist/cli/commands/commit.js.map +0 -1
  39. package/dist/cli/commands/diff.d.ts +0 -464
  40. package/dist/cli/commands/diff.d.ts.map +0 -1
  41. package/dist/cli/commands/diff.js +0 -959
  42. package/dist/cli/commands/diff.js.map +0 -1
  43. package/dist/cli/commands/log.d.ts +0 -239
  44. package/dist/cli/commands/log.d.ts.map +0 -1
  45. package/dist/cli/commands/log.js +0 -535
  46. package/dist/cli/commands/log.js.map +0 -1
  47. package/dist/cli/commands/merge.d.ts +0 -106
  48. package/dist/cli/commands/merge.d.ts.map +0 -1
  49. package/dist/cli/commands/merge.js +0 -852
  50. package/dist/cli/commands/merge.js.map +0 -1
  51. package/dist/cli/commands/review.d.ts +0 -457
  52. package/dist/cli/commands/review.d.ts.map +0 -1
  53. package/dist/cli/commands/review.js +0 -558
  54. package/dist/cli/commands/review.js.map +0 -1
  55. package/dist/cli/commands/stash.d.ts +0 -157
  56. package/dist/cli/commands/stash.d.ts.map +0 -1
  57. package/dist/cli/commands/stash.js +0 -655
  58. package/dist/cli/commands/stash.js.map +0 -1
  59. package/dist/cli/commands/status.d.ts +0 -269
  60. package/dist/cli/commands/status.d.ts.map +0 -1
  61. package/dist/cli/commands/status.js +0 -492
  62. package/dist/cli/commands/status.js.map +0 -1
  63. package/dist/cli/commands/web.d.ts +0 -199
  64. package/dist/cli/commands/web.d.ts.map +0 -1
  65. package/dist/cli/commands/web.js +0 -697
  66. package/dist/cli/commands/web.js.map +0 -1
  67. package/dist/cli/fs-adapter.d.ts +0 -656
  68. package/dist/cli/fs-adapter.d.ts.map +0 -1
  69. package/dist/cli/fs-adapter.js +0 -1177
  70. package/dist/cli/fs-adapter.js.map +0 -1
  71. package/dist/cli/fsx-cli-adapter.d.ts +0 -359
  72. package/dist/cli/fsx-cli-adapter.d.ts.map +0 -1
  73. package/dist/cli/fsx-cli-adapter.js +0 -619
  74. package/dist/cli/fsx-cli-adapter.js.map +0 -1
  75. package/dist/cli/index.d.ts +0 -387
  76. package/dist/cli/index.d.ts.map +0 -1
  77. package/dist/cli/index.js +0 -579
  78. package/dist/cli/index.js.map +0 -1
  79. package/dist/cli/ui/components/DiffView.d.ts +0 -12
  80. package/dist/cli/ui/components/DiffView.d.ts.map +0 -1
  81. package/dist/cli/ui/components/DiffView.js +0 -11
  82. package/dist/cli/ui/components/DiffView.js.map +0 -1
  83. package/dist/cli/ui/components/ErrorDisplay.d.ts +0 -10
  84. package/dist/cli/ui/components/ErrorDisplay.d.ts.map +0 -1
  85. package/dist/cli/ui/components/ErrorDisplay.js +0 -11
  86. package/dist/cli/ui/components/ErrorDisplay.js.map +0 -1
  87. package/dist/cli/ui/components/FuzzySearch.d.ts +0 -15
  88. package/dist/cli/ui/components/FuzzySearch.d.ts.map +0 -1
  89. package/dist/cli/ui/components/FuzzySearch.js +0 -12
  90. package/dist/cli/ui/components/FuzzySearch.js.map +0 -1
  91. package/dist/cli/ui/components/LoadingSpinner.d.ts +0 -10
  92. package/dist/cli/ui/components/LoadingSpinner.d.ts.map +0 -1
  93. package/dist/cli/ui/components/LoadingSpinner.js +0 -10
  94. package/dist/cli/ui/components/LoadingSpinner.js.map +0 -1
  95. package/dist/cli/ui/components/NavigationList.d.ts +0 -14
  96. package/dist/cli/ui/components/NavigationList.d.ts.map +0 -1
  97. package/dist/cli/ui/components/NavigationList.js +0 -11
  98. package/dist/cli/ui/components/NavigationList.js.map +0 -1
  99. package/dist/cli/ui/components/ScrollableContent.d.ts +0 -13
  100. package/dist/cli/ui/components/ScrollableContent.d.ts.map +0 -1
  101. package/dist/cli/ui/components/ScrollableContent.js +0 -11
  102. package/dist/cli/ui/components/ScrollableContent.js.map +0 -1
  103. package/dist/cli/ui/components/index.d.ts +0 -7
  104. package/dist/cli/ui/components/index.d.ts.map +0 -1
  105. package/dist/cli/ui/components/index.js +0 -9
  106. package/dist/cli/ui/components/index.js.map +0 -1
  107. package/dist/cli/ui/terminal-ui.d.ts +0 -85
  108. package/dist/cli/ui/terminal-ui.d.ts.map +0 -1
  109. package/dist/cli/ui/terminal-ui.js +0 -121
  110. package/dist/cli/ui/terminal-ui.js.map +0 -1
  111. package/dist/do/BashModule.d.ts +0 -871
  112. package/dist/do/BashModule.d.ts.map +0 -1
  113. package/dist/do/BashModule.js +0 -1143
  114. package/dist/do/BashModule.js.map +0 -1
  115. package/dist/do/FsModule.d.ts +0 -612
  116. package/dist/do/FsModule.d.ts.map +0 -1
  117. package/dist/do/FsModule.js +0 -1120
  118. package/dist/do/FsModule.js.map +0 -1
  119. package/dist/do/GitModule.d.ts +0 -635
  120. package/dist/do/GitModule.d.ts.map +0 -1
  121. package/dist/do/GitModule.js +0 -784
  122. package/dist/do/GitModule.js.map +0 -1
  123. package/dist/do/GitRepoDO.d.ts +0 -281
  124. package/dist/do/GitRepoDO.d.ts.map +0 -1
  125. package/dist/do/GitRepoDO.js +0 -479
  126. package/dist/do/GitRepoDO.js.map +0 -1
  127. package/dist/do/bash-ast.d.ts +0 -246
  128. package/dist/do/bash-ast.d.ts.map +0 -1
  129. package/dist/do/bash-ast.js +0 -888
  130. package/dist/do/bash-ast.js.map +0 -1
  131. package/dist/do/container-executor.d.ts +0 -491
  132. package/dist/do/container-executor.d.ts.map +0 -1
  133. package/dist/do/container-executor.js +0 -731
  134. package/dist/do/container-executor.js.map +0 -1
  135. package/dist/do/index.d.ts +0 -53
  136. package/dist/do/index.d.ts.map +0 -1
  137. package/dist/do/index.js +0 -91
  138. package/dist/do/index.js.map +0 -1
  139. package/dist/do/tiered-storage.d.ts +0 -403
  140. package/dist/do/tiered-storage.d.ts.map +0 -1
  141. package/dist/do/tiered-storage.js +0 -689
  142. package/dist/do/tiered-storage.js.map +0 -1
  143. package/dist/do/withBash.d.ts +0 -231
  144. package/dist/do/withBash.d.ts.map +0 -1
  145. package/dist/do/withBash.js +0 -244
  146. package/dist/do/withBash.js.map +0 -1
  147. package/dist/do/withFs.d.ts +0 -237
  148. package/dist/do/withFs.d.ts.map +0 -1
  149. package/dist/do/withFs.js +0 -387
  150. package/dist/do/withFs.js.map +0 -1
  151. package/dist/do/withGit.d.ts +0 -180
  152. package/dist/do/withGit.d.ts.map +0 -1
  153. package/dist/do/withGit.js +0 -271
  154. package/dist/do/withGit.js.map +0 -1
  155. package/dist/durable-object/object-store.d.ts +0 -633
  156. package/dist/durable-object/object-store.d.ts.map +0 -1
  157. package/dist/durable-object/object-store.js +0 -1164
  158. package/dist/durable-object/object-store.js.map +0 -1
  159. package/dist/durable-object/schema.d.ts.map +0 -1
  160. package/dist/durable-object/schema.js.map +0 -1
  161. package/dist/durable-object/wal.d.ts +0 -416
  162. package/dist/durable-object/wal.d.ts.map +0 -1
  163. package/dist/durable-object/wal.js +0 -445
  164. package/dist/durable-object/wal.js.map +0 -1
  165. package/dist/mcp/adapter.d.ts +0 -772
  166. package/dist/mcp/adapter.d.ts.map +0 -1
  167. package/dist/mcp/adapter.js +0 -895
  168. package/dist/mcp/adapter.js.map +0 -1
  169. package/dist/mcp/sandbox/miniflare-evaluator.d.ts +0 -22
  170. package/dist/mcp/sandbox/miniflare-evaluator.d.ts.map +0 -1
  171. package/dist/mcp/sandbox/miniflare-evaluator.js +0 -140
  172. package/dist/mcp/sandbox/miniflare-evaluator.js.map +0 -1
  173. package/dist/mcp/sandbox/object-store-proxy.d.ts +0 -32
  174. package/dist/mcp/sandbox/object-store-proxy.d.ts.map +0 -1
  175. package/dist/mcp/sandbox/object-store-proxy.js +0 -30
  176. package/dist/mcp/sandbox/object-store-proxy.js.map +0 -1
  177. package/dist/mcp/sandbox/template.d.ts +0 -17
  178. package/dist/mcp/sandbox/template.d.ts.map +0 -1
  179. package/dist/mcp/sandbox/template.js +0 -71
  180. package/dist/mcp/sandbox/template.js.map +0 -1
  181. package/dist/mcp/sandbox.d.ts +0 -764
  182. package/dist/mcp/sandbox.d.ts.map +0 -1
  183. package/dist/mcp/sandbox.js +0 -1362
  184. package/dist/mcp/sandbox.js.map +0 -1
  185. package/dist/mcp/sdk-adapter.d.ts +0 -835
  186. package/dist/mcp/sdk-adapter.d.ts.map +0 -1
  187. package/dist/mcp/sdk-adapter.js +0 -974
  188. package/dist/mcp/sdk-adapter.js.map +0 -1
  189. package/dist/mcp/tools/do.d.ts +0 -32
  190. package/dist/mcp/tools/do.d.ts.map +0 -1
  191. package/dist/mcp/tools/do.js +0 -117
  192. package/dist/mcp/tools/do.js.map +0 -1
  193. package/dist/mcp/tools.d.ts +0 -548
  194. package/dist/mcp/tools.d.ts.map +0 -1
  195. package/dist/mcp/tools.js +0 -3170
  196. package/dist/mcp/tools.js.map +0 -1
  197. package/dist/ops/blame.d.ts +0 -551
  198. package/dist/ops/blame.d.ts.map +0 -1
  199. package/dist/ops/blame.js +0 -1037
  200. package/dist/ops/blame.js.map +0 -1
  201. package/dist/ops/branch.d.ts +0 -766
  202. package/dist/ops/branch.d.ts.map +0 -1
  203. package/dist/ops/branch.js +0 -950
  204. package/dist/ops/branch.js.map +0 -1
  205. package/dist/ops/commit-traversal.d.ts +0 -349
  206. package/dist/ops/commit-traversal.d.ts.map +0 -1
  207. package/dist/ops/commit-traversal.js +0 -821
  208. package/dist/ops/commit-traversal.js.map +0 -1
  209. package/dist/ops/commit.d.ts +0 -555
  210. package/dist/ops/commit.d.ts.map +0 -1
  211. package/dist/ops/commit.js +0 -826
  212. package/dist/ops/commit.js.map +0 -1
  213. package/dist/ops/merge-base.d.ts +0 -397
  214. package/dist/ops/merge-base.d.ts.map +0 -1
  215. package/dist/ops/merge-base.js +0 -691
  216. package/dist/ops/merge-base.js.map +0 -1
  217. package/dist/ops/merge.d.ts +0 -855
  218. package/dist/ops/merge.d.ts.map +0 -1
  219. package/dist/ops/merge.js +0 -1551
  220. package/dist/ops/merge.js.map +0 -1
  221. package/dist/ops/tag.d.ts +0 -247
  222. package/dist/ops/tag.d.ts.map +0 -1
  223. package/dist/ops/tag.js +0 -649
  224. package/dist/ops/tag.js.map +0 -1
  225. package/dist/ops/tree-builder.d.ts +0 -178
  226. package/dist/ops/tree-builder.d.ts.map +0 -1
  227. package/dist/ops/tree-builder.js +0 -271
  228. package/dist/ops/tree-builder.js.map +0 -1
  229. package/dist/ops/tree-diff.d.ts +0 -291
  230. package/dist/ops/tree-diff.d.ts.map +0 -1
  231. package/dist/ops/tree-diff.js +0 -705
  232. package/dist/ops/tree-diff.js.map +0 -1
  233. package/dist/pack/delta.d.ts +0 -248
  234. package/dist/pack/delta.d.ts.map +0 -1
  235. package/dist/pack/delta.js +0 -740
  236. package/dist/pack/delta.js.map +0 -1
  237. package/dist/pack/format.d.ts +0 -446
  238. package/dist/pack/format.d.ts.map +0 -1
  239. package/dist/pack/format.js +0 -572
  240. package/dist/pack/format.js.map +0 -1
  241. package/dist/pack/full-generation.d.ts +0 -612
  242. package/dist/pack/full-generation.d.ts.map +0 -1
  243. package/dist/pack/full-generation.js +0 -1378
  244. package/dist/pack/full-generation.js.map +0 -1
  245. package/dist/pack/generation.d.ts +0 -441
  246. package/dist/pack/generation.d.ts.map +0 -1
  247. package/dist/pack/generation.js +0 -707
  248. package/dist/pack/generation.js.map +0 -1
  249. package/dist/pack/index.d.ts +0 -502
  250. package/dist/pack/index.d.ts.map +0 -1
  251. package/dist/pack/index.js +0 -833
  252. package/dist/pack/index.js.map +0 -1
  253. package/dist/refs/branch.d.ts +0 -683
  254. package/dist/refs/branch.d.ts.map +0 -1
  255. package/dist/refs/branch.js +0 -881
  256. package/dist/refs/branch.js.map +0 -1
  257. package/dist/refs/storage.d.ts +0 -833
  258. package/dist/refs/storage.d.ts.map +0 -1
  259. package/dist/refs/storage.js +0 -1023
  260. package/dist/refs/storage.js.map +0 -1
  261. package/dist/refs/tag.d.ts +0 -860
  262. package/dist/refs/tag.d.ts.map +0 -1
  263. package/dist/refs/tag.js +0 -996
  264. package/dist/refs/tag.js.map +0 -1
  265. package/dist/storage/backend.d.ts +0 -425
  266. package/dist/storage/backend.d.ts.map +0 -1
  267. package/dist/storage/backend.js +0 -41
  268. package/dist/storage/backend.js.map +0 -1
  269. package/dist/storage/fsx-adapter.d.ts +0 -204
  270. package/dist/storage/fsx-adapter.d.ts.map +0 -1
  271. package/dist/storage/fsx-adapter.js +0 -518
  272. package/dist/storage/fsx-adapter.js.map +0 -1
  273. package/dist/storage/lru-cache.d.ts +0 -691
  274. package/dist/storage/lru-cache.d.ts.map +0 -1
  275. package/dist/storage/lru-cache.js +0 -813
  276. package/dist/storage/lru-cache.js.map +0 -1
  277. package/dist/storage/object-index.d.ts +0 -585
  278. package/dist/storage/object-index.d.ts.map +0 -1
  279. package/dist/storage/object-index.js +0 -532
  280. package/dist/storage/object-index.js.map +0 -1
  281. package/dist/storage/r2-pack.d.ts +0 -1257
  282. package/dist/storage/r2-pack.d.ts.map +0 -1
  283. package/dist/storage/r2-pack.js +0 -1773
  284. package/dist/storage/r2-pack.js.map +0 -1
  285. package/dist/tiered/cdc-pipeline.d.ts +0 -1888
  286. package/dist/tiered/cdc-pipeline.d.ts.map +0 -1
  287. package/dist/tiered/cdc-pipeline.js +0 -1880
  288. package/dist/tiered/cdc-pipeline.js.map +0 -1
  289. package/dist/tiered/migration.d.ts +0 -1104
  290. package/dist/tiered/migration.d.ts.map +0 -1
  291. package/dist/tiered/migration.js +0 -1217
  292. package/dist/tiered/migration.js.map +0 -1
  293. package/dist/tiered/parquet-writer.d.ts +0 -1145
  294. package/dist/tiered/parquet-writer.d.ts.map +0 -1
  295. package/dist/tiered/parquet-writer.js +0 -1183
  296. package/dist/tiered/parquet-writer.js.map +0 -1
  297. package/dist/tiered/read-path.d.ts +0 -835
  298. package/dist/tiered/read-path.d.ts.map +0 -1
  299. package/dist/tiered/read-path.js +0 -487
  300. package/dist/tiered/read-path.js.map +0 -1
  301. package/dist/types/capability.d.ts +0 -1385
  302. package/dist/types/capability.d.ts.map +0 -1
  303. package/dist/types/capability.js +0 -36
  304. package/dist/types/capability.js.map +0 -1
  305. package/dist/types/index.d.ts +0 -13
  306. package/dist/types/index.d.ts.map +0 -1
  307. package/dist/types/index.js +0 -18
  308. package/dist/types/index.js.map +0 -1
  309. package/dist/types/interfaces.d.ts +0 -673
  310. package/dist/types/interfaces.d.ts.map +0 -1
  311. package/dist/types/interfaces.js +0 -26
  312. package/dist/types/interfaces.js.map +0 -1
  313. package/dist/types/objects.d.ts +0 -692
  314. package/dist/types/objects.d.ts.map +0 -1
  315. package/dist/types/objects.js +0 -837
  316. package/dist/types/objects.js.map +0 -1
  317. package/dist/types/storage.d.ts +0 -603
  318. package/dist/types/storage.d.ts.map +0 -1
  319. package/dist/types/storage.js +0 -191
  320. package/dist/types/storage.js.map +0 -1
  321. package/dist/types/worker-loader.d.ts +0 -60
  322. package/dist/types/worker-loader.d.ts.map +0 -1
  323. package/dist/types/worker-loader.js +0 -62
  324. package/dist/types/worker-loader.js.map +0 -1
  325. package/dist/utils/hash.d.ts +0 -198
  326. package/dist/utils/hash.d.ts.map +0 -1
  327. package/dist/utils/hash.js +0 -272
  328. package/dist/utils/hash.js.map +0 -1
  329. package/dist/utils/sha1.d.ts +0 -325
  330. package/dist/utils/sha1.d.ts.map +0 -1
  331. package/dist/utils/sha1.js +0 -635
  332. package/dist/utils/sha1.js.map +0 -1
  333. package/dist/wire/capabilities.d.ts +0 -1044
  334. package/dist/wire/capabilities.d.ts.map +0 -1
  335. package/dist/wire/capabilities.js +0 -941
  336. package/dist/wire/capabilities.js.map +0 -1
  337. package/dist/wire/path-security.d.ts +0 -157
  338. package/dist/wire/path-security.d.ts.map +0 -1
  339. package/dist/wire/path-security.js +0 -307
  340. package/dist/wire/path-security.js.map +0 -1
  341. package/dist/wire/pkt-line.d.ts +0 -345
  342. package/dist/wire/pkt-line.d.ts.map +0 -1
  343. package/dist/wire/pkt-line.js +0 -381
  344. package/dist/wire/pkt-line.js.map +0 -1
  345. package/dist/wire/receive-pack.d.ts +0 -1059
  346. package/dist/wire/receive-pack.d.ts.map +0 -1
  347. package/dist/wire/receive-pack.js +0 -1414
  348. package/dist/wire/receive-pack.js.map +0 -1
  349. package/dist/wire/smart-http.d.ts +0 -799
  350. package/dist/wire/smart-http.d.ts.map +0 -1
  351. package/dist/wire/smart-http.js +0 -945
  352. package/dist/wire/smart-http.js.map +0 -1
  353. package/dist/wire/upload-pack.d.ts +0 -727
  354. package/dist/wire/upload-pack.d.ts.map +0 -1
  355. package/dist/wire/upload-pack.js +0 -1141
  356. package/dist/wire/upload-pack.js.map +0 -1
@@ -1,635 +0,0 @@
1
- /**
2
- * @fileoverview Synchronous SHA-1 Utilities for Git Pack Operations
3
- *
4
- * This module provides synchronous (non-async) SHA-1 hashing needed for pack file
5
- * generation, verification, and streaming operations where async is impractical.
6
- *
7
- * The implementation follows the SHA-1 specification (FIPS 180-4) and processes
8
- * data in 512-bit (64-byte) chunks using the standard compression function.
9
- *
10
- * **When to use this vs hash.ts**:
11
- * - Use `utils/hash.ts` for general async hashing (uses Web Crypto API)
12
- * - Use this module for pack operations that need synchronous hashing
13
- *
14
- * @module utils/sha1
15
- *
16
- * @example
17
- * ```typescript
18
- * import { sha1, sha1Hex, sha1Verify } from './utils/sha1'
19
- *
20
- * // Compute SHA-1 as bytes
21
- * const data = new TextEncoder().encode('Hello, World!')
22
- * const hashBytes = sha1(data) // 20-byte Uint8Array
23
- *
24
- * // Compute SHA-1 as hex string
25
- * const hashHex = sha1Hex(data) // 40-char string
26
- *
27
- * // Verify data against expected hash
28
- * const isValid = sha1Verify(data, expectedHash)
29
- * ```
30
- */
31
- /**
32
- * Compute SHA-1 hash of data synchronously.
33
- *
34
- * @description
35
- * Implements the SHA-1 algorithm per FIPS 180-4. This pure JavaScript
36
- * implementation is used when synchronous hashing is needed, such as
37
- * in pack file generation or streaming operations.
38
- *
39
- * **Algorithm Details**:
40
- * 1. Pad message to 512-bit boundary (with 1-bit, zeros, and 64-bit length)
41
- * 2. Process in 64-byte chunks using 80-round compression function
42
- * 3. Return final 160-bit (20-byte) hash
43
- *
44
- * **Performance Note**: This is slower than Web Crypto API. Use `hash.ts`
45
- * for async operations where performance is critical.
46
- *
47
- * @param data - Input data to hash
48
- * @returns 20-byte hash as Uint8Array
49
- *
50
- * @example
51
- * ```typescript
52
- * const data = new TextEncoder().encode('test')
53
- * const hash = sha1(data)
54
- * console.log(hash.length) // 20
55
- *
56
- * // Use with pack file verification
57
- * const packData = readPackFile()
58
- * const computedHash = sha1(packData.slice(0, -20))
59
- * ```
60
- */
61
- export function sha1(data) {
62
- /**
63
- * Rotate left (circular left shift) operation.
64
- * @internal
65
- */
66
- function rotl(n, s) {
67
- return ((n << s) | (n >>> (32 - s))) >>> 0;
68
- }
69
- // Initialize hash values (first 32 bits of fractional parts of square roots of first 5 primes)
70
- let h0 = 0x67452301;
71
- let h1 = 0xefcdab89;
72
- let h2 = 0x98badcfe;
73
- let h3 = 0x10325476;
74
- let h4 = 0xc3d2e1f0;
75
- // Pre-processing: add padding
76
- const msgLen = data.length;
77
- const bitLen = BigInt(msgLen) * 8n;
78
- // Message needs to be padded to 64-byte boundary (512 bits)
79
- // Padding: 1 bit (0x80), then zeros, then 64-bit length
80
- const paddingLength = (64 - ((msgLen + 9) % 64)) % 64;
81
- const paddedLen = msgLen + 1 + paddingLength + 8;
82
- const padded = new Uint8Array(paddedLen);
83
- padded.set(data, 0);
84
- padded[msgLen] = 0x80;
85
- // Write length as 64-bit big-endian at the end
86
- const lengthView = new DataView(padded.buffer);
87
- lengthView.setBigUint64(paddedLen - 8, bitLen, false);
88
- // Process in 64-byte (512-bit) chunks
89
- const w = new Uint32Array(80);
90
- for (let chunkStart = 0; chunkStart < paddedLen; chunkStart += 64) {
91
- const chunkView = new DataView(padded.buffer, chunkStart, 64);
92
- // Break chunk into sixteen 32-bit big-endian words
93
- for (let i = 0; i < 16; i++) {
94
- w[i] = chunkView.getUint32(i * 4, false);
95
- }
96
- // Extend the sixteen 32-bit words into eighty 32-bit words
97
- for (let i = 16; i < 80; i++) {
98
- w[i] = rotl(w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16], 1);
99
- }
100
- // Initialize working variables
101
- let a = h0;
102
- let b = h1;
103
- let c = h2;
104
- let d = h3;
105
- let e = h4;
106
- // Main loop - 80 rounds
107
- for (let i = 0; i < 80; i++) {
108
- let f, k;
109
- if (i < 20) {
110
- // Round 0-19: Ch(b,c,d) = (b AND c) XOR (NOT b AND d)
111
- f = (b & c) | (~b & d);
112
- k = 0x5a827999;
113
- }
114
- else if (i < 40) {
115
- // Round 20-39: Parity(b,c,d) = b XOR c XOR d
116
- f = b ^ c ^ d;
117
- k = 0x6ed9eba1;
118
- }
119
- else if (i < 60) {
120
- // Round 40-59: Maj(b,c,d) = (b AND c) XOR (b AND d) XOR (c AND d)
121
- f = (b & c) | (b & d) | (c & d);
122
- k = 0x8f1bbcdc;
123
- }
124
- else {
125
- // Round 60-79: Parity(b,c,d) = b XOR c XOR d
126
- f = b ^ c ^ d;
127
- k = 0xca62c1d6;
128
- }
129
- const temp = (rotl(a, 5) + f + e + k + w[i]) >>> 0;
130
- e = d;
131
- d = c;
132
- c = rotl(b, 30);
133
- b = a;
134
- a = temp;
135
- }
136
- // Add this chunk's hash to result so far
137
- h0 = (h0 + a) >>> 0;
138
- h1 = (h1 + b) >>> 0;
139
- h2 = (h2 + c) >>> 0;
140
- h3 = (h3 + d) >>> 0;
141
- h4 = (h4 + e) >>> 0;
142
- }
143
- // Produce the final hash value (big-endian)
144
- const result = new Uint8Array(20);
145
- const resultView = new DataView(result.buffer);
146
- resultView.setUint32(0, h0, false);
147
- resultView.setUint32(4, h1, false);
148
- resultView.setUint32(8, h2, false);
149
- resultView.setUint32(12, h3, false);
150
- resultView.setUint32(16, h4, false);
151
- return result;
152
- }
153
- /**
154
- * Compute SHA-1 hash and return as hexadecimal string.
155
- *
156
- * @description
157
- * Convenience wrapper that computes SHA-1 and converts the result
158
- * to a lowercase hexadecimal string. Equivalent to calling `sha1()`
159
- * followed by hex conversion.
160
- *
161
- * @param data - Input data to hash
162
- * @returns 40-character lowercase hexadecimal hash string
163
- *
164
- * @example
165
- * ```typescript
166
- * const data = new TextEncoder().encode('hello')
167
- * const hex = sha1Hex(data)
168
- * console.log(hex) // 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d'
169
- *
170
- * // Compare with git:
171
- * // $ echo -n "hello" | sha1sum
172
- * // aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
173
- * ```
174
- */
175
- export function sha1Hex(data) {
176
- const hash = sha1(data);
177
- let hex = '';
178
- for (let i = 0; i < hash.length; i++) {
179
- hex += hash[i].toString(16).padStart(2, '0');
180
- }
181
- return hex;
182
- }
183
- /**
184
- * Verify data against an expected SHA-1 hash.
185
- *
186
- * @description
187
- * Computes the SHA-1 hash of the data and compares it byte-by-byte
188
- * with the expected hash. Returns true only if all 20 bytes match.
189
- *
190
- * This uses constant-time comparison to avoid timing attacks,
191
- * though SHA-1 is not used for security purposes in Git.
192
- *
193
- * @param data - Data to verify
194
- * @param expected - Expected 20-byte SHA-1 hash
195
- * @returns True if the computed hash matches the expected hash
196
- * @throws Never throws - returns false for invalid inputs
197
- *
198
- * @example
199
- * ```typescript
200
- * // Verify pack file integrity
201
- * const packContent = readPackFile()
202
- * const contentWithoutChecksum = packContent.slice(0, -20)
203
- * const expectedChecksum = packContent.slice(-20)
204
- *
205
- * if (sha1Verify(contentWithoutChecksum, expectedChecksum)) {
206
- * console.log('Pack file integrity verified')
207
- * } else {
208
- * console.log('Pack file corrupted!')
209
- * }
210
- *
211
- * // Invalid expected hash length
212
- * const badHash = new Uint8Array(10)
213
- * sha1Verify(data, badHash) // false (wrong length)
214
- * ```
215
- */
216
- export function sha1Verify(data, expected) {
217
- // Expected hash must be exactly 20 bytes
218
- if (expected.length !== 20) {
219
- return false;
220
- }
221
- const computed = sha1(data);
222
- // Compare all 20 bytes
223
- for (let i = 0; i < 20; i++) {
224
- if (computed[i] !== expected[i]) {
225
- return false;
226
- }
227
- }
228
- return true;
229
- }
230
- // ============================================================================
231
- // Hex Conversion Utilities
232
- // ============================================================================
233
- /**
234
- * Convert bytes to hexadecimal string.
235
- *
236
- * @description Efficiently converts a Uint8Array to its hexadecimal
237
- * representation. Each byte becomes two hex characters (00-ff).
238
- *
239
- * @param bytes - Input bytes to convert
240
- * @returns Lowercase hexadecimal string (2 chars per byte)
241
- *
242
- * @example
243
- * ```typescript
244
- * const bytes = new Uint8Array([0x48, 0x65, 0x6c, 0x6c, 0x6f])
245
- * const hex = bytesToHex(bytes)
246
- * console.log(hex) // '48656c6c6f'
247
- * ```
248
- */
249
- export function bytesToHex(bytes) {
250
- let hex = '';
251
- for (let i = 0; i < bytes.length; i++) {
252
- hex += bytes[i].toString(16).padStart(2, '0');
253
- }
254
- return hex;
255
- }
256
- /**
257
- * Convert hexadecimal string to bytes.
258
- *
259
- * @description Converts a hexadecimal string back to its binary representation.
260
- * Each pair of hex characters becomes one byte.
261
- *
262
- * @param hex - Hexadecimal string (case-insensitive)
263
- * @returns Uint8Array of bytes
264
- * @throws {Error} If hex string has odd length
265
- *
266
- * @example
267
- * ```typescript
268
- * const hex = '48656c6c6f'
269
- * const bytes = hexToBytes(hex)
270
- * console.log(new TextDecoder().decode(bytes)) // 'Hello'
271
- * ```
272
- */
273
- export function hexToBytes(hex) {
274
- if (hex.length % 2 !== 0) {
275
- throw new Error('Hex string must have even length');
276
- }
277
- const bytes = new Uint8Array(hex.length / 2);
278
- for (let i = 0; i < hex.length; i += 2) {
279
- bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
280
- }
281
- return bytes;
282
- }
283
- // ============================================================================
284
- // Pre-computed constants for streaming SHA-1
285
- // ============================================================================
286
- /**
287
- * Initial hash values for SHA-1 (first 32 bits of fractional parts of square roots of first 5 primes)
288
- * @internal
289
- */
290
- const SHA1_H0 = 0x67452301;
291
- const SHA1_H1 = 0xefcdab89;
292
- const SHA1_H2 = 0x98badcfe;
293
- const SHA1_H3 = 0x10325476;
294
- const SHA1_H4 = 0xc3d2e1f0;
295
- /**
296
- * SHA-1 round constants
297
- * @internal
298
- */
299
- const SHA1_K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
300
- /**
301
- * Rotate left (circular left shift) operation.
302
- * @internal
303
- */
304
- function rotl(n, s) {
305
- return ((n << s) | (n >>> (32 - s))) >>> 0;
306
- }
307
- /**
308
- * Process a single 64-byte chunk in SHA-1
309
- * @internal
310
- */
311
- function processChunk(chunk, h, w) {
312
- const chunkView = new DataView(chunk.buffer, chunk.byteOffset, 64);
313
- // Break chunk into sixteen 32-bit big-endian words
314
- for (let i = 0; i < 16; i++) {
315
- w[i] = chunkView.getUint32(i * 4, false);
316
- }
317
- // Extend the sixteen 32-bit words into eighty 32-bit words
318
- for (let i = 16; i < 80; i++) {
319
- w[i] = rotl(w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16], 1);
320
- }
321
- // Initialize working variables
322
- let a = h[0];
323
- let b = h[1];
324
- let c = h[2];
325
- let d = h[3];
326
- let e = h[4];
327
- // Main loop - 80 rounds
328
- for (let i = 0; i < 80; i++) {
329
- let f, k;
330
- if (i < 20) {
331
- f = (b & c) | (~b & d);
332
- k = SHA1_K[0];
333
- }
334
- else if (i < 40) {
335
- f = b ^ c ^ d;
336
- k = SHA1_K[1];
337
- }
338
- else if (i < 60) {
339
- f = (b & c) | (b & d) | (c & d);
340
- k = SHA1_K[2];
341
- }
342
- else {
343
- f = b ^ c ^ d;
344
- k = SHA1_K[3];
345
- }
346
- const temp = (rotl(a, 5) + f + e + k + w[i]) >>> 0;
347
- e = d;
348
- d = c;
349
- c = rotl(b, 30);
350
- b = a;
351
- a = temp;
352
- }
353
- // Add this chunk's hash to result so far
354
- h[0] = (h[0] + a) >>> 0;
355
- h[1] = (h[1] + b) >>> 0;
356
- h[2] = (h[2] + c) >>> 0;
357
- h[3] = (h[3] + d) >>> 0;
358
- h[4] = (h[4] + e) >>> 0;
359
- }
360
- /**
361
- * Streaming SHA-1 hasher for processing large data incrementally.
362
- *
363
- * @description
364
- * This class allows hashing data in chunks, which is essential for:
365
- * - Processing large files without loading everything into memory
366
- * - Computing hashes of data streams
367
- * - Pack file generation and verification
368
- *
369
- * The hasher maintains internal state and can accept data through the
370
- * `update()` method before finalizing with `digest()` or `digestHex()`.
371
- *
372
- * **Performance Note**: For small data (< 64 bytes), the non-streaming
373
- * `sha1()` function may be slightly faster due to lower overhead.
374
- *
375
- * @class StreamingSHA1
376
- *
377
- * @example
378
- * ```typescript
379
- * // Hash a large file in chunks
380
- * const hasher = new StreamingSHA1()
381
- *
382
- * for await (const chunk of fileStream) {
383
- * hasher.update(chunk)
384
- * }
385
- *
386
- * const hash = hasher.digestHex()
387
- * console.log(`File hash: ${hash}`)
388
- * ```
389
- *
390
- * @example
391
- * ```typescript
392
- * // Hash Git object with header
393
- * const hasher = new StreamingSHA1()
394
- * hasher.update(new TextEncoder().encode(`blob ${size}\0`))
395
- * hasher.update(content)
396
- * const objectId = hasher.digestHex()
397
- * ```
398
- */
399
- export class StreamingSHA1 {
400
- /** Hash state */
401
- h;
402
- /** Working array for chunk processing */
403
- w;
404
- /** Buffer for incomplete chunks */
405
- buffer;
406
- /** Current position in buffer */
407
- bufferLength;
408
- /** Total bytes processed */
409
- totalLength;
410
- /** Whether digest has been called */
411
- finalized;
412
- /**
413
- * Creates a new StreamingSHA1 hasher instance.
414
- */
415
- constructor() {
416
- this.h = new Uint32Array([SHA1_H0, SHA1_H1, SHA1_H2, SHA1_H3, SHA1_H4]);
417
- this.w = new Uint32Array(80);
418
- this.buffer = new Uint8Array(64);
419
- this.bufferLength = 0;
420
- this.totalLength = 0n;
421
- this.finalized = false;
422
- }
423
- /**
424
- * Resets the hasher to its initial state.
425
- *
426
- * @description Allows reusing the same hasher instance for a new hash
427
- * computation without creating a new object.
428
- *
429
- * @example
430
- * ```typescript
431
- * const hasher = new StreamingSHA1()
432
- * hasher.update(data1)
433
- * const hash1 = hasher.digestHex()
434
- *
435
- * hasher.reset()
436
- * hasher.update(data2)
437
- * const hash2 = hasher.digestHex()
438
- * ```
439
- */
440
- reset() {
441
- this.h[0] = SHA1_H0;
442
- this.h[1] = SHA1_H1;
443
- this.h[2] = SHA1_H2;
444
- this.h[3] = SHA1_H3;
445
- this.h[4] = SHA1_H4;
446
- this.bufferLength = 0;
447
- this.totalLength = 0n;
448
- this.finalized = false;
449
- }
450
- /**
451
- * Updates the hash with additional data.
452
- *
453
- * @description Processes the input data, updating the internal hash state.
454
- * Data is buffered internally until a complete 64-byte chunk is available,
455
- * then processed immediately.
456
- *
457
- * This method can be called multiple times before finalizing with `digest()`.
458
- *
459
- * @param {Uint8Array} data - Data to add to the hash computation
460
- * @returns {this} The hasher instance for method chaining
461
- * @throws {Error} If called after digest() without reset()
462
- *
463
- * @example
464
- * ```typescript
465
- * const hasher = new StreamingSHA1()
466
- * .update(header)
467
- * .update(content)
468
- * .update(footer)
469
- * const hash = hasher.digestHex()
470
- * ```
471
- */
472
- update(data) {
473
- if (this.finalized) {
474
- throw new Error('Cannot update after digest() - call reset() first');
475
- }
476
- this.totalLength += BigInt(data.length);
477
- let offset = 0;
478
- // If we have buffered data, try to complete a chunk
479
- if (this.bufferLength > 0) {
480
- const needed = 64 - this.bufferLength;
481
- const available = Math.min(needed, data.length);
482
- this.buffer.set(data.subarray(0, available), this.bufferLength);
483
- this.bufferLength += available;
484
- offset = available;
485
- if (this.bufferLength === 64) {
486
- processChunk(this.buffer, this.h, this.w);
487
- this.bufferLength = 0;
488
- }
489
- }
490
- // Process complete 64-byte chunks directly from input
491
- while (offset + 64 <= data.length) {
492
- processChunk(data.subarray(offset, offset + 64), this.h, this.w);
493
- offset += 64;
494
- }
495
- // Buffer remaining bytes
496
- if (offset < data.length) {
497
- this.buffer.set(data.subarray(offset), this.bufferLength);
498
- this.bufferLength += data.length - offset;
499
- }
500
- return this;
501
- }
502
- /**
503
- * Finalizes the hash computation and returns the 20-byte digest.
504
- *
505
- * @description Applies SHA-1 padding to the remaining data and computes
506
- * the final hash. After calling this method, the hasher cannot be updated
507
- * unless `reset()` is called.
508
- *
509
- * @returns {Uint8Array} 20-byte SHA-1 hash
510
- *
511
- * @example
512
- * ```typescript
513
- * const hasher = new StreamingSHA1()
514
- * hasher.update(data)
515
- * const hashBytes = hasher.digest()
516
- * console.log(hashBytes.length) // 20
517
- * ```
518
- */
519
- digest() {
520
- if (this.finalized) {
521
- // Return cached result
522
- const result = new Uint8Array(20);
523
- const resultView = new DataView(result.buffer);
524
- resultView.setUint32(0, this.h[0], false);
525
- resultView.setUint32(4, this.h[1], false);
526
- resultView.setUint32(8, this.h[2], false);
527
- resultView.setUint32(12, this.h[3], false);
528
- resultView.setUint32(16, this.h[4], false);
529
- return result;
530
- }
531
- this.finalized = true;
532
- const bitLen = this.totalLength * 8n;
533
- // Pad message: append 1 bit (0x80)
534
- this.buffer[this.bufferLength] = 0x80;
535
- this.bufferLength++;
536
- // If we don't have room for the 64-bit length, fill and process this chunk
537
- if (this.bufferLength > 56) {
538
- // Fill rest with zeros and process
539
- this.buffer.fill(0, this.bufferLength, 64);
540
- processChunk(this.buffer, this.h, this.w);
541
- this.bufferLength = 0;
542
- }
543
- // Fill with zeros up to length field
544
- this.buffer.fill(0, this.bufferLength, 56);
545
- // Write length as 64-bit big-endian
546
- const lengthView = new DataView(this.buffer.buffer, this.buffer.byteOffset, 64);
547
- lengthView.setBigUint64(56, bitLen, false);
548
- // Process final chunk
549
- processChunk(this.buffer, this.h, this.w);
550
- // Produce the final hash value (big-endian)
551
- const result = new Uint8Array(20);
552
- const resultView = new DataView(result.buffer);
553
- resultView.setUint32(0, this.h[0], false);
554
- resultView.setUint32(4, this.h[1], false);
555
- resultView.setUint32(8, this.h[2], false);
556
- resultView.setUint32(12, this.h[3], false);
557
- resultView.setUint32(16, this.h[4], false);
558
- return result;
559
- }
560
- /**
561
- * Finalizes the hash computation and returns the hex string digest.
562
- *
563
- * @description Convenience method that calls `digest()` and converts
564
- * the result to a 40-character lowercase hexadecimal string.
565
- *
566
- * @returns {string} 40-character lowercase hexadecimal hash string
567
- *
568
- * @example
569
- * ```typescript
570
- * const hasher = new StreamingSHA1()
571
- * hasher.update(data)
572
- * const hash = hasher.digestHex()
573
- * console.log(hash) // 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d'
574
- * ```
575
- */
576
- digestHex() {
577
- const hash = this.digest();
578
- let hex = '';
579
- for (let i = 0; i < hash.length; i++) {
580
- hex += hash[i].toString(16).padStart(2, '0');
581
- }
582
- return hex;
583
- }
584
- }
585
- /**
586
- * Hash a Git object with streaming support for large objects.
587
- *
588
- * @description
589
- * Uses the streaming hasher to compute the SHA-1 of a Git object with its header.
590
- * This is more memory-efficient than `hashObject` in `hash.ts` for large objects
591
- * as it doesn't require concatenating header and data.
592
- *
593
- * @param type - Object type ('blob', 'tree', 'commit', 'tag')
594
- * @param data - Object content as binary data
595
- * @returns 20-byte SHA-1 hash as Uint8Array
596
- *
597
- * @example
598
- * ```typescript
599
- * const content = new TextEncoder().encode('hello')
600
- * const hashBytes = hashObjectStreaming('blob', content)
601
- * ```
602
- */
603
- export function hashObjectStreaming(type, data) {
604
- const hasher = new StreamingSHA1();
605
- const header = new TextEncoder().encode(`${type} ${data.length}\0`);
606
- hasher.update(header);
607
- hasher.update(data);
608
- return hasher.digest();
609
- }
610
- /**
611
- * Hash a Git object with streaming support, returning hex string.
612
- *
613
- * @description
614
- * Convenience wrapper that returns the hash as a 40-character hex string
615
- * instead of raw bytes.
616
- *
617
- * @param type - Object type ('blob', 'tree', 'commit', 'tag')
618
- * @param data - Object content as binary data
619
- * @returns 40-character lowercase hexadecimal SHA-1 hash
620
- *
621
- * @example
622
- * ```typescript
623
- * const content = new TextEncoder().encode('hello')
624
- * const sha = hashObjectStreamingHex('blob', content)
625
- * console.log(sha) // 'b6fc4c620b67d95f953a5c1c1230aaab5db5a1b0'
626
- * ```
627
- */
628
- export function hashObjectStreamingHex(type, data) {
629
- const hasher = new StreamingSHA1();
630
- const header = new TextEncoder().encode(`${type} ${data.length}\0`);
631
- hasher.update(header);
632
- hasher.update(data);
633
- return hasher.digestHex();
634
- }
635
- //# sourceMappingURL=sha1.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sha1.js","sourceRoot":"","sources":["../../src/utils/sha1.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,IAAI,CAAC,IAAgB;IACnC;;;OAGG;IACH,SAAS,IAAI,CAAC,CAAS,EAAE,CAAS;QAChC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;IAED,+FAA+F;IAC/F,IAAI,EAAE,GAAG,UAAU,CAAA;IACnB,IAAI,EAAE,GAAG,UAAU,CAAA;IACnB,IAAI,EAAE,GAAG,UAAU,CAAA;IACnB,IAAI,EAAE,GAAG,UAAU,CAAA;IACnB,IAAI,EAAE,GAAG,UAAU,CAAA;IAEnB,8BAA8B;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;IAElC,4DAA4D;IAC5D,wDAAwD;IACxD,MAAM,aAAa,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAA;IACrD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,CAAA;IAEhD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;IACxC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACnB,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;IAErB,+CAA+C;IAC/C,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9C,UAAU,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IAErD,sCAAsC;IACtC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;IAE7B,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,SAAS,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;QAClE,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAA;QAE7D,mDAAmD;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;QAC1C,CAAC;QAED,2DAA2D;QAC3D,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7D,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,GAAG,EAAE,CAAA;QACV,IAAI,CAAC,GAAG,EAAE,CAAA;QACV,IAAI,CAAC,GAAG,EAAE,CAAA;QACV,IAAI,CAAC,GAAG,EAAE,CAAA;QACV,IAAI,CAAC,GAAG,EAAE,CAAA;QAEV,wBAAwB;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAS,EAAE,CAAS,CAAA;YAExB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACX,sDAAsD;gBACtD,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBACtB,CAAC,GAAG,UAAU,CAAA;YAChB,CAAC;iBAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAClB,6CAA6C;gBAC7C,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC,GAAG,UAAU,CAAA;YAChB,CAAC;iBAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAClB,kEAAkE;gBAClE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC/B,CAAC,GAAG,UAAU,CAAA;YAChB,CAAC;iBAAM,CAAC;gBACN,6CAA6C;gBAC7C,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC,GAAG,UAAU,CAAA;YAChB,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YAClD,CAAC,GAAG,CAAC,CAAA;YACL,CAAC,GAAG,CAAC,CAAA;YACL,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACf,CAAC,GAAG,CAAC,CAAA;YACL,CAAC,GAAG,IAAI,CAAA;QACV,CAAC;QAED,yCAAyC;QACzC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QACnB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QACnB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QACnB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QACnB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAED,4CAA4C;IAC5C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;IACjC,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9C,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IAClC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IAClC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IAClC,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IACnC,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IAEnC,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,OAAO,CAAC,IAAgB;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;IACvB,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,UAAU,CAAC,IAAgB,EAAE,QAAoB;IAC/D,yCAAyC;IACzC,IAAI,QAAQ,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;IAE3B,uBAAuB;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC/C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,+EAA+E;AAC/E,6CAA6C;AAC7C,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,OAAO,GAAG,UAAU,CAAA;AAC1B,MAAM,OAAO,GAAG,UAAU,CAAA;AAC1B,MAAM,OAAO,GAAG,UAAU,CAAA;AAC1B,MAAM,OAAO,GAAG,UAAU,CAAA;AAC1B,MAAM,OAAO,GAAG,UAAU,CAAA;AAE1B;;;GAGG;AACH,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;AAE/D;;;GAGG;AACH,SAAS,IAAI,CAAC,CAAS,EAAE,CAAS;IAChC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAC5C,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CACnB,KAAiB,EACjB,CAAc,EACd,CAAc;IAEd,MAAM,SAAS,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAElE,mDAAmD;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;IAC1C,CAAC;IAED,2DAA2D;IAC3D,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAEZ,wBAAwB;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAS,EAAE,CAAS,CAAA;QAExB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACX,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACtB,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;aAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAClB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACb,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;aAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAClB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAC/B,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;aAAM,CAAC;YACN,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACb,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAClD,CAAC,GAAG,CAAC,CAAA;QACL,CAAC,GAAG,CAAC,CAAA;QACL,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACf,CAAC,GAAG,CAAC,CAAA;QACL,CAAC,GAAG,IAAI,CAAA;IACV,CAAC;IAED,yCAAyC;IACzC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;AACzB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,OAAO,aAAa;IACxB,iBAAiB;IACT,CAAC,CAAa;IACtB,yCAAyC;IACjC,CAAC,CAAa;IACtB,mCAAmC;IAC3B,MAAM,CAAY;IAC1B,iCAAiC;IACzB,YAAY,CAAQ;IAC5B,4BAA4B;IACpB,WAAW,CAAQ;IAC3B,qCAAqC;IAC7B,SAAS,CAAS;IAE1B;;OAEG;IACH;QACE,IAAI,CAAC,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QACvE,IAAI,CAAC,CAAC,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;QAChC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;QACrB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;IACxB,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK;QACH,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;QACnB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;QACnB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;QACnB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;QACnB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;QACnB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;QACrB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;IACxB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,MAAM,CAAC,IAAgB;QACrB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEvC,IAAI,MAAM,GAAG,CAAC,CAAA;QAEd,oDAAoD;QACpD,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAA;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAC/D,IAAI,CAAC,YAAY,IAAI,SAAS,CAAA;YAC9B,MAAM,GAAG,SAAS,CAAA;YAElB,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,EAAE,CAAC;gBAC7B,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;gBACzC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,OAAO,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAClC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;YAChE,MAAM,IAAI,EAAE,CAAA;QACd,CAAC;QAED,yBAAyB;QACzB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YACzD,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAC3C,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,uBAAuB;YACvB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;YACjC,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC9C,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACzC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACzC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACzC,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAC1C,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAC1C,OAAO,MAAM,CAAA;QACf,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QAErB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QAEpC,mCAAmC;QACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAA;QACrC,IAAI,CAAC,YAAY,EAAE,CAAA;QAEnB,2EAA2E;QAC3E,IAAI,IAAI,CAAC,YAAY,GAAG,EAAE,EAAE,CAAC;YAC3B,mCAAmC;YACnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;YAC1C,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;YACzC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;QACvB,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;QAE1C,oCAAoC;QACpC,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;QAC/E,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QAE1C,sBAAsB;QACtB,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAEzC,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;QACjC,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC9C,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACzC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACzC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACzC,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QAC1C,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QAE1C,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,SAAS;QACP,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QAC1B,IAAI,GAAG,GAAG,EAAE,CAAA;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC9C,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,IAAgB;IAChE,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAA;IAClC,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;IACnE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACnB,OAAO,MAAM,CAAC,MAAM,EAAE,CAAA;AACxB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,IAAgB;IACnE,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAA;IAClC,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;IACnE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACnB,OAAO,MAAM,CAAC,SAAS,EAAE,CAAA;AAC3B,CAAC"}