aemeathcli 1.0.9 → 1.0.11

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 (208) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +609 -608
  3. package/dist/App-YAHJUWCX.js +4274 -0
  4. package/dist/App-YAHJUWCX.js.map +1 -0
  5. package/dist/agent-store/architect.md +32 -0
  6. package/dist/agent-store/debugger.md +32 -0
  7. package/dist/agent-store/developer.md +29 -0
  8. package/dist/agent-store/documenter.md +30 -0
  9. package/dist/agent-store/researcher.md +31 -0
  10. package/dist/agent-store/reviewer.md +28 -0
  11. package/dist/agent-store/supervisor.md +37 -0
  12. package/dist/agent-store/tester.md +30 -0
  13. package/dist/api-key-fallback-UN3TJEOO.js +11 -0
  14. package/dist/{api-key-fallback-YQQBOQIL.js.map → api-key-fallback-UN3TJEOO.js.map} +1 -1
  15. package/dist/auth-status-EIM5A5KL.js +13 -0
  16. package/dist/auth-status-EIM5A5KL.js.map +1 -0
  17. package/dist/{chunk-UY2SYSEZ.js → chunk-25UNNEHN.js} +32 -103
  18. package/dist/chunk-25UNNEHN.js.map +1 -0
  19. package/dist/{chunk-CYQNBB25.js → chunk-2GKOK6T7.js} +28 -5
  20. package/dist/chunk-2GKOK6T7.js.map +1 -0
  21. package/dist/{chunk-MFBHNWGV.js → chunk-2LF7ALGR.js} +12 -20
  22. package/dist/chunk-2LF7ALGR.js.map +1 -0
  23. package/dist/{chunk-H66O5Z2V.js → chunk-2NWNIKBK.js} +42 -7
  24. package/dist/chunk-2NWNIKBK.js.map +1 -0
  25. package/dist/chunk-3TSPZRGM.js +26 -0
  26. package/dist/chunk-3TSPZRGM.js.map +1 -0
  27. package/dist/{chunk-ZGOHARPV.js → chunk-473JN6M5.js} +2 -2
  28. package/dist/chunk-473JN6M5.js.map +1 -0
  29. package/dist/{chunk-IYW62KKR.js → chunk-5XFSV6PF.js} +66 -23
  30. package/dist/chunk-5XFSV6PF.js.map +1 -0
  31. package/dist/{chunk-HCIHOHLX.js → chunk-62HSGYQD.js} +2 -2
  32. package/dist/chunk-62HSGYQD.js.map +1 -0
  33. package/dist/{chunk-I5PZ4JTS.js → chunk-6GUD7QIM.js} +4 -4
  34. package/dist/chunk-6GUD7QIM.js.map +1 -0
  35. package/dist/{chunk-4IJD72YB.js → chunk-AQ23TYSQ.js} +7 -7
  36. package/dist/chunk-AQ23TYSQ.js.map +1 -0
  37. package/dist/{chunk-NBR3GHMT.js → chunk-BY4DAKUU.js} +39 -7
  38. package/dist/chunk-BY4DAKUU.js.map +1 -0
  39. package/dist/chunk-CC7MGWYY.js +12 -0
  40. package/dist/chunk-CC7MGWYY.js.map +1 -0
  41. package/dist/chunk-CTFZTARK.js +155 -0
  42. package/dist/chunk-CTFZTARK.js.map +1 -0
  43. package/dist/chunk-FIC7AK4Q.js +232 -0
  44. package/dist/chunk-FIC7AK4Q.js.map +1 -0
  45. package/dist/chunk-GU33WKPG.js +140 -0
  46. package/dist/chunk-GU33WKPG.js.map +1 -0
  47. package/dist/{chunk-VUG4IZ7J.js → chunk-H2SYKIMI.js} +10 -10
  48. package/dist/chunk-H2SYKIMI.js.map +1 -0
  49. package/dist/{chunk-JAXXTYID.js → chunk-HEKFAKVH.js} +2 -2
  50. package/dist/chunk-HEKFAKVH.js.map +1 -0
  51. package/dist/chunk-IARA5XYP.js +186 -0
  52. package/dist/chunk-IARA5XYP.js.map +1 -0
  53. package/dist/{chunk-HMJRPNPZ.js → chunk-LCYH4T6N.js} +95 -23
  54. package/dist/chunk-LCYH4T6N.js.map +1 -0
  55. package/dist/{chunk-CARHU3DO.js → chunk-LDVY5ELP.js} +66 -18
  56. package/dist/chunk-LDVY5ELP.js.map +1 -0
  57. package/dist/chunk-OCJPQFOR.js +88 -0
  58. package/dist/chunk-OCJPQFOR.js.map +1 -0
  59. package/dist/chunk-ODBY7S4X.js +141 -0
  60. package/dist/chunk-ODBY7S4X.js.map +1 -0
  61. package/dist/{chunk-DAHGLHNR.js → chunk-ONQ4WCUI.js} +7 -142
  62. package/dist/chunk-ONQ4WCUI.js.map +1 -0
  63. package/dist/{chunk-WPP3PEDE.js → chunk-P5TKZM3T.js} +32 -107
  64. package/dist/chunk-P5TKZM3T.js.map +1 -0
  65. package/dist/{chunk-ASGRGXYK.js → chunk-P66WDACW.js} +23 -22
  66. package/dist/chunk-P66WDACW.js.map +1 -0
  67. package/dist/{chunk-LSOYPSAT.js → chunk-QCRK4QEL.js} +4 -4
  68. package/dist/chunk-QCRK4QEL.js.map +1 -0
  69. package/dist/{chunk-YL5XFHR3.js → chunk-ROJPFPJ7.js} +2 -2
  70. package/dist/chunk-ROJPFPJ7.js.map +1 -0
  71. package/dist/chunk-RP2TAL3J.js +71 -0
  72. package/dist/chunk-RP2TAL3J.js.map +1 -0
  73. package/dist/{chunk-6PDJ45T4.js → chunk-RYOB3TLZ.js} +51 -26
  74. package/dist/chunk-RYOB3TLZ.js.map +1 -0
  75. package/dist/{chunk-Y5XVD2CD.js → chunk-SOQFMNQC.js} +110 -83
  76. package/dist/chunk-SOQFMNQC.js.map +1 -0
  77. package/dist/{chunk-TEVZS4FA.js → chunk-TDFTX32B.js} +16 -9
  78. package/dist/chunk-TDFTX32B.js.map +1 -0
  79. package/dist/chunk-VBLLDY4R.js +38 -0
  80. package/dist/chunk-VBLLDY4R.js.map +1 -0
  81. package/dist/{chunk-CGEV3ARR.js → chunk-VJNQJALF.js} +4 -4
  82. package/dist/chunk-VJNQJALF.js.map +1 -0
  83. package/dist/chunk-WAYSJMPS.js +26 -0
  84. package/dist/chunk-WAYSJMPS.js.map +1 -0
  85. package/dist/chunk-WC72BRHR.js +241 -0
  86. package/dist/chunk-WC72BRHR.js.map +1 -0
  87. package/dist/{chunk-MXZSI3AY.js → chunk-YPFOE2QJ.js} +43 -11
  88. package/dist/chunk-YPFOE2QJ.js.map +1 -0
  89. package/dist/claude-adapter-6P4SJH7P.js +7 -0
  90. package/dist/{claude-adapter-QMLFMSP3.js.map → claude-adapter-6P4SJH7P.js.map} +1 -1
  91. package/dist/{claude-login-5WELXPKT.js → claude-login-IS5WTBMP.js} +10 -10
  92. package/dist/claude-login-IS5WTBMP.js.map +1 -0
  93. package/dist/cli.js +371 -172
  94. package/dist/cli.js.map +1 -1
  95. package/dist/{codex-login-DDJBCT43.js → codex-login-GMPF64MR.js} +18 -17
  96. package/dist/codex-login-GMPF64MR.js.map +1 -0
  97. package/dist/config-store-POB6I37G.js +7 -0
  98. package/dist/{config-store-W6FBCQAQ.js.map → config-store-POB6I37G.js.map} +1 -1
  99. package/dist/conversation-store-PRBHWQMJ.js +4 -0
  100. package/dist/conversation-store-PRBHWQMJ.js.map +1 -0
  101. package/dist/detect-providers-C4SVQHFF.js +4 -0
  102. package/dist/detect-providers-C4SVQHFF.js.map +1 -0
  103. package/dist/executor-RUX7VK3T.js +4 -0
  104. package/dist/{executor-6RIKIGXK.js.map → executor-RUX7VK3T.js.map} +1 -1
  105. package/dist/first-run-GDEVRFPO.js +230 -0
  106. package/dist/first-run-GDEVRFPO.js.map +1 -0
  107. package/dist/gemini-adapter-MV3U4QFH.js +7 -0
  108. package/dist/{gemini-adapter-6JIHZ7WI.js.map → gemini-adapter-MV3U4QFH.js.map} +1 -1
  109. package/dist/{gemini-login-YEPK6GGW.js → gemini-login-KE224MSW.js} +13 -14
  110. package/dist/gemini-login-KE224MSW.js.map +1 -0
  111. package/dist/index.d.ts +47 -17
  112. package/dist/index.js +86 -471
  113. package/dist/index.js.map +1 -1
  114. package/dist/input-history-MIOO3FIW.js +57 -0
  115. package/dist/input-history-MIOO3FIW.js.map +1 -0
  116. package/dist/kimi-adapter-UODMNX6K.js +6 -0
  117. package/dist/{kimi-adapter-JN4HFFHU.js.map → kimi-adapter-UODMNX6K.js.map} +1 -1
  118. package/dist/{kimi-login-ZR74MIY4.js → kimi-login-DNT5YBKX.js} +18 -17
  119. package/dist/kimi-login-DNT5YBKX.js.map +1 -0
  120. package/dist/logger-PLPDWACQ.js +3 -0
  121. package/dist/logger-PLPDWACQ.js.map +1 -0
  122. package/dist/model-discovery-O64ZWPX5.js +6 -0
  123. package/dist/model-discovery-O64ZWPX5.js.map +1 -0
  124. package/dist/native-cli-adapters-JMZX2C2C.js +8 -0
  125. package/dist/{native-cli-adapters-OLW3XX57.js.map → native-cli-adapters-JMZX2C2C.js.map} +1 -1
  126. package/dist/ollama-adapter-GE67BNSS.js +5 -0
  127. package/dist/{ollama-adapter-OJQ3FKWK.js.map → ollama-adapter-GE67BNSS.js.map} +1 -1
  128. package/dist/openai-adapter-SHPLK77L.js +7 -0
  129. package/dist/{openai-adapter-XU46EN7B.js.map → openai-adapter-SHPLK77L.js.map} +1 -1
  130. package/dist/pathResolver-A6IXQQFE.js +3 -0
  131. package/dist/pathResolver-A6IXQQFE.js.map +1 -0
  132. package/dist/profile-loader-TNAXBLDX.js +162 -0
  133. package/dist/profile-loader-TNAXBLDX.js.map +1 -0
  134. package/dist/registry-3NHVCXCZ.js +6 -0
  135. package/dist/{registry-H7B3AHPQ.js.map → registry-3NHVCXCZ.js.map} +1 -1
  136. package/dist/registry-7CQ3NCAD.js +5 -0
  137. package/dist/{registry-OYWYT7WL.js.map → registry-7CQ3NCAD.js.map} +1 -1
  138. package/dist/server-manager-DES23IBQ.js +5 -0
  139. package/dist/{server-manager-PTGBHCLS.js.map → server-manager-DES23IBQ.js.map} +1 -1
  140. package/dist/session-manager-EHD7GWM2.js +12 -0
  141. package/dist/{session-manager-NYB2RKMS.js.map → session-manager-EHD7GWM2.js.map} +1 -1
  142. package/dist/skills/built-in/code-review/SKILL.md +85 -0
  143. package/dist/skills/built-in/commit/SKILL.md +83 -0
  144. package/dist/skills/built-in/debug/SKILL.md +119 -0
  145. package/dist/skills/built-in/plan/SKILL.md +123 -0
  146. package/dist/skills/built-in/refactor/SKILL.md +132 -0
  147. package/dist/skills/built-in/test/SKILL.md +128 -0
  148. package/dist/sqlite-store-7ZIVOUNI.js +5 -0
  149. package/dist/sqlite-store-7ZIVOUNI.js.map +1 -0
  150. package/dist/team-manager-6DCNLGTC.js +11 -0
  151. package/dist/{team-manager-HC4XGCFY.js.map → team-manager-6DCNLGTC.js.map} +1 -1
  152. package/dist/team-state-R2D7DT5M.js +3 -0
  153. package/dist/team-state-R2D7DT5M.js.map +1 -0
  154. package/dist/tmux-manager-WBKHUHDT.js +6 -0
  155. package/dist/{tmux-manager-GPYZ3WQH.js.map → tmux-manager-WBKHUHDT.js.map} +1 -1
  156. package/dist/tools-I6XCTEZY.js +6 -0
  157. package/dist/{tools-TSMXMHIF.js.map → tools-I6XCTEZY.js.map} +1 -1
  158. package/package.json +93 -89
  159. package/dist/App-TE3JJKOW.js +0 -2789
  160. package/dist/App-TE3JJKOW.js.map +0 -1
  161. package/dist/api-key-fallback-YQQBOQIL.js +0 -11
  162. package/dist/chunk-4IJD72YB.js.map +0 -1
  163. package/dist/chunk-6PDJ45T4.js.map +0 -1
  164. package/dist/chunk-ASGRGXYK.js.map +0 -1
  165. package/dist/chunk-CARHU3DO.js.map +0 -1
  166. package/dist/chunk-CGEV3ARR.js.map +0 -1
  167. package/dist/chunk-CS5X3BWX.js +0 -27
  168. package/dist/chunk-CS5X3BWX.js.map +0 -1
  169. package/dist/chunk-CYQNBB25.js.map +0 -1
  170. package/dist/chunk-DAHGLHNR.js.map +0 -1
  171. package/dist/chunk-H66O5Z2V.js.map +0 -1
  172. package/dist/chunk-HCIHOHLX.js.map +0 -1
  173. package/dist/chunk-HMJRPNPZ.js.map +0 -1
  174. package/dist/chunk-I5PZ4JTS.js.map +0 -1
  175. package/dist/chunk-IYW62KKR.js.map +0 -1
  176. package/dist/chunk-JAXXTYID.js.map +0 -1
  177. package/dist/chunk-LSOYPSAT.js.map +0 -1
  178. package/dist/chunk-MFBHNWGV.js.map +0 -1
  179. package/dist/chunk-MXZSI3AY.js.map +0 -1
  180. package/dist/chunk-NBR3GHMT.js.map +0 -1
  181. package/dist/chunk-TEVZS4FA.js.map +0 -1
  182. package/dist/chunk-UY2SYSEZ.js.map +0 -1
  183. package/dist/chunk-VUG4IZ7J.js.map +0 -1
  184. package/dist/chunk-WAHVZH7V.js +0 -260
  185. package/dist/chunk-WAHVZH7V.js.map +0 -1
  186. package/dist/chunk-WPP3PEDE.js.map +0 -1
  187. package/dist/chunk-Y5XVD2CD.js.map +0 -1
  188. package/dist/chunk-YL5XFHR3.js.map +0 -1
  189. package/dist/chunk-ZGOHARPV.js.map +0 -1
  190. package/dist/claude-adapter-QMLFMSP3.js +0 -6
  191. package/dist/claude-login-5WELXPKT.js.map +0 -1
  192. package/dist/codex-login-DDJBCT43.js.map +0 -1
  193. package/dist/config-store-W6FBCQAQ.js +0 -6
  194. package/dist/executor-6RIKIGXK.js +0 -4
  195. package/dist/gemini-adapter-6JIHZ7WI.js +0 -6
  196. package/dist/gemini-login-YEPK6GGW.js.map +0 -1
  197. package/dist/kimi-adapter-JN4HFFHU.js +0 -6
  198. package/dist/kimi-login-ZR74MIY4.js.map +0 -1
  199. package/dist/native-cli-adapters-OLW3XX57.js +0 -6
  200. package/dist/ollama-adapter-OJQ3FKWK.js +0 -6
  201. package/dist/openai-adapter-XU46EN7B.js +0 -6
  202. package/dist/registry-H7B3AHPQ.js +0 -5
  203. package/dist/registry-OYWYT7WL.js +0 -6
  204. package/dist/server-manager-PTGBHCLS.js +0 -5
  205. package/dist/session-manager-NYB2RKMS.js +0 -12
  206. package/dist/team-manager-HC4XGCFY.js +0 -11
  207. package/dist/tmux-manager-GPYZ3WQH.js +0 -6
  208. package/dist/tools-TSMXMHIF.js +0 -6
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/theme.ts","../src/ui/components/MarkdownContent.tsx","../src/ui/hooks/use-animation-tick.ts","../src/ui/components/GradientSpinner.tsx","../src/ui/components/ToolCallDisplay.tsx","../src/ui/components/MessageView.tsx","../src/ui/components/AutocompletePopup.tsx","../src/ui/autocomplete-data.ts","../src/ui/input-utils.ts","../src/ui/history-navigation.ts","../src/ui/components/InputBar.tsx","../src/ui/components/StatusBar.tsx","../src/ui/components/ThinkingIndicator.tsx","../src/ui/components/WelcomeScreen.tsx","../src/ui/layouts/SinglePane.tsx","../src/ui/components/SplitPanel.tsx","../src/ui/layouts/SplitPane.tsx","../src/ui/hooks/useModel.ts","../src/ui/hooks/useStream.ts","../src/ui/hooks/useCost.ts","../src/ui/hooks/usePanel.ts","../src/ui/utils.ts","../src/ui/components/ModelSelector.tsx","../src/ui/components/ThinkingSelector.tsx","../src/ui/components/LoginSelector.tsx","../src/ui/components/SwarmOnboarding.tsx","../src/ui/commands/types.ts","../src/ui/commands/model-helpers.ts","../src/ui/commands/team-commands.ts","../src/ui/commands/mcp-commands.ts","../src/ui/commands/skill-commands.ts","../src/ui/commands/login-commands.ts","../src/ui/commands/config-commands.ts","../src/ui/commands/history-commands.ts","../src/ui/commands/slash-router.ts","../src/ui/conversation-persistence.ts","../src/ui/team-design.ts","../src/ui/team-launcher.ts","../src/ui/app-helpers.ts","../src/ui/App.tsx"],"names":["jsxs","Text","jsx","Box","useState","useEffect","useMemo","shortModelName","useRef","Fragment","shortModelLabel","React","useInput","useCallback","getActiveTeamManager","getActiveTeamName","getActiveTmuxCleanup","store","script"],"mappings":";;;;;;;;;;;;;;;;;;AAMO,IAAM,WAAA,GAAc,SAAA;AAGpB,IAAM,MAAA,GAAS;AAAA,EACpB,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,SAAA;AAAA,IACT,SAAA,EAAW,SAAA;AAAA,IACX,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,SAAA;AAAA,IACL,MAAA,EAAQ,SAEV,CAAA;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,SAAA;AAAA,IACT,MAAA,EAAQ,SAKV,CAAA;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,SAAA;AAAA,IACT,KAAA,EAAO,SAAA;AAAA,IACP,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM,SAAA;AAAA,IAEN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW,SAAA;AAAA,IACX,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM;AAAA;AAEV,CAAA;ACpBA,SAAS,YAAY,GAAA,EAA8B;AACjD,EAAA,MAAM,SAA0B,EAAC;AACjC,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC5B,EAAA,IAAI,CAAA,GAAI,CAAA;AAER,EAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,EAAE,IAAA,EAAK;AAChC,MAAA,MAAM,YAAsB,EAAC;AAC7B,MAAA,CAAA,EAAA;AACA,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,QAAA,MAAM,WAAA,GAAc,MAAM,CAAC,CAAA;AAC3B,QAAA,IAAI,WAAA,KAAgB,MAAA,IAAa,WAAA,CAAY,UAAA,CAAW,KAAK,CAAA,EAAG;AAC9D,UAAA;AAAA,QACF;AACA,QAAA,SAAA,CAAU,KAAK,WAAW,CAAA;AAC1B,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,UAAU,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,EAAM,CAAA;AACjE,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,mBAAmB,CAAA;AAClD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,MAAA,GAAS,YAAY,CAAC,CAAA;AAC5B,MAAA,MAAM,aAAA,GAAgB,YAAY,CAAC,CAAA;AACnC,MAAA,IAAI,MAAA,KAAW,MAAA,IAAa,aAAA,KAAkB,MAAA,EAAW;AACvD,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,aAAA;AAAA,QACT,OAAO,MAAA,CAAO;AAAA,OACf,CAAA;AACD,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA,EAAG;AAC/B,MAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,IAAA,EAAM,OAAA,EAAS,IAAI,CAAA;AACvC,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG;AACzB,MAAA,MAAM,aAAuB,EAAC;AAC9B,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,QAAA,MAAM,SAAA,GAAY,MAAM,CAAC,CAAA;AACzB,QAAA,IAAI,cAAc,MAAA,IAAa,CAAC,SAAA,CAAU,UAAA,CAAW,IAAI,CAAA,EAAG;AAC1D,UAAA;AAAA,QACF;AACA,QAAA,UAAA,CAAW,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,CAAC,CAAC,CAAA;AAClC,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,YAAA,EAAc,SAAS,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA;AAClE,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,cAAc,IAAA,CAAK,IAAI,KAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA,EAAG;AACxD,MAAA,MAAM,YAAsB,EAAC;AAC7B,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,QAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,QAAA,IAAI,MAAM,MAAA,EAAW;AACnB,UAAA;AAAA,QACF;AACA,QAAA,IACE,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,IACpB,cAAc,IAAA,CAAK,CAAC,CAAA,IACnB,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA,IAAK,SAAA,CAAU,SAAS,CAAA,EAC1C;AACA,UAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAChB,UAAA,CAAA,EAAA;AAAA,QACF,CAAA,MAAO;AACL,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA;AAC3D,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,MAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,MAAA,IAAI,MAAM,MAAA,EAAW;AACnB,QAAA;AAAA,MACF;AACA,MAAA,IACE,CAAA,CAAE,WAAW,KAAK,CAAA,IAClB,EAAE,UAAA,CAAW,GAAG,CAAA,IAChB,CAAA,CAAE,UAAA,CAAW,IAAI,KACjB,gBAAA,CAAiB,IAAA,CAAK,CAAC,CAAA,IACvB,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,IACpB,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,EACpB;AACA,QAAA;AAAA,MACF;AACA,MAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAChB,MAAA,CAAA,EAAA;AAAA,IACF;AACA,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA;AAAA,IAC7D;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,GAAA,EAAK,CAAA;AACrE;AAKA,SAAS,cAAA,CAAe;AAAA,EACtB;AACF,CAAA,EAEuB;AACrB,EAAA,MAAM,WAAiC,EAAC;AACxC,EAAA,IAAI,SAAA,GAAY,IAAA;AAChB,EAAA,IAAI,GAAA,GAAM,CAAA;AAEV,EAAA,OAAO,SAAA,CAAU,SAAS,CAAA,EAAG;AAE3B,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,gBAAgB,CAAA;AAClD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,QAAA,CAAS,IAAA;AAAA,4BACN,IAAA,EAAA,EAAiB,IAAA,EAAI,MACnB,QAAA,EAAA,SAAA,CAAU,CAAC,KADH,GAAA,EAEX;AAAA,OACF;AACA,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,CAAC,EAAE,MAAM,CAAA;AAC/C,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,SAAA,CAAU,KAAA,CAAM,YAAY,CAAA;AAChD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,QAAA,CAAS,IAAA;AAAA,4BACN,IAAA,EAAA,EAAiB,MAAA,EAAM,MACrB,QAAA,EAAA,WAAA,CAAY,CAAC,KADL,GAAA,EAEX;AAAA,OACF;AACA,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,WAAA,CAAY,CAAC,EAAE,MAAM,CAAA;AACjD,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,YAAY,CAAA;AAC9C,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,QAAA,CAAS,IAAA;AAAA,wBACP,GAAA,CAAC,IAAA,EAAA,EAAiB,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAI,IAAA,EAChD,QAAA,EAAA,SAAA,CAAU,CAAC,CAAA,EAAA,EADH,GAAA,EAEX;AAAA,OACF;AACA,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,CAAC,EAAE,MAAM,CAAA;AAC/C,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,SAAA,CAAU,KAAA,CAAM,YAAY,CAAA;AAChD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,QAAA,CAAS,IAAA;AAAA,wBACP,GAAA,CAAC,QAAiB,aAAA,EAAa,IAAA,EAAC,UAAQ,IAAA,EACrC,QAAA,EAAA,WAAA,CAAY,CAAC,CAAA,EAAA,EADL,GAAA,EAEX;AAAA,OACF;AACA,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,WAAA,CAAY,CAAC,EAAE,MAAM,CAAA;AACjD,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,0BAA0B,CAAA;AAC5D,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,QAAA,CAAS,IAAA;AAAA,wBACP,GAAA,CAAC,IAAA,EAAA,EAAiB,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,SAAA,EAAS,IAAA,EACnD,QAAA,EAAA,SAAA,CAAU,CAAC,CAAA,EAAA,EADH,GAAA,EAEX;AAAA,OACF;AACA,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,CAAC,EAAE,MAAM,CAAA;AAC/C,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAC7C,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,MAAA,QAAA,CAAS,IAAA,iBAAK,GAAA,CAAC,IAAA,EAAA,EAAkB,QAAA,EAAA,SAAA,EAAA,EAAR,KAAkB,CAAO,CAAA;AAClD,MAAA;AAAA,IACF,CAAA,MAAA,IAAW,gBAAgB,CAAA,EAAG;AAC5B,MAAA,QAAA,CAAS,qBAAK,GAAA,CAAC,IAAA,EAAA,EAAkB,oBAAU,CAAC,CAAA,EAAA,EAAnB,KAAqB,CAAO,CAAA;AACrD,MAAA,SAAA,GAAY,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,IAC/B,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,IAAA;AAAA,4BACN,IAAA,EAAA,EAAkB,QAAA,EAAA,SAAA,CAAU,MAAM,CAAA,EAAG,WAAW,KAAtC,GAAA,EAAwC;AAAA,OACrD;AACA,MAAA,SAAA,GAAY,SAAA,CAAU,MAAM,WAAW,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,MAAA,EAAQ,QAAA,EAAA,QAAA,EAAS,CAAA;AACrC;AAIA,SAAS,WAAA,CAAY;AAAA,EACnB,OAAA;AAAA,EACA;AACF,CAAA,EAGuB;AACrB,EAAA,MAAM,YAAA,GAAkC;AAAA,IACtC,OAAO,IAAA,CAAK,MAAA;AAAA,IACZ,OAAO,MAAA,CAAO,MAAA;AAAA,IACd,OAAO,MAAA,CAAO,OAAA;AAAA,IACd,OAAO,IAAA,CAAK;AAAA,GACd;AACA,EAAA,MAAM,QAAQ,YAAA,CAAa,KAAA,GAAQ,CAAC,CAAA,IAAK,OAAO,IAAA,CAAK,OAAA;AACrD,EAAA,MAAM,SAAS,KAAA,KAAU,CAAA,GAAI,SAAA,GAAY,KAAA,KAAU,IAAI,SAAA,GAAY,IAAA;AAEnE,EAAA,uBACE,GAAA,CAAC,GAAA,EAAA,EAAI,OAAA,EAAS,KAAA,IAAS,CAAA,GAAI,CAAA,GAAI,CAAA,EAC7B,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAc,IAAA,EAAM,KAAA,IAAS,CAAA,EAChC,QAAA,EAAA;AAAA,IAAA,MAAA;AAAA,IACA;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,SAAA,CAAU;AAAA,EACjB;AACF,CAAA,EAEuB;AACrB,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,MAAM,OAAA,GAAU,CAAC,QAAA,EAAU,QAAA,EAAU,QAAU,QAAQ,CAAA;AAEvD,EAAA,uBACE,GAAA,CAAC,OAAI,aAAA,EAAc,QAAA,EAChB,gBAAM,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AACtB,IAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,GAAI,CAAC,GAAG,MAAA,IAAU,CAAA;AACpD,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACzC,IAAA,MAAM,KAAA,GAAQ,KACX,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA,CACzB,OAAA,CAAQ,eAAe,EAAE,CAAA;AAC5B,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,WAAA,GAAc,OAAA,CAAQ,MAAM,CAAA;AAEnD,IAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAY,UAAA,EAAY,WAAA,GAAc,CAAA,EACrC,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,MAAA,EAAS,QAAA,EAAA;AAAA,QAAA,MAAA;AAAA,QAAO;AAAA,OAAA,EAAC,CAAA;AAAA,sBAC5C,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAM,KAAA,EAAO;AAAA,KAAA,EAAA,EAFrB,CAGV,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;AAEA,SAAS,eAAA,CAAgB;AAAA,EACvB,OAAA;AAAA,EACA;AACF,CAAA,EAGuB;AACrB,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,EAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,SAAS,CAAC,CAAA,EAAG,IAAA,EAAK,KAAM,EAAA,EAAI;AAC9D,IAAA,KAAA,CAAM,GAAA,EAAI;AAAA,EACZ;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAc,QAAA;AAAA,MACd,WAAA,EAAY,OAAA;AAAA,MACZ,WAAA,EAAa,OAAO,MAAA,CAAO,GAAA;AAAA,MAC3B,OAAA,EAAS,CAAA;AAAA,MAER,QAAA,EAAA;AAAA,QAAA,IAAA,mBACC,GAAA,CAAC,GAAA,EAAA,EAAI,QAAA,EAAU,CAAA,EACb,8BAAC,IAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAQ,IAAA,EACrC,QAAA,EAAA,IAAA,EACH,GACF,CAAA,GACE,IAAA;AAAA,wBACJ,GAAA,CAAC,GAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,QAAA,EAAU,CAAA,EACnC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChB,IAAA,CAAC,GAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,QAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,UAAQ,IAAA,EACrC,QAAA,EAAA;AAAA,YAAA,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAAA,YAAE,GAAA;AAAA,YAAE,QAAA;AAAA,YAAU;AAAA,WAAA,EAC9C,CAAA;AAAA,8BACC,IAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,UAAW,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EAAA,EAJjC,CAKV,CACD,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;AAIO,SAAS,eAAA,CAAgB;AAAA,EAC9B;AACF,CAAA,EAA8C;AAC5C,EAAA,MAAM,MAAA,GAAS,YAAY,OAAO,CAAA;AAGlC,EAAA,IAAI,OAAO,MAAA,KAAW,CAAA,IAAK,OAAO,CAAC,CAAA,EAAG,SAAS,MAAA,EAAQ;AACrD,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,CAAC,CAAA,CAAE,OAAA;AACvB,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACxB,MAAA,uBAAO,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,MAAA,EAAQ,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IACjC;AACA,IAAA,uBAAO,GAAA,CAAC,kBAAe,IAAA,EAAY,CAAA;AAAA,EACrC;AAEA,EAAA,uBACE,GAAA,CAAC,OAAI,aAAA,EAAc,QAAA,EAChB,iBAAO,GAAA,CAAI,CAAC,OAAO,CAAA,KAAM;AACxB,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,MAAA;AACH,QAAA,uBACE,GAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YAEC,SAAS,KAAA,CAAM,OAAA;AAAA,YACf,MAAM,KAAA,CAAM;AAAA,WAAA;AAAA,UAFP;AAAA,SAGP;AAAA,MAEJ,KAAK,QAAA;AACH,QAAA,uBACE,GAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YAEC,SAAS,KAAA,CAAM,OAAA;AAAA,YACf,KAAA,EAAO,MAAM,KAAA,IAAS;AAAA,WAAA;AAAA,UAFjB;AAAA,SAGP;AAAA,MAEJ,KAAK,MAAA;AACH,QAAA,uBAAO,GAAA,CAAC,SAAA,EAAA,EAAkB,OAAA,EAAS,KAAA,CAAM,WAAlB,CAA2B,CAAA;AAAA,MACpD,KAAK,IAAA;AACH,QAAA,uBACE,GAAA,CAAC,GAAA,EAAA,EAAY,OAAA,EAAS,CAAA,EACpB,8BAAC,IAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KACxB,QAAA,EAAA,QAAA,CAAS,MAAA,CAAO,EAAE,CAAA,EACrB,KAHQ,CAIV,CAAA;AAAA,MAEJ,KAAK,YAAA;AACH,QAAA,uBACE,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YAEC,UAAA,EAAY,CAAA;AAAA,YACZ,WAAA,EAAY,QAAA;AAAA,YACZ,UAAA,EAAU,IAAA;AAAA,YACV,WAAA,EAAa,KAAA;AAAA,YACb,SAAA,EAAW,KAAA;AAAA,YACX,YAAA,EAAc,KAAA;AAAA,YACd,WAAA,EAAa,OAAO,MAAA,CAAO,MAAA;AAAA,YAC3B,WAAA,EAAa,CAAA;AAAA,YAEb,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,MAAA,EAAM,IAAA,EAAC,IAAA,EAAK,MAAA,EAC7C,QAAA,EAAA,KAAA,CAAM,OAAA,EACT;AAAA,WAAA;AAAA,UAZK;AAAA,SAaP;AAAA,MAEJ,KAAK,MAAA;AAAA,MACL;AACE,QAAA,uBAAO,GAAA,CAAC,cAAA,EAAA,EAAuB,IAAA,EAAM,KAAA,CAAM,WAAf,CAAwB,CAAA;AAAA;AACxD,EACF,CAAC,CAAA,EACH,CAAA;AAEJ;AC5YA,IAAM,gBAAA,uBAAuB,GAAA,EAA8B;AAE3D,SAAS,kBAAkB,UAAA,EAAsC;AAC/D,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,GAAA,CAAI,UAAU,CAAA;AAChD,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAA2B;AAAA,IAC/B,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,sBAAe,GAAA,EAAI;AAAA,IACnB,KAAA,EAAO,YAAY,MAAM;AACvB,MAAA,MAAA,CAAO,IAAA,IAAQ,CAAA;AACf,MAAA,KAAA,MAAW,QAAA,IAAY,OAAO,SAAA,EAAW;AACvC,QAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,MACtB;AAAA,IACF,GAAG,UAAU;AAAA,GACf;AAEA,EAAA,gBAAA,CAAiB,GAAA,CAAI,YAAY,MAAM,CAAA;AACvC,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,gBAAA,CAAiB,UAAA,EAAoB,OAAA,GAAU,IAAA,EAAc;AAC3E,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,CAAC,CAAA;AAElC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,CAAQ,CAAC,CAAA;AACT,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,kBAAkB,UAAU,CAAA;AAC3C,IAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAEnB,IAAA,MAAM,QAAA,GAAW,CAAC,QAAA,KAA2B;AAC3C,MAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,IAClB,CAAA;AAEA,IAAA,MAAA,CAAO,SAAA,CAAU,IAAI,QAAQ,CAAA;AAE7B,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,SAAA,CAAU,OAAO,QAAQ,CAAA;AAChC,MAAA,IAAI,MAAA,CAAO,SAAA,CAAU,IAAA,KAAS,CAAA,EAAG;AAC/B,QAAA,aAAA,CAAc,OAAO,KAAK,CAAA;AAC1B,QAAA,gBAAA,CAAiB,OAAO,UAAU,CAAA;AAAA,MACpC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,UAAU,CAAC,CAAA;AAExB,EAAA,OAAO,IAAA;AACT;ACtCA,IAAM,gBAAA,GAGF;AAAA,EACF,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,CAAC,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAQ,CAAA;AAAA,IAC3G,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,CAAC,QAAA,EAAU,QAAA,EAAU,UAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAQ,CAAA;AAAA,IACvF,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,GAAA,EAAK;AAAA,IACH,QAAQ,CAAC,QAAA,EAAU,UAAU,QAAA,EAAU,QAAA,EAAU,UAAU,QAAQ,CAAA;AAAA,IACnE,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAQ,CAAC,QAAA,EAAU,UAAU,QAAA,EAAU,QAAA,EAAU,UAAU,QAAQ,CAAA;AAAA,IACnE,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,CAAC,QAAA,EAAU,QAAA,EAAU,UAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAQ,CAAA;AAAA,IACvF,QAAA,EAAU;AAAA;AAEd,CAAA;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,KAAA;AAAA,EACA,UAAA,GAAa,SAAA;AAAA,EACb,OAAA,GAAU,MAAA;AAAA,EACV;AACF,CAAA,EAA8C;AAC5C,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,OAAO,CAAA,IAAK,iBAAiB,MAAM,CAAA;AACvE,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AACA,EAAA,MAAM,QAAA,GAAW,SAAS,UAAA,CAAW,QAAA;AACrC,EAAA,MAAM,IAAA,GAAO,iBAAiB,QAAQ,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,IAAA,GAAO,UAAA,CAAW,MAAA,CAAO,MAAA;AAEvC,EAAA,uBACEA,IAAAA,CAACC,IAAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAACD,MAAA,EAAK,KAAA,EAAO,aAAc,QAAA,EAAA,UAAA,CAAW,MAAA,CAAO,KAAK,CAAA,EAAE,CAAA;AAAA,IACnD,wBAAQD,IAAAA,CAACC,IAAAA,EAAA,EAAK,OAAO,UAAA,EAAY,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,MAAE;AAAA,KAAA,EAAM,CAAA,GAAU;AAAA,GAAA,EACtD,CAAA;AAEJ;ACvCA,SAAS,UAAA,CAAW;AAAA,EAClB;AACF,CAAA,EAEuB;AACrB,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,SAAA;AACH,MAAA,uBAAOC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAQ,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,IACnD,KAAK,WAAA;AACH,MAAA,uBAAOC,GAAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAQ,MAAA,EAAO,CAAA;AAAA,IACzC,KAAK,SAAA;AACH,MAAA,uBAAOA,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,MAAA,CAAO,SAAU,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,IACvD,KAAK,OAAA;AACH,MAAA,uBAAOC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,MAAA,CAAO,OAAQ,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,IACrD,KAAK,WAAA;AACH,MAAA,uBAAOC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAQ,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA;AAEvD;AAEA,SAAS,eAAe,EAAA,EAAoB;AAC1C,EAAA,IAAI,EAAA,GAAK,GAAA,EAAM,OAAO,CAAA,EAAG,EAAE,CAAA,EAAA,CAAA;AAC3B,EAAA,OAAO,CAAA,EAAA,CAAI,EAAA,GAAK,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAClC;AAGA,SAAS,YAAY,IAAA,EAAsB;AACzC,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,cAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,YAAA;AAAA,IACL,KAAK,WAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,WAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT;AACE,MAAA,OAAO,QAAA;AAAA;AAEb;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,QAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,EAA8C;AAC5C,EAAA,MAAM,WAAA,GACJ,MAAA,KAAW,OAAA,GACP,MAAA,CAAO,MAAA,CAAO,KAAA,GACd,MAAA,KAAW,WAAA,GACT,MAAA,CAAO,MAAA,CAAO,MAAA,GACd,MAAA,CAAO,MAAA,CAAO,GAAA;AAEtB,EAAA,MAAM,IAAA,GAAO,YAAY,QAAQ,CAAA;AAEjC,EAAA,uBACED,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,SAAS,CAAA,EAEnC,QAAA,EAAA;AAAA,oBAAAH,IAAAA,CAACG,KAAA,EACC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,cAAW,MAAA,EAAgB,CAAA;AAAA,sBAC5BA,GAAAA,CAACD,IAAAA,EAAA,EAAK,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,sBACPD,KAACC,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,IAAA,EAAI,IAAA,EAChC,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,QAAK,GAAA;AAAA,QAAE;AAAA,OAAA,EACV,CAAA;AAAA,MACC,WAAA,mBACCD,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,KAAK,KAAA,EAAO,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAAE;AAAA,OAAA,EAAY,CAAA,GAC5C,IAAA;AAAA,MACH,QAAA,KAAa,MAAA,IAAa,MAAA,KAAW,WAAA,mBACpCD,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,UAAQ,IAAA,EACrC,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAAI,GAAA;AAAA,QACH,eAAe,QAAQ,CAAA;AAAA,QAAE;AAAA,OAAA,EAC7B,CAAA,GACE;AAAA,KAAA,EACN,CAAA;AAAA,IAGC,CAAC,WAAA,IAAe,MAAA,mBACfC,GAAAA;AAAA,MAACC,GAAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAc,QAAA;AAAA,QACd,UAAA,EAAY,CAAA;AAAA,QACZ,WAAA,EAAY,QAAA;AAAA,QACZ,UAAA,EAAU,IAAA;AAAA,QACV,WAAA,EAAa,KAAA;AAAA,QACb,SAAA,EAAW,KAAA;AAAA,QACX,YAAA,EAAc,KAAA;AAAA,QACd,WAAA;AAAA,QACA,WAAA,EAAa,CAAA;AAAA,QAEb,QAAA,kBAAAD,GAAAA;AAAA,UAACD,IAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,OAAO,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,KAAA,GAAQ,OAAO,IAAA,CAAK,SAAA;AAAA,YAElD,QAAA,EAAA,MAAA,CAAO,SAAS,GAAA,GACb,MAAA,CAAO,MAAM,CAAA,EAAG,GAAI,IAAI,sBAAA,GACxB;AAAA;AAAA;AACN;AAAA,KACF,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;AC7HA,SAAS,aAAa,IAAA,EAA2B;AAC/C,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,OAAO,OAAO,IAAA,CAAK,IAAA;AAAA,IACrB,KAAK,WAAA;AACH,MAAA,OAAO,OAAO,IAAA,CAAK,SAAA;AAAA,IACrB,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,IAAA,CAAK,MAAA;AAAA,IACrB,KAAK,MAAA;AACH,MAAA,OAAO,OAAO,IAAA,CAAK,IAAA;AAAA;AAEzB;AAEA,SAAS,YAAY,IAAA,EAA2B;AAC9C,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,QAAA;AAAA;AAEb;AAEA,SAAS,YAAA,CAAa,MAAmB,KAAA,EAAwB;AAC/D,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT,KAAK,WAAA;AACH,MAAA,OAAO,KAAA,IAAS,WAAA;AAAA,IAClB,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,MAAA;AAAA;AAEb;AAEA,SAAS,eAAe,KAAA,EAAuB;AAC7C,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,UAAA;AACnC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,YAAA;AACrC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,WAAA;AACpC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,cAAc,CAAA,EAAG,OAAO,cAAA;AAC3C,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,SAAA;AACtC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,IAAA;AACjC,EAAA,IAAI,KAAA,CAAM,SAAS,QAAQ,CAAA,IAAK,MAAM,QAAA,CAAS,KAAK,GAAG,OAAO,YAAA;AAC9D,EAAA,IAAI,KAAA,CAAM,SAAS,QAAQ,CAAA,IAAK,MAAM,QAAA,CAAS,OAAO,GAAG,OAAO,cAAA;AAChE,EAAA,IAAI,KAAA,CAAM,SAAS,MAAM,CAAA,IAAK,MAAM,QAAA,CAAS,IAAI,GAAG,OAAO,WAAA;AAC3D,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,cAAA,CACP,MACA,IAAA,EACQ;AACR,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,OAAO,OAAO,IAAA,CAAK,WAAW,MAAM,QAAA,GAAW,IAAA,CAAK,WAAW,CAAA,GAAI,EAAA;AAAA,IACrE,KAAK,MAAA;AACH,MAAA,OAAO,OAAO,IAAA,CAAK,SAAS,MAAM,QAAA,GAAW,IAAA,CAAK,SAAS,CAAA,GAAI,EAAA;AAAA,IACjE,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,SAAS,MAAM,QAAA,GAAW,IAAA,CAAK,SAAS,CAAA,GAAI,EAAA;AACpE,MAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,MAAM,CAAA,KAAM,WAAW,CAAA,IAAA,EAAO,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,GAAK,EAAA;AACvE,MAAA,OAAO,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AAAA,IACvB;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,SAAS,MAAM,QAAA,GAAW,IAAA,CAAK,SAAS,CAAA,GAAI,EAAA;AACpE,MAAA,OAAO,GAAA,CAAI,SAAS,EAAA,GAAK,GAAA,CAAI,MAAM,CAAA,EAAG,EAAE,IAAI,QAAA,GAAW,GAAA;AAAA,IACzD;AAAA,IACA;AACE,MAAA,OAAO,KAAK,SAAA,CAAU,IAAI,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA;AAE7C;AAQA,SAAS,WAAA,CAAY,EAAE,OAAA,EAAQ,EAA0C;AACvE,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,IAAI,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,YAAA;AAAA,IACZ,OAAA,CAAQ,IAAA;AAAA,IACR,OAAA,CAAQ,KAAA,GAAQ,cAAA,CAAe,OAAA,CAAQ,KAAK,CAAA,GAAI;AAAA,GAClD;AAGA,EAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC7B,IAAA,uBACEC,GAAAA,CAACC,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,YAAA,EAAc,CAAA,EACxC,QAAA,kBAAAH,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAH,IAAAA,CAACC,MAAA,EAAK,KAAA,EAAO,OAAO,IAAA,CAAK,MAAA,EAAQ,UAAQ,IAAA,EACtC,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,QAAM;AAAA,OAAA,EACT,CAAA;AAAA,sBACAC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,QAAA,EAAQ,IAAA,EAAC,IAAA,EAAK,MAAA,EAC5C,kBAAQ,OAAA,EACX;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,IAAU,OAAA,CAAQ,aAAa,OAAA,CAAQ,SAAA,CAAU,SAAS,CAAA,EAAG;AAChF,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAA;AACrC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,uBACEC,IAACC,GAAAA,EAAA,EAAI,SAAS,CAAA,EAAG,UAAA,EAAY,GAC3B,QAAA,kBAAAD,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,UAAU,SAAA,CAAU,IAAA;AAAA,UACpB,QAAQ,OAAA,CAAQ,OAAA,CAAQ,UAAA,CAAW,QAAQ,IAAI,OAAA,GAAU,SAAA;AAAA,UACzD,WAAA,EAAa,cAAA,CAAe,SAAA,CAAU,IAAA,EAAM,UAAU,SAAS,CAAA;AAAA,UAC/D,QAAQ,OAAA,CAAQ,OAAA;AAAA,UAChB,OAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA;AAAA,UAC5C,WAAA,EAAa,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS;AAAA;AAAA,OACxC,EACF,CAAA;AAAA,IAEJ;AAAA,EACF;AAEA,EAAA,uBACEF,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,cAAc,CAAA,EAExC,QAAA,EAAA;AAAA,oBAAAH,IAAAA,CAACG,KAAA,EACC,QAAA,EAAA;AAAA,sBAAAH,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAc,MAAI,IAAA,EACrB,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,QAAK,GAAA;AAAA,QAAE;AAAA,OAAA,EACV,CAAA;AAAA,MACC,OAAA,CAAQ,UAAA,mBACPD,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAQ,IAAA,EACrC,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAAI,GAAA;AAAA,QACH,QAAQ,UAAA,CAAW,WAAA;AAAA,QAAY;AAAA,OAAA,EACnC,CAAA,GACE;AAAA,KAAA,EACN,CAAA;AAAA,oBAGAC,GAAAA,CAACC,GAAAA,EAAA,EAAI,YAAY,CAAA,EAAG,aAAA,EAAc,QAAA,EAChC,QAAA,kBAAAD,GAAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,OAAA,CAAQ,SAAS,CAAA,EAC7C,CAAA;AAAA,IAGC,OAAA,CAAQ,aAAa,OAAA,CAAQ,SAAA,CAAU,SAAS,CAAA,mBAC/CA,IAACC,GAAAA,EAAA,EAAI,YAAY,CAAA,EAAG,aAAA,EAAc,UAAS,SAAA,EAAW,CAAA,EACnD,kBAAQ,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,KAAS;AAC/B,MAAA,MAAM,UAAA,GAAa,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,KAAK,SAAS,CAAA;AAC3D,MAAA,uBACED,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UAEC,UAAU,IAAA,CAAK,IAAA;AAAA,UACf,MAAA,EAAO,SAAA;AAAA,UACP,WAAA,EAAa;AAAA,SAAA;AAAA,QAHR,IAAA,CAAK;AAAA,OAIZ;AAAA,IAEJ,CAAC,GACH,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;AAIA,IAAM,oBAAA,GAAuB,EAAA;AAEtB,SAAS,WAAA,CAAY;AAAA,EAC1B;AACF,CAAA,EAA0C;AACxC,EAAA,MAAM,eAAA,GACJ,SAAS,MAAA,GAAS,oBAAA,GACd,SAAS,KAAA,CAAM,CAAC,oBAAoB,CAAA,GACpC,QAAA;AAEN,EAAA,uBACEF,KAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAAS,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,CAAA,EAChD,QAAA,EAAA;AAAA,IAAA,QAAA,CAAS,MAAA,GAAS,oBAAA,mBACjBH,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAQ,IAAA,EACrC,QAAA,EAAA;AAAA,MAAA,IAAA;AAAA,MAAK,GAAA;AAAA,MAAE,SAAS,MAAA,GAAS,oBAAA;AAAA,MAAqB;AAAA,KAAA,EAEjD,CAAA,GACE,IAAA;AAAA,IACH,eAAA,CAAgB,GAAA,CAAI,CAAC,GAAA,qBACpBC,GAAAA,CAAC,WAAA,EAAA,EAAyB,OAAA,EAAS,GAAA,EAAA,EAAjB,GAAA,CAAI,EAAkB,CACzC;AAAA,GAAA,EACH,CAAA;AAEJ;ACtMA,IAAM,iBAAA,GAAoB,CAAA;AAC1B,IAAM,eAAA,GAAkB,QAAA;AACxB,IAAM,iBAAA,GAAoB,QAAA;AAC1B,IAAM,cAAA,GAAiB,SAAA;AAOhB,SAAS,iBAAA,CAAkB;AAAA,EAChC,KAAA;AAAA,EACA;AACF,CAAA,EAAuD;AACrD,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,MAAM,aAAa,KAAA,CAAM,MAAA;AACzB,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,iBAAA,EAAmB,UAAU,CAAA;AAEzD,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,IAAI,iBAAiB,UAAA,EAAY;AAC/B,IAAA,YAAA,GAAe,gBAAgB,UAAA,GAAa,CAAA;AAAA,EAC9C;AACA,EAAA,YAAA,GAAe,IAAA,CAAK,GAAA;AAAA,IAClB,CAAA;AAAA,IACA,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,UAAA,GAAa,UAAU;AAAA,GAChD;AAEA,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,KAAA,CAAM,YAAA,EAAc,eAAe,UAAU,CAAA;AACxE,EAAA,MAAM,OAAA,GAAU,eAAe,UAAA,GAAa,UAAA;AAC5C,EAAA,MAAM,UAAU,YAAA,GAAe,CAAA;AAE/B,EAAA,uBACEF,IAAAA;AAAA,IAACG,GAAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAc,QAAA;AAAA,MACd,WAAA,EAAY,OAAA;AAAA,MACZ,WAAA,EAAa,OAAO,MAAA,CAAO,MAAA;AAAA,MAC3B,QAAA,EAAU,CAAA;AAAA,MACV,YAAA,EAAc,CAAA;AAAA,MAGb,QAAA,EAAA;AAAA,QAAA,OAAA,mBACCH,KAACC,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAQ,IAAA,EACrC,QAAA,EAAA;AAAA,UAAA,IAAA;AAAA,UACA,eAAA;AAAA,UAAgB,GAAA;AAAA,UAAE,YAAA;AAAA,UAAa;AAAA,SAAA,EAClC,CAAA,GACE,IAAA;AAAA,QAEH,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,EAAM,YAAA,KAAiB;AACxC,UAAA,MAAM,cAAc,YAAA,GAAe,YAAA;AACnC,UAAA,MAAM,aAAa,WAAA,KAAgB,aAAA;AACnC,UAAA,uBACED,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAH,IAAAA;AAAA,cAACC,IAAAA;AAAA,cAAA;AAAA,gBACC,OAAO,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,OAAO,IAAA,CAAK,OAAA;AAAA,gBACvD,IAAA,EAAM,UAAA;AAAA,gBAEL,QAAA,EAAA;AAAA,kBAAA,UAAA,GAAa,cAAA,GAAiB,IAAA;AAAA,kBAC9B,IAAA,CAAK;AAAA;AAAA;AAAA,aACR;AAAA,4BACAD,KAACC,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAQ,IAAA,EACrC,QAAA,EAAA;AAAA,cAAA,IAAA;AAAA,cACA,IAAA,CAAK;AAAA,aAAA,EACR;AAAA,WAAA,EAAA,EAXQ,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,WAAW,CAAA,CAYtC,CAAA;AAAA,QAEJ,CAAC,CAAA;AAAA,QAGA,OAAA,mBACCD,IAAAA,CAACC,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAQ,IAAA,EACrC,QAAA,EAAA;AAAA,UAAA,IAAA;AAAA,UACA,iBAAA;AAAA,UAAkB,GAAA;AAAA,UAAE,aAAa,YAAA,GAAe,UAAA;AAAA,UAAW;AAAA,SAAA,EAC9D,CAAA,GACE;AAAA;AAAA;AAAA,GACN;AAEJ;;;ACtEO,IAAM,cAAA,GAA2C;AAAA,EACtD,EAAE,OAAA,EAAS,QAAA,EAAU,WAAA,EAAa,oCAAA,EAAqC;AAAA,EACvE,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,yBAAA,EAA0B;AAAA,EAC3D,EAAE,OAAA,EAAS,QAAA,EAAU,WAAA,EAAa,wDAAA,EAAyD;AAAA,EAC3F,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,yDAAA,EAA0D;AAAA,EAC3F,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,6BAAA,EAA8B;AAAA,EAC/D,EAAE,OAAA,EAAS,QAAA,EAAU,WAAA,EAAa,oBAAA,EAAqB;AAAA,EACvD,EAAE,OAAA,EAAS,UAAA,EAAY,WAAA,EAAa,kBAAA,EAAmB;AAAA,EACvD,EAAE,OAAA,EAAS,YAAA,EAAc,WAAA,EAAa,mBAAA,EAAoB;AAAA,EAC1D,EAAE,OAAA,EAAS,YAAA,EAAc,WAAA,EAAa,2CAAA,EAA4C;AAAA,EAClF,EAAE,OAAA,EAAS,WAAA,EAAa,WAAA,EAAa,4BAAA,EAA6B;AAAA,EAClE,EAAE,OAAA,EAAS,UAAA,EAAY,WAAA,EAAa,mBAAA,EAAoB;AAAA,EACxD,EAAE,OAAA,EAAS,aAAA,EAAe,WAAA,EAAa,uBAAA,EAAwB;AAAA,EAC/D,EAAE,OAAA,EAAS,QAAA,EAAU,WAAA,EAAa,+BAAA,EAAgC;AAAA,EAClE,EAAE,OAAA,EAAS,eAAA,EAAiB,WAAA,EAAa,qCAAA,EAAsC;AAAA,EAC/E,EAAE,OAAA,EAAS,eAAA,EAAiB,WAAA,EAAa,uBAAA,EAAwB;AAAA,EACjE,EAAE,OAAA,EAAS,aAAA,EAAe,WAAA,EAAa,2BAAA,EAA4B;AAAA,EACnE,EAAE,OAAA,EAAS,aAAA,EAAe,WAAA,EAAa,2BAAA,EAA4B;AAAA,EACnE,EAAE,OAAA,EAAS,UAAA,EAAY,WAAA,EAAa,yBAAA,EAA0B;AAAA,EAC9D,EAAE,OAAA,EAAS,SAAA,EAAW,WAAA,EAAa,4CAAA,EAA6C;AAAA,EAChF,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,MAAA,EAAO;AAAA,EACxC,EAAE,OAAA,EAAS,OAAA,EAAS,WAAA,EAAa,MAAA;AACnC,CAAA;AAIA,IAAM,oBAAA,GAAqD;AAAA,EACzD,EAAE,KAAA,EAAO,WAAA,EAAa,WAAA,EAAa,+BAAA,EAAgC;AAAA,EACnE,EAAE,KAAA,EAAO,MAAA,EAAQ,WAAA,EAAa,qBAAA,EAAsB;AAAA,EACpD,EAAE,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,wBAAA,EAAyB;AAAA,EACxD,EAAE,KAAA,EAAO,MAAA,EAAQ,WAAA,EAAa,uBAAA;AAChC,CAAA;AAEA,IAAI,kBAAgD,EAAC;AAI9C,IAAM,SAAA,GAA0C;AAAA,EACrD,EAAE,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,kBAAA,EAAmB;AAAA,EAClD,EAAE,KAAA,EAAO,UAAA,EAAY,WAAA,EAAa,eAAA,EAAgB;AAAA,EAClD,EAAE,KAAA,EAAO,YAAA,EAAc,WAAA,EAAa,wBAAA,EAAyB;AAAA,EAC7D,EAAE,KAAA,EAAO,iBAAA,EAAmB,WAAA,EAAa,uBAAA,EAAwB;AAAA,EACjE,EAAE,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,iBAAA,EAAkB;AAAA,EACvD,EAAE,KAAA,EAAO,YAAA,EAAc,WAAA,EAAa,aAAA,EAAc;AAAA,EAClD,EAAE,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,sBAAA,EAAuB;AAAA,EAC5D,EAAE,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,kBAAA,EAAmB;AAAA,EACxD,EAAE,KAAA,EAAO,eAAA,EAAiB,WAAA,EAAa,eAAA,EAAgB;AAAA,EACvD,EAAE,KAAA,EAAO,aAAA,EAAe,WAAA,EAAa,mBAAA;AACvC,CAAA;AAKA,IAAM,kBAAA,GAAmD;AAAA,EACvD,EAAE,KAAA,EAAO,SAAA,EAAW,WAAA,EAAa,2BAAA,EAA4B;AAAA,EAC7D,EAAE,KAAA,EAAO,SAAA,EAAW,WAAA,EAAa,0CAAA,EAA2C;AAAA,EAC5E,EAAE,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,8CAAA,EAA+C;AAAA,EAC9E,EAAE,KAAA,EAAO,QAAA,EAAU,WAAA,EAAa,+BAAA,EAAgC;AAAA,EAChE,EAAE,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,yBAAA,EAA0B;AAAA,EACzD,EAAE,KAAA,EAAO,WAAA,EAAa,WAAA,EAAa,gCAAA;AACrC,CAAA;AAMA,IAAI,gBAAA,GAAiD,kBAAA;AAM9C,SAAS,sBAAsB,MAAA,EAA4C;AAChF,EAAA,gBAAA,GAAmB,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,kBAAA;AAClD;AAOO,SAAS,wBAAwB,KAAA,EAA2C;AACjF,EAAA,eAAA,GAAkB,KAAA;AACpB;AAMO,SAAS,oBAAA,CAAqB,SAA8B,KAAA,EAA6C;AAC9G,EAAA,MAAM,eAAA,GAAkB,MAAM,WAAA,EAAY;AAE1C,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,GAAA,EAAK;AACR,MAAA,MAAM,QAAA,GAAW,cAAA,CAAe,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,CAAS,eAAe,CAAC,CAAA;AACnG,MAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,MAAS,EAAE,KAAA,EAAO,GAAA,CAAI,OAAA,EAAS,WAAA,EAAa,GAAA,CAAI,WAAA,EAAY,CAAE,CAAA;AAAA,IACrF;AAAA,IACA,KAAK,GAAA,EAAK;AACR,MAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAA,CAAM,WAAA,EAAY,CAAE,QAAA,CAAS,eAAe,CAAC,CAAA;AACrG,MAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,KAAA,CAAM,WAAA,EAAY,CAAE,QAAA,CAAS,eAAe,CAAC,CAAA;AAC7G,MAAA,OAAO,CAAC,GAAG,WAAA,EAAa,GAAG,cAAc,CAAA;AAAA,IAC3C;AAAA,IACA,KAAK,GAAA,EAAK;AACR,MAAA,OAAO,SAAA,CAAU,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,MAAM,WAAA,EAAY,CAAE,QAAA,CAAS,eAAe,CAAC,CAAA;AAAA,IACpF;AAAA,IACA,KAAK,GAAA,EAAK;AACR,MAAA,OAAO,gBAAA,CAAiB,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,MAAM,WAAA,EAAY,CAAE,QAAA,CAAS,eAAe,CAAC,CAAA;AAAA,IAC3F;AAAA;AAEJ;;;AC9HO,SAAS,aAAa,KAAA,EAAyB;AACpD,EAAA,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AACzB;AAEO,SAAS,gBAAgB,KAAA,EAAuB;AACrD,EAAA,OAAO,YAAA,CAAa,KAAK,CAAA,CAAE,MAAA;AAC7B;AAEO,SAAS,eAAA,CAAgB,KAAA,EAAe,KAAA,EAAe,GAAA,EAAsB;AAClF,EAAA,OAAO,YAAA,CAAa,KAAK,CAAA,CAAE,KAAA,CAAM,OAAO,GAAG,CAAA,CAAE,KAAK,EAAE,CAAA;AACtD;AAEO,SAAS,iBAAA,CAAkB,OAAe,MAAA,EAAwB;AACvE,EAAA,OAAO,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,IAAI,MAAA,EAAQ,eAAA,CAAgB,KAAK,CAAC,CAAC,CAAA;AAC7D;AAMO,SAAS,kBAAA,CACd,KAAA,EACA,YAAA,EACA,YAAA,EACwC;AACxC,EAAA,MAAM,MAAA,GAAS,aAAa,KAAK,CAAA;AACjC,EAAA,MAAM,SAAA,GAAY,aAAa,YAAY,CAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,EAAO,YAAY,CAAA;AACxD,EAAA,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY,CAAA,EAAG,GAAG,SAAS,CAAA;AACzC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAAA,IACpB,YAAA,EAAc,aAAa,SAAA,CAAU;AAAA,GACvC;AACF;AAEO,SAAS,iBAAA,CACd,OACA,YAAA,EACwC;AACxC,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,EAAO,YAAY,CAAA;AACxD,EAAA,IAAI,eAAe,CAAA,EAAG;AACpB,IAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,YAAA,EAAc,UAAA,EAAW;AAAA,EACjD;AAEA,EAAA,MAAM,MAAA,GAAS,aAAa,KAAK,CAAA;AACjC,EAAA,MAAA,CAAO,MAAA,CAAO,UAAA,GAAa,CAAA,EAAG,CAAC,CAAA;AAC/B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAAA,IACpB,cAAc,UAAA,GAAa;AAAA,GAC7B;AACF;AAEO,SAAS,cAAA,CACd,OACA,YAAA,EACwC;AACxC,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,EAAO,YAAY,CAAA;AACxD,EAAA,MAAM,MAAA,GAAS,aAAa,KAAK,CAAA;AACjC,EAAA,IAAI,UAAA,IAAc,OAAO,MAAA,EAAQ;AAC/B,IAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,YAAA,EAAc,UAAA,EAAW;AAAA,EACjD;AAEA,EAAA,MAAA,CAAO,MAAA,CAAO,YAAY,CAAC,CAAA;AAC3B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAAA,IACpB,YAAA,EAAc;AAAA,GAChB;AACF;;;AC3CO,SAAS,oBAAA,CACd,KAAA,EACA,SAAA,EACA,aAAA,EAC0B;AAC1B,EAAA,MAAM,KAAA,GAAQ,EAAE,GAAG,KAAA,CAAM,KAAA,EAAM;AAC/B,EAAA,MAAM,gBAAgB,KAAA,CAAM,YAAA;AAE5B,EAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,IACrB,MAAM,KAAA,CAAM,YAAA;AAAA,IACZ,YAAA,EAAc,iBAAA,CAAkB,KAAA,CAAM,YAAA,EAAc,MAAM,mBAAmB;AAAA,GAC/E;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,SAAS,CAAA;AAC7B,EAAA,MAAM,qBAAA,GACJ,SAAA,KAAc,EAAA,IAAM,SAAA,KAAc,KAAA,CAAM,oBAAA;AAE1C,EAAA,IACE,qBAAA,IACA,KAAA,IACA,KAAA,CAAM,YAAA,GAAe,CAAA,IACrB,MAAM,YAAA,GAAe,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAA,EAC/C;AACA,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,SAAA;AAAA,MACd,oBAAA,EAAsB,aAAA;AAAA,MACtB,KAAA;AAAA,MACA,OAAO,KAAA,CAAM,IAAA;AAAA,MACb,cAAc,KAAA,CAAM;AAAA,KACtB;AAAA,EACF;AAEA,EAAA,IAAI,cAAc,EAAA,EAAI;AACpB,IAAA,MAAM,IAAA,GAAO,OAAO,IAAA,IAAQ,EAAA;AAC5B,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,SAAA;AAAA,MACd,oBAAA,EAAsB,aAAA;AAAA,MACtB,KAAA;AAAA,MACA,KAAA,EAAO,IAAA;AAAA,MACP,YAAA,EAAc,aAAA,KAAkB,OAAA,GAAU,CAAA,GAAI,gBAAgB,IAAI;AAAA,KACpE;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,SAAA;AAAA,MACd,oBAAA,EAAsB,aAAA;AAAA,MACtB,KAAA;AAAA,MACA,OAAO,KAAA,CAAM,IAAA;AAAA,MACb,cAAc,aAAA,KAAkB,OAAA,GAAU,CAAA,GAAI,eAAA,CAAgB,MAAM,IAAI;AAAA,KAC1E;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,KAAA,CAAM,QAAQ,MAAA,GAAS,CAAA,GAAI,SAAS,CAAA,IAAK,EAAA;AACrE,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,SAAA;AAAA,IACd,oBAAA,EAAsB,aAAA;AAAA,IACtB,KAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA,EAAc,aAAA,KAAkB,OAAA,GAAU,CAAA,GAAI,gBAAgB,KAAK;AAAA,GACrE;AACF;ACzDA,IAAM,UAAA,GAAmC,CAAC,aAAA,EAAe,cAAA,EAAgB,MAAM,CAAA;AAQ/E,IAAM,YAAA,GAAgD;AAAA,EACpD,aAAA,EAAe;AAAA,IACb,KAAA,EAAO,oBAAA;AAAA,IACP,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,KAAA,EAAO,cAAA;AAAA,IACP,IAAA,EAAM,cAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,aAAA;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,KAAA,EAAO;AAAA;AAEX,CAAA;AAkBA,IAAM,aAAA,uBAAoB,GAAA,CAAY,CAAC,KAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AAQ1D,SAAS,aAAA,CACP,OACA,YAAA,EACsB;AACtB,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,KAAA,EAAO,YAAY,CAAA;AACxD,EAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,KAAA,EAAO,CAAA,EAAG,UAAU,CAAA;AACzD,EAAA,IAAI,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AACtC,EAAA,IAAI,YAAA,CAAa,CAAC,CAAA,KAAM,GAAA,EAAK,OAAO,EAAE,OAAA,EAAS,GAAA,EAAK,KAAA,EAAO,YAAA,EAAc,UAAA,EAAY,CAAA,EAAE;AACvF,EAAA,IAAI,YAAA,CAAa,CAAC,CAAA,KAAM,GAAA,EAAK,OAAO,EAAE,OAAA,EAAS,GAAA,EAAK,KAAA,EAAO,YAAA,EAAc,UAAA,EAAY,CAAA,EAAE;AAEvF,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA;AACtC,EAAA,KAAA,IAAS,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,EAAA,GAAK,OAAO,CAAC,CAAA;AACnB,IAAA,IAAI,OAAO,MAAA,EAAW;AACtB,IAAA,IAAI,cAAc,GAAA,CAAI,EAAE,KAAK,EAAA,KAAO,GAAA,IAAO,OAAO,GAAA,EAAK;AACrD,MAAA,IAAI,MAAM,CAAA,IAAK,MAAA,CAAO,CAAA,GAAI,CAAC,MAAM,GAAA,EAAK;AACpC,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,EAAA;AAAA,UACT,OAAO,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,UAC9B,UAAA,EAAY;AAAA,SACd;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,OAAO,GAAA,EAAK;AAAA,EAClB;AACA,EAAA,OAAO,IAAA;AACT;AAMO,SAAS,QAAA,CAAS;AAAA,EACvB,QAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,IAAA,GAAO,aAAA;AAAA,EACP;AACF,CAAA,EAAuC;AACrC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIG,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,CAAC,CAAA;AAClD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAS,CAAC,CAAA;AACpD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,QAAAA;AAAA,IAC5B,cAAA,GAAiB,CAAC,GAAG,cAAc,IAAI;AAAC,GAC1C;AACA,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,EAAE,CAAA;AACnD,EAAA,MAAM,QAAA,GAAW,OAAO,KAAK,CAAA;AAC7B,EAAA,MAAM,eAAA,GAAkB,OAAO,YAAY,CAAA;AAC3C,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,EAAA,MAAM,eAAA,GAAkB,OAAO,YAAY,CAAA;AAC3C,EAAA,MAAM,eAAA,GAAkB,OAA6B,IAAI,CAAA;AACzD,EAAA,MAAM,oBAAA,GAAuB,MAAA,CAAqC,EAAE,CAAA;AACpE,EAAA,MAAM,uBAAA,GAA0B,OAAO,KAAK,CAAA;AAC5C,EAAA,MAAM,uBAAA,GAA0B,OAA2B,MAAS,CAAA;AACpE,EAAA,MAAM,eAAA,GAAkB,MAAA,CAA+D,EAAE,CAAA;AAEzF,EAAA,MAAM,kBAAA,GAAqB,WAAA;AAAA,IACzB,CAAC,SAAA,EAAmB,cAAA,GAA2C,KAAA,KAAU;AACvE,MAAA,MAAM,UAAA,GAAa,cAAA,KAAmB,OAAA,GAClC,CAAA,GACA,cAAA,KAAmB,KAAA,GACjB,eAAA,CAAgB,SAAS,CAAA,GACzB,iBAAA,CAAkB,SAAA,EAAW,cAAc,CAAA;AACjD,MAAA,QAAA,CAAS,OAAA,GAAU,SAAA;AACnB,MAAA,eAAA,CAAgB,OAAA,GAAU,UAAA;AAC1B,MAAA,QAAA,CAAS,SAAS,CAAA;AAClB,MAAA,eAAA,CAAgB,UAAU,CAAA;AAC1B,MAAA,gBAAA,CAAiB,CAAC,CAAA;AAAA,IACpB,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,iBAAA,GAAoB,WAAA;AAAA,IACxB,CAAC,UAAA,KAAuB;AACtB,MAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,QAAA,CAAS,OAAA,EAAS,UAAU,CAAA;AAC9D,MAAA,eAAA,CAAgB,OAAA,GAAU,OAAA;AAC1B,MAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,IACzB,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,sBAAA,GAAyB,YAAY,MAAM;AAC/C,IAAA,eAAA,CAAgB,OAAA,GAAU,EAAA;AAC1B,IAAA,eAAA,CAAgB,EAAE,CAAA;AAClB,IAAA,uBAAA,CAAwB,OAAA,GAAU,MAAA;AAClC,IAAA,eAAA,CAAgB,UAAU,EAAC;AAAA,EAC7B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,WAAmB,aAAA,KAAmC;AACrD,MAAA,MAAM,MAAA,GAAS,oBAAA;AAAA,QACb;AAAA,UACE,SAAS,UAAA,CAAW,OAAA;AAAA,UACpB,cAAc,eAAA,CAAgB,OAAA;AAAA,UAC9B,sBAAsB,uBAAA,CAAwB,OAAA;AAAA,UAC9C,OAAO,eAAA,CAAgB,OAAA;AAAA,UACvB,cAAc,QAAA,CAAS,OAAA;AAAA,UACvB,qBAAqB,eAAA,CAAgB;AAAA,SACvC;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,eAAA,CAAgB,UAAU,MAAA,CAAO,KAAA;AACjC,MAAA,eAAA,CAAgB,UAAU,MAAA,CAAO,YAAA;AACjC,MAAA,uBAAA,CAAwB,UAAU,MAAA,CAAO,oBAAA;AACzC,MAAA,eAAA,CAAgB,OAAO,YAAY,CAAA;AACnC,MAAA,kBAAA,CAAmB,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,YAAY,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,CAAC,kBAAkB;AAAA,GACrB;AAEA,EAAA,MAAM,0BAAA,GAA6B,WAAA;AAAA,IACjC,CAAC,UAA6B,YAAA,KAAgC;AAC5D,MAAA,MAAM,eAAe,QAAA,CAAS,OAAA;AAC9B,MAAA,MAAM,sBAAsB,eAAA,CAAgB,OAAA;AAC5C,MAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,YAAA,EAAc,CAAA,EAAG,aAAa,UAAU,CAAA;AACvE,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,YAAA,EAAc,mBAAmB,CAAA;AAC/D,MAAA,MAAM,YAAY,CAAA,EAAG,MAAM,GAAG,QAAA,CAAS,KAAK,IAAI,KAAK,CAAA,CAAA;AACrD,MAAA,kBAAA,CAAmB,SAAA,EAAW,gBAAgB,MAAM,CAAA,GAAI,gBAAgB,QAAA,CAAS,KAAK,IAAI,CAAC,CAAA;AAAA,IAC7F,CAAA;AAAA,IACA,CAAC,kBAAkB;AAAA,GACrB;AAGA,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,cAAA,IAAkB,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AAC/C,MAAA,UAAA,CAAW,CAAC,IAAA,KAAS;AACnB,QAAA,IAAI,KAAK,MAAA,KAAW,CAAA,EAAG,OAAO,CAAC,GAAG,cAAc,CAAA;AAChD,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAAA,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,IAAA,eAAA,CAAgB,OAAA,GAAU,YAAA;AAC1B,IAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AACrB,IAAA,eAAA,CAAgB,OAAA,GAAU,YAAA;AAAA,EAC5B,GAAG,CAAC,YAAA,EAAc,OAAA,EAAS,YAAA,EAAc,KAAK,CAAC,CAAA;AAE/C,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAM,aAAA,CAAc,KAAA,EAAO,YAAY,CAAA,EAAG,CAAC,YAAA,EAAc,KAAK,CAAC,CAAA;AAC5F,EAAA,MAAM,iBAAA,GAAkD,QAAQ,MAAM;AACpE,IAAA,IAAI,YAAA,KAAiB,IAAA,EAAM,OAAO,EAAC;AACnC,IAAA,OAAO,oBAAA,CAAqB,YAAA,CAAa,OAAA,EAAS,YAAA,CAAa,KAAK,CAAA;AAAA,EACtE,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AACjB,EAAA,MAAM,oBAAA,GAAuB,kBAAkB,MAAA,GAAS,CAAA;AAExD,EAAAA,UAAU,MAAM;AACd,IAAA,eAAA,CAAgB,OAAA,GAAU,YAAA;AAC1B,IAAA,oBAAA,CAAqB,OAAA,GAAU,iBAAA;AAC/B,IAAA,uBAAA,CAAwB,OAAA,GAAU,oBAAA;AAAA,EACpC,CAAA,EAAG,CAAC,iBAAA,EAAmB,oBAAA,EAAsB,YAAY,CAAC,CAAA;AAE1D,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,CAAC,KAAA,KAAkB;AACrD,IAAA,UAAA,CAAW,CAAC,IAAA,KAAS;AACnB,MAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAA,CAAK,MAAM,GAAkB,CAAA,EAAG,KAAK,CAAA;AACtD,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,QAAA,CAAS,CAAC,WAAW,GAAA,KAAQ;AAC3B,IAAA,MAAM,eAAe,QAAA,CAAS,OAAA;AAC9B,IAAA,MAAM,sBAAsB,eAAA,CAAgB,OAAA;AAC5C,IAAA,MAAM,sBAAsB,eAAA,CAAgB,OAAA;AAC5C,IAAA,MAAM,iBAAiB,UAAA,CAAW,OAAA;AAClC,IAAA,MAAM,sBAAsB,eAAA,CAAgB,OAAA;AAC5C,IAAA,MAAM,2BAA2B,oBAAA,CAAqB,OAAA;AACtD,IAAA,MAAM,4BAA4B,uBAAA,CAAwB,OAAA;AAE1D,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,GAAA,CAAI,UAAU,QAAA,EAAU;AAC1B,QAAA,QAAA,EAAS;AAAA,MACX;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAI,SAAA,EAAW;AACjB,MAAA,iBAAA,CAAkB,sBAAsB,CAAC,CAAA;AACzC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAI,UAAA,EAAY;AAClB,MAAA,iBAAA,CAAkB,sBAAsB,CAAC,CAAA;AACzC,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,GAAA,CAAI,GAAA,IAAO,GAAA,CAAI,KAAA,EAAO;AACxB,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,GAAA,GAAM,UAAA,CAAW,OAAA,CAAQ,IAAI,CAAA;AACnC,QAAA,MAAM,IAAA,GAAO,UAAA,CAAA,CAAY,GAAA,GAAM,CAAA,IAAK,WAAW,MAAM,CAAA;AACrD,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,YAAA,CAAa,IAAI,CAAA;AAAA,QACnB;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,IAAI,wBAAwB,EAAA,EAAI;AAC9B,QAAA,IAAI,mBAAA,GAAsB,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AACnD,UAAA,eAAA,CAAgB,mBAAA,GAAsB,GAAG,KAAK,CAAA;AAAA,QAChD;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,yBAAA,EAA2B;AAC7B,QAAA,gBAAA;AAAA,UAAiB,CAAC,IAAA,KAChB,IAAA,GAAO,IAAI,IAAA,GAAO,CAAA,GAAI,yBAAyB,MAAA,GAAS;AAAA,SAC1D;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,QAAA,eAAA,CAAgB,GAAG,KAAK,CAAA;AAAA,MAC1B;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAI,SAAA,EAAW;AACjB,MAAA,IAAI,wBAAwB,EAAA,EAAI;AAC9B,QAAA,eAAA,CAAgB,mBAAA,GAAsB,GAAG,KAAK,CAAA;AAC9C,QAAA;AAAA,MACF;AACA,MAAA,IAAI,yBAAA,EAA2B;AAC7B,QAAA,gBAAA;AAAA,UAAiB,CAAC,IAAA,KAChB,IAAA,GAAO,yBAAyB,MAAA,GAAS,CAAA,GAAI,OAAO,CAAA,GAAI;AAAA,SAC1D;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,yBAAA,EAA2B;AAC7B,MAAA,IAAI,IAAI,GAAA,EAAK;AACX,QAAA,MAAM,QAAA,GAAW,yBAAyB,aAAa,CAAA;AACvD,QAAA,IAAI,YAAY,mBAAA,EAAqB;AACnC,UAAA,0BAAA,CAA2B,UAAU,mBAAmB,CAAA;AAAA,QAC1D;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,IAAI,MAAA,EAAQ;AACd,QAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,YAAA,EAAc,mBAAA,EAAqB,GAAG,CAAA;AACxE,QAAA,kBAAA,CAAmB,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,YAAY,CAAA;AACnD,QAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,IAAI,MAAA,EAAQ;AACd,MAAA,IAAI,wBAAwB,EAAA,IAAM,YAAA,CAAa,IAAA,EAAK,CAAE,SAAS,CAAA,EAAG;AAChE,QAAA,eAAA,CAAgB,YAAA,CAAa,MAAM,CAAA;AACnC,QAAA,QAAA,CAAS,YAAA,CAAa,MAAM,CAAA;AAC5B,QAAA,kBAAA,CAAmB,EAAE,CAAA;AACrB,QAAA,sBAAA,EAAuB;AACvB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,yBAAA,EAA2B;AAC7B,QAAA,MAAM,QAAA,GAAW,yBAAyB,aAAa,CAAA;AACvD,QAAA,IAAI,YAAY,mBAAA,EAAqB;AACnC,UAAA,IAAI,mBAAA,CAAoB,OAAA,KAAY,GAAA,IAAO,mBAAA,KAAwB,EAAA,EAAI;AACrE,YAAA,eAAA,CAAgB,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,CAAA;AACrC,YAAA,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,CAAA;AAC9B,YAAA,kBAAA,CAAmB,EAAE,CAAA;AAAA,UACvB,CAAA,MAAO;AACL,YAAA,0BAAA,CAA2B,UAAU,mBAAmB,CAAA;AAAA,UAC1D;AACA,UAAA,sBAAA,EAAuB;AACvB,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,YAAA,CAAa,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,EAAG;AAClC,QAAA,eAAA,CAAgB,YAAA,CAAa,MAAM,CAAA;AACnC,QAAA,QAAA,CAAS,YAAA,CAAa,MAAM,CAAA;AAC5B,QAAA,kBAAA,CAAmB,EAAE,CAAA;AACrB,QAAA,sBAAA,EAAuB;AAAA,MACzB;AACA,MAAA;AAAA,IACF;AAMA,IAAA,IAAI,IAAI,SAAA,IAAa,GAAA,CAAI,UAAW,GAAA,CAAI,IAAA,IAAQ,cAAc,GAAA,EAAM;AAClE,MAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,YAAA,EAAc,mBAAmB,CAAA;AAClE,MAAA,kBAAA,CAAmB,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,YAAY,CAAA;AACnD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,IAAI,IAAA,IAAQ,SAAA,KAAc,GAAA,IAAO,YAAA,CAAa,SAAS,CAAA,EAAG;AAC5D,MAAA,MAAM,MAAA,GAAS,cAAA,CAAe,YAAA,EAAc,mBAAmB,CAAA;AAC/D,MAAA,kBAAA,CAAmB,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,YAAY,CAAA;AACnD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,IAAA,IAAQ,SAAA,KAAc,GAAA,EAAK;AAAE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAG,MAAA;AAAA,IAAQ;AAC9D,IAAA,IAAI,GAAA,CAAI,IAAA,IAAQ,SAAA,KAAc,GAAA,EAAK;AAEnC,IAAA,IAAI,CAAC,GAAA,CAAI,IAAA,IAAQ,CAAC,GAAA,CAAI,QAAQ,SAAA,EAAW;AACvC,MAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,YAAA,EAAc,mBAAA,EAAqB,SAAS,CAAA;AAC9E,MAAA,kBAAA,CAAmB,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,YAAY,CAAA;AAAA,IACrD;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,QAAA,GAAW,aAAa,IAAI,CAAA;AAClC,EAAA,MAAM,WAAA,GAAc,YAAA,GAAe,MAAA,CAAO,MAAA,CAAO,MAAM,QAAA,CAAS,KAAA;AAChE,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,KAAA,EAAO,YAAA,EAAc,eAAe,CAAC,CAAA;AACxE,EAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,KAAA,EAAO,CAAA,EAAG,YAAY,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,WAAW,MAAA,GAAS,CAAA,GACpC,gBAAgB,KAAA,EAAO,YAAA,GAAe,CAAC,CAAA,GACvC,EAAA;AAEJ,EAAA,uBACEL,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAChB,QAAA,EAAA;AAAA,IAAA,oBAAA,mBACCD,GAAAA,CAAC,iBAAA,EAAA,EAAkB,KAAA,EAAO,iBAAA,EAAmB,eAA8B,CAAA,GACzE,IAAA;AAAA,oBAGJF,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAH,KAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,OAAO,GAAA,EAAM,QAAA,EAAA;AAAA,QAAA,QAAA,CAAS,OAAO,CAAC,CAAA;AAAA,QAAE;AAAA,OAAA,EAAC,CAAA;AAAA,sBACrDD,KAACC,IAAAA,EAAA,EAAK,OAAO,QAAA,CAAS,KAAA,EAAO,MAAI,IAAA,EAAE,QAAA,EAAA;AAAA,QAAA,QAAA,CAAS,IAAA;AAAA,QAAK;AAAA,OAAA,EAAC,CAAA;AAAA,sBAClDC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,SAAS,KAAA,EAAO,IAAA,EAAI,IAAA,EAAE,QAAA,EAAA,QAAA,CAAS,KAAA,EAAM,CAAA;AAAA,sBAClDC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,EAAA,uBAAA,EAAqB;AAAA,KAAA,EACvD,CAAA;AAAA,oBAGAD,KAACG,GAAAA,EAAA,EAAI,aAAY,OAAA,EAAQ,WAAA,EAA0B,UAAU,CAAA,EAC3D,QAAA,EAAA;AAAA,sBAAAH,KAACC,IAAAA,EAAA,EAAK,OAAO,QAAA,CAAS,KAAA,EAAO,MAAI,IAAA,EAC9B,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QAAU;AAAA,OAAA,EACb,CAAA;AAAA,MACC,+BACCC,GAAAA,CAACD,MAAA,EAAK,KAAA,EAAO,OAAO,IAAA,CAAK,KAAA,EACtB,qBAAW,eAAA,GAAkB,kBAAA,EAChC,IACE,KAAA,CAAM,MAAA,GAAS,oBACjBD,IAAAA,CAACC,MAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,SAAU,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,QAC/C,UAAA,CAAW,SAAS,CAAA,mBACnBC,IAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,SAAO,IAAA,EAAE,QAAA,EAAA,UAAA,EAAW,oBAEtDC,GAAAA,CAACD,MAAA,EAAK,KAAA,EAAO,QAAA,CAAS,KAAA,EAAQ,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,QAExC,WAAA,CAAY,MAAA,GAAS,CAAA,mBACpBC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,OAAA,EAAU,QAAA,EAAA,WAAA,EAAY,CAAA,GAC7C;AAAA,OAAA,EACN,CAAA,mBAEAD,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,KAAK,KAAA,EACtB,QAAA,EAAA;AAAA,QAAA,WAAA,IAAe,sBAAA;AAAA,wBAChBC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,QAAA,CAAS,OAAQ,QAAA,EAAA,QAAA,EAAS;AAAA,OAAA,EACzC;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;ACtaA,SAAS,gBAAgB,KAAA,EAAuB;AAC9C,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,UAAA;AACnC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,YAAA;AACrC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,WAAA;AACpC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,cAAc,CAAA,EAAG,OAAO,UAAA;AAC3C,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,SAAA;AACtC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,IAAA;AACjC,EAAA,IAAI,KAAA,CAAM,SAAS,QAAQ,CAAA,IAAK,MAAM,QAAA,CAAS,KAAK,GAAG,OAAO,SAAA;AAC9D,EAAA,IAAI,KAAA,CAAM,SAAS,QAAQ,CAAA,IAAK,MAAM,QAAA,CAAS,OAAO,GAAG,OAAO,WAAA;AAChE,EAAA,IAAI,KAAA,CAAM,SAAS,MAAM,CAAA,IAAK,MAAM,QAAA,CAAS,IAAI,GAAG,OAAO,MAAA;AAC3D,EAAA,OAAO,KAAA;AACT;AAEA,IAAM,GAAA,GAAM,UAAA;AAEL,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAwC;AACtC,EAAA,uBACED,IAAAA,CAACG,GAAAA,EAAA,EAAI,WAAA,EAAY,OAAA,EAAQ,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,QAAA,EAAU,CAAA,EACjE,QAAA,EAAA;AAAA,oBAAAH,KAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,WAAA,EAAa,MAAI,IAAA,EAC3B,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,MAAU;AAAA,KAAA,EACb,CAAA;AAAA,oBACAC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,OAAO,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAI,IAAA,EAAC,QAAA,EAAA,qBAAA,EAExC,CAAA;AAAA,oBAEAC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAQ,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,oBACrCC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,IAAA,EAAI,IAAA,EACrC,QAAA,EAAA,eAAA,CAAgB,KAAK,CAAA,EACxB,CAAA;AAAA,IAEC,IAAA,mBACCD,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAE,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAQ,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,sBACrCC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,MAAO,QAAA,EAAA,IAAA,EAAK;AAAA,KAAA,EACvC,CAAA,GACE,IAAA;AAAA,oBAEJC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAQ,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,oBACrCD,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,KAAK,SAAA,EAAY,QAAA,EAAA;AAAA,MAAA,UAAA;AAAA,MAAW;AAAA,KAAA,EAAI,CAAA;AAAA,oBAEpDC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAQ,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,oBACrCC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,MAAA,CAAO,SAAU,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IAEzC,SAAA,mBACCD,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAE,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAQ,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,sBACrCD,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,OAAO,IAAA,EACxB,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QAAS,GAAA;AAAA,QAAE,SAAA;AAAA,QACX,eAAe,MAAA,IAAa,UAAA,GAAa,CAAA,GACtC,CAAA,KAAA,EAAU,UAAU,CAAA,CAAA,GACpB;AAAA,OAAA,EACN;AAAA,KAAA,EACF,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ;AC1DA,IAAM,gBAAA,GAAmB;AAAA,EACvB,UAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,eAAA,GAAkB,IAAA;AAEjB,SAAS,iBAAA,CAAkB;AAAA,EAChC,QAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAgD;AAC9C,EAAA,MAAM,IAAA,GAAO,iBAAiB,GAAI,CAAA;AAClC,EAAA,MAAM,OAAA,GAAU,SAAA,KAAc,MAAA,GAAY,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,GAAA,EAAI,GAAI,SAAS,CAAA;AAChF,EAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,eAAe,IAAI,gBAAA,CAAiB,MAAA;AAE7E,EAAA,MAAM,UAAA,GAAaK,QAAQ,MAAM;AAC/B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,GAAI,CAAA;AACtC,IAAA,IAAI,IAAA,GAAO,GAAG,OAAO,EAAA;AACrB,IAAA,IAAI,IAAA,GAAO,EAAA,EAAI,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA;AAC7B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,EAAE,CAAA;AACjC,IAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAA,GAAO,EAAE,CAAA,CAAA,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,WAAW,IAAA,GAAO,CAAA;AACxB,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA;AAChC,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,WAAW,CAAA,IAAK,UAAA;AAEhD,EAAA,MAAM,WAAA,GAAc,WAChB,QAAA,GACA,WAAA,GACE,uBACA,CAAA,EAAG,MAAM,GAAG,IAAI,CAAA,CAAA;AAEtB,EAAA,uBACEN,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAEhB,QAAA,EAAA;AAAA,IAAA,SAAA,mBACCH,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAH,IAAAA,CAACC,MAAA,EAAK,KAAA,EAAO,OAAO,IAAA,CAAK,SAAA,EAAW,MAAI,IAAA,EACrC,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QAAU;AAAA,OAAA,EACb,CAAA;AAAA,sBACAC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,OAAO,IAAA,CAAK,SAAA,EAAW,IAAA,EAAI,IAAA,EACrC,QAAA,EAAA,SAAA,EACH;AAAA,KAAA,EACF,CAAA,GACE,IAAA;AAAA,oBAGJD,IAAAA,CAACG,GAAAA,EAAA,EAAI,YAAY,CAAA,EACf,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,WAAW,SAAA,GAAY,MAAA;AAAA,UAChC,KAAA,EAAO,WAAA;AAAA,UACP,YAAY,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,SAAA,GAAY,OAAO,IAAA,CAAK;AAAA;AAAA,OAC7D;AAAA,MACC,UAAA,mBACCF,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,KAAK,KAAA,EAAO,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,QAAG,UAAA;AAAA,QAAW;AAAA,OAAA,EAAC,CAAA,GAC7C;AAAA,KAAA,EACN,CAAA;AAAA,oBAGAC,GAAAA,CAACC,GAAAA,EAAA,EAAI,YAAY,CAAA,EACf,QAAA,kBAAAH,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,UAAQ,IAAA,EACrC,QAAA,EAAA;AAAA,MAAA,IAAA;AAAA,MAAK;AAAA,KAAA,EACR,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACpFA,IAAM,YAAA,GAAe;AAAA,EACnB,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,UAAA,GAAa;AAAA,EACjB,6TAAA;AAAA,EACA,2VAAA;AAAA,EACA,wTAAA;AAAA,EACA,wTAAA;AAAA,EACA,oSAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,IAAA,GAAO;AAAA,EACX,EAAE,GAAA,EAAK,OAAA,EAAS,IAAA,EAAM,mBAAA,EAAoB;AAAA,EAC1C,EAAE,GAAA,EAAK,QAAA,EAAU,IAAA,EAAM,iBAAA,EAAkB;AAAA,EACzC,EAAE,GAAA,EAAK,WAAA,EAAa,IAAA,EAAM,6BAAA,EAA8B;AAAA,EACxD,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,kCAAA,EAAmC;AAAA,EACvD,EAAE,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,yBAAA,EAA0B;AAAA,EAC5C,EAAE,GAAA,EAAK,QAAA,EAAU,IAAA,EAAM,eAAA;AACzB,CAAA;AAEA,IAAM,QAAA,GAAW,CAAC,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAE5D,SAAS,aAAA,CAAc;AAAA,EAC5B;AACF,CAAA,EAA4C;AAC1C,EAAA,uBACED,IAAAA;AAAA,IAACG,GAAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAc,QAAA;AAAA,MACd,QAAA,EAAU,CAAA;AAAA,MACV,QAAA,EAAU,CAAA;AAAA,MACV,cAAA,EAAe,QAAA;AAAA,MACf,UAAA,EAAW,QAAA;AAAA,MACX,YAAA,EAAc,CAAA;AAAA,MAGd,QAAA,EAAA;AAAA,wBAAAH,IAAAA,CAACG,GAAAA,EAAA,EAAI,UAAA,EAAW,QAAA,EACd,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAACC,KAAA,EAAI,aAAA,EAAc,UAAS,WAAA,EAAa,CAAA,EACtC,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,EAAM,sBACvBD,GAAAA,CAACD,IAAAA,EAAA,EAAmB,KAAA,EAAO,WAAA,EAAc,kBAA9B,CAAA,CAAA,EAAI,CAAC,CAAA,CAA8B,CAC/C,CAAA,EACH,CAAA;AAAA,0BACAC,IAACC,GAAAA,EAAA,EAAI,eAAc,QAAA,EAChB,QAAA,EAAA,UAAA,CAAW,IAAI,CAAC,IAAA,EAAM,sBACrBD,GAAAA,CAACD,MAAA,EAAa,KAAA,EAAO,aAAc,QAAA,EAAA,IAAA,EAAA,EAAxB,CAA6B,CACzC,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAD,IAAAA,CAACG,GAAAA,EAAA,EAAI,cAAc,CAAA,EACjB,QAAA,EAAA;AAAA,0BAAAH,KAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,OAAO,MAAA,EACxB,QAAA,EAAA;AAAA,YAAA,QAAA,CAAS,OAAO,EAAE,CAAA;AAAA,YAAG;AAAA,WAAA,EACxB,CAAA;AAAA,0BACAC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,OAAO,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAI,IAAA,EAAC,QAAA,EAAA,qBAAA,EAEtC,CAAA;AAAA,0BACAD,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,OAAO,MAAA,EACxB,QAAA,EAAA;AAAA,YAAA,GAAA;AAAA,YAAK,QAAA,CAAS,OAAO,EAAE;AAAA,WAAA,EAC1B;AAAA,SAAA,EACF,CAAA;AAAA,QAGC,OAAA,mBACCC,GAAAA,CAACC,GAAAA,EAAA,EACC,QAAA,kBAAAH,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE;AAAA,SAAA,EAAQ,GAC5C,CAAA,GACE,IAAA;AAAA,wBAGJD,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EACjB,QAAA,EAAA;AAAA,0BAAAD,IAACC,GAAAA,EAAA,EAAI,YAAA,EAAc,CAAA,EACjB,0BAAAD,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,OAAO,IAAA,CAAK,SAAA,EAAW,IAAA,EAAI,IAAA,EAAC,yBAEzC,CAAA,EACF,CAAA;AAAA,UACC,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,EAAK,6BAClBC,GAAAA,CAACC,GAAAA,EAAA,EACE,QAAA,EAAA,GAAA,CAAI,GAAA,CAAI,CAAC,GAAA,EAAK,6BACbH,IAAAA;AAAA,YAACG,GAAAA;AAAA,YAAA;AAAA,cAEC,aAAA,EAAc,QAAA;AAAA,cACd,KAAA,EAAO,EAAA;AAAA,cACP,WAAA,EAAa,QAAA,GAAW,GAAA,CAAI,MAAA,GAAS,IAAI,CAAA,GAAI,CAAA;AAAA,cAE7C,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,OAAO,MAAA,EAAQ,IAAA,EAAI,IAAA,EACpC,QAAA,EAAA,GAAA,CAAI,GAAA,EACP,CAAA;AAAA,gCACAC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAQ,QAAA,EAAA,GAAA,CAAI,IAAA,EAAK;AAAA;AAAA,aAAA;AAAA,YARrC,GAAA,CAAI;AAAA,WAUZ,CAAA,EAAA,EAbO,CAAA,QAAA,EAAW,QAAQ,EAc7B,CACD;AAAA,SAAA,EACH;AAAA;AAAA;AAAA,GAEF;AAEJ;AClFA,SAASM,gBAAe,KAAA,EAAuB;AAC7C,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,UAAA;AACnC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,YAAA;AACrC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,WAAA;AACpC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,cAAc,CAAA,EAAG,OAAO,UAAA;AAC3C,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,SAAA;AACtC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,IAAA;AACjC,EAAA,IAAI,KAAA,CAAM,SAAS,QAAQ,CAAA,IAAK,MAAM,QAAA,CAAS,KAAK,GAAG,OAAO,SAAA;AAC9D,EAAA,IAAI,KAAA,CAAM,SAAS,QAAQ,CAAA,IAAK,MAAM,QAAA,CAAS,OAAO,GAAG,OAAO,WAAA;AAChE,EAAA,IAAI,KAAA,CAAM,SAAS,MAAM,CAAA,IAAK,MAAM,QAAA,CAAS,IAAI,GAAG,OAAO,MAAA;AAC3D,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,SAAA,CAAU,MAAc,QAAA,EAA0B;AACzD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,MAAA,IAAU,QAAA,EAAU,OAAO,IAAA;AACrC,EAAA,OAAO,MAAM,KAAA,CAAM,CAAC,QAAQ,CAAA,CAAE,KAAK,IAAI,CAAA;AACzC;AAEO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAAyC;AAEvC,EAAA,MAAM,kBAAA,GAAqBC,OAA2B,MAAS,CAAA;AAC/D,EAAA,IAAI,YAAA,IAAgB,kBAAA,CAAmB,OAAA,KAAY,MAAA,EAAW;AAC5D,IAAA,kBAAA,CAAmB,OAAA,GAAU,KAAK,GAAA,EAAI;AAAA,EACxC,CAAA,MAAA,IAAW,CAAC,YAAA,EAAc;AACxB,IAAA,kBAAA,CAAmB,OAAA,GAAU,MAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,UAAA,GAAa,gBAAA,KAAqB,MAAA,IAAa,gBAAA,CAAiB,MAAA,GAAS,CAAA;AAE/E,EAAA,uBACER,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,QAAO,MAAA,EACjC,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,IAAA;AAAA,QACA,UAAA;AAAA,QACA,IAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,IAEC,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,CAAC,YAAA;AAAA;AAAA,sBAEzBA,GAAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS;AAAA;AAAA;AACX,wBAEAF,IAAAA,CAAAS,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAP,GAAAA,CAAC,eAAY,QAAA,EAAoB,CAAA;AAAA,MAEhC,YAAA,mBACCF,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAAS,UAAA,EAAY,CAAA,EAAG,YAAA,EAAc,CAAA,EAEtD,QAAA,EAAA;AAAA,QAAA,UAAA,mBACCH,KAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAAS,UAAA,EAAY,CAAA,EAAG,YAAA,EAAc,CAAA,EACvD,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAACC,GAAAA,EAAA,EACC,QAAA,kBAAAH,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,IAAA,EAAI,IAAA,EACrC,QAAA,EAAA;AAAA,YAAA,QAAA;AAAA,YAAS,GAAA;AAAA,YAAEM,gBAAe,KAAK;AAAA,WAAA,EAClC,CAAA,EACF,CAAA;AAAA,0BACAL,GAAAA,CAACC,GAAAA,EAAA,EAAI,YAAY,CAAA,EACf,QAAA,kBAAAD,GAAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,SAAA,CAAU,gBAAA,EAAkB,EAAE,GAAG,CAAA,EAC7D;AAAA,SAAA,EACF,CAAA,GACE,IAAA;AAAA,wBAGJA,GAAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,QAAA;AAAA,YACA,WAAA,EAAa,UAAA;AAAA,YACb,SAAA,EAAW,UAAA,GAAa,MAAA,GAAYK,eAAAA,CAAe,KAAK,CAAA;AAAA,YACxD,WAAW,kBAAA,CAAmB;AAAA;AAAA;AAChC,OAAA,EACF,CAAA,GACE;AAAA,KAAA,EACN,CAAA;AAAA,oBAGFL,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,QAAA;AAAA,QACA,YAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AC5HA,SAAS,eAAe,MAAA,EAAwB;AAC9C,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,MAAA,CAAO,OAAA;AAAA,IACvB,KAAK,MAAA;AACH,MAAA,OAAO,OAAO,MAAA,CAAO,OAAA;AAAA,IACvB,KAAK,OAAA;AACH,MAAA,OAAO,OAAO,MAAA,CAAO,KAAA;AAAA,IACvB,KAAK,UAAA;AACH,MAAA,OAAO,OAAO,IAAA,CAAK,KAAA;AAAA,IACrB;AACE,MAAA,OAAO,OAAO,IAAA,CAAK,OAAA;AAAA;AAEzB;AAEA,SAASQ,iBAAgB,KAAA,EAAuB;AAC9C,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,MAAA;AACnC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,QAAA;AACrC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,OAAA;AACpC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,OAAA;AACpC,EAAA,IAAI,KAAA,CAAM,SAAS,QAAQ,CAAA,IAAK,MAAM,QAAA,CAAS,KAAK,GAAG,OAAO,SAAA;AAC9D,EAAA,IAAI,KAAA,CAAM,SAAS,QAAQ,CAAA,IAAK,MAAM,QAAA,CAAS,OAAO,GAAG,OAAO,WAAA;AAChE,EAAA,IAAI,KAAA,CAAM,SAAS,MAAM,CAAA,IAAK,MAAM,QAAA,CAAS,IAAI,GAAG,OAAO,MAAA;AAC3D,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,OAAO,KAAA,CAAM,MAAM,MAAA,GAAS,CAAC,KAAK,KAAA,CAAM,KAAA,CAAM,GAAG,CAAC,CAAA;AACpD;AAEA,SAAS,gBAAgB,MAAA,EAAwB;AAC/C,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,QAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,MAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,OAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT;AACE,MAAA,OAAO,QAAA;AAAA;AAEb;AAEA,SAAS,aACP,IAAA,EACgD;AAChD,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,OAAA;AAC9B,EAAA,IAAI,IAAA,CAAK,WAAW,QAAQ,CAAA,IAAK,KAAK,UAAA,CAAW,cAAc,GAAG,OAAO,MAAA;AACzE,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG,OAAO,QAAA;AACxC,EAAA,IAAI,IAAA,CAAK,WAAW,QAAQ,CAAA,IAAK,KAAK,UAAA,CAAW,eAAe,GAAG,OAAO,OAAA;AAC1E,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,CAAW,MAAc,GAAA,EAAiC;AACjE,EAAA,MAAM,IAAA,GAAO,aAAa,IAAI,CAAA;AAC9B,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,uBACER,IAACD,IAAAA,EAAA,EAAe,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,EAChC,QAAA,EAAA,IAAA,EAAA,EADQ,GAEX,CAAA;AAAA,IAEJ,KAAK,QAAA;AACH,MAAA,uBACEC,IAACD,IAAAA,EAAA,EAAe,OAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAChC,QAAA,EAAA,IAAA,EAAA,EADQ,GAEX,CAAA;AAAA,IAEJ,KAAK,OAAA;AACH,MAAA,uBACEC,GAAAA,CAACD,IAAAA,EAAA,EAAe,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,IAAA,EAAI,IAAA,EAC7C,QAAA,EAAA,IAAA,EAAA,EADQ,GAEX,CAAA;AAAA,IAEJ,KAAK,OAAA;AACH,MAAA,uBAAOC,GAAAA,CAACD,IAAAA,EAAA,EAAgB,iBAAN,GAAU,CAAA;AAAA,IAC9B;AACE,MAAA,uBACEC,GAAAA,CAACD,IAAAA,EAAA,EAAe,IAAA,EAAK,MAAA,EAClB,kBADQ,GAEX,CAAA;AAAA;AAGR;AAOA,SAAS,eAAA,CAAgB,QAAgB,QAAA,EAA2C;AAClF,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,EAAA,MAAM,aAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,SAAS,QAAQ,CAAA;AACtD,EAAA,OAAO,MAAM,KAAA,CAAM,UAAU,EAAE,GAAA,CAAI,CAAC,SAAS,KAAA,MAAW;AAAA,IACtD,eAAe,UAAA,GAAa,KAAA;AAAA,IAC5B;AAAA,GACF,CAAE,CAAA;AACJ;AAEA,SAAS,gBAAgB,MAAA,EAAoC;AAC3D,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,EAAA,KAAA,IAAS,QAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,KAAA,IAAS,GAAG,KAAA,EAAA,EAAS;AACtD,IAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAA,GAAO,aAAa,OAAO,CAAA;AACjC,IAAA,IAAI,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,QAAA,IAAY,SAAS,OAAA,EAAS;AAC5D,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAMuB;AACrB,EAAA,MAAM,eAAeU,OAAAA,CAAM,OAAA;AAAA,IACzB,MAAM,eAAA,CAAgB,MAAA,EAAQ,QAAQ,CAAA;AAAA,IACtC,CAAC,UAAU,MAAM;AAAA,GACnB;AACA,EAAA,MAAM,eAAeA,OAAAA,CAAM,OAAA;AAAA,IACzB,MAAM,gBAAgB,MAAM,CAAA;AAAA,IAC5B,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,uBACEX,IAAAA;AAAA,IAACG,GAAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAc,QAAA;AAAA,MACd,WAAA,EAAa,YAAY,OAAA,GAAU,QAAA;AAAA,MACnC,aAAa,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,OAAO,MAAA,CAAO,GAAA;AAAA,MAC9D,QAAA,EAAU,CAAA;AAAA,MACV,QAAA,EAAU,CAAA;AAAA,MACV,YAAA,EAAc,CAAA;AAAA,MAEd,QAAA,EAAA;AAAA,wBAAAH,IAAAA,CAACG,KAAA,EACC,QAAA,EAAA;AAAA,0BAAAH,KAACC,IAAAA,EAAA,EAAK,OAAO,cAAA,CAAe,KAAA,CAAM,MAAM,CAAA,EAAI,QAAA,EAAA;AAAA,YAAA,eAAA,CAAgB,MAAM,MAAM,CAAA;AAAA,YAAE;AAAA,WAAA,EAAC,CAAA;AAAA,0BAC3ED,KAACC,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAI,IAAA,EACpC,QAAA,EAAA;AAAA,YAAA,WAAA;AAAA,YAAY,GAAA;AAAA,YAAE,MAAM,MAAA,CAAO;AAAA,WAAA,EAC9B,CAAA;AAAA,0BACAD,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,KAAK,KAAA,EACtB,QAAA,EAAA;AAAA,YAAA,GAAA;AAAA,YACA,QAAA;AAAA,YAAS,GAAA;AAAA,YAAE,MAAM,MAAA,CAAO,IAAA;AAAA,YAAK,GAAA;AAAA,YAAE,MAAA;AAAA,YAAS,GAAA;AAAA,YAAES,gBAAAA,CAAgB,KAAA,CAAM,MAAA,CAAO,KAAK;AAAA,WAAA,EAC/E;AAAA,SAAA,EACF,CAAA;AAAA,QACC,YAAA,mBACCR,GAAAA,CAACC,GAAAA,EAAA,EACC,QAAA,kBAAAD,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAQ,IAAA,EACrC,QAAA,EAAA,YAAA,CAAa,MAAA,GAAS,EAAA,GAAK,CAAA,EAAG,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,MAAA,CAAA,GAAW,YAAA,EACrE,CAAA,EACF,CAAA,GACE,IAAA;AAAA,wBACJC,GAAAA,CAACC,GAAAA,EAAA,EAAI,eAAc,QAAA,EAAS,SAAA,EAAW,CAAA,EACpC,QAAA,EAAA,YAAA,CAAa,MAAA,GAAS,CAAA,GACnB,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAClB,UAAA;AAAA,UACE,IAAA,CAAK,OAAA;AAAA,UACL,GAAG,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,KAAK,aAAa,CAAA;AAAA,SAC9C,CAAA,mBAEDD,GAAAA,CAACD,MAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,OACtB,QAAA,EAAA,KAAA,CAAM,MAAA,KAAW,QAAA,GAAW,oBAAA,GAAuB,0BACtD,CAAA,EAEN,CAAA;AAAA,QACC,KAAA,CAAM,WAAW,QAAA,mBAChBC,IAACC,GAAAA,EAAA,EAAI,SAAA,EAAW,CAAA,EACd,QAAA,kBAAAD,GAAAA,CAACD,MAAA,EAAK,KAAA,EAAO,OAAO,IAAA,CAAK,KAAA,EACtB,0BAAgB,QAAA,GAAW,oBAAA,GAAuB,eAAA,EACrD,CAAA,EACF,CAAA,GACE;AAAA;AAAA;AAAA,GACN;AAEJ;AAEA,IAAM,aAAaU,OAAAA,CAAM,IAAA;AAAA,EACvB,mBAAA;AAAA,EACA,CAAC,eAAe,SAAA,KACd,aAAA,CAAc,UAAU,SAAA,CAAU,KAAA,IAClC,cAAc,MAAA,KAAW,SAAA,CAAU,UACnC,aAAA,CAAc,WAAA,KAAgB,UAAU,WAAA,IACxC,aAAA,CAAc,cAAc,SAAA,CAAU,SAAA,IACtC,aAAA,CAAc,QAAA,KAAa,SAAA,CAAU;AAEzC,CAAA;AAEO,SAAS,UAAA,CAAW;AAAA,EACzB,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,EAAyC;AACvC,EAAAC,QAAAA,CAAS,CAAC,KAAA,EAAO,GAAA,KAAQ;AACvB,IAAA,IAAI,IAAI,GAAA,EAAK;AACX,MAAA,aAAA,CAAA,CAAe,gBAAA,GAAmB,CAAA,IAAK,MAAA,CAAO,MAAM,CAAA;AACpD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,QAAA,CAAS,KAAA,EAAO,EAAE,CAAA;AAC5C,IAAA,IACE,CAAC,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA,IACxB,UAAA,IAAc,CAAA,IACd,UAAA,IAAc,MAAA,CAAO,MAAA,IACrB,GAAA,CAAI,IAAA,EACJ;AACA,MAAA,aAAA,CAAc,aAAa,CAAC,CAAA;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,CAAC,WAAA,EAAa,GAAG,YAAY,CAAA,GAAI,MAAA;AACvC,EAAA,MAAM,YAAA,GAAe,OAAO,gBAAgB,CAAA;AAE5C,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,uBACEV,IAACC,GAAAA,EAAA,EAAI,UAAU,CAAA,EAAG,WAAA,EAAY,OAAA,EAAQ,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,KAAK,QAAA,EAAU,CAAA,EAC9E,QAAA,kBAAAD,GAAAA,CAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAA,kBAAA,EAAgB,CAAA,EAClD,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,eAAe,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,MAAA,CAAO,OAAO,CAAA,IAAK,EAAA;AAErE,EAAA,uBACED,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,UAAU,CAAA,EACpC,QAAA,EAAA;AAAA,oBAAAH,IAAAA,CAACG,GAAAA,EAAA,EAAI,YAAA,EAAc,CAAA,EACjB,QAAA,EAAA;AAAA,sBAAAD,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,sBACvCC,GAAAA,CAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAI,MACpC,QAAA,EAAA,YAAA,EAAc,MAAA,CAAO,IAAA,IAAQ,WAAA,CAAY,OAAO,IAAA,EACnD,CAAA;AAAA,sBACAC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,EAAA,IAAA,EAAE,CAAA;AAAA,sBAClCC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,OAAO,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAI,IAAA,EAAC,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,sBAC3CC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,sBACxCC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,OAAO,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAI,IAAA,EAAC,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,sBAC9CC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,sBACjCC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAI,IAAA,EAAE,QAAA,EAAA,MAAA,CAAO,MAAA,EAAO,CAAA;AAAA,sBACvDC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,sBACvCC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,OAAO,MAAA,CAAO,OAAA,EAAS,IAAA,EAAI,IAAA,EAAC,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,sBACnDC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,EAAA,aAAA,EAAW;AAAA,KAAA,EAC7C,CAAA;AAAA,oBAEAD,IAAAA,CAACG,GAAAA,EAAA,EAAI,UAAU,CAAA,EACb,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAACC,KAAA,EAAI,SAAA,EAAU,OAAM,aAAA,EAAc,QAAA,EAAS,YAAA,EAAc,CAAA,EACxD,QAAA,kBAAAD,GAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,WAAA;AAAA,UACP,MAAA,EAAQ,YAAA;AAAA,UACR,WAAA,EAAY,QAAA;AAAA,UACZ,WAAW,gBAAA,KAAqB,CAAA;AAAA,UAChC,QAAA,EAAU;AAAA;AAAA,OACZ,EACF,CAAA;AAAA,sBAEAA,GAAAA,CAACC,GAAAA,EAAA,EAAI,SAAA,EAAU,KAAA,EAAM,eAAc,QAAA,EAAS,WAAA,EAAa,CAAA,EACtD,QAAA,EAAA,YAAA,CAAa,SAAS,CAAA,GACrB,YAAA,CAAa,IAAI,CAAC,KAAA,EAAO,0BACvBD,GAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UAEC,KAAA;AAAA,UACA,QAAQ,YAAA,CAAa,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,IAAK,EAAA;AAAA,UAClD,WAAA,EAAY,QAAA;AAAA,UACZ,SAAA,EAAW,qBAAqB,KAAA,GAAQ,CAAA;AAAA,UACxC,QAAA,EAAU;AAAA,SAAA;AAAA,QALL,MAAM,MAAA,CAAO;AAAA,OAOrB,CAAA,mBAEDA,GAAAA,CAACC,GAAAA,EAAA,EAAI,WAAA,EAAY,QAAA,EAAS,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,UAAU,CAAA,EAClE,QAAA,kBAAAD,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,OAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAA,iCAAA,EAA+B,CAAA,EACjE,CAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAC,GAAAA,CAACC,GAAAA,EAAA,EAAI,WAAW,CAAA,EACd,QAAA,kBAAAD,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,mGAEhC,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACtRO,SAAS,SAAA,CAAU;AAAA,EACxB,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAAwC;AACtC,EAAA,uBACED,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,QAAO,MAAA,EACjC,QAAA,EAAA;AAAA,oBAAAD,IAAC,SAAA,EAAA,EAAU,KAAA,EAAc,IAAA,EAAY,UAAA,EAAwB,MAAY,SAAA,EAAsB,CAAA;AAAA,oBAC/FA,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,gBAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,QAAA,EAAA,EAAS,QAAA,EAAoB,cAA4B,QAAA,EAAoB;AAAA,GAAA,EAChF,CAAA;AAEJ;AClCO,SAAS,QAAA,CACd,MAAA,EACA,YAAA,EACA,WAAA,EACiB;AACjB,EAAA,MAAM,MAAA,GAASI,QAAQ,MAAM,iBAAA,CAAkB,MAAM,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEhE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIF,SAA6B,YAAY,CAAA;AACjF,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAgC,WAAW,CAAA;AAEjF,EAAA,MAAM,UAAA,GAAaE,OAAAA;AAAA,IACjB,MAAM;AACJ,MAAA,MAAA,CAAO,gBAAgB,YAAY,CAAA;AACnC,MAAA,OAAO,MAAA,CAAO,QAAQ,WAAW,CAAA;AAAA,IACnC,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,WAAA,EAAa,YAAY;AAAA,GACpC;AAEA,EAAA,MAAM,WAAA,GAAcO,WAAAA,CAAY,CAAC,OAAA,KAAoB;AACnD,IAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,EACzB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,WAAAA;AAAA,IACjB,CAAC,IAAA,KAAoB;AACnB,MAAA,MAAA,CAAO,gBAAgB,MAAS,CAAA;AAChC,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,eAAA,CAAgB,MAAS,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,SAAS,UAAA,CAAW,OAAA;AAAA,IACpB,WAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AACF;ACjBA,SAAS,mBAAmB,QAAA,EAGjB;AACT,EAAA,MAAM,OAAO,QAAA,CAAS,SAAA;AACtB,EAAA,QAAQ,SAAS,IAAA;AAAM,IACrB,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,EAAA,GAAK,OAAO,IAAA,CAAK,WAAW,MAAM,QAAA,GAAW,IAAA,CAAK,WAAW,CAAA,GAAI,EAAA;AACvE,MAAA,MAAM,KAAA,GAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC9C,MAAA,OAAO,CAAA,QAAA,EAAW,SAAS,MAAM,CAAA,CAAA;AAAA,IACnC;AAAA,IACA,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,EAAA,GAAK,OAAO,IAAA,CAAK,WAAW,MAAM,QAAA,GAAW,IAAA,CAAK,WAAW,CAAA,GAAI,EAAA;AACvE,MAAA,MAAM,KAAA,GAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC9C,MAAA,OAAO,CAAA,QAAA,EAAW,SAAS,MAAM,CAAA,CAAA;AAAA,IACnC;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,EAAA,GAAK,OAAO,IAAA,CAAK,WAAW,MAAM,QAAA,GAAW,IAAA,CAAK,WAAW,CAAA,GAAI,EAAA;AACvE,MAAA,MAAM,KAAA,GAAQ,GAAG,KAAA,CAAM,GAAG,EAAE,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC9C,MAAA,OAAO,CAAA,QAAA,EAAW,SAAS,MAAM,CAAA,CAAA;AAAA,IACnC;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,GAAA,GACJ,OAAO,IAAA,CAAK,SAAS,MAAM,QAAA,GAAW,IAAA,CAAK,SAAS,CAAA,GAAI,EAAA;AAC1D,MAAA,OAAO,mBAAmB,GAAG,CAAA,CAAA;AAAA,IAC/B;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,GAAA,GACJ,OAAO,IAAA,CAAK,SAAS,MAAM,QAAA,GAAW,IAAA,CAAK,SAAS,CAAA,GAAI,EAAA;AAC1D,MAAA,OAAO,CAAA,eAAA,EAAkB,GAAA,CAAI,MAAA,GAAS,EAAA,GAAK,GAAA,CAAI,MAAM,CAAA,EAAG,EAAE,CAAA,GAAI,QAAA,GAAW,GAAG,CAAA,CAAA,CAAA;AAAA,IAC9E;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,GAAA,GACJ,OAAO,IAAA,CAAK,SAAS,MAAM,QAAA,GAAW,IAAA,CAAK,SAAS,CAAA,GAAI,EAAA;AAC1D,MAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,GAAS,EAAA,GAAK,IAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,QAAA,GAAW,GAAA;AAC9D,MAAA,OAAO,WAAW,KAAK,CAAA,CAAA;AAAA,IACzB;AAAA,IACA,KAAK,YAAA;AAAA,IACL,KAAK,WAAA;AACH,MAAA,OAAO,mBAAA;AAAA,IACT,KAAK,WAAA;AAAA,IACL,KAAK,UAAA;AACH,MAAA,OAAO,cAAA;AAAA,IACT;AACE,MAAA,OAAO,CAAA,QAAA,EAAW,SAAS,IAAI,CAAA,CAAA;AAAA;AAErC;AAEO,SAAS,SAAA,GAA8B;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIT,QAAAA,CAAuB;AAAA,IAC/C,WAAA,EAAa,KAAA;AAAA,IACb,OAAA,EAAS,EAAA;AAAA,IACT,KAAA,EAAO,MAAA;AAAA,IACP,KAAA,EAAO,MAAA;AAAA,IACP,QAAA,EAAU,MAAA;AAAA,IACV,WAAW,EAAC;AAAA,IACZ,SAAA,EAAW;AAAA,GACZ,CAAA;AAED,EAAA,MAAM,SAAA,GAAYI,OAAO,KAAK,CAAA;AAC9B,EAAA,MAAM,WAAA,GAAc,MAAe,SAAA,CAAU,OAAA;AAE7C,EAAA,MAAM,WAAA,GAAcK,WAAAA;AAAA,IAClB,OAAO,MAAA,KAAwC;AAC7C,MAAA,SAAA,CAAU,OAAA,GAAU,KAAA;AACpB,MAAA,QAAA,CAAS;AAAA,QACP,WAAA,EAAa,IAAA;AAAA,QACb,OAAA,EAAS,EAAA;AAAA,QACT,KAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO,MAAA;AAAA,QACP,QAAA,EAAU,MAAA;AAAA,QACV,WAAW,EAAC;AAAA,QACZ,SAAA,EAAW,KAAK,GAAA;AAAI,OACrB,CAAA;AAED,MAAA,IAAI;AACF,QAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,UAAA,IAAI,aAAY,EAAG;AAEnB,UAAA,QAAQ,MAAM,IAAA;AAAM,YAClB,KAAK,MAAA;AACH,cAAA,IAAI,KAAA,CAAM,YAAY,KAAA,CAAA,EAAW;AAC/B,gBAAA,MAAM,OAAO,KAAA,CAAM,OAAA;AACnB,gBAAA,QAAA,CAAS,CAAC,IAAA,MAAU;AAAA,kBAClB,GAAG,IAAA;AAAA,kBACH,OAAA,EAAS,KAAK,OAAA,GAAU,IAAA;AAAA,kBACxB,QAAA,EAAU,KAAA;AAAA,iBACZ,CAAE,CAAA;AAAA,cACJ;AACA,cAAA;AAAA,YAEF,KAAK,WAAA;AACH,cAAA,IAAI,KAAA,CAAM,aAAa,KAAA,CAAA,EAAW;AAChC,gBAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,gBAAA,MAAM,IAAA,GAAO,mBAAmB,QAAQ,CAAA;AACxC,gBAAA,MAAM,SAAA,GAA4B;AAAA,kBAChC,EAAA,EACE,SAAS,IAAA,GACT,GAAA,GACA,KAAK,GAAA,EAAI,CAAE,SAAS,EAAE,CAAA;AAAA,kBACxB,MAAM,QAAA,CAAS,IAAA;AAAA,kBACf,WAAA,EAAa,IAAA;AAAA,kBACb,MAAA,EAAQ,WAAA;AAAA,kBACR,SAAA,EAAW,KAAK,GAAA;AAAI,iBACtB;AACA,gBAAA,QAAA,CAAS,CAAC,IAAA,MAAU;AAAA,kBAClB,GAAG,IAAA;AAAA,kBACH,QAAA,EAAU,IAAA;AAAA,kBACV,SAAA,EAAW;AAAA;AAAA,oBAET,GAAG,KAAK,SAAA,CAAU,GAAA;AAAA,sBAAI,CAAC,EAAA,KACrB,EAAA,CAAG,MAAA,KAAW,WAAA,GACV;AAAA,wBACE,GAAG,EAAA;AAAA,wBACH,MAAA,EAAQ,SAAA;AAAA,wBACR,OAAA,EAAS,KAAK,GAAA;AAAI,uBACpB,GACA;AAAA,qBACN;AAAA,oBACA;AAAA;AACF,iBACF,CAAE,CAAA;AAAA,cACJ;AACA,cAAA;AAAA,YAEF,KAAK,OAAA;AACH,cAAA,IAAI,MAAM,KAAA,EAAO;AACf,gBAAA,QAAA,CAAS,CAAC,IAAA,MAAU;AAAA,kBAClB,GAAG,IAAA;AAAA,kBACH,OAAO,KAAA,CAAM;AAAA,iBACf,CAAE,CAAA;AAAA,cACJ;AACA,cAAA;AAAA,YAEF,KAAK,OAAA;AACH,cAAA,QAAA,CAAS,CAAC,IAAA,MAAU;AAAA,gBAClB,GAAG,IAAA;AAAA,gBACH,OAAO,KAAA,CAAM,KAAA;AAAA,gBACb,WAAA,EAAa,KAAA;AAAA,gBACb,QAAA,EAAU,KAAA,CAAA;AAAA,gBACV,SAAA,EAAW,KAAK,SAAA,CAAU,GAAA;AAAA,kBAAI,CAAC,EAAA,KAC7B,EAAA,CAAG,MAAA,KAAW,WAAA,GACV;AAAA,oBACE,GAAG,EAAA;AAAA,oBACH,MAAA,EAAQ,OAAA;AAAA,oBACR,OAAA,EAAS,KAAK,GAAA;AAAI,mBACpB,GACA;AAAA;AACN,eACF,CAAE,CAAA;AACF,cAAA;AAAA,YAEF,KAAK,MAAA;AACH,cAAA,QAAA,CAAS,CAAC,IAAA,MAAU;AAAA,gBAClB,GAAG,IAAA;AAAA,gBACH,WAAA,EAAa,KAAA;AAAA,gBACb,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,IAAA,CAAK,KAAA;AAAA,gBAC3B,QAAA,EAAU,KAAA,CAAA;AAAA,gBACV,SAAA,EAAW,KAAK,SAAA,CAAU,GAAA;AAAA,kBAAI,CAAC,EAAA,KAC7B,EAAA,CAAG,MAAA,KAAW,WAAA,GACV;AAAA,oBACE,GAAG,EAAA;AAAA,oBACH,MAAA,EAAQ,SAAA;AAAA,oBACR,OAAA,EAAS,KAAK,GAAA;AAAI,mBACpB,GACA;AAAA;AACN,eACF,CAAE,CAAA;AACF,cAAA;AAAA;AACJ,QACF;AAEA,QAAA,QAAA,CAAS,CAAC,IAAA,MAAU;AAAA,UAClB,GAAG,IAAA;AAAA,UACH,WAAA,EAAa,KAAA;AAAA,UACb,QAAA,EAAU,KAAA,CAAA;AAAA,UACV,SAAA,EAAW,KAAK,SAAA,CAAU,GAAA;AAAA,YAAI,CAAC,EAAA,KAC7B,EAAA,CAAG,MAAA,KAAW,WAAA,GACV;AAAA,cACE,GAAG,EAAA;AAAA,cACH,MAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAS,KAAK,GAAA;AAAI,aACpB,GACA;AAAA;AACN,SACF,CAAE,CAAA;AAAA,MACJ,SAAS,KAAA,EAAgB;AACvB,QAAA,QAAA,CAAS,CAAC,IAAA,MAAU;AAAA,UAClB,GAAG,IAAA;AAAA,UACH,WAAA,EAAa,KAAA;AAAA,UACb,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAAA,UAC5D,QAAA,EAAU;AAAA,SACZ,CAAE,CAAA;AAAA,MACJ;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,YAAA,GAAeA,YAAY,MAAM;AACrC,IAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,IAAA,QAAA,CAAS,CAAC,IAAA,MAAU;AAAA,MAClB,GAAG,IAAA;AAAA,MACH,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,KAAK,SAAA,CAAU,GAAA;AAAA,QAAI,CAAC,EAAA,KAC7B,EAAA,CAAG,MAAA,KAAW,WAAA,GACV;AAAA,UACE,GAAG,EAAA;AAAA,UACH,MAAA,EAAQ,WAAA;AAAA,UACR,OAAA,EAAS,KAAK,GAAA;AAAI,SACpB,GACA;AAAA;AACN,KACF,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQA,YAAY,MAAM;AAC9B,IAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AACpB,IAAA,QAAA,CAAS;AAAA,MACP,WAAA,EAAa,KAAA;AAAA,MACb,OAAA,EAAS,EAAA;AAAA,MACT,KAAA,EAAO,MAAA;AAAA,MACP,KAAA,EAAO,MAAA;AAAA,MACP,QAAA,EAAU,MAAA;AAAA,MACV,WAAW,EAAC;AAAA,MACZ,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,KAAA,EAAO,WAAA,EAAa,YAAA,EAAc,KAAA,EAAM;AACnD;ACrPO,SAAS,QAAQ,MAAA,EAAqC;AAC3D,EAAA,MAAM,UAAA,GAAaL,MAAAA,CAAO,IAAI,WAAA,CAAY,MAAM,CAAC,CAAA;AACjD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIJ,SAAS,OAAO,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,GAAG,CAAA;AAClD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE9D,EAAAC,UAAU,MAAM;AACd,IAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,IAAA,MAAM,YAAY,QAAA,CAAS,EAAA,CAAG,gBAAgB,CAAC,EAAE,OAAM,KAAM;AAC3D,MAAA,YAAA,CAAa,UAAA,CAAW,KAAK,CAAC,CAAA;AAC9B,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,OAAA,CAAQ,gBAAA,EAAiB;AACnD,MAAA,cAAA,CAAe,gBAAA,CAAiB,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC/C,CAAC,CAAA;AAED,IAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,EAAA,CAAG,eAAA,EAAiB,MAAM;AACvD,MAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,IAC1B,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,EAAU;AACV,MAAA,aAAA,EAAc;AAAA,IAChB,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAASQ,WAAAA;AAAA,IACb,CACE,QAAA,EACA,KAAA,EACA,WAAA,EACA,cACA,IAAA,KACG;AACH,MAAA,UAAA,CAAW,QAAQ,MAAA,CAAO,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,cAAc,IAAI,CAAA;AAAA,IAC5E,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAS,UAAA,CAAW;AAAA,GACtB;AACF;ACrCO,SAAS,QAAA,GAA4B;AAC1C,EAAA,MAAM,eAAA,GAAkB,GAAA;AACxB,EAAA,MAAM,CAAC,MAAA,EAAQ,cAAc,CAAA,GAAIT,QAAAA,CAAiC,EAAE,CAAA;AACpE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAS,CAAC,CAAA;AAC1D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,IAAIA,QAAAA,iBAA8B,IAAI,KAAK,CAAA;AAC/E,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClE,EAAA,MAAM,gBAAA,GAAmBI,MAAAA,iBAA4B,IAAI,GAAA,EAAK,CAAA;AAC9D,EAAA,MAAM,aAAA,GAAgBA,OAAmC,MAAS,CAAA;AAElE,EAAA,MAAM,kBAAA,GAAqBK,YAAY,MAAM;AAC3C,IAAA,aAAA,CAAc,OAAA,GAAU,MAAA;AAExB,IAAA,IAAI,gBAAA,CAAiB,OAAA,CAAQ,IAAA,KAAS,CAAA,EAAG;AACvC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,gBAAA,CAAiB,OAAA;AACjC,IAAA,gBAAA,CAAiB,OAAA,uBAAc,GAAA,EAAI;AAEnC,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAA,eAAA,CAAgB,CAAC,IAAA,KAAS;AACxB,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,IAAI,CAAA;AACzB,QAAA,KAAA,MAAW,CAAC,OAAA,EAAS,OAAO,CAAA,IAAK,OAAA,CAAQ,SAAQ,EAAG;AAClD,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,IAAK,EAAA;AACtC,UAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,QAAA,GAAW,OAAO,CAAA;AAAA,QACtC;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAR,UAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,aAAA,CAAc,YAAY,MAAA,EAAW;AACvC,QAAA,YAAA,CAAa,cAAc,OAAO,CAAA;AAAA,MACpC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAcQ,WAAAA,CAAY,CAAC,KAAA,KAAkB;AACjD,IAAA,mBAAA,CAAoB,KAAK,CAAA;AAAA,EAC3B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAeA,WAAAA,CAAY,CAC/B,OAAA,EACA,SACA,OAAA,KACG;AACH,IAAA,MAAM,UAAU,gBAAA,CAAiB,OAAA;AACjC,IAAA,OAAA,CAAQ,IAAI,OAAA,EAAA,CAAU,OAAA,CAAQ,IAAI,OAAO,CAAA,IAAK,MAAM,OAAO,CAAA;AAE3D,IAAA,IAAI,OAAA,EAAS,cAAc,IAAA,EAAM;AAC/B,MAAA,IAAI,aAAA,CAAc,YAAY,MAAA,EAAW;AACvC,QAAA,YAAA,CAAa,cAAc,OAAO,CAAA;AAAA,MACpC;AACA,MAAA,kBAAA,EAAmB;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,aAAA,CAAc,YAAY,MAAA,EAAW;AACvC,MAAA,aAAA,CAAc,OAAA,GAAU,UAAA,CAAW,kBAAA,EAAoB,eAAe,CAAA;AAAA,IACxE;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,kBAAkB,CAAC,CAAA;AAExC,EAAA,MAAM,iBAAA,GAAoBA,WAAAA,CAAY,CAAC,OAAA,EAAiB,MAAA,KAAwB;AAC9E,IAAA,cAAA;AAAA,MAAe,CAAC,SACd,IAAA,CAAK,GAAA;AAAA,QAAI,CAAC,KAAA,KACR,KAAA,CAAM,MAAA,CAAO,OAAA,KAAY,UACrB,EAAE,GAAG,KAAA,EAAO,MAAA,EAAO,GACnB;AAAA;AACN,KACF;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,SAAA,GAAYA,WAAAA,CAAY,CAAC,SAAA,KAAsC;AACnE,IAAA,cAAA,CAAe,SAAS,CAAA;AACxB,IAAA,mBAAA,CAAoB,CAAC,CAAA;AAAA,EACvB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,QAAA,GAAWA,YAAY,MAAM;AACjC,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaA,YAAY,MAAM;AACnC,IAAA,IAAI,aAAA,CAAc,YAAY,MAAA,EAAW;AACvC,MAAA,YAAA,CAAa,cAAc,OAAO,CAAA;AAClC,MAAA,aAAA,CAAc,OAAA,GAAU,MAAA;AAAA,IAC1B;AACA,IAAA,gBAAA,CAAiB,OAAA,uBAAc,GAAA,EAAI;AACnC,IAAA,qBAAA,CAAsB,KAAK,CAAA;AAC3B,IAAA,cAAA,CAAe,EAAE,CAAA;AACjB,IAAA,eAAA,iBAAgB,IAAI,KAAK,CAAA;AACzB,IAAA,mBAAA,CAAoB,CAAC,CAAA;AAAA,EACvB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAOP,QAAQ,OAAO;AAAA,IACpB,MAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF,CAAA,EAAI,CAAC,MAAA,EAAQ,gBAAA,EAAkB,YAAA,EAAc,kBAAA,EAAoB,WAAA,EAAa,YAAA,EAAc,iBAAA,EAAmB,SAAA,EAAW,QAAA,EAAU,UAAU,CAAC,CAAA;AACjJ;ACjIO,SAAS,IAAA,GAAe;AAC7B,EAAA,OAAO,UAAA,EAAW;AACpB;ACeA,IAAM,eAAA,GAAoD;AAAA,EACxD,SAAA,EAAW,2BAAA;AAAA,EACX,MAAA,EAAQ,uBAAA;AAAA,EACR,MAAA,EAAQ,wBAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,cAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA4C;AAC1C,EAAA,MAAM,IAAA,GAAOA,QAAiC,MAAM;AAElD,IAAA,MAAM,KAAA,GAAQ,cAAc,EAAC;AAC7B,IAAA,MAAM,SAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1D,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,KAAA,EAAO,eAAA,CAAgB,WAAW,CAAA,IAAK;AAAA,OACxC,CAAA;AACD,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAA,EAAM,OAAA;AAAA,UACN,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,SAAS,KAAA,CAAM,EAAA;AAAA,UACf,SAAA,EAAW,MAAM,EAAA,KAAO;AAAA,SACzB,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,MAAM,iBAAA,GAAoBA,QAAQ,MAAM;AACtC,IAAA,MAAM,UAAoB,EAAC;AAC3B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,IAAI,KAAK,CAAC,CAAA,EAAG,SAAS,OAAA,EAAS,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,YAAA,GAAeA,QAAQ,MAAM;AACjC,IAAA,MAAM,SAAS,IAAA,CAAK,SAAA;AAAA,MAClB,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,OAAA,IAAW,EAAE,OAAA,KAAY;AAAA,KAC7C;AACA,IAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,OAAA,CAAQ,MAAM,CAAA;AAClD,IAAA,OAAO,SAAA,IAAa,IAAI,SAAA,GAAY,CAAA;AAAA,EACtC,CAAA,EAAG,CAAC,IAAA,EAAM,iBAAA,EAAmB,cAAc,CAAC,CAAA;AAE5C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIF,SAAS,YAAY,CAAA;AAEjD,EAAAQ,QAAAA,CAAS,CAAC,MAAA,EAAQ,GAAA,KAAQ;AACxB,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,SAAA;AAAA,QAAU,CAAC,IAAA,KACT,IAAA,GAAO,IAAI,IAAA,GAAO,CAAA,GAAI,kBAAkB,MAAA,GAAS;AAAA,OACnD;AAAA,IACF,CAAA,MAAA,IAAW,IAAI,SAAA,EAAW;AACxB,MAAA,SAAA;AAAA,QAAU,CAAC,IAAA,KACT,IAAA,GAAO,kBAAkB,MAAA,GAAS,CAAA,GAAI,OAAO,CAAA,GAAI;AAAA,OACnD;AAAA,IACF,CAAA,MAAA,IAAW,IAAI,MAAA,EAAQ;AACrB,MAAA,MAAM,MAAA,GAAS,kBAAkB,MAAM,CAAA;AACvC,MAAA,MAAM,GAAA,GAAM,MAAA,KAAW,MAAA,GAAY,IAAA,CAAK,MAAM,CAAA,GAAI,MAAA;AAClD,MAAA,IAAI,GAAA,EAAK,OAAA,EAAS,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAAA,IACxC,CAAA,MAAA,IAAW,IAAI,MAAA,EAAQ;AACrB,MAAA,QAAA,EAAS;AAAA,IACX;AAAA,EACF,CAAC,CAAA;AAED,EAAA,uBACEZ,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,SAAS,CAAA,EACnC,QAAA,EAAA;AAAA,oBAAAH,IAAAA,CAACG,GAAAA,EAAA,EAAI,YAAA,EAAc,CAAA,EACjB,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAACD,MAAA,EAAK,IAAA,EAAI,MAAC,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,QAAA,EAAA,cAAA,EAExC,CAAA;AAAA,sBACAD,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,KAAK,KAAA,EACtB,QAAA,EAAA;AAAA,QAAA,IAAA;AAAA,QAAK;AAAA,OAAA,EACR;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,GAAA,KAAQ;AACtB,MAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,QAAA,uBACEC,GAAAA,CAACC,GAAAA,EAAA,EAA0B,SAAA,EAAW,GAAA,GAAM,IAAI,CAAA,GAAI,CAAA,EAClD,QAAA,kBAAAH,IAAAA,CAACC,MAAA,EAAK,IAAA,EAAI,MAAC,KAAA,EAAO,MAAA,CAAO,OAAO,OAAA,EAC7B,QAAA,EAAA;AAAA,UAAA,IAAA;AAAA,UACA,GAAA,CAAI;AAAA,SAAA,EACP,CAAA,EAAA,EAJQ,CAAA,OAAA,EAAU,GAAG,CAAA,CAKvB,CAAA;AAAA,MAEJ;AAEA,MAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,MAAM,CAAA,KAAM,GAAA;AACpD,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,SAAA,GAAY,YAAA,GAAe,EAAA;AAElD,MAAA,uBACED,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAH,IAAAA;AAAA,UAACC,IAAAA;AAAA,UAAA;AAAA,YACC,KAAA,EACE,aAAA,GACI,MAAA,CAAO,MAAA,CAAO,OAAA,GACd,GAAA,CAAI,SAAA,GACF,MAAA,CAAO,IAAA,CAAK,MAAA,GACZ,MAAA,CAAO,IAAA,CAAK,OAAA;AAAA,YAEpB,IAAA,EAAM,aAAA;AAAA,YAEL,QAAA,EAAA;AAAA,cAAA,aAAA,GAAgB,SAAA,GAAY,IAAA;AAAA,cAC5B,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,EAAE;AAAA;AAAA;AAAA,SACtB;AAAA,wBACAD,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,KAAK,KAAA,EACtB,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UACA,GAAA,CAAI,WAAA;AAAA,UACJ;AAAA,SAAA,EACH;AAAA,OAAA,EAAA,EAlBQ,GAAA,CAAI,OAAA,IAAW,CAAA,IAAA,EAAO,GAAG,CAAA,CAmBnC,CAAA;AAAA,IAEJ,CAAC,CAAA;AAAA,oBAEDC,GAAAA,CAACC,GAAAA,EAAA,EAAI,SAAA,EAAW,CAAA,EACd,QAAA,kBAAAH,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,KAAK,KAAA,EACtB,QAAA,EAAA;AAAA,MAAA,IAAA;AAAA,MAAK,WAAA;AAAA,MAAU;AAAA,KAAA,EAClB,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACxIA,SAAS,aAAa,MAAA,EAAwB;AAC5C,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,mBAAA;AAAqB,MAAA,OAAO,mBAAA;AAAA,IACjC,KAAK,kBAAA;AAAoB,MAAA,OAAO,kBAAA;AAAA,IAChC,KAAK,iBAAA;AAAmB,MAAA,OAAO,iBAAA;AAAA,IAC/B,KAAK,gBAAA;AAAkB,MAAA,OAAO,gBAAA;AAAA,IAC9B,KAAK,eAAA;AAAiB,MAAA,OAAO,eAAA;AAAA,IAC7B;AAAS,MAAA,OAAO,UAAA;AAAA;AAEpB;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,OAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA+C;AAC7C,EAAA,MAAM,MAAA,GAASK,QAAQ,MAAM,yBAAA,CAA0B,OAAO,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAE1E,EAAA,MAAM,UAAA,GAAaA,QAAQ,MAAM;AAC/B,IAAA,IAAI,CAAC,QAAQ,OAAO,CAAA;AACpB,IAAA,MAAM,GAAA,GAAM,OAAO,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,YAAY,CAAA;AACpE,IAAA,IAAI,GAAA,IAAO,GAAG,OAAO,GAAA;AACrB,IAAA,MAAM,UAAA,GAAa,OAAO,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,MAAA,CAAO,YAAY,CAAA;AAClF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAU,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEzB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIF,SAAS,UAAU,CAAA;AAE/C,EAAAQ,QAAAA,CAAS,CAAC,MAAA,EAAQ,GAAA,KAAQ;AACxB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,IAAI,GAAA,CAAI,MAAA,IAAU,GAAA,CAAI,MAAA,EAAQ,MAAA,EAAO;AACrC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,SAAA,CAAU,CAAC,SAAU,IAAA,GAAO,CAAA,GAAI,OAAO,CAAA,GAAI,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,CAAE,CAAA;AAAA,IACvE,CAAA,MAAA,IAAW,IAAI,SAAA,EAAW;AACxB,MAAA,SAAA,CAAU,CAAC,SAAU,IAAA,GAAO,MAAA,CAAO,QAAQ,MAAA,GAAS,CAAA,GAAI,IAAA,GAAO,CAAA,GAAI,CAAE,CAAA;AAAA,IACvE,CAAA,MAAA,IAAW,IAAI,MAAA,EAAQ;AACrB,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACpC,MAAA,IAAI,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA;AAAA,IACnC,CAAA,MAAA,IAAW,IAAI,MAAA,EAAQ;AACrB,MAAA,MAAA,EAAO;AAAA,IACT;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,uBACEZ,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,SAAS,CAAA,EACnC,QAAA,EAAA;AAAA,sBAAAH,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,QAAA,EAAA;AAAA,QAAA,oCAAA;AAAA,QAAmC,SAAA;AAAA,QAAU;AAAA,OAAA,EAAC,CAAA;AAAA,sBACnEC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,iCAAA,EAA+B;AAAA,KAAA,EACpD,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACED,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,SAAS,CAAA,EACnC,QAAA,EAAA;AAAA,oBAAAH,KAACG,GAAAA,EAAA,EAAI,YAAA,EAAc,CAAA,EAAG,eAAc,QAAA,EAClC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAACD,IAAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,OAAM,MAAA,EAAQ,QAAA,EAAA,YAAA,CAAa,MAAA,CAAO,MAAM,CAAA,EAAE,CAAA;AAAA,sBACrDD,IAAAA,CAACC,IAAAA,EAAA,EAAK,OAAM,MAAA,EAAO,QAAA,EAAA;AAAA,QAAA,WAAA;AAAA,QAAU,SAAA;AAAA,QAAU;AAAA,OAAA,EAA4C;AAAA,KAAA,EACrF,CAAA;AAAA,IACC,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,GAAA,KAAQ;AACnC,MAAA,MAAM,gBAAgB,MAAA,KAAW,GAAA;AACjC,MAAA,MAAM,SAAA,GAAY,OAAO,KAAA,KAAU,YAAA;AACnC,MAAA,MAAM,UAAA,GAAa,YAAY,YAAA,GAAe,EAAA;AAC9C,MAAA,uBACED,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAH,IAAAA,CAACC,IAAAA,EAAA,EAAM,GAAI,aAAA,GAAgB,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAI,EAAC,EAAI,IAAA,EAAM,aAAA,EACxD,QAAA,EAAA;AAAA,UAAA,aAAA,GAAgB,IAAA,GAAO,IAAA;AAAA,UAAM,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,EAAE;AAAA,SAAA,EACtD,CAAA;AAAA,wBACAD,IAAAA,CAACC,IAAAA,EAAA,EAAK,OAAM,MAAA,EAAO,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE,MAAA,CAAO,WAAA;AAAA,UAAa;AAAA,SAAA,EAAW;AAAA,OAAA,EAAA,EAJ5C,OAAO,KAKjB,CAAA;AAAA,IAEJ,CAAC;AAAA,GAAA,EACH,CAAA;AAEJ;AC5EA,IAAM,SAAA,GAAwC;AAAA,EAC5C,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,aAAa,gCAAA,EAA4B;AAAA,EAC7E,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,aAAa,kCAAA,EAA8B;AAAA,EAC7E,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,aAAa,6BAAA,EAAyB;AAAA,EAC1E,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,aAAa,6BAAA;AAC/C,CAAA;AAEO,SAAS,aAAA,CAAc,EAAE,QAAA,EAAU,QAAA,EAAS,EAA4C;AAC7F,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIG,SAAS,CAAC,CAAA;AAEtC,EAAAQ,QAAAA,CAAS,CAAC,MAAA,EAAQ,GAAA,KAAQ;AACxB,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,SAAA,CAAU,CAAC,SAAU,IAAA,GAAO,CAAA,GAAI,OAAO,CAAA,GAAI,SAAA,CAAU,SAAS,CAAE,CAAA;AAAA,IAClE,CAAA,MAAA,IAAW,IAAI,SAAA,EAAW;AACxB,MAAA,SAAA,CAAU,CAAC,SAAU,IAAA,GAAO,SAAA,CAAU,SAAS,CAAA,GAAI,IAAA,GAAO,IAAI,CAAE,CAAA;AAAA,IAClE,CAAA,MAAA,IAAW,IAAI,MAAA,EAAQ;AACrB,MAAA,MAAM,QAAA,GAAW,UAAU,MAAM,CAAA;AACjC,MAAA,IAAI,QAAA,EAAU,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA;AAAA,IACvC,CAAA,MAAA,IAAW,IAAI,MAAA,EAAQ;AACrB,MAAA,QAAA,EAAS;AAAA,IACX;AAAA,EACF,CAAC,CAAA;AAED,EAAA,uBACEZ,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,SAAS,CAAA,EACnC,QAAA,EAAA;AAAA,oBAAAH,IAAAA,CAACG,GAAAA,EAAA,EAAI,YAAA,EAAc,CAAA,EACjB,QAAA,EAAA;AAAA,sBAAAD,IAACD,IAAAA,EAAA,EAAK,MAAI,IAAA,EAAC,KAAA,EAAM,QAAO,QAAA,EAAA,gCAAA,EAA8B,CAAA;AAAA,sBACtDC,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,gDAAA,EAA8C;AAAA,KAAA,EACnE,CAAA;AAAA,IACC,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,EAAU,GAAA,KAAQ;AAChC,MAAA,MAAM,gBAAgB,MAAA,KAAW,GAAA;AACjC,MAAA,uBACED,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAH,IAAAA,CAACC,IAAAA,EAAA,EAAM,GAAI,aAAA,GAAgB,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAI,EAAC,EAAI,IAAA,EAAM,aAAA,EACxD,QAAA,EAAA;AAAA,UAAA,aAAA,GAAgB,IAAA,GAAO,IAAA;AAAA,UAAM,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,EAAE;AAAA,SAAA,EACxD,CAAA;AAAA,wBACAD,IAAAA,CAACC,IAAAA,EAAA,EAAK,OAAM,MAAA,EAAO,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE,QAAA,CAAS;AAAA,SAAA,EAAY;AAAA,OAAA,EAAA,EAJlC,SAAS,KAKnB,CAAA;AAAA,IAEJ,CAAC,CAAA;AAAA,oBACDC,GAAAA,CAACC,GAAAA,EAAA,EAAI,SAAA,EAAW,CAAA,EACd,QAAA,kBAAAD,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAM,MAAA,EAAO,gEAAkD,CAAA,EACvE;AAAA,GAAA,EACF,CAAA;AAEJ;AClDO,SAAS,eAAA,CAAgB;AAAA,EAC9B,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA8C;AAC5C,EAAA,MAAM,OAAA,GAAUK,OAAAA;AAAA,IACd,MAAM,iBAAA,CAAkB,GAAA,CAAI,CAAC,QAAA,KAAa,mBAAA,CAAoB,QAAQ,CAAC,CAAA;AAAA,IACvE,CAAC,iBAAiB;AAAA,GACpB;AAEA,EAAA,MAAM,aAAA,GAAgBA,QAAQ,MAAM;AAClC,IAAA,IAAI,CAAC,sBAAA,EAAwB;AAC3B,MAAA,OAAO,CAAA;AAAA,IACT;AAEA,IAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,OAAA,CAAQ,sBAAsB,CAAA;AACrE,IAAA,OAAO,YAAA,IAAgB,IAAI,YAAA,GAAe,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,sBAAA,EAAwB,iBAAiB,CAAC,CAAA;AAE9C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIF,SAAS,aAAa,CAAA;AAElD,EAAAQ,QAAAA,CAAS,CAAC,MAAA,EAAQ,GAAA,KAAQ;AACxB,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,IAAI,GAAA,CAAI,MAAA,IAAU,GAAA,CAAI,MAAA,EAAQ;AAC5B,QAAA,MAAA,EAAO;AAAA,MACT;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,SAAA,CAAU,CAAC,SAAU,IAAA,GAAO,CAAA,GAAI,OAAO,CAAA,GAAI,OAAA,CAAQ,SAAS,CAAE,CAAA;AAC9D,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAI,SAAA,EAAW;AACjB,MAAA,SAAA,CAAU,CAAC,SAAU,IAAA,GAAO,OAAA,CAAQ,SAAS,CAAA,GAAI,IAAA,GAAO,IAAI,CAAE,CAAA;AAC9D,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAI,MAAA,EAAQ;AACd,MAAA,MAAM,QAAA,GAAW,kBAAkB,MAAM,CAAA;AACzC,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,MACnB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,MAAA,IAAU,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACtC,MAAA,MAAA,EAAO;AAAA,IACT;AAAA,EACF,CAAC,CAAA;AAED,EAAA,uBACEZ,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,SAAS,CAAA,EACnC,QAAA,EAAA;AAAA,oBAAAH,KAACG,GAAAA,EAAA,EAAI,YAAA,EAAc,CAAA,EAAG,eAAc,QAAA,EAClC,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAACD,MAAA,EAAK,KAAA,EAAO,OAAO,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAI,IAAA,EAAC,QAAA,EAAA,aAAA,EAExC,CAAA;AAAA,sBACAC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,EAAA,2DAAA,EAEhC;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,QAAQ,MAAA,GAAS,CAAA,mBAChBD,IAAAA,CAAAS,UAAA,EACG,QAAA,EAAA;AAAA,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,KAAU;AAC7B,QAAA,MAAM,aAAa,KAAA,KAAU,MAAA;AAC7B,QAAA,MAAM,SAAA,GAAY,2BAA2B,KAAA,CAAM,IAAA;AACnD,QAAA,uBACET,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAH,IAAAA;AAAA,YAACC,IAAAA;AAAA,YAAA;AAAA,cACC,OAAO,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,OAAA,GAAU,OAAO,IAAA,CAAK,OAAA;AAAA,cACxD,IAAA,EAAM,UAAA;AAAA,cAEL,QAAA,EAAA;AAAA,gBAAA,UAAA,GAAa,SAAA,GAAY,IAAA;AAAA,gBACzB,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,EAAE;AAAA;AAAA;AAAA,WACxB;AAAA,0BACAD,IAAAA,CAACC,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,KAAK,KAAA,EACtB,QAAA,EAAA;AAAA,YAAA,KAAA,CAAM,WAAA;AAAA,YACN,YAAY,YAAA,GAAe;AAAA,WAAA,EAC9B;AAAA,SAAA,EAAA,EAXQ,MAAM,IAYhB,CAAA;AAAA,MAEJ,CAAC,CAAA;AAAA,sBAEDD,IAAAA,CAACG,GAAAA,EAAA,EAAI,SAAA,EAAW,CAAA,EAAG,eAAc,QAAA,EAC/B,QAAA,EAAA;AAAA,wBAAAD,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,EAAA,6EAAA,EAEhC,CAAA;AAAA,wBACAC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,EAAA,4CAAA,EAEhC;AAAA,OAAA,EACF;AAAA,KAAA,EACF,oBAEAD,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EACjB,QAAA,EAAA;AAAA,sBAAAD,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,MAAA,CAAO,SAAS,QAAA,EAAA,6CAAA,EAEpC,CAAA;AAAA,sBACAC,IAACD,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,EAAA,4EAAA,EAEhC,CAAA;AAAA,sBACAC,GAAAA,CAACC,GAAAA,EAAA,EAAI,WAAW,CAAA,EACd,QAAA,kBAAAD,GAAAA,CAACD,IAAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,KAAA,EAAO,yDAEhC,CAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;AChFO,SAAS,gBAAA,CAAiB,KAAsB,OAAA,EAAuB;AAC5E,EAAA,GAAA,CAAI,WAAA,CAAY,CAAC,IAAA,KAAS;AAAA,IACxB,GAAG,IAAA;AAAA,IACH;AAAA,MACE,IAAI,IAAA,EAAK;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,OAAA;AAAA,MACA,SAAA,sBAAe,IAAA;AAAK;AACtB,GACD,CAAA;AACH;;;AC7CO,SAAS,sBAAsB,KAAA,EAAmC;AAEvE,EAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,EAAG;AACvB,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,IAAA,IAAI,WAAA,GAAc,CAAA;AAClB,IAAA,KAAA,MAAW,OAAA,IAAW,MAAA,CAAO,MAAA,CAAO,oBAAoB,CAAA,EAAG;AACzD,MAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,QAAA,IAAI,gBAAgB,KAAA,EAAO;AACzB,UAAA,OAAO,KAAA,CAAM,EAAA;AAAA,QACf;AACA,QAAA,WAAA,EAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,qBAAqB,MAAA,EAAwB;AAC3D,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,mBAAA;AACH,MAAA,OAAO,mBAAA;AAAA,IACT,KAAK,kBAAA;AACH,MAAA,OAAO,kBAAA;AAAA,IACT,KAAK,iBAAA;AACH,MAAA,OAAO,iBAAA;AAAA,IACT,KAAK,gBAAA;AACH,MAAA,OAAO,gBAAA;AAAA,IACT,KAAK,eAAA;AACH,MAAA,OAAO,eAAA;AAAA,IACT;AACE,MAAA,OAAO,UAAA;AAAA;AAEb;;;ACpCA,eAAsB,iBAAA,CAAkB,MAAyB,GAAA,EAAqC;AACpG,EAAA,MAAM,UAAA,GAAa,KAAK,CAAC,CAAA;AAEzB,EAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,IAAA,MAAM,UAAU,oBAAA,EAAqB;AACrC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,EAAQ;AAAA,MAChB,SAAS,KAAA,EAAgB;AACvB,QAAA,MAAM,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACpE,QAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,8BAAA,EAAiC,MAAM,CAAA,mCAAA,CAAqC,CAAA;AAAA,MACpG;AACA,MAAA,oBAAA,CAAqB,MAAS,CAAA;AAAA,IAChC;AAEA,IAAA,MAAM,UAAU,oBAAA,EAAqB;AACrC,IAAA,MAAM,WAAW,iBAAA,EAAkB;AACnC,IAAA,IAAI,WAAW,QAAA,EAAU;AACvB,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,CAAQ,WAAW,QAAQ,CAAA;AAAA,MACnC,SAAS,KAAA,EAAgB;AACvB,QAAA,MAAM,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACpE,QAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,8BAAA,EAAiC,MAAM,CAAA,qCAAA,CAAuC,CAAA;AAAA,MACtG;AACA,MAAA,oBAAA,CAAqB,MAAS,CAAA;AAAA,IAChC;AAEA,IAAA,iBAAA,CAAkB,MAAS,CAAA;AAC3B,IAAA,GAAA,CAAI,MAAM,UAAA,EAAW;AACrB,IAAA,gBAAA,CAAiB,KAAK,mEAAmE,CAAA;AACzF,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,4BAA6B,CAAA;AAClE,MAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,MAAA,MAAM,KAAA,GAAQ,QAAQ,SAAA,EAAU;AAChC,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,gBAAA,CAAiB,KAAK,kBAAkB,CAAA;AAAA,MAC1C,CAAA,MAAO;AACL,QAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,QAAQ,CAAA,QAAA,EAAM,EAAE,OAAA,CAAQ,MAAM,CAAA,SAAA,EAAY,CAAA,CAAE,MAAM,CAAA,CAAA,CAAG,CAAA;AAC3F,QAAA,gBAAA,CAAiB,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MACxC;AAAA,IACF,SAAS,KAAA,EAAgB;AACvB,MAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,MAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,sBAAA,EAAyB,GAAG,CAAA,CAAE,CAAA;AAAA,IACtD;AACA,IAAA;AAAA,EACF;AAEA,EAAA,gBAAA;AAAA,IACE,GAAA;AAAA,IACA;AAAA,GAIF;AACF;;;AClEA,eAAsB,gBAAA,CAAiB,MAAyB,GAAA,EAAqC;AACnG,EAAA,MAAM,UAAA,GAAa,KAAK,CAAC,CAAA;AAEzB,EAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,gBAAA,EAAiB,GAAI,MAAM,OAAO,8BAA6B,CAAA;AACvE,MAAA,MAAM,OAAA,GAAU,IAAI,gBAAA,EAAiB;AACrC,MAAA,MAAM,SAAA,GAAY,QAAQ,mBAAA,EAAoB;AAC9C,MAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,QAAA,gBAAA,CAAiB,KAAK,wEAAwE,CAAA;AAAA,MAChG,CAAA,MAAO;AACL,QAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,KAAS;AACpC,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,eAAA,CAAgB,IAAI,CAAA,IAAK,SAAA;AAChD,UAAA,OAAO,CAAA,EAAA,EAAK,IAAI,CAAA,QAAA,EAAM,MAAM,CAAA,CAAA;AAAA,QAC9B,CAAC,CAAA;AACD,QAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA;AAAA,EAAiB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MAC3D;AAAA,IACF,SAAS,KAAA,EAAgB;AACvB,MAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,MAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,4BAAA,EAA+B,GAAG,CAAA,CAAE,CAAA;AAAA,IAC5D;AACA,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,eAAe,KAAA,EAAO;AACxB,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,gBAAA,CAAiB,KAAK,iEAAiE,CAAA;AACvF,MAAA;AAAA,IACF;AACA,IAAA,gBAAA;AAAA,MACE,GAAA;AAAA,MACA,sBAAsB,IAAI,CAAA;;AAAA;AAAA;AAAA,KAAA,EACI,IAAI,CAAA;AAAA;AAAA,gCAAA,EACC,IAAI,CAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,gEAAA;AAAA,KAGzC;AACA,IAAA;AAAA,EACF;AAEA,EAAA,gBAAA,CAAiB,KAAK,oCAAoC,CAAA;AAC5D;;;ACzCA,eAAsB,kBAAA,CAAmB,MAAyB,GAAA,EAAqC;AACrG,EAAA,MAAM,UAAA,GAAa,KAAK,CAAC,CAAA;AAEzB,EAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,aAAA,EAAc,GAAI,MAAM,OAAO,wBAA0B,CAAA;AACjE,MAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAM,OAAO,4BAA6B,CAAA;AACtE,MAAA,MAAM,QAAA,GAAW,IAAI,aAAA,EAAc;AACnC,MAAA,MAAM,QAAA,CAAS,UAAA,CAAW,eAAA,EAAiB,CAAA;AAC3C,MAAA,MAAM,MAAA,GAAS,SAAS,OAAA,EAAQ;AAChC,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,QAAA,gBAAA,CAAiB,KAAK,mHAAmH,CAAA;AAAA,MAC3I,CAAA,MAAO;AACL,QAAA,MAAM,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,MAAM,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,WAAW,CAAA,GAAA,EAAM,CAAA,CAAE,MAAM,CAAA,CAAA,CAAG,CAAA;AACzF,QAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA;AAAA,EAAsB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MAChE;AAAA,IACF,SAAS,KAAA,EAAgB;AACvB,MAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,MAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,uBAAA,EAA0B,GAAG,CAAA,CAAE,CAAA;AAAA,IACvD;AACA,IAAA;AAAA,EACF;AAEA,EAAA,gBAAA,CAAiB,KAAK,qFAAqF,CAAA;AAC7G;AAEA,eAAsB,qBAAA,CACpB,OACA,WAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,EAAK,CAAE,MAAM,KAAK,CAAA;AACtC,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAC5B,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAE3C,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AAAA,MACpB,GAAG,IAAA;AAAA,MACH,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,IAAA,EAAM,QAAA,EAAmB,OAAA,EAAS,sEAAA,EAAwE,SAAA,kBAAW,IAAI,IAAA,EAAK;AAAE,KAC/I,CAAA;AACD,IAAA;AAAA,EACF;AAEA,EAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AAAA,IACpB,GAAG,IAAA;AAAA,IACH,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,IAAA,EAAM,MAAA,EAAiB,OAAA,EAAS,KAAA,EAAO,SAAA,kBAAW,IAAI,IAAA,EAAK;AAAE,GAC5E,CAAA;AAED,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,aAAA,EAAc,GAAI,MAAM,OAAO,wBAA0B,CAAA;AACjE,IAAA,MAAM,EAAE,aAAA,EAAc,GAAI,MAAM,OAAO,wBAA0B,CAAA;AACjE,IAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAM,OAAO,4BAA6B,CAAA;AACtE,IAAA,MAAM,QAAA,GAAW,IAAI,aAAA,EAAc;AACnC,IAAA,MAAM,QAAA,CAAS,UAAA,CAAW,eAAA,EAAiB,CAAA;AAE3C,IAAA,MAAM,QAAA,GAAW,IAAI,aAAA,CAAc,QAAQ,CAAA;AAC3C,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,iBAAA,CAAkB,OAAO,CAAA;AAEvD,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AAAA,QACpB,GAAG,IAAA;AAAA,QACH,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,IAAA,EAAM,UAAmB,OAAA,EAAS,MAAA,CAAO,YAAA,IAAgB,CAAA,kBAAA,EAAqB,SAAS,CAAA;AAAA,yCAAA,CAAA,EAAgD,SAAA,kBAAW,IAAI,IAAA,EAAK;AAAE,OAC5K,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,SAAS,qBAAA,EAAsB;AAC/C,IAAA,MAAM,cAAc,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,GAC5D;AAAA,UAAA,EAAe,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GACzC,EAAA;AACJ,IAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AAAA,MACpB,GAAG,IAAA;AAAA,MACH,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,IAAA,EAAM,UAAmB,OAAA,EAAS,CAAA,QAAA,EAAW,SAAS,CAAA,YAAA,EAAe,WAAW;AAAA,EAAK,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,GAAI,EAAE,CAAA,CAAA,EAAI,SAAA,kBAAW,IAAI,IAAA,EAAK;AAAE,KAClK,CAAA;AAAA,EACH,SAAS,KAAA,EAAgB;AACvB,IAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,IAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AAAA,MACpB,GAAG,IAAA;AAAA,MACH,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,IAAA,EAAM,QAAA,EAAmB,OAAA,EAAS,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAA,EAAI,SAAA,kBAAW,IAAI,MAAK;AAAE,KAC9F,CAAA;AAAA,EACH;AACF;;;ACjFA,eAAsB,uBAAA,CAAwB,MAAyB,GAAA,EAAqC;AAC1G,EAAA,MAAM,UAAA,GAAa,KAAK,CAAC,CAAA;AAEzB,EAAA,IAAI,eAAe,QAAA,EAAU;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,oBAAA,EAAsB,2BAAA,EAA4B,GAAI,MAAM,OAAO,2BAA2B,CAAA;AACtG,MAAA,MAAM,OAAA,GAAU,MAAM,oBAAA,EAAqB;AAC3C,MAAA,MAAM,QAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW,2BAAA,CAA4B,MAAM,CAAC,CAAA;AACzE,MAAA,gBAAA,CAAiB,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,IACxC,SAAS,KAAA,EAAgB;AACvB,MAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,MAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAE,CAAA;AAAA,IAC3D;AACA,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,eAAe,QAAA,EAAU;AAC3B,IAAA,MAAM,QAAA,GAAW,KAAK,CAAC,CAAA;AACvB,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,gBAAA,CAAiB,KAAK,yEAAyE,CAAA;AAC/F,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,uBAAA,CAAwB,QAAkD,CAAA;AACjG,MAAA,MAAM,SAAS,MAAA,EAAO;AACtB,MAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,cAAA,EAAiB,QAAQ,CAAA,CAAE,CAAA;AAAA,IACnD,SAAS,KAAA,EAAgB;AACvB,MAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,MAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAA;AAAA,IAC/C;AACA,IAAA;AAAA,EACF;AAGA,EAAA,GAAA,CAAI,gBAAA,CAAiB,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AACxC;AAQA,eAAsB,wBAAwB,QAAA,EAA8C;AAC1F,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,4BAAsC,CAAA;AAC/D,MAAA,OAAO,IAAI,IAAI,WAAA,EAAY;AAAA,IAC7B;AAAA,IACA,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,2BAAqC,CAAA;AAC9D,MAAA,OAAO,IAAI,IAAI,UAAA,EAAW;AAAA,IAC5B;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,4BAAsC,CAAA;AAC/D,MAAA,OAAO,IAAI,IAAI,WAAA,EAAY;AAAA,IAC7B;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,GAAA,GAAM,MAAM,OAAO,0BAAoC,CAAA;AAC7D,MAAA,OAAO,IAAI,IAAI,SAAA,EAAU;AAAA,IAC3B;AAAA,IACA;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAQ,CAAA,CAAE,CAAA;AAAA;AAErD;;;AChEA,eAAsB,wBAAA,CAAyB,MAAyB,GAAA,EAAqC;AAC3G,EAAA,MAAM,UAAA,GAAa,KAAK,CAAC,CAAA;AAEzB,EAAA,IAAI,eAAe,KAAA,EAAO;AACxB,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,4BAA+B,CAAA;AACpE,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,MAAA,MAAM,GAAA,GAAM,MAAM,UAAA,EAAW;AAC7B,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,gBAAA,CAAiB,KAAK,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MACpD,CAAA,MAAO;AACL,QAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,GAAA,EAAK,GAAG,CAAA;AAC3C,QAAA,IAAI,UAAU,KAAA,CAAA,EAAW;AACvB,UAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAA;AAAA,QAC/C,CAAA,MAAO;AACL,UAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,IAAA,CAAK,UAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,QACpE;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAgB;AACvB,MAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,MAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,uBAAA,EAA0B,GAAG,CAAA,CAAE,CAAA;AAAA,IACvD;AACA,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,eAAe,KAAA,EAAO;AACxB,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AACpC,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,KAAA,EAAO;AAClB,MAAA,gBAAA,CAAiB,KAAK,kCAAkC,CAAA;AACxD,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,4BAA+B,CAAA;AACpE,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,MAAA,MAAM,GAAA,GAAM,MAAM,UAAA,EAAW;AAC7B,MAAA,IAAI,WAAA;AACJ,MAAA,IAAI;AAAE,QAAA,WAAA,GAAc,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAE,QAAA,WAAA,GAAc,KAAA;AAAA,MAAO;AACtE,MAAA,oBAAA,CAAqB,GAAA,EAA2C,KAAK,WAAW,CAAA;AAChF,MAAA,KAAA,CAAM,WAAW,GAAG,CAAA;AACpB,MAAA,gBAAA,CAAiB,GAAA,EAAK,OAAO,GAAG,CAAA,GAAA,EAAM,KAAK,SAAA,CAAU,WAAW,CAAC,CAAA,CAAE,CAAA;AAAA,IACrE,SAAS,KAAA,EAAgB;AACvB,MAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,MAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,sBAAA,EAAyB,GAAG,CAAA,CAAE,CAAA;AAAA,IACtD;AACA,IAAA;AAAA,EACF;AAEA,EAAA,gBAAA,CAAiB,KAAK,sDAAsD,CAAA;AAC9E;AAEA,SAAS,oBAAA,CAAqB,KAAc,IAAA,EAAuB;AACjE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,IAAI,OAAA,GAAmB,GAAA;AACvB,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAI,YAAY,IAAA,IAAQ,OAAA,KAAY,UAAa,OAAO,OAAA,KAAY,UAAU,OAAO,MAAA;AACrF,IAAA,OAAA,GAAW,QAAoC,GAAG,CAAA;AAAA,EACpD;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,oBAAA,CAAqB,GAAA,EAA8B,IAAA,EAAc,KAAA,EAAsB;AAC9F,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,IAAI,OAAA,GAAmC,GAAA;AACvC,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,IAAI,OAAO,OAAA,CAAQ,GAAG,CAAA,KAAM,QAAA,IAAY,OAAA,CAAQ,GAAG,CAAA,KAAM,IAAA,EAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,EAAC;AAC/E,IAAA,OAAA,GAAU,QAAQ,GAAG,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACpC,EAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA,GAAI,KAAA;AAClC;;;ACvEA,eAAsB,qBAAqB,GAAA,EAAqC;AAC9E,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,4BAA+B,CAAA;AACpE,IAAA,MAAM,EAAE,iBAAA,EAAkB,GAAI,MAAM,OAAO,kCAAqC,CAAA;AAChF,IAAA,MAAM,EAAA,GAAK,IAAI,WAAA,EAAY;AAC3B,IAAA,EAAA,CAAG,IAAA,EAAK;AACR,IAAA,MAAM,KAAA,GAAQ,IAAI,iBAAA,CAAkB,EAAE,CAAA;AACtC,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,iBAAA,CAAkB,GAAA,CAAI,WAAW,CAAA;AAC7D,IAAA,EAAA,CAAG,KAAA,EAAM;AAET,IAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,MAAA,gBAAA,CAAiB,KAAK,2CAA2C,CAAA;AACjE,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,cAAc,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AACrD,MAAA,MAAM,OAAO,IAAI,IAAA,CAAK,CAAA,CAAE,SAAS,EAAE,kBAAA,EAAmB;AACtD,MAAA,MAAM,KAAA,GAAQ,EAAE,YAAA,IAAgB,SAAA;AAChC,MAAA,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,GAAI,CAAC,EAAE,QAAA,CAAS,CAAC,CAAC,CAAA,EAAA,EAAK,IAAI,KAAK,KAAA,CAAM,MAAA,CAAO,EAAE,CAAC,CAAA,EAAA,EAAK,EAAE,EAAA,CAAG,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,MAAA,CAAA;AAAA,IAC1F,CAAC,CAAA;AACD,IAAA,gBAAA;AAAA,MACE,GAAA;AAAA,MACA,CAAA,+BAAA,EAAkC,cAAc,MAAM,CAAA;AAAA,EAAa,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;;AAAA,6CAAA;AAAA,KACrF;AAAA,EACF,SAAS,KAAA,EAAgB;AACvB,IAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,IAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,wBAAA,EAA2B,GAAG,CAAA,CAAE,CAAA;AAAA,EACxD;AACF;AAEA,eAAsB,mBAAA,CACpB,KACA,GAAA,EACe;AACf,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,gBAAA,CAAiB,KAAK,+FAA+F,CAAA;AACrH,IAAA;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,4BAA+B,CAAA;AACpE,IAAA,MAAM,EAAE,iBAAA,EAAkB,GAAI,MAAM,OAAO,kCAAqC,CAAA;AAChF,IAAA,MAAM,EAAA,GAAK,IAAI,WAAA,EAAY;AAC3B,IAAA,EAAA,CAAG,IAAA,EAAK;AACR,IAAA,MAAM,KAAA,GAAQ,IAAI,iBAAA,CAAkB,EAAE,CAAA;AAEtC,IAAA,IAAI,cAAA;AAEJ,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAC5B,IAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,IAAK,MAAM,CAAA,EAAG;AAC1B,MAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,iBAAA,CAAkB,GAAA,CAAI,WAAW,CAAA;AAC7D,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,GAAM,CAAC,CAAA;AACpC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,EAAA,CAAG,KAAA,EAAM;AACT,QAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,cAAA,EAAiB,GAAG,CAAA,0CAAA,CAA4C,CAAA;AACtF,QAAA;AAAA,MACF;AACA,MAAA,cAAA,GAAiB,MAAA,CAAO,EAAA;AAAA,IAC1B,CAAA,MAAO;AACL,MAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,iBAAA,CAAkB,GAAA,CAAI,WAAW,CAAA;AAC7D,MAAA,MAAM,KAAA,GAAQ,cAAc,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,CAAG,UAAA,CAAW,GAAG,CAAC,CAAA;AAC5D,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,EAAA,CAAG,KAAA,EAAM;AACT,QAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,0BAAA,EAA6B,GAAG,CAAA,iCAAA,CAAmC,CAAA;AACzF,QAAA;AAAA,MACF;AACA,MAAA,cAAA,GAAiB,KAAA,CAAM,EAAA;AAAA,IACzB;AAEA,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,WAAA,CAAY,cAAc,CAAA;AACvD,IAAA,EAAA,CAAG,KAAA,EAAM;AAET,IAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;AAC/B,MAAA,gBAAA,CAAiB,KAAK,8CAA8C,CAAA;AACpE,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAA2B,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC1D,IAAI,IAAA,EAAK;AAAA,MACT,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,SAAS,CAAA,CAAE,OAAA;AAAA,MACX,KAAA,EAAO,EAAE,KAAA,IAAS,KAAA,CAAA;AAAA,MAClB,QAAA,EAAU,EAAE,QAAA,IAAY,KAAA,CAAA;AAAA,MACxB,SAAA,EAAW,IAAI,IAAA,CAAK,CAAA,CAAE,SAAS;AAAA,KACjC,CAAE,CAAA;AAEF,IAAA,GAAA,CAAI,YAAY,QAAQ,CAAA;AACxB,IAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,sBAAA,EAAyB,QAAA,CAAS,MAAM,CAAA,kBAAA,CAAoB,CAAA;AAAA,EACpF,SAAS,KAAA,EAAgB;AACvB,IAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,IAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAE,CAAA;AAAA,EAClD;AACF;;;ACpFA,eAAsB,qBAAA,CACpB,KAAA,EACA,WAAA,EACA,UAAA,EACA,GAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,EAAK,CAAE,MAAM,KAAK,CAAA;AACtC,EAAA,MAAM,OAAA,GAAU,MAAM,CAAC,CAAA;AACvB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAC1B,EAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAElB,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,YAAY,cAAA,CAAe,GAAA,CAAI,CAAC,GAAA,KAAQ,KAAK,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAC,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACxG,MAAA,gBAAA,CAAiB,KAAK,SAAS,CAAA;AAC/B,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,QAAA,EAAU;AACb,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAM,UAAA,GAAa,sBAAsB,GAAG,CAAA;AAC5C,QAAA,IAAI,CAAC,UAAA,EAAY;AACf,UAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAA;AAC7C,UAAA;AAAA,QACF;AACA,QAAA,MAAM,IAAA,GAAO,iBAAiB,UAAU,CAAA;AACxC,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAA;AAC7C,UAAA;AAAA,QACF;AACA,QAAA,WAAA,CAAY,UAAU,CAAA;AACtB,QAAA,MAAM,WAAA,GAAc,0BAA0B,UAAU,CAAA;AACxD,QAAA,IAAI,WAAA,EAAa;AACf,UAAA,MAAM,OAAA,GAAU,YAAY,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,KAAU,GAAA,CAAI,aAAa,CAAA;AAC7E,UAAA,IAAI,CAAC,OAAA,EAAS,GAAA,CAAI,gBAAA,CAAiB,YAAY,YAAY,CAAA;AAAA,QAC7D;AACA,QAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,mBAAA,EAAsB,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA,MACzD,CAAA,MAAO;AACL,QAAA,GAAA,CAAI,gBAAA,CAAiB,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,MACxC;AACA,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,OAAA,EAAS;AACZ,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAM,aAAa,CAAC,UAAA,EAAY,UAAU,QAAA,EAAU,SAAA,EAAW,UAAU,eAAe,CAAA;AACxF,QAAA,IAAI,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA,EAAG;AAC5B,UAAA,UAAA,CAAW,GAAgB,CAAA;AAC3B,UAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAE,CAAA;AAAA,QAClD,CAAA,MAAO;AACL,UAAA,gBAAA,CAAiB,GAAA,EAAK,iBAAiB,GAAG;AAAA,aAAA,EAAkB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,QACrF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,gBAAA,CAAiB,KAAK,CAAA,cAAA,EAAiB,GAAA,CAAI,UAAA,CAAW,IAAA,IAAQ,SAAS,CAAA,CAAE,CAAA;AAAA,MAC3E;AACA,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,OAAA;AACH,MAAA,gBAAA,CAAiB,KAAK,CAAA,cAAA,EAAiB,GAAA,CAAI,SAAS,CAAA,WAAA,EAAc,GAAA,CAAI,WAAW,CAAA,CAAE,CAAA;AACnF,MAAA;AAAA,IAEF,KAAK,QAAA;AACH,MAAA,GAAA,CAAI,WAAA,CAAY,EAAE,CAAA;AAClB,MAAA;AAAA,IAEF,KAAK,UAAA;AACH,MAAA,GAAA,CAAI,WAAA,CAAY,CAAC,IAAA,KAAS;AACxB,QAAA,IAAI,IAAA,CAAK,MAAA,IAAU,CAAA,EAAG,OAAO,IAAA;AAC7B,QAAA,MAAM,aAAa,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAA;AACzD,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,QAAQ,CAAA,CAAE,KAAA,CAAM,EAAE,CAAA;AAC/D,QAAA,OAAO,CAAC,GAAG,UAAA,EAAY,GAAG,MAAM,CAAA;AAAA,MAClC,CAAC,CAAA;AACD,MAAA,gBAAA,CAAiB,KAAK,CAAA,wEAAA,CAAqE,CAAA;AAC3F,MAAA;AAAA,IAEF,KAAK,OAAA;AACH,MAAA,MAAM,iBAAA,CAAkB,MAAM,GAAG,CAAA;AACjC,MAAA;AAAA,IAEF,KAAK,MAAA;AACH,MAAA,MAAM,gBAAA,CAAiB,MAAM,GAAG,CAAA;AAChC,MAAA;AAAA,IAEF,KAAK,QAAA;AACH,MAAA,MAAM,kBAAA,CAAmB,MAAM,GAAG,CAAA;AAClC,MAAA;AAAA,IAEF,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,MAAA,GAAS,GAAA;AACf,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,gBAAA;AAAA,UACE,GAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,kHAAA,EAAqH,MAAM,CAAA,CAAE,CAAA;AAAA,MACrJ;AACA,MAAA;AAAA,IACF;AAAA,IAEA,KAAK,QAAA;AACH,MAAA,MAAM,uBAAA,CAAwB,MAAM,GAAG,CAAA;AACvC,MAAA;AAAA,IAEF,KAAK,SAAA;AACH,MAAA,MAAM,wBAAA,CAAyB,MAAM,GAAG,CAAA;AACxC,MAAA;AAAA,IAEF,KAAK,SAAA;AACH,MAAA,gBAAA;AAAA,QACE,GAAA;AAAA,QACA;AAAA,OAGF;AACA,MAAA;AAAA,IAEF,KAAK,UAAA;AACH,MAAA,MAAM,qBAAqB,GAAG,CAAA;AAC9B,MAAA;AAAA,IAEF,KAAK,SAAA;AACH,MAAA,MAAM,mBAAA,CAAoB,KAAK,GAAG,CAAA;AAClC,MAAA;AAAA,IAEF,KAAK,OAAA;AAAA,IACL,KAAK,OAAA,EAAS;AAEZ,MAAA,MAAM,EAAE,oBAAA,EAAAa,qBAAAA,EAAsB,iBAAA,EAAAC,kBAAAA,EAAmB,sBAAAC,qBAAAA,EAAqB,GAAI,MAAM,OAAO,0BAAkB,CAAA;AACzG,MAAA,MAAM,cAAcA,qBAAAA,EAAqB;AACzC,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,IAAI;AAAE,UAAA,MAAM,WAAA,EAAY;AAAA,QAAG,CAAA,CAAA,MAAQ;AAAA,QAAoB;AAAA,MACzD;AACA,MAAA,MAAM,MAAMF,qBAAAA,EAAqB;AACjC,MAAA,MAAM,OAAOC,kBAAAA,EAAkB;AAC/B,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAI;AAAE,UAAA,MAAM,GAAA,CAAI,WAAW,IAAI,CAAA;AAAA,QAAG,CAAA,CAAA,MAAQ;AAAA,QAAoB;AAAA,MAChE;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AACd,MAAA;AAAA,IACF;AAAA,IAEA;AACE,MAAA,gBAAA,CAAiB,GAAA,EAAK,CAAA,iBAAA,EAAoB,OAAO,CAAA,oCAAA,CAAsC,CAAA;AAAA;AAE7F;;;AC3JA,IAAI,SAAA;AAEJ,eAAsB,eAAA,CACpB,WAAA,EACA,OAAA,EACA,YAAA,EACA,OACA,QAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,4BAA4B,CAAA;AACjE,IAAA,MAAM,EAAE,iBAAA,EAAkB,GAAI,MAAM,OAAO,kCAAkC,CAAA;AAE7E,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,EAAA,GAAK,IAAI,WAAA,EAAY;AAC3B,MAAA,EAAA,CAAG,IAAA,EAAK;AACR,MAAA,MAAME,MAAAA,GAAQ,IAAI,iBAAA,CAAkB,EAAE,CAAA;AACtC,MAAA,MAAM,IAAA,GAAOA,MAAAA,CAAM,kBAAA,CAAmB,WAAA,EAAa,KAAK,CAAA;AACxD,MAAA,SAAA,GAAY,EAAE,KAAA,EAAAA,MAAAA,EAAO,MAAA,EAAQ,KAAK,EAAA,EAAG;AAAA,IACvC;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,SAAA;AAE1B,IAAA,KAAA,CAAM,UAAA,CAAW;AAAA,MACf,cAAA,EAAgB,MAAA;AAAA,MAChB,IAAA,EAAM,MAAA;AAAA,MACN,SAAS,OAAA,CAAQ;AAAA,KAClB,CAAA;AAED,IAAA,KAAA,CAAM,UAAA,CAAW;AAAA,MACf,cAAA,EAAgB,MAAA;AAAA,MAChB,IAAA,EAAM,WAAA;AAAA,MACN,KAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAS,YAAA,CAAa;AAAA,KACvB,CAAA;AAAA,EACH,SAAS,KAAA,EAAgB;AAEvB,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,OAAO,sBAAoB,CAAA;AACpD,IAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAA,EAAO,GAAA,IAAO,iCAAiC,CAAA;AAAA,EAC/D;AACF;;;AClCO,IAAM,yBAAA,GACX,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AA4BF,IAAM,WAAA,uBAAuC,GAAA,CAAI;AAAA,EAC/C,UAAA;AAAA,EAAY,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,SAAA;AAAA,EAAW,QAAA;AAAA,EAAU;AACvD,CAAC,CAAA;AAOM,SAAS,kBAAA,CACd,QAAA,EACA,eAAA,EACA,aAAA,EACiB;AACjB,EAAA,IAAI,OAAA,GAAU,SAAS,IAAA,EAAK;AAE5B,EAAA,MAAM,UAAA,GAAa,oCAAA,CAAqC,IAAA,CAAK,OAAO,CAAA;AACpE,EAAA,IAAI,UAAA,GAAa,CAAC,CAAA,KAAM,MAAA,EAAW;AACjC,IAAA,OAAA,GAAU,UAAA,CAAW,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,EAC/B;AAEA,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,WAAA,CAAY,GAAG,CAAA;AACxC,EAAA,IAAI,UAAA,KAAe,EAAA,IAAM,QAAA,KAAa,EAAA,IAAM,YAAY,UAAA,EAAY;AAClE,IAAA,MAAM,IAAI,MAAM,kEAAkE,CAAA;AAAA,EACpF;AACA,EAAA,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,UAAA,EAAY,QAAA,GAAW,CAAC,CAAA;AAEhD,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,EAC3D;AAEA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,IAAK,MAAA,CAAO,WAAW,CAAA,EAAG;AACjD,IAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,EAC7D;AAEA,EAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,eAAe,CAAA;AAC5C,EAAA,MAAM,QAAyB,EAAC;AAEhC,EAAA,KAAA,MAAW,QAAQ,MAAA,EAAQ;AACzB,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC/C,IAAA,MAAM,MAAA,GAAS,IAAA;AAEf,IAAA,MAAM,OAAO,OAAO,MAAA,CAAO,MAAM,CAAA,KAAM,YAAY,MAAA,CAAO,MAAM,CAAA,CAAE,MAAA,GAAS,IACvE,MAAA,CAAO,MAAM,IACb,CAAA,KAAA,EAAQ,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AAC5B,IAAA,MAAM,SAAA,GAAY,OAAO,MAAA,CAAO,WAAW,CAAA,KAAM,QAAA,IAAY,MAAA,CAAO,WAAW,CAAA,CAAE,MAAA,GAAS,CAAA,GACtF,MAAA,CAAO,WAAW,CAAA,GAClB,WAAA;AACJ,IAAA,MAAM,QAAA,GAAW,OAAO,MAAA,CAAO,OAAO,MAAM,QAAA,GAAW,MAAA,CAAO,OAAO,CAAA,GAAI,EAAA;AACzE,IAAA,MAAM,OAAA,GAAU,OAAO,MAAA,CAAO,MAAM,MAAM,QAAA,GAAW,MAAA,CAAO,MAAM,CAAA,GAAI,QAAA;AACtE,IAAA,MAAM,UAAA,GAAa,OAAO,MAAA,CAAO,YAAY,MAAM,QAAA,GAAW,MAAA,CAAO,YAAY,CAAA,GAAI,EAAA;AAErF,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,QAAQ,IAAI,QAAA,GAAW,aAAA;AACtD,IAAA,MAAM,IAAA,GAAO,WAAA,CAAY,GAAA,CAAI,OAAO,IAAK,OAAA,GAAwB,QAAA;AAEjE,IAAA,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,WAAW,KAAA,EAAO,IAAA,EAAM,YAAY,CAAA;AAAA,EACzD;AAEA,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,EAC1E;AAEA,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACzB;AAKO,SAAS,yBAAA,CACd,aACA,eAAA,EACQ;AACR,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,GAAA,CAAI,CAAC,EAAA,KAAO;AAC5C,IAAA,MAAM,IAAA,GAAO,iBAAiB,EAAE,CAAA;AAChC,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,CAAA,EAAA,EAAK,EAAE,CAAA,CAAA;AACzB,IAAA,OAAO,KAAK,EAAE,CAAA,EAAA,EAAK,KAAK,QAAQ,CAAA,EAAA,EAAK,KAAK,IAAI,CAAA,CAAA,CAAA;AAAA,EAChD,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,OACE,CAAA;AAAA,EAAsB,SAAS;;AAAA;AAAA,EACb,WAAW;;AAAA,sDAAA,CAAA;AAGjC;AAEO,SAAS,6BAAA,CACd,aACA,kBAAA,EAC4B;AAC5B,EAAA,MAAM,mBAAA,GAAsB;AAAA,IAC1B,GAAI,WAAA,CAAY,qBAAA,GAAwB,CAAC,WAAA,CAAY,qBAAqB,IAAI,EAAC;AAAA,IAC/E,GAAG,WAAA,CAAY;AAAA,GACjB;AACA,EAAA,MAAM,WAAA,GAAc,oBAAoB,MAAA,CAAO,CAAC,aAAa,kBAAA,CAAmB,QAAA,CAAS,QAAQ,CAAC,CAAA;AAClG,EAAA,MAAM,SAAA,GAAY,mBAAmB,MAAA,CAAO,CAAC,aAAa,CAAC,WAAA,CAAY,QAAA,CAAS,QAAQ,CAAC,CAAA;AACzF,EAAA,OAAO,CAAC,GAAG,WAAA,EAAa,GAAG,SAAS,CAAA;AACtC;AAEO,SAAS,+BAA+B,SAAA,EAA0D;AACvG,EAAA,MAAM,mBAAmB,IAAI,GAAA;AAAA,IAC3B,UAAU,GAAA,CAAI,CAAC,aAAa,mBAAA,CAAoB,QAAQ,EAAE,QAAQ;AAAA,GACpE;AAEA,EAAA,OAAO,OAAO,IAAA,CAAK,gBAAgB,CAAA,CAAE,MAAA,CAAO,CAAC,OAAA,KAAY;AACvD,IAAA,MAAM,IAAA,GAAO,iBAAiB,OAAO,CAAA;AACrC,IAAA,OAAO,IAAA,KAAS,MAAA,IAAa,gBAAA,CAAiB,GAAA,CAAI,KAAK,QAAQ,CAAA;AAAA,EACjE,CAAC,CAAA;AACH;AAEO,SAAS,aAAA,CACd,MAAA,EACA,oBAAA,EACA,eAAA,EACoB;AACpB,EAAA,KAAA,MAAW,YAAY,oBAAA,EAAsB;AAC3C,IAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,QAAQ,CAAA,CAAE,QAAA;AACnD,IAAA,MAAM,kBAAA,GAAqB;AAAA,MACzB,MAAA,CAAO,MAAM,QAAA,EAAU,OAAA;AAAA,MACvB,GAAI,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,YAAY;AAAC,KAC1C,CAAE,MAAA,CAAO,CAAC,OAAA,KAA+B,YAAY,MAAS,CAAA;AAE9D,IAAA,MAAM,sBAAA,GAAyB,kBAAA,CAAmB,IAAA,CAAK,CAAC,OAAA,KAAY;AAClE,MAAA,MAAM,IAAA,GAAO,iBAAiB,OAAO,CAAA;AACrC,MAAA,OAAO,IAAA,EAAM,QAAA,KAAa,YAAA,IAAgB,eAAA,CAAgB,SAAS,OAAO,CAAA;AAAA,IAC5E,CAAC,CAAA;AACD,IAAA,IAAI,sBAAA,EAAwB;AAC1B,MAAA,OAAO,sBAAA;AAAA,IACT;AAEA,IAAA,MAAM,mBAAA,GAAsB,eAAA,CAAgB,IAAA,CAAK,CAAC,OAAA,KAAY;AAC5D,MAAA,MAAM,IAAA,GAAO,iBAAiB,OAAO,CAAA;AACrC,MAAA,OAAO,MAAM,QAAA,KAAa,YAAA;AAAA,IAC5B,CAAC,CAAA;AACD,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,OAAO,mBAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,gBAAgB,CAAC,CAAA;AAC1B;AAEO,SAAS,sBAAA,CACd,OACA,WAAA,EAC0B;AAC1B,EAAA,MAAM,WAAW,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,cAAc,MAAM,CAAA,IAC1D,KAAA,CAAM,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,UAAU,CAAA,IAC7C,MAAM,CAAC,CAAA;AAEZ,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAgC;AAAA,IACpC,GAAG,QAAA;AAAA,IACH,MAAM,QAAA,CAAS,IAAA;AAAA,IACf,SAAA,EAAW,MAAA;AAAA,IACX,KAAA,EAAO,WAAA;AAAA,IACP,IAAA,EAAM,UAAA;AAAA,IACN,UAAA,EACE,CAAA,EAAG,QAAA,CAAS,UAAU;;AAAA,mFAAA;AAAA,GAE1B;AAEA,EAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,IAAA,KAAS,SAAS,IAAI,CAAA;AACtE,EAAA,OAAO,CAAC,cAAA,EAAgB,GAAG,WAAW,CAAA;AACxC;AAMO,SAAS,yBACd,QAAA,EACA,KAAA,EACA,YACA,YAAA,EACA,WAAA,EACA,eACA,eAAA,EACQ;AACR,EAAA,IAAI,OAAA,CAAQ,aAAa,OAAA,EAAS;AAChC,IAAA,OAAO,0BAAA;AAAA,MACL,QAAA;AAAA,MAAU,KAAA;AAAA,MAAO,UAAA;AAAA,MAAY,YAAA;AAAA,MAAc,WAAA;AAAA,MAAa;AAAA,KAC1D;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,+BAA+B,QAAwB,CAAA;AAE3E,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,WAAW,CAAA,CAAE,aAAa,KAAK,CAAA;AACxE,IAAA,MAAMC,OAAAA,GAAS;AAAA,MACb,aAAA;AAAA,MACA,CAAA,IAAA,EAAO,aAAA,CAAc,WAAW,CAAC,CAAA,WAAA,CAAA;AAAA,MACjC,CAAA,EAAG,YAAY,CAAA,SAAA,EAAY,aAAA,CAAc,UAAU,CAAC,CAAA,GAAA;AAAA,KACtD,CAAE,KAAK,IAAI,CAAA;AACX,IAAA,eAAA,CAAgB,YAAA,EAAcA,OAAAA,EAAQ,EAAE,IAAA,EAAM,KAAO,CAAA;AACrD,IAAA,OAAO,CAAA,MAAA,EAAS,aAAA,CAAc,YAAY,CAAC,CAAA,CAAA,CAAA;AAAA,EAC7C;AAEA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,aAAA;AAAA,IACA,CAAA,IAAA,EAAO,aAAA,CAAc,WAAW,CAAC,CAAA,WAAA,CAAA;AAAA,IACjC,CAAA,+BAAA,EAAkC,aAAA,CAAc,UAAU,CAAC,CAAA,CAAA,CAAA;AAAA,IAC3D,CAAA,CAAA,EAAI,aAAA,CAAc,OAAA,CAAQ,QAAQ,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,IAAK,YAAY,CAAC,aAAa,KAAK,CAAA;AAAA,GAC3G,CAAE,KAAK,IAAI,CAAA;AACX,EAAA,eAAA,CAAgB,YAAA,EAAc,MAAA,EAAQ,EAAE,IAAA,EAAM,KAAO,CAAA;AACrD,EAAA,OAAO,CAAA,MAAA,EAAS,aAAA,CAAc,YAAY,CAAC,CAAA,CAAA,CAAA;AAC7C;AAMA,SAAS,2BACP,QAAA,EACA,KAAA,EACA,UAAA,EACA,YAAA,EACA,aACA,eAAA,EACQ;AACR,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,OAAA,CAAQ,UAAA,EAAY,MAAM,CAAA;AACvD,EAAA,MAAM,WAAA,GAAc,+BAA+B,QAAwB,CAAA;AAE3E,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,WAAW,CAAA,CAAE,aAAa,KAAK,CAAA;AACxE,IAAA,MAAMA,OAAAA,GAAS;AAAA,MACb,CAAA,oBAAA,EAAuB,WAAA,CAAY,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MACtD,CAAA,6BAAA,EAAgC,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA,MAAA,CAAA;AAAA,MAC9D,KAAK,YAAY,CAAA,QAAA;AAAA,KACnB,CAAE,KAAK,MAAM,CAAA;AACb,IAAA,eAAA,CAAgB,SAASA,OAAM,CAAA;AAC/B,IAAA,OAAO,6CAA6C,OAAO,CAAA,CAAA,CAAA;AAAA,EAC7D;AAEA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,CAAA,oBAAA,EAAuB,WAAA,CAAY,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IACtD,CAAA,+BAAA,EAAkC,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IAChE,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,IAAA,EAAM,IAAI,CAAC,CAAA,GAAA,EAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,KAAK,YAAA,EAAc,OAAA,CAAQ,MAAM,IAAI,CAAC,aAAa,KAAK,CAAA;AAAA,GACzH,CAAE,KAAK,MAAM,CAAA;AACb,EAAA,eAAA,CAAgB,SAAS,MAAM,CAAA;AAC/B,EAAA,OAAO,6CAA6C,OAAO,CAAA,CAAA,CAAA;AAC7D;;;AC5OA,SAAS,MAAA,CAAO,aAAkC,OAAA,EAAuB;AACvE,EAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AAAA,IACpB,GAAG,IAAA;AAAA,IACH,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,IAAA,EAAM,UAAmB,OAAA,EAAS,SAAA,kBAAW,IAAI,IAAA,EAAK;AAAE,GACvE,CAAA;AACH;AAEA,eAAsB,8BACpB,KAAA,EACA,WAAA,EACA,OACA,WAAA,EACA,cAAA,EACA,QACA,WAAA,EAC6B;AAC7B,EAAA,MAAM,QAAA,GAAW,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAEnC,EAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AAAA,IACpB,GAAG,IAAA;AAAA,IACH,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,IAAA,EAAM,MAAA,EAAiB,OAAA,EAAS,KAAA,EAAO,SAAA,kBAAW,IAAI,IAAA,EAAK,EAAE;AAAA,IAC3E,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,IAAA,EAAM,QAAA,EAAmB,OAAA,EAAS,oDAAA,EAAsD,SAAA,kBAAW,IAAI,IAAA,EAAK;AAAE,GAC7H,CAAA;AAED,EAAA,IAAI;AAEF,IAAA,MAAM,QAAA,GAAW,MAAM,WAAA,EAAY;AACnC,IAAA,MAAM,EAAE,wBAAA,EAAyB,GAAI,MAAM,OAAO,gCAA2C,CAAA;AAC7F,IAAA,MAAM,gBAAgB,wBAAA,EAAyB;AAC/C,IAAA,MAAM,0BAAA,GAA6B,6BAAA,CAA8B,WAAA,EAAa,aAAa,CAAA;AAC3F,IAAA,MAAM,eAAA,GAAkB,+BAA+B,aAAa,CAAA;AAEpE,IAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,MAAA,MAAA,CAAO,aAAa,yFAAyF,CAAA;AAC7G,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,eAAA,GAAkB,aAAA,CAAc,MAAA,EAAQ,0BAAA,EAA4B,eAAe,CAAA;AACzF,IAAA,IAAI,oBAAoB,KAAA,CAAA,EAAW;AACjC,MAAA;AAAA,IACF;AAIA,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,QAAA,CAAS,cAAc,CAAA,GAChD,iBACA,QAAA,CAAS,QAAA,CAAS,eAAe,CAAA,GAAI,eAAA,GAAkB,KAAA,CAAA;AAC3D,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAA,CAAO,aAAa,wIAAwI,CAAA;AAC5J,MAAA;AAAA,IACF;AACA,IAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,WAAA,CAAY,WAAW,CAAA;AACvD,IAAA,MAAM,kBAAA,GAAqB,2BAA2B,CAAC,CAAA,GACnD,oBAAoB,0BAAA,CAA2B,CAAC,CAAC,CAAA,CAAE,KAAA,GACnD,uBAAA;AACJ,IAAA,MAAM,UAAA,GACJ,CAAA,EAAG,yBAAA,CAA0B,KAAA,EAAO,eAAe,CAAC;;AAAA;AAAA,EAEjD,0BAAA,CAA2B,GAAA,CAAI,CAAC,QAAA,KAAa,CAAA,EAAA,EAAK,mBAAA,CAAoB,QAAQ,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;;AAAA,mCAAA,EAChE,kBAAkB,CAAA,eAAA,CAAA;AAE1D,IAAA,MAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAA,MAAA,CAAO,WAAA,EAAa,CAAA,oBAAA,EAAuB,WAAW,CAAA,GAAA,CAAK,CAAA;AAE3D,IAAA,MAAM,YAAA,GAAe,eAAe,MAAA,CAAO;AAAA,MACzC,KAAA,EAAO,WAAA;AAAA,MACP,QAAA,EAAU,CAAC,EAAE,EAAA,EAAI,MAAK,EAAG,IAAA,EAAM,MAAA,EAAiB,OAAA,EAAS,UAAA,EAAY,SAAA,kBAAW,IAAI,IAAA,IAAQ,CAAA;AAAA,MAC5F,MAAA,EAAQ,yBAAA;AAAA,MACR,SAAA,EAAW;AAAA,KACZ,CAAA;AAED,IAAA,IAAI,cAAA,GAAiB,EAAA;AACrB,IAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CAAQ,IAAA,CAAK;AAAA,MAAA,CACrC,YAAY;AACX,QAAA,WAAA,MAAiB,SAAS,YAAA,EAAc;AACtC,UAAA,IAAI,MAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,OAAA,oBAA2B,KAAA,CAAM,OAAA;AACpE,UAAA,IAAI,KAAA,CAAM,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,KAAA,CAAM,KAAK,CAAA,CAAE,CAAA;AAAA,QAClG;AACA,QAAA,OAAO,cAAA;AAAA,MACT,CAAA,GAAG;AAAA,MACH,IAAI,OAAA,CAAe,CAAC,QAAA,EAAU,MAAA,KAAW;AACvC,QAAA,UAAA,CAAW,MAAM;AAAE,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,iBAAA,GAAoB,GAAI,8CAA8C,CAAC,CAAA;AAAA,QAAG,GAAG,iBAAiB,CAAA;AAAA,MACnK,CAAC;AAAA,KACF,CAAA;AACD,IAAA,cAAA,GAAiB,YAAA;AAIjB,IAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,QAAA,CAAS,cAAc,IAC3D,cAAA,GACA,eAAA;AACJ,IAAA,MAAM,UAAA,GAAa,sBAAA;AAAA,MACjB,kBAAA,CAAmB,cAAA,EAAgB,eAAA,EAAiB,WAAW,CAAA;AAAA,MAC/D;AAAA,KACF;AAEA,IAAA,MAAM,WAAA,GAAc,QAAQ,GAAA,EAAI;AAChC,IAAA,MAAM,SAAA,GAAY,QAAQ,QAAA,KAAa,OAAA;AACvC,IAAA,MAAM,iBAAA,GAAoB,SAAA,IACrB,OAAO,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA,KAAM,QAAA,IACrC,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA,CAAE,MAAA,GAAS,CAAA;AAIxC,IAAA,IAAI,SAAA,IAAa,CAAC,iBAAA,EAAmB;AACnC,MAAA,MAAM,eAAA;AAAA,QACJ,UAAA;AAAA,QAAY,KAAA;AAAA,QAAO,QAAA;AAAA,QAAU,MAAA;AAAA,QAAQ,KAAA;AAAA,QAAO,WAAA;AAAA,QAAa;AAAA,OAC3D;AACA,MAAA,OAAO,KAAA,CAAA;AAAA,IACT;AAGA,IAAA,MAAM,EAAA,GAAK,MAAM,OAAO,IAAS,CAAA;AACjC,IAAA,MAAM,IAAA,GAAO,MAAM,OAAO,MAAW,CAAA;AACrC,IAAA,MAAM,EAAA,GAAK,MAAM,OAAO,IAAS,CAAA;AACjC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAI,MAAM,OAAO,OAAO,CAAA;AAEjD,IAAA,MAAM,WAAW,IAAA,CAAK,IAAA,CAAK,QAAQ,GAAA,EAAI,EAAG,eAAe,YAAY,CAAA;AACrE,IAAA,EAAA,CAAG,SAAA,CAAU,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAC1C,IAAA,MAAM,OAAA,GAAU,GAAG,WAAA,CAAY,IAAA,CAAK,KAAK,EAAA,CAAG,MAAA,EAAO,EAAG,kBAAkB,CAAC,CAAA;AACzE,IAAA,MAAM,cAAc,CAAC,CAAA,KAAsB,CAAA,CAAE,OAAA,CAAQ,OAAO,OAAO,CAAA;AAEnE,IAAA,MAAM,CAAC,QAAA,EAAU,GAAG,WAAW,CAAA,GAAI,UAAA;AACnC,IAAA,IAAI,CAAC,QAAA,EAAU;AAGf,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,QAAA;AAAA,MAAU,IAAA,EAAM,KAAA;AAAA,MAAO,QAAA;AAAA,MAAU,WAAW,QAAA,CAAS,IAAA;AAAA,MACrD,MAAA,EAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QAC7B,MAAM,CAAA,CAAE,IAAA;AAAA,QAAM,WAAW,CAAA,CAAE,SAAA;AAAA,QAAW,OAAO,CAAA,CAAE,KAAA;AAAA,QAAO,MAAM,CAAA,CAAE,IAAA;AAAA,QAC9D,YAAY,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,GAAA,CAAK;AAAA,OAChD,CAAE,CAAA;AAAA,MACF,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,KACpC;AACA,IAAA,EAAA,CAAG,aAAA,CAAc,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,oBAAoB,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,YAAA,EAAc,IAAA,EAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAE1G,IAAA,MAAM,UAAA,GAAa,WAChB,GAAA,CAAI,CAAC,MAAM,CAAA,IAAA,EAAO,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,SAAS,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,eAAA,EAAa,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA,CACzE,KAAK,IAAI,CAAA;AAGZ,IAAA,MAAM,iBAA2D,EAAC;AAClE,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,MAAA,MAAM,aAAa,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,GAAA,CAAK,CAAA;AACxD,MAAA,MAAM,aAAa,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,IAAA,CAAM,CAAA;AACxD,MAAA,MAAM,MAAA,GAAS;AAAA,QACb,CAAA,aAAA,EAAgB,KAAK,IAAI,CAAA,CAAA;AAAA,QACzB,CAAA,MAAA,EAAS,KAAK,SAAS,CAAA,UAAA,EAAa,KAAK,KAAK,CAAA,SAAA,EAAY,KAAK,IAAI,CAAA,CAAA;AAAA,QACnE,EAAA;AAAA,QAAI,cAAA;AAAA,QAAgB,IAAA,CAAK,UAAA;AAAA,QAAY,EAAA;AAAA,QACrC,iBAAA;AAAA,QACA,CAAA,kBAAA,EAAqB,WAAW,MAAM,CAAA,oCAAA,CAAA;AAAA,QACtC,CAAA,qFAAA,CAAA;AAAA,QACA,EAAA;AAAA,QAAI,mBAAA;AAAA,QAAqB,UAAA;AAAA,QAAY,EAAA;AAAA,QACrC,qBAAA;AAAA,QACA,yBAAyB,QAAQ,CAAA,CAAA;AAAA,QACjC,qBAAqB,UAAU,CAAA,CAAA;AAAA,QAC/B,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,oBAAoB,CAAC,CAAA,CAAA;AAAA,QAC3D,EAAA;AAAA,QAAI,0BAAA;AAAA,QACJ,+EAA+E,UAAU,CAAA,CAAA;AAAA,QACzF,iDAAiD,QAAQ,CAAA,gDAAA,CAAA;AAAA,QACzD,CAAA,8FAAA,CAAA;AAAA,QACA,CAAA,gFAAA,CAAA;AAAA,QACA,CAAA,kGAAA,CAAA;AAAA,QACA,EAAA;AAAA,QAAI,2BAAA;AAAA,QACJ,CAAA,iBAAA,EAAoB,SAAS,IAAI,CAAA,oCAAA,EAAuC,KAAK,IAAA,CAAK,QAAA,EAAU,gBAAgB,CAAC,CAAA,CAAA;AAAA,QAC7G,CAAA,yFAAA,CAAA;AAAA,QACA,EAAA;AAAA,QAAI,4BAAA;AAAA,QAA8B;AAAA,OACpC,CAAE,KAAK,IAAI,CAAA;AACX,MAAA,EAAA,CAAG,aAAA,CAAc,UAAA,EAAY,MAAA,EAAQ,OAAO,CAAA;AAE5C,MAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,IAAA,CAAK,KAAK,CAAA;AAC7C,MAAA,MAAM,QAAA,GAAW,WAAW,QAAA,IAAY,WAAA;AACxC,MAAA,MAAM,eAAe,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,UAAA,CAAY,CAAA;AAChE,MAAA,MAAM,GAAA,GAAM,wBAAA;AAAA,QACV,QAAA;AAAA,QAAU,IAAA,CAAK,KAAA;AAAA,QAAO,UAAA;AAAA,QAAY,YAAA;AAAA,QAClC,WAAA;AAAA,QAAa,WAAA;AAAA,QAAa,EAAA,CAAG;AAAA,OAC/B;AACA,MAAA,cAAA,CAAe,KAAK,EAAE,IAAA,EAAM,KAAK,IAAA,EAAM,OAAA,EAAS,KAAK,CAAA;AAAA,IACvD;AAGA,IAAA,MAAM,iBAAiB,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,GAAA,CAAK,CAAA;AAChE,IAAA,MAAM,oBAAA,GAAuB;AAAA,MAC3B,CAAA,2BAAA,EAA8B,QAAA,CAAS,IAAI,CAAA,EAAA,EAAK,SAAS,KAAK,CAAA,EAAA,CAAA;AAAA,MAC9D,EAAA;AAAA,MAAI,QAAA,CAAS,UAAA;AAAA,MAAY,EAAA;AAAA,MACzB,CAAA,sBAAA,CAAA;AAAA,MACA,CAAA,0EAAA,CAAA;AAAA,MACA,CAAA,uDAAA,EAA0D,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,gBAAgB,CAAC,CAAA,CAAA;AAAA,MAC/F,2EAA2E,QAAQ,CAAA,oBAAA,CAAA;AAAA,MACnF,CAAA,qEAAA,EAAwE,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,YAAY,CAAC,CAAA,CAAA;AAAA,MACzG,CAAA,8DAAA,CAAA;AAAA,MACA,EAAA;AAAA,MAAI,CAAA,yCAAA,CAAA;AAAA,MACJ,GAAG,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAA,EAAK,EAAE,IAAI,CAAA,EAAA,EAAK,EAAE,KAAK,CAAA,cAAA,EAAiB,KAAK,IAAA,CAAK,QAAA,EAAU,EAAE,IAAA,GAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,MACvG,EAAA;AAAA,MAAI,sBAAsB,cAAc,CAAA,CAAA;AAAA,MACxC,EAAA;AAAA,MAAI,CAAA,0BAAA,CAAA;AAAA,MAA8B,KAAA;AAAA,MAAO,EAAA;AAAA,MACzC,CAAA,kEAAA,EAAqE,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,gBAAgB,CAAC,CAAA,CAAA;AAAA,KAC5G,CAAE,KAAK,IAAI,CAAA;AAEX,IAAA,MAAM,iBAAiB,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,IAAA,CAAM,CAAA;AAChE,IAAA,MAAM,mBAAmB,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,UAAA,CAAY,CAAA;AACxE,IAAA,EAAA,CAAG,aAAA,CAAc,cAAA,EAAgB,oBAAA,EAAsB,OAAO,CAAA;AAC9D,IAAA,MAAM,WAAA,GAAc,wBAAA;AAAA,MAClB,gBAAA,CAAiB,QAAA,CAAS,KAAK,CAAA,EAAG,QAAA,IAAY,WAAA;AAAA,MAC9C,QAAA,CAAS,KAAA;AAAA,MAAO,cAAA;AAAA,MAAgB,gBAAA;AAAA,MAChC,WAAA;AAAA,MAAa,WAAA;AAAA,MAAa,EAAA,CAAG;AAAA,KAC/B;AACA,IAAA,MAAM,eAAA,GAAkB,CAAC,EAAE,IAAA,EAAM,QAAA,CAAS,MAAM,OAAA,EAAS,WAAA,EAAY,EAAG,GAAG,cAAc,CAAA;AAEzF,IAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KACxB,UAAA,CAAW,GAAA;AAAA,MAAI,CAAC,SACd,IAAA,CAAK,IAAA,KAAS,OACV,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,YAAO,IAAA,CAAK,IAAI,CAAA,wBAAA,CAAA,GAC7C,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,KAAK,IAAA,CAAK,KAAK,CAAA,SAAA,EAAO,IAAA,CAAK,IAAI,CAAA;AAAA,KACnD;AAGF,IAAA,MAAM,WAAW,OAAA,CAAQ,QAAA,KAAa,YAAY,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,KAAM,WAAA;AAElF,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,MAAM,YAAA;AAAA,QACX,UAAA;AAAA,QAAY,QAAA;AAAA,QAAU,cAAA;AAAA,QAAgB,QAAA;AAAA,QAAU,OAAA;AAAA,QAAS,QAAA;AAAA,QACzD,WAAA;AAAA,QAAa,EAAA;AAAA,QAAI,IAAA;AAAA,QAAM,SAAA;AAAA,QAAW,WAAA;AAAA,QAAa,gBAAA;AAAA,QAAkB;AAAA,OACnE;AAAA,IACF;AAGA,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,OAAO,MAAM,qBAAA;AAAA,QACX,UAAA;AAAA,QAAY,QAAA;AAAA,QAAU,cAAA;AAAA,QAAgB,QAAA;AAAA,QAAU,OAAA;AAAA,QAAS,QAAA;AAAA,QACzD,EAAA;AAAA,QAAI,SAAA;AAAA,QAAW,WAAA;AAAA,QAAa,gBAAA;AAAA,QAAkB,oBAAA;AAAA,QAAsB;AAAA,OACtE;AAAA,IACF;AAGA,IAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,4BAA0B,CAAA;AAC/D,IAAA,MAAM,IAAA,GAAO,IAAI,WAAA,EAAY;AAC7B,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,WAAA,EAAY;AAE7C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,MAAM,UAAA,GAAa,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,KAAM,QAAA,IAAY,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,CAAE,MAAA,GAAS,CAAA;AAC3F,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,OAAO,MAAM,mBAAA;AAAA,UACX,UAAA;AAAA,UAAY,QAAA;AAAA,UAAU,cAAA;AAAA,UAAgB,QAAA;AAAA,UAAU,OAAA;AAAA,UAAS,QAAA;AAAA,UACzD,EAAA;AAAA,UAAI,SAAA;AAAA,UAAW,WAAA;AAAA,UAAa,gBAAA;AAAA,UAAkB;AAAA,SAChD;AAAA,MACF;AACA,MAAA,OAAO,MAAM,oBAAA;AAAA,QACX,UAAA;AAAA,QAAY,QAAA;AAAA,QAAU,OAAA;AAAA,QAAS,QAAA;AAAA,QAAU,eAAA;AAAA,QACzC,IAAA;AAAA,QAAM,EAAA;AAAA,QAAI,WAAA;AAAA,QAAa,gBAAA;AAAA,QAAkB,QAAA;AAAA,QAAU;AAAA,OACrD;AAAA,IACF;AAGA,IAAA,MAAM,eAAA;AAAA,MACJ,UAAA;AAAA,MAAY,KAAA;AAAA,MAAO,QAAA;AAAA,MAAU,MAAA;AAAA,MAAQ,KAAA;AAAA,MAAO,WAAA;AAAA,MAAa;AAAA,KAC3D;AACA,IAAA,OAAO,KAAA,CAAA;AAAA,EACT,SAAS,KAAA,EAAgB;AACvB,IAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,IAAA,MAAA,CAAO,WAAA,EAAa,CAAA,uBAAA,EAA0B,GAAG,CAAA,CAAE,CAAA;AACnD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAIA,eAAe,YAAA,CACb,UAAA,EACA,QAAA,EACA,cAAA,EACA,QAAA,EACA,OAAA,EACA,QAAA,EACA,WAAA,EACA,EAAA,EACA,IAAA,EACA,SAAA,EACA,WAAA,EACA,kBACA,oBAAA,EAC6B;AAC7B,EAAA,MAAA,CAAO,WAAA,EAAa,CAAA,SAAA,EAAY,UAAA,CAAW,MAAM,CAAA,2CAAA,CAA6C,CAAA;AAE9F,EAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAAsB,CAAA,CAAE,OAAA,CAAQ,QAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA;AACtF,EAAA,MAAM,cAAwB,EAAC;AAC/B,EAAA,WAAA,CAAY,KAAK,2BAA2B,CAAA;AAC5C,EAAA,WAAA,CAAY,KAAK,uBAAuB,CAAA;AACxC,EAAA,WAAA,CAAY,KAAK,yDAAyD,CAAA;AAE1E,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,KAAK,CAAA,IAAK,cAAA,CAAe,SAAQ,EAAG;AACjD,IAAA,MAAM,UAAU,CAAA,KAAM,CAAA,GAAI,eAAA,GAAkB,CAAA,KAAA,EAAQ,IAAI,CAAC,CAAA,CAAA;AACzD,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA,CAAA;AACxB,IAAA,MAAM,QAAA,GAAW,CAAA,KAAM,CAAA,GAAI,YAAA,GAAe,cAAA;AAC1C,IAAA,WAAA,CAAY,IAAA,CAAK,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE,CAAA;AACtC,IAAA,WAAA,CAAY,IAAA,CAAK,CAAA,UAAA,EAAa,MAAM,CAAA,WAAA,EAAc,QAAQ,CAAA,sBAAA,CAAwB,CAAA;AAClF,IAAA,WAAA,CAAY,KAAK,cAAc,CAAA;AAC/B,IAAA,WAAA,CAAY,IAAA,CAAK,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,CAAA;AACrC,IAAA,WAAA,CAAY,KAAK,CAAA,mBAAA,EAAsB,QAAA,CAAS,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAC9D,IAAA,WAAA,CAAY,KAAK,CAAA,kBAAA,EAAqB,QAAA,CAAS,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA,CAAG,CAAA;AAChE,IAAA,WAAA,CAAY,KAAK,cAAc,CAAA;AAAA,EACjC;AAEA,EAAA,WAAA,CAAY,KAAK,0BAA0B,CAAA;AAC3C,EAAA,WAAA,CAAY,KAAK,YAAY,CAAA;AAC7B,EAAA,WAAA,CAAY,KAAK,UAAU,CAAA;AAE3B,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,0BAA0B,CAAA;AAChE,EAAA,EAAA,CAAG,cAAc,UAAA,EAAY,WAAA,CAAY,IAAA,CAAK,IAAI,GAAG,OAAO,CAAA;AAE5D,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,CAAU,WAAA,EAAa,CAAC,UAAU,CAAC,CAAA;AAAA,EAC3C,SAAS,SAAA,EAAoB;AAC3B,IAAA,MAAM,SAAS,SAAA,YAAqB,KAAA,GAAQ,SAAA,CAAU,OAAA,GAAU,OAAO,SAAS,CAAA;AAChF,IAAA,MAAA,CAAO,aAAa,CAAA,+BAAA,EAAkC,MAAA,CAAO,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAC5E,IAAA;AAAA,EACF;AAEA,EAAA,iBAAA,CAAkB,QAAQ,CAAA;AAC1B,EAAA,oBAAA,CAAqB,MAAS,CAAA;AAC9B,EAAA,oBAAA,CAAqB,YAAY;AAC/B,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,eAAoB,CAAA;AAC1D,MAAA,YAAA,CAAa,OAAA,EAAS,CAAC,IAAA,EAAM,OAAO,GAAG,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,IAC5D,CAAA,CAAA,MAAQ;AAAA,IAA8B;AACtC,IAAA,IAAI;AACF,MAAA,EAAA,CAAG,OAAO,OAAA,EAAS,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AACnD,MAAA,EAAA,CAAG,OAAO,QAAA,EAAU,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,IACtD,CAAA,CAAA,MAAQ;AAAA,IAAqB;AAAA,EAC/B,CAAC,CAAA;AAED,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAA;AACjD,EAAA,MAAA;AAAA,IAAO,WAAA;AAAA,IACL,CAAA,MAAA,EAAS,QAAQ,CAAA,SAAA,EAAO,UAAA,CAAW,MAAM,CAAA;AAAA,EACtC,eAAe,MAAM,CAAA;AAAA,EACrB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC;AAAA,mCAAA;AAAA,GAC1B;AACA,EAAA,OAAO,oBAAA;AACT;AAIA,eAAe,qBAAA,CACb,UAAA,EACA,QAAA,EACA,cAAA,EACA,QAAA,EACA,OAAA,EACA,QAAA,EACA,EAAA,EACA,SAAA,EACA,WAAA,EACA,gBAAA,EACA,oBAAA,EACA,WAAA,EAC6B;AAC7B,EAAA,MAAA,CAAO,WAAA,EAAa,CAAA,SAAA,EAAY,UAAA,CAAW,MAAM,CAAA,qDAAA,CAAuD,CAAA;AAMxG,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,KAAK,CAAA,IAAK,cAAA,CAAe,SAAQ,EAAG;AACjD,IAAA,MAAM,QAAA,GAAW,CAAA,KAAM,CAAA,GAAI,IAAA,GAAO,IAAA;AAClC,IAAA,MAAM,IAAA,GAAO,CAAC,IAAA,EAAM,GAAA,EAAK,MAAM,QAAQ,CAAA;AACvC,IAAA,IAAI,CAAA,KAAM,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,MAAM,KAAK,CAAA;AAClC,IAAA,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,WAAA,EAAa,SAAA,EAAW,MAAM,IAAI,CAAA;AAGlD,IAAA,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,IAAA,EAAM,KAAA,CAAM,OAAO,CAAA;AAEpC,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,MAAM,IAAI,CAAA;AAAA,IAC5B,SAAS,GAAA,EAAc;AACrB,MAAA,MAAM,SAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC9D,MAAA,MAAA,CAAO,WAAA,EAAa,CAAA,6BAAA,EAAgC,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,OAAO,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IAC3F;AAAA,EACF;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,IAAA,EAAM,CAAC,MAAM,GAAA,EAAK,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,EAClD,CAAA,CAAA,MAAQ;AAAA,EAAiD;AAEzD,EAAA,iBAAA,CAAkB,QAAQ,CAAA;AAC1B,EAAA,oBAAA,CAAqB,MAAS,CAAA;AAE9B,EAAA,oBAAA,CAAqB,YAAY;AAE/B,IAAA,IAAI;AACF,MAAA,EAAA,CAAG,OAAO,OAAA,EAAS,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AACnD,MAAA,EAAA,CAAG,OAAO,QAAA,EAAU,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,IACtD,CAAA,CAAA,MAAQ;AAAA,IAAqB;AAAA,EAC/B,CAAC,CAAA;AAED,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAA;AACjD,EAAA,MAAA;AAAA,IAAO,WAAA;AAAA,IACL,CAAA,MAAA,EAAS,QAAQ,CAAA,SAAA,EAAO,UAAA,CAAW,MAAM,CAAA;AAAA,EACtC,eAAe,MAAM,CAAA;AAAA,EACrB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,mCAAA;AAAA,GAG1B;AACA,EAAA,OAAO,oBAAA;AACT;AAIA,eAAe,mBAAA,CACb,UAAA,EACA,QAAA,EACA,cAAA,EACA,QAAA,EACA,OAAA,EACA,QAAA,EACA,EAAA,EACA,SAAA,EACA,WAAA,EACA,gBAAA,EACA,oBAAA,EAC6B;AAC7B,EAAA,MAAA,CAAO,WAAA,EAAa,CAAA,SAAA,EAAY,UAAA,CAAW,MAAM,CAAA,yCAAA,CAA2C,CAAA;AAE5F,EAAA,MAAM,aAAA,GAAgB,MAAM,SAAA,CAAU,MAAA,EAAQ,CAAC,iBAAA,EAAmB,IAAA,EAAM,YAAY,CAAC,CAAA;AACrF,EAAA,MAAM,YAAA,GAAe,aAAA,CAAc,MAAA,CAAO,IAAA,EAAK;AAC/C,EAAA,MAAM,eAAyB,EAAC;AAEhC,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,KAAK,CAAA,IAAK,cAAA,CAAe,SAAQ,EAAG;AACjD,IAAA,MAAM,WAAA,GAAc,MAAM,SAAA,CAAU,MAAA,EAAQ;AAAA,MAC1C,cAAA;AAAA,MAAgB,CAAA,KAAM,IAAI,IAAA,GAAO,IAAA;AAAA,MAAM,IAAA;AAAA,MAAM,IAAA;AAAA,MAAM;AAAA,KACpD,CAAA;AACD,IAAA,MAAM,SAAA,GAAY,WAAA,CAAY,MAAA,CAAO,IAAA,EAAK;AAC1C,IAAA,YAAA,CAAa,KAAK,SAAS,CAAA;AAC3B,IAAA,MAAM,SAAA,CAAU,QAAQ,CAAC,WAAA,EAAa,MAAM,SAAA,EAAW,KAAA,CAAM,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,IAAA,IAAI;AAAE,MAAA,MAAM,SAAA,CAAU,MAAA,EAAQ,CAAC,eAAA,EAAiB,eAAe,CAAC,CAAA;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAAkB;AAAA,EAC/F;AACA,EAAA,IAAI;AAAE,IAAA,MAAM,UAAU,MAAA,EAAQ,CAAC,aAAA,EAAe,IAAA,EAAM,YAAY,CAAC,CAAA;AAAA,EAAG,CAAA,CAAA,MAAQ;AAAA,EAAkB;AAE9F,EAAA,iBAAA,CAAkB,QAAQ,CAAA;AAC1B,EAAA,oBAAA,CAAqB,MAAS,CAAA;AAC9B,EAAA,oBAAA,CAAqB,YAAY;AAC/B,IAAA,MAAM,EAAE,KAAA,EAAO,EAAA,EAAG,GAAI,MAAM,OAAO,OAAO,CAAA;AAC1C,IAAA,KAAA,MAAW,OAAO,YAAA,EAAc;AAC9B,MAAA,IAAI;AAAE,QAAA,MAAM,GAAG,MAAA,EAAQ,CAAC,WAAA,EAAa,IAAA,EAAM,GAAG,CAAC,CAAA;AAAA,MAAG,CAAA,CAAA,MAAQ;AAAA,MAAyB;AAAA,IACrF;AACA,IAAA,IAAI;AACF,MAAA,EAAA,CAAG,OAAO,OAAA,EAAS,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AACnD,MAAA,EAAA,CAAG,OAAO,QAAA,EAAU,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,IACtD,CAAA,CAAA,MAAQ;AAAA,IAAqB;AAAA,EAC/B,CAAC,CAAA;AAED,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAA;AACjD,EAAA,MAAA;AAAA,IAAO,WAAA;AAAA,IACL,CAAA,MAAA,EAAS,QAAQ,CAAA,SAAA,EAAO,UAAA,CAAW,MAAM,CAAA;AAAA,EACtC,eAAe,MAAM,CAAA;AAAA,EACrB,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC;AAAA,mCAAA;AAAA,GAC1B;AACA,EAAA,OAAO,oBAAA;AACT;AAIA,eAAe,oBAAA,CACb,UAAA,EACA,QAAA,EACA,OAAA,EACA,QAAA,EACA,eAAA,EACA,IAAA,EACA,EAAA,EACA,WAAA,EACA,gBAAA,EACA,QAAA,EACA,oBAAA,EAC6B;AAC7B,EAAA,MAAA,CAAO,WAAA,EAAa,CAAA,SAAA,EAAY,UAAA,CAAW,MAAM,CAAA,6CAAA,CAA+C,CAAA;AAEhG,EAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA;AACrD,EAAA,MAAM,WAAA,GAA6B,UAAA,CAAW,GAAA,CAAI,CAAC,MAAM,CAAA,MAAO;AAAA,IAC9D,MAAA,EAAQ,QAAQ,CAAC,CAAA,CAAA;AAAA,IAAI,WAAW,IAAA,CAAK,IAAA;AAAA,IAAM,OAAO,IAAA,CAAK,KAAA;AAAA,IAAO,MAAM,IAAA,CAAK,IAAA;AAAA,IACzE,OAAO,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,KAAK,CAAA,CAAA;AAAA,GACpC,CAAE,CAAA;AACF,EAAA,MAAM,YAAA,GAA8B;AAAA,IAClC,MAAA,EAAQ,WAAA;AAAA,IAA2B,KAAA,EAAO,WAAA;AAAA,IAAa,UAAU,WAAA,CAAY;AAAA,GAC/E;AACA,EAAA,MAAM,IAAA,CAAK,YAAY,YAAY,CAAA;AAEnC,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,KAAK,CAAA,IAAK,eAAA,CAAgB,SAAQ,EAAG;AAClD,IAAA,MAAM,KAAK,WAAA,CAAY,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA;AAAA,EACnD;AAEA,EAAA,iBAAA,CAAkB,QAAQ,CAAA;AAC1B,EAAA,oBAAA,CAAqB,MAAS,CAAA;AAC9B,EAAA,oBAAA,CAAqB,YAAY;AAC/B,IAAA,MAAM,KAAK,OAAA,EAAQ;AACnB,IAAA,IAAI;AACF,MAAA,EAAA,CAAG,OAAO,OAAA,EAAS,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AACnD,MAAA,EAAA,CAAG,OAAO,QAAA,EAAU,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,IACtD,CAAA,CAAA,MAAQ;AAAA,IAAqB;AAAA,EAC/B,CAAC,CAAA;AAED,EAAA,MAAA;AAAA,IAAO,WAAA;AAAA,IACL,CAAA,2BAAA,EAA8B,WAAW,CAAA,OAAA,EAAU,UAAA,CAAW,MAAM,CAAA;;AAAA;AAAA;AAAA;AAAA,2CAAA;AAAA,GAEtE;AAGA,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,eAAoB,CAAA;AAC1D,EAAA,IAAI,QAAQ,KAAA,CAAM,KAAA,IAAS,OAAO,OAAA,CAAQ,KAAA,CAAM,eAAe,UAAA,EAAY;AACzE,IAAA,OAAA,CAAQ,KAAA,CAAM,WAAW,KAAK,CAAA;AAAA,EAChC;AACA,EAAA,OAAA,CAAQ,MAAM,KAAA,EAAM;AAEpB,EAAA,IAAI;AACF,IAAA,YAAA,CAAa,MAAA,EAAQ,CAAC,gBAAA,EAAkB,IAAA,EAAM,WAAW,CAAA,EAAG,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,EAClF,CAAA,CAAA,MAAQ;AAAA,EAAiD;AAEzD,EAAA,IAAI,QAAQ,KAAA,CAAM,KAAA,IAAS,OAAO,OAAA,CAAQ,KAAA,CAAM,eAAe,UAAA,EAAY;AACzE,IAAA,OAAA,CAAQ,KAAA,CAAM,WAAW,IAAI,CAAA;AAAA,EAC/B;AACA,EAAA,OAAA,CAAQ,MAAM,MAAA,EAAO;AAErB,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,QAAA,CAAS,IAAI,CAAA;AACjD,EAAA,MAAA;AAAA,IAAO,WAAA;AAAA,IACL,CAAA;;AAAA;AAAA,EAAgE,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,2BAAA,EAKvD,WAAW;AAAA,iDAAA;AAAA,GAC3C;AACA,EAAA,OAAO,oBAAA;AACT;AAIA,eAAe,gBACb,UAAA,EACA,KAAA,EACA,UACA,MAAA,EACA,KAAA,EACA,aACA,WAAA,EACoB;AACpB,EAAA,MAAA;AAAA,IAAO,WAAA;AAAA,IACL,CAAA,SAAA,EAAY,WAAW,MAAM,CAAA;;AAAA;AAAA;AAAA,SAAA,EAEjB,WAAW,MAAM,CAAA;AAAA,iCAAA;AAAA,GAC/B;AAEA,EAAA,MAAM,gBAAA,GAAmB,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,KAAS;AAChD,IAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,IAAA,CAAK,KAAK,CAAA;AAC7C,IAAA,MAAM,QAAA,GAAyB,WAAW,QAAA,IAAY,WAAA;AACtD,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,EACpG,CAAC,CAAA;AAED,EAAA,MAAM,EAAE,WAAA,EAAa,EAAA,EAAG,GAAI,MAAM,OAAO,4BAA0B,CAAA;AACnE,EAAA,MAAM,OAAA,GAAU,IAAI,EAAA,EAAG;AACvB,EAAA,oBAAA,CAAqB,OAAO,CAAA;AAC5B,EAAA,iBAAA,CAAkB,QAAQ,CAAA;AAC1B,EAAA,oBAAA,CAAqB,MAAS,CAAA;AAE9B,EAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,IAAA,iBAAK,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,GAAG,MAAA,CAAO,WAAA,CAAY,YAAY,CAAC,CAAC,CAAA;AAC/F,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,CAAW,QAAA,EAAU;AAAA,IAC9C,aAAa,CAAA,gBAAA,EAAmB,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,IACnD,MAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAU;AAAA,MACR,4BAAA,EAA8B,WAAA;AAAA,MAC9B,iCAAA,EAAmC,WAAA;AAAA,MACnC,+BAAA,EAAiC,OAAO,WAAA,CAAY,IAAA;AAAA,MACpD,6BAAA,EAA+B,IAAA,CAAK,SAAA,CAAU,iBAAiB,CAAA;AAAA,MAC/D,gCAAA,EAAkC,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,YAAY,eAAe;AAAA;AACrF,GACD,CAAA;AAED,EAAA,MAAM,WAAA,GAA6B,UAAA,CAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,IACrE,MAAA,EAAQ,MAAA;AAAA,IAAQ,MAAA,EAAQ;AAAA,GAC1B,CAAE,CAAA;AACF,EAAA,KAAA,CAAM,UAAU,WAAW,CAAA;AAC3B,EAAA,KAAA,CAAM,QAAA,EAAS;AAEf,EAAA,KAAA,MAAW,MAAA,IAAU,WAAW,OAAA,EAAS;AACvC,IAAA,KAAA,CAAM,YAAA,CAAa,OAAO,OAAA,EAAS,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA,YAAA,EAAe,OAAO,KAAK,CAAA;AAAA,CAAA,EAAU,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,EAC5G;AAEA,EAAA,OAAA,CAAQ,eAAA,CAAgB,QAAA,EAAU,CAAC,UAAA,EAAY,QAAQ,MAAA,KAAW;AAChE,IAAA,IAAI,WAAW,mBAAA,EAAqB;AAClC,MAAA,MAAM,OAAA,GAAU,OAAO,MAAA,CAAO,SAAS,MAAM,QAAA,GAAW,MAAA,CAAO,SAAS,CAAA,GAAI,EAAA;AAC5E,MAAA,MAAM,OAAA,GAAU,OAAO,MAAA,CAAO,SAAS,MAAM,QAAA,GAAW,MAAA,CAAO,SAAS,CAAA,GAAI,EAAA;AAC5E,MAAA,IAAI,OAAA,IAAW,OAAA,EAAS,KAAA,CAAM,YAAA,CAAa,SAAS,OAAO,CAAA;AAAA,IAC7D;AACA,IAAA,IAAI,WAAW,kBAAA,EAAoB;AACjC,MAAA,MAAM,OAAA,GAAU,OAAO,MAAA,CAAO,SAAS,MAAM,QAAA,GAAW,MAAA,CAAO,SAAS,CAAA,GAAI,EAAA;AAC5E,MAAA,MAAM,SAAA,GAAY,OAAO,MAAA,CAAO,QAAQ,MAAM,QAAA,GAAW,MAAA,CAAO,QAAQ,CAAA,GAAI,EAAA;AAC5E,MAAA,IAAI,WAAW,SAAA,EAAW;AACxB,QAAA,MAAM,SAAA,GAAyC,EAAE,WAAA,EAAa,QAAA,EAAU,WAAW,MAAA,EAAO;AAC1F,QAAA,MAAM,MAAA,GAAS,UAAU,SAAS,CAAA;AAClC,QAAA,IAAI,MAAA,EAAQ,KAAA,CAAM,iBAAA,CAAkB,OAAA,EAAS,MAAM,CAAA;AAAA,MACrD;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,IAAI;AAAE,IAAA,MAAM,OAAA,CAAQ,YAAY,QAAQ,CAAA;AAAA,EAAG,SAAS,QAAA,EAAmB;AACrE,IAAA,MAAM,SAAS,QAAA,YAAoB,KAAA,GAAQ,QAAA,CAAS,OAAA,GAAU,OAAO,QAAQ,CAAA;AAC7E,IAAA,MAAA,CAAO,aAAa,CAAA,sCAAA,EAAyC,MAAA,CAAO,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EACrF;AAEA,EAAA,MAAM,qBAAA,GAAwB,OAAA,CAAQ,cAAA,CAAe,QAAQ,CAAA;AAC7D,EAAA,MAAM,UAAA,GAAa,qBAAA,CAAsB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,OAAA,IAAW,CAAA,CAAE,MAAA,KAAW,UAAU,CAAA,CAAE,MAAA;AACxG,EAAA,IAAI,eAAe,CAAA,EAAG;AACpB,IAAA,MAAA,CAAO,aAAa,uEAAuE,CAAA;AAC3F,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,MAAM,KAAK,UAAA,CAAW,OAAA,CAAQ,SAAQ,EAAG;AACtD,IAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AACzB,IAAA,MAAM,SAAS,IAAA,EAAK;AACpB,IAAA,MAAM,SAAS,IAAA,GACX,CAAA,QAAA,EAAW,KAAK,IAAI,CAAA,EAAA,EAAK,KAAK,SAAS,CAAA;;AAAA,EAAS,KAAK,UAAU;;AAAA;AAAA,EAAsB,KAAK,CAAA,CAAA,GAC1F,CAAA;;AAAA,EAAkC,KAAK,CAAA,CAAA;AAC3C,IAAA,OAAA,CAAQ,UAAA,CAAW,QAAA,EAAU,MAAA,CAAO,IAAA,EAAM,QAAQ,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,EAAA,EAAK,MAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,IAAI,MAAM,CAAA;AAAA,EACnG;AAEA,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,GAAA,CAAI,CAAC,SAAS,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,CAAA,SAAA,EAAO,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAC3F,EAAA,MAAA;AAAA,IAAO,WAAA;AAAA,IACL,CAAA,MAAA,EAAS,QAAQ,CAAA,eAAA,EAAkB,UAAA,CAAW,QAAQ,MAAM,CAAA;AAAA,EACzD,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC;AAAA,8DAAA;AAAA,GAC1B;AACA,EAAA,OAAO,MAAA;AACT;;;ACxqBO,IAAM,qBAAA,GACX,qmCAAA;AAgBK,SAAS,kBAAA,CACd,MAAA,EACA,UAAA,EACA,aAAA,EACmB;AACnB,EAAA,MAAM,UAAA,GAAuB,CAAC,aAAa,CAAA;AAE3C,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,eAAA,IAAmB,UAAA,CAAW,IAAA,EAAM;AAC5D,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAC/C,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,UAAA,CAAW,IAAA,CAAK,UAAA,CAAW,OAAA,EAAS,GAAG,WAAW,QAAQ,CAAA;AAAA,IAC5D;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,WAAW,UAAA,EAAY;AAChC,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA,EAAG;AACtB,MAAA,IAAA,CAAK,IAAI,OAAO,CAAA;AAChB,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,qBAAA,CACd,MACA,KAAA,EACS;AACT,EAAA,OAAO,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,MAAA,IAAU,IAAA,CAAK,KAAA,CAAM,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,KAAU,KAAA,CAAM,KAAK,CAAC,CAAA;AAC5F;AAEO,SAAS,oBAAA,CACd,OACA,iBAAA,EACwB;AACxB,EAAA,MAAM,qBAAA,GAAwB,KAAA,CAAM,qBAAA,KAA0B,MAAA,IAC5D,iBAAA,CAAkB,SAAS,KAAA,CAAM,qBAAqB,CAAA,GACpD,KAAA,CAAM,qBAAA,GACN,MAAA;AACJ,EAAA,MAAM,uBAAA,GAA0B,MAAM,uBAAA,CAAwB,MAAA;AAAA,IAC5D,CAAC,QAAA,KAAa,QAAA,KAAa,qBAAA,IAAyB,iBAAA,CAAkB,SAAS,QAAQ;AAAA,GACzF;AAEA,EAAA,OAAO;AAAA,IACL,kBAAA,EAAoB,KAAA,CAAM,kBAAA,IAAsB,qBAAA,KAA0B,MAAA;AAAA,IAC1E,iBAAA,EAAmB,CAAC,GAAG,iBAAiB,CAAA;AAAA,IACxC,qBAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,iBAAA,CACd,MACA,KAAA,EACS;AACT,EAAA,OACE,KAAK,kBAAA,KAAuB,KAAA,CAAM,sBAClC,IAAA,CAAK,qBAAA,KAA0B,MAAM,qBAAA,IACrC,qBAAA,CAAsB,IAAA,CAAK,iBAAA,EAAmB,MAAM,iBAAiB,CAAA,IACrE,sBAAsB,IAAA,CAAK,uBAAA,EAAyB,MAAM,uBAAuB,CAAA;AAErF;ACdA,SAAS,GAAA,CAAI,EAAE,MAAA,EAAQ,OAAA,EAAQ,EAAkC;AAC/D,EAAA,MAAM,EAAE,UAAA,EAAY,OAAA,EAAS,WAAA,EAAa,YAAW,GAAI,QAAA;AAAA,IACvD,MAAA;AAAA,IACA,OAAA,CAAQ,KAAA;AAAA,IACR,OAAA,CAAQ;AAAA,GACV;AACA,EAAA,MAAM,EAAE,OAAO,WAAA,EAAa,WAAA,EAAa,cAAc,KAAA,EAAO,WAAA,KAAgB,SAAA,EAAU;AACxF,EAAA,MAAM,EAAE,SAAA,EAAW,WAAA,EAAa,QAAO,GAAI,OAAA,CAAQ,OAAO,IAAI,CAAA;AAE9D,EAAA,MAAM,YAAA,GAAeV,OAAO,SAAS,CAAA;AACrC,EAAA,YAAA,CAAa,OAAA,GAAU,SAAA;AACvB,EAAA,MAAM,cAAA,GAAiBA,OAAO,WAAW,CAAA;AACzC,EAAA,cAAA,CAAe,OAAA,GAAU,WAAA;AACzB,EAAA,MAAM,QAAQ,QAAA,EAAS;AAEvB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIJ,QAAAA,CAAyB,EAAE,CAAA;AAC3D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,WAAA,GAAcI,MAAAA,CAAuB,EAAE,CAAA;AAC7C,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AACtB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIJ,QAAAA,EAA6B;AAC/D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAiB,QAAQ,CAAA;AACnE,EAAA,MAAM,CAAC,eAAe,gBAAgB,CAAA,GAAIA,SAAwB,EAAE,IAAA,EAAM,QAAQ,CAAA;AAClF,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,SAEhD,MAAS,CAAA;AACX,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,QAAAA,CAAmB,EAAE,CAAA;AACvE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAoB,aAAa,CAAA;AACnE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,QAAAA,CAAiC,OAAO,KAAK,CAAA;AACnF,EAAA,MAAM,CAAC,uBAAA,EAAyB,0BAA0B,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE5E,EAAA,MAAM,WAAA,GAAcI,OAAqC,MAAS,CAAA;AAClE,EAAA,MAAM,WAAA,GAAcK,YAAY,YAAuC;AACrE,IAAA,IAAI,WAAA,CAAY,OAAA,KAAY,MAAA,EAAW,OAAO,WAAA,CAAY,OAAA;AAC1D,IAAA,MAAM,EAAE,qBAAA,EAAsB,GAAI,MAAM,OAAO,wBAA0B,CAAA;AACzE,IAAA,WAAA,CAAY,OAAA,GAAU,MAAM,qBAAA,EAAsB;AAClD,IAAA,OAAO,WAAA,CAAY,OAAA;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,cAAA,GAAiBL,MAAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,CAAA;AAInD,EAAAH,UAAU,MAAM;AACd,IAAA,KAAK,OAAO,4BAA0B,CAAA,CACnC,KAAK,CAAC,EAAE,iBAAgB,KAAM;AAAE,MAAA,cAAA,CAAe,UAAU,eAAA,EAAgB;AAAA,IAAG,CAAC,CAAA,CAC7E,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EACnB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,UAAU,MAAM;AACd,IAAA,KAAA,CAAM,YAAY;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAM,OAAO,4BAA0B,CAAA;AACnE,QAAA,MAAM,OAAO,eAAA,EAAgB;AAC7B,QAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AACzB,QAAA,MAAM,EAAE,gBAAA,EAAiB,GAAI,MAAM,OAAO,6BAA6B,CAAA;AACvE,QAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAC3C,QAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,oBAAA,CAAqB,OAAO,CAAA;AAAA,MACtD,CAAA,CAAA,MAAQ;AAAA,MAAqB;AAAA,IAC/B,CAAA,GAAG;AAAA,EACL,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,UAAU,MAAM;AACd,IAAA,KAAK,OAAO,eAAoB,CAAA,CAC7B,KAAK,CAAC,EAAE,UAAS,KAAM;AACtB,MAAA,QAAA,CAAS,KAAA,EAAO,CAAC,WAAA,EAAa,cAAA,EAAgB,MAAM,CAAA,EAAG,EAAE,OAAA,EAAS,GAAA,EAAK,EAAG,CAAC,KAAA,EAAO,MAAA,KAAW;AAC3F,QAAA,IAAI,CAAC,KAAA,IAAS,MAAA,EAAQ,YAAA,CAAa,MAAA,CAAO,MAAM,CAAA;AAAA,MAClD,CAAC,CAAA;AAAA,IACH,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EACnB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,QAAQ,WAAA,EAAa;AACzB,IAAA,KAAK,OAAO,gCAA2C,CAAA,CACpD,KAAK,CAAC,EAAE,0BAAyB,KAAM;AACtC,MAAA,MAAM,WAAW,wBAAA,EAAyB;AAC1C,MAAA,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,0BAAA,CAA2B,KAAK,CAAA;AACzD,MAAA,cAAA,CAAe,CAAC,IAAA,KAAS;AACvB,QAAA,MAAM,IAAA,GAAO,oBAAA,CAAqB,IAAA,EAAM,QAAQ,CAAA;AAChD,QAAA,OAAO,iBAAA,CAAkB,IAAA,EAAM,IAAI,CAAA,GAAI,IAAA,GAAO,IAAA;AAAA,MAChD,CAAC,CAAA;AAAA,IACH,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,OAAA,CAAQ,WAAW,CAAC,CAAA;AAExB,EAAAA,UAAU,MAAM;AACd,IAAA,KAAA,CAAM,YAAY;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAM,OAAO,4BAA0B,CAAA;AACnE,QAAA,MAAM,cAAc,eAAA,EAAgB;AACpC,QAAA,cAAA,CAAe,OAAA,GAAU,WAAA;AACzB,QAAA,MAAM,EAAE,OAAA,EAAS,EAAA,EAAG,GAAI,MAAM,OAAO,WAAW,CAAA;AAChD,QAAA,MAAM,UAAA,GAAa,MAAM,OAAO,MAAW,CAAA;AAC3C,QAAA,MAAM,QAAA,GAAW,MAAM,EAAA,CAAG,CAAC,MAAM,CAAA,EAAG;AAAA,UAClC,GAAA,EAAK,WAAA;AAAA,UAAa,SAAA,EAAW,IAAA;AAAA,UAAM,GAAA,EAAK,KAAA;AAAA,UAAO,mBAAA,EAAqB,KAAA;AAAA,UACpE,MAAA,EAAQ,IAAA;AAAA,UAAM,cAAA,EAAgB,IAAA;AAAA,UAC9B,MAAA,EAAQ,CAAC,SAAA,EAAW,iBAAA,EAAmB,WAAW,aAAA,EAAe,gBAAA,EAAkB,YAAA,EAAc,yBAAA,EAA2B,2BAA2B;AAAA,SACxJ,CAAA;AACD,QAAA,MAAM,iBAAA,GAAoB,QAAA,CACvB,IAAA,CAAK,CAAC,IAAA,EAAM,UAAU,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,MAAM,MAAA,GAAS,IAAA,CAAK,aAAA,CAAc,KAAK,CAAC,CAAA,CAC3G,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,CACZ,GAAA,CAAI,CAAC,QAAA,MAAc;AAAA,UAClB,KAAA,EAAO,IAAI,QAAQ,CAAA,CAAA;AAAA,UACnB,WAAA,EAAa,WAAW,OAAA,CAAQ,QAAQ,MAAM,GAAA,GAAM,mBAAA,GAAsB,UAAA,CAAW,OAAA,CAAQ,QAAQ;AAAA,SACvG,CAAE,CAAA;AACJ,QAAA,uBAAA,CAAwB,iBAAiB,CAAA;AAAA,MAC3C,CAAA,CAAA,MAAQ;AAAE,QAAA,uBAAA,CAAwB,EAAE,CAAA;AAAA,MAAG;AAAA,IACzC,CAAA,GAAG;AAAA,EACL,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,UAAU,MAAM;AACd,IAAA,KAAA,CAAM,YAAY;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,aAAA,EAAc,GAAI,MAAM,OAAO,wBAAuB,CAAA;AAC9D,QAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAM,OAAO,4BAA0B,CAAA;AACnE,QAAA,MAAM,QAAA,GAAW,IAAI,aAAA,EAAc;AACnC,QAAA,MAAM,QAAA,CAAS,UAAA,CAAW,eAAA,EAAiB,CAAA;AAC3C,QAAA,MAAM,GAAA,GAAM,SAAS,OAAA,EAAQ;AAC7B,QAAA,IAAI,GAAA,CAAI,SAAS,CAAA,EAAG;AAClB,UAAA,qBAAA,CAAsB,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,KAAA,EAAO,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,WAAA,EAAa,CAAA,CAAE,WAAA,GAAc,CAAC,CAAA;AAAA,QAC7F;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAA+B;AAAA,IACzC,CAAA,GAAG;AAAA,EACL,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAA,UAAU,MAAM;AACd,IAAA,KAAA,CAAM,YAAY;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,cAAA,EAAgB,eAAA,EAAgB,GAAI,MAAM,OAAO,+BAAiC,CAAA;AAC1F,QAAA,MAAM,cAAA,EAAe;AACrB,QAAA,oBAAA,CAAqB,iBAAiB,CAAA;AAAA,MACxC,CAAA,CAAA,MAAQ;AAAA,MAA+B;AAAA,IACzC,CAAA,GAAG;AAAA,EACL,CAAA,EAAG,EAAE,CAAA;AAIL,EAAA,MAAM,YAAA,GAAeQ,WAAAA;AAAA,IACnB,OAAO,KAAA,KAAkB;AACvB,MAAA,IAAI,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,QAAA,MAAM,qBAAA,CAAsB,KAAA,EAAO,WAAA,EAAa,UAAA,EAAY;AAAA,UAC1D,WAAW,YAAA,CAAa,OAAA;AAAA,UAAS,aAAa,cAAA,CAAe,OAAA;AAAA,UAC7D,WAAA;AAAA,UAAa,OAAA;AAAA,UAAS,aAAA;AAAA,UAAe,gBAAA;AAAA,UAAkB,gBAAA;AAAA,UACvD,UAAA;AAAA,UAAY,KAAA,EAAO,EAAE,SAAA,EAAW,KAAA,CAAM,SAAA,EAAW,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,YAAA,EAAc,MAAM,YAAA,EAAa;AAAA,UAC1I,WAAA;AAAA,UAAa,aAAa,cAAA,CAAe;AAAA,SAC1C,CAAA;AACD,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,QAAA,MAAM,qBAAA,CAAsB,OAAO,WAAW,CAAA;AAC9C,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,iBAAiB,iBAAA,EAAkB;AACzC,MAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAE/C,MAAA,IAAI,SAAA,KAAc,iBAAiB,CAAC,OAAA,CAAQ,eAAe,CAAC,KAAA,CAAM,kBAAA,IAAsB,CAAC,cAAA,EAAgB;AACvG,QAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,aAAa,MAAM,6BAAA;AAAA,YACvB,KAAA;AAAA,YAAO,WAAA;AAAA,YAAa,KAAA;AAAA,YAAO,WAAA;AAAA,YAAa,OAAA;AAAA,YAAS,MAAA;AAAA,YAAQ;AAAA,WAC3D;AACA,UAAA,IAAI,YAAY,UAAA,CAAW,MAAM,KAAK,YAAA,CAAa,UAAU,GAAG,IAAI,CAAA;AAAA,QACtE,CAAA,SAAE;AACA,UAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,QACvB;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,kBAAA,IAAsB,iBAAA,IAAqB,cAAA,EAAgB;AACnE,QAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,KAAA,CAAM,gBAAgB,CAAA,IAAK,KAAA,CAAM,OAAO,CAAC,CAAA;AAC1E,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,WAAA,CAAY,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,EAAE,IAAI,IAAA,EAAK,EAAG,IAAA,EAAM,QAAA,EAAU,SAAS,sDAAA,EAAwD,SAAA,sBAAe,IAAA,EAAK,EAAG,CAAC,CAAA;AACvJ,UAAA;AAAA,QACF;AACA,QAAA,MAAM,SAAS,IAAA,EAAK;AACpB,QAAA,iBAAA,CAAkB,UAAA,CAAW,cAAA,EAAgB,WAAA,CAAY,MAAA,CAAO,IAAA,EAAM,MAAA,EAAQ,CAAA,eAAA,EAAkB,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,IAAI,KAAK,CAAA;AAC3H,QAAA,KAAA,CAAM,YAAA,CAAa,WAAA,CAAY,MAAA,CAAO,OAAA,EAAS;AAAA,OAAA,EAAY,KAAK;AAAA,CAAI,CAAA;AACpE,QAAA,KAAA,CAAM,iBAAA,CAAkB,WAAA,CAAY,MAAA,CAAO,OAAA,EAAS,QAAQ,CAAA;AAC5D,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,WAAA,GAA4B,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,SAAA,kBAAW,IAAI,IAAA,EAAK,EAAE;AACpG,MAAA,OAAO,6BAA6B,CAAA,CACjC,IAAA,CAAK,CAAC,EAAE,kBAAA,EAAmB,KAAM,kBAAA,CAAmB,cAAA,CAAe,OAAA,EAAS,KAAK,CAAC,CAAA,CAClF,MAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AAEjB,MAAA,WAAA,CAAY,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,WAAW,CAAC,CAAA;AAC5C,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,WAAA,EAAY;AAEZ,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,WAAA,EAAY;AACnC,QAAA,MAAM,WAAA,GAAc,CAAC,GAAG,WAAA,CAAY,OAAA,EAAS,WAAW,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,QAAQ,CAAA;AAC3F,QAAA,MAAM,eAAA,GAAkB,kBAAA,CAAmB,MAAA,EAAQ,UAAA,EAAY,OAAO,CAAA;AAEtE,QAAA,IAAI,aAAA,GAAgB,OAAA;AACpB,QAAA,IAAI,mBAAiC,UAAA,CAAW,QAAA;AAChD,QAAA,IAAI,WAAA,GAAc,EAAA;AAClB,QAAA,IAAI,SAAA,GAAY,KAAA;AAChB,QAAA,IAAI,SAAA;AAEJ,QAAA,KAAA,MAAW,kBAAkB,eAAA,EAAiB;AAC5C,UAAA,MAAM,mBAAA,GAAsB,SAAS,QAAA,CAAS,cAAc,IAAI,QAAA,CAAS,WAAA,CAAY,cAAc,CAAA,GAAI,KAAA,CAAA;AACvG,UAAA,IAAI,CAAC,mBAAA,EAAqB;AAAE,YAAA,SAAA,GAAY,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,cAAc,CAAA,CAAA,CAAG,CAAA;AAAG,YAAA;AAAA,UAAU;AACpH,UAAA,MAAM,iBAAA,GAAoB,mBAAA;AAE1B,UAAA,IAAI,gBAAA,GAAmB,EAAA;AACvB,UAAA,IAAI,WAAA;AAEJ,UAAA,MAAM,MAAA,GAAS,kBAAkB,MAAA,CAAO;AAAA,YACtC,KAAA,EAAO,cAAA;AAAA,YAAgB,QAAA,EAAU,WAAA;AAAA,YACjC,MAAA,EAAQ,QAAQ,YAAA,IAAgB,qBAAA;AAAA,YAAuB,SAAA,EAAW;AAAA,WACnE,CAAA;AAED,UAAA,gBAAgB,mBAAmB,MAAA,EAAmE;AACpG,YAAA,IAAI;AACF,cAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,gBAAA,IAAI,MAAM,IAAA,KAAS,MAAA,IAAU,KAAA,CAAM,OAAA,sBAA6B,KAAA,CAAM,OAAA;AACtE,gBAAA,IAAI,KAAA,CAAM,IAAA,KAAS,OAAA,IAAW,KAAA,CAAM,KAAA,EAAO;AACzC,kBAAA,MAAA,CAAO,iBAAA,CAAkB,IAAA,EAAsB,cAAA,EAAgB,KAAA,CAAM,KAAA,CAAM,aAAa,KAAA,CAAM,KAAA,CAAM,YAAA,EAAc,UAAA,CAAW,IAAI,CAAA;AAAA,gBACnI;AACA,gBAAA,IAAI,KAAA,CAAM,IAAA,KAAS,OAAA,EAAS,WAAA,GAAc,IAAI,MAAM,KAAA,CAAM,KAAA,IAAS,CAAA,OAAA,EAAU,cAAc,CAAA,eAAA,CAAiB,CAAA;AAC5G,gBAAA,MAAM,KAAA;AAAA,cACR;AAAA,YACF,SAAS,GAAA,EAAc;AAAE,cAAA,WAAA,GAAc,GAAA;AAAK,cAAA,MAAM,GAAA;AAAA,YAAK;AAAA,UACzD;AAEA,UAAA,WAAA,EAAY;AACZ,UAAA,MAAM,WAAA,CAAY,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAC5C,UAAA,IAAI,gBAAgB,KAAA,CAAA,EAAW;AAAE,YAAA,SAAA,GAAY,WAAA;AAAa,YAAA;AAAA,UAAU;AAEpE,UAAA,aAAA,GAAgB,cAAA;AAChB,UAAA,gBAAA,GAAmB,iBAAA,CAAkB,IAAA;AACrC,UAAA,WAAA,GAAc,gBAAA;AACd,UAAA,SAAA,GAAY,IAAA;AACZ,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,MAAM,SAAA,YAAqB,QAAQ,SAAA,GAAY,IAAI,MAAM,OAAO,SAAA,KAAc,QAAA,GAAW,SAAA,GAAY,mCAAmC,CAAA;AAAA,QAC1I;AAEA,QAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,UAAA,MAAM,gBAAA,GAAiC;AAAA,YACrC,IAAI,IAAA,EAAK;AAAA,YAAG,IAAA,EAAM,WAAA;AAAA,YAAa,OAAA,EAAS,WAAA;AAAA,YACxC,KAAA,EAAO,aAAA;AAAA,YAAe,QAAA,EAAU,gBAAA;AAAA,YAAkB,SAAA,sBAAe,IAAA;AAAK,WACxE;AACA,UAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AACpB,YAAA,MAAM,MAAA,GAAyB,CAAC,GAAG,IAAI,CAAA;AACvC,YAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,cAAA,MAAA,CAAO,KAAK,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,MAAM,QAAA,EAAU,OAAA,EAAS,CAAA,eAAA,EAAkB,OAAO,mCAAmC,aAAa,CAAA,EAAA,CAAA,EAAM,2BAAW,IAAI,IAAA,IAAQ,CAAA;AAAA,YAC3J;AACA,YAAA,MAAA,CAAO,KAAK,gBAAgB,CAAA;AAC5B,YAAA,OAAO,MAAA;AAAA,UACT,CAAC,CAAA;AACD,UAAA,KAAK,gBAAgB,cAAA,CAAe,OAAA,EAAS,WAAA,EAAa,gBAAA,EAAkB,eAAe,gBAAgB,CAAA;AAAA,QAC7G;AAAA,MACF,SAAS,KAAA,EAAgB;AACvB,QAAA,MAAM,eAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAC1E,QAAA,WAAA,CAAY,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,IAAA,EAAM,WAAA,EAAa,SAAS,CAAA,OAAA,EAAU,YAAY,IAAI,KAAA,EAAO,OAAA,EAAS,2BAAW,IAAI,IAAA,EAAK,EAAG,CAAC,CAAA;AAAA,MAC9I,CAAA,SAAE;AACA,QAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAA,EAAQ,OAAA,EAAS,UAAA,EAAY,OAAA,CAAQ,cAAc,MAAA,EAAQ,WAAA,EAAa,UAAA,EAAY,WAAA,EAAa,aAAa,WAAA,EAAa,KAAA,EAAO,eAAe,SAAA,EAAW,OAAA,CAAQ,aAAa,WAAW;AAAA,GAC/L;AAEA,EAAAR,UAAU,MAAM;AACd,IAAA,IAAI,OAAA,CAAQ,cAAA,EAAgB,KAAK,YAAA,CAAa,QAAQ,cAAc,CAAA;AAAA,EACtE,CAAA,EAAG,CAAC,YAAA,EAAc,OAAA,CAAQ,cAAc,CAAC,CAAA;AAEzC,EAAA,MAAM,gBAAA,GAAmBQ,WAAAA,CAAY,CAAC,KAAA,KAAwB;AAAE,IAAA,KAAK,aAAa,KAAK,CAAA;AAAA,EAAG,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAC3G,EAAA,MAAM,YAAA,GAAeA,YAAY,MAAM;AAAE,IAAA,YAAA,EAAa;AAAG,IAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,EAAG,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAIlG,EAAA,MAAM,mBAAA,GAAsBA,WAAAA,CAAY,CAAC,eAAA,KAA4B;AACnE,IAAA,MAAM,WAAA,GAAc,0BAA0B,eAAe,CAAA;AAC7D,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,gBAAA,CAAiB,EAAE,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,iBAAiB,CAAA;AAAA,IACjE,CAAA,MAAO;AACL,MAAA,WAAA,CAAY,eAAe,CAAA;AAC3B,MAAA,gBAAA,CAAiB,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AACjC,MAAA,MAAM,IAAA,GAAO,iBAAiB,eAAe,CAAA;AAC7C,MAAA,WAAA,CAAY,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,IAAA,EAAM,QAAA,EAAmB,SAAS,CAAA,mBAAA,EAAsB,IAAA,EAAM,QAAQ,eAAe,CAAA,CAAA,EAAI,2BAAW,IAAI,IAAA,EAAK,EAAG,CAAC,CAAA;AAAA,IACjK;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,sBAAA,GAAyBA,WAAAA,CAAY,CAAC,KAAA,KAAkB;AAC5D,IAAA,IAAI,aAAA,CAAc,SAAS,UAAA,EAAY;AACvC,IAAA,MAAM,EAAE,OAAA,EAAS,eAAA,EAAgB,GAAI,aAAA;AACrC,IAAA,WAAA,CAAY,eAAe,CAAA;AAC3B,IAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,IAAA,gBAAA,CAAiB,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AACjC,IAAA,MAAM,IAAA,GAAO,iBAAiB,eAAe,CAAA;AAC7C,IAAA,MAAM,GAAA,GAAM,0BAA0B,eAAe,CAAA;AACrD,IAAA,MAAM,WAAA,GAAc,GAAA,GAAM,oBAAA,CAAqB,GAAA,CAAI,MAAM,CAAA,GAAI,UAAA;AAC7D,IAAA,MAAM,WAAA,GAAc,GAAA,EAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,KAAK,CAAA,EAAG,KAAA,IAAS,KAAA;AAC1E,IAAA,WAAA,CAAY,CAAC,IAAA,KAAS,CAAC,GAAG,MAAM,EAAE,EAAA,EAAI,IAAA,EAAK,EAAG,MAAM,QAAA,EAAmB,OAAA,EAAS,CAAA,mBAAA,EAAsB,IAAA,EAAM,QAAQ,eAAe;AAAA,EAAK,WAAW,KAAK,WAAW,CAAA,CAAA,EAAI,2BAAW,IAAI,IAAA,EAAK,EAAG,CAAC,CAAA;AAAA,EACjM,CAAA,EAAG,CAAC,aAAA,EAAe,WAAW,CAAC,CAAA;AAE/B,EAAA,MAAM,qBAAA,GAAwBA,YAAY,MAAM;AAAE,IAAA,gBAAA,CAAiB,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,EAAG,CAAA,EAAG,EAAE,CAAA;AAE3F,EAAA,MAAM,mBAAA,GAAsBA,WAAAA,CAAY,OAAO,QAAA,KAAqB;AAClE,IAAA,gBAAA,CAAiB,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AACjC,IAAA,MAAM,QAAA,GAAW,QAAA,KAAa,QAAA,GAAW,6EAAA,GAAgF,iBAAiB,QAAQ,CAAA,GAAA,CAAA;AAClJ,IAAA,WAAA,CAAY,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,EAAE,IAAI,IAAA,EAAK,EAAG,IAAA,EAAM,QAAA,EAAmB,SAAS,QAAA,EAAU,SAAA,sBAAe,IAAA,EAAK,EAAG,CAAC,CAAA;AAClH,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,MAAM,uBAAA,CAAwB,QAAkD,CAAA;AACpG,MAAA,MAAM,YAAY,KAAA,EAAM;AACxB,MAAA,WAAA,CAAY,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAA,EAAI,MAAK,EAAG,IAAA,EAAM,UAAmB,OAAA,EAAS,CAAA,0BAAA,EAA6B,QAAQ,CAAA,CAAA,EAAI,SAAA,sBAAe,IAAA,EAAK,EAAG,CAAC,CAAA;AAAA,IACnJ,SAAS,KAAA,EAAgB;AACvB,MAAA,MAAM,MAAM,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACjE,MAAA,WAAA,CAAY,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAA,EAAI,MAAK,EAAG,IAAA,EAAM,UAAmB,OAAA,EAAS,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAA,EAAI,SAAA,sBAAe,IAAA,EAAK,EAAG,CAAC,CAAA;AAAA,IAClI;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,6BAAA,GAAgCA,WAAAA,CAAY,OAAO,eAAA,KAAqC;AAC5F,IAAA,MAAM,eAAA,GAA0C;AAAA,MAC9C,kBAAA,EAAoB,IAAA;AAAA,MAAM,mBAAmB,WAAA,CAAY,iBAAA;AAAA,MACzD,qBAAA,EAAuB,eAAA;AAAA,MACvB,yBAAyB,WAAA,CAAY,iBAAA,CAAkB,OAAO,CAAC,CAAA,KAAM,MAAM,eAAe;AAAA,KAC5F;AACA,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,4BAA4B,CAAA;AACjE,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,MAAA,MAAM,aAAA,GAAgB,MAAM,UAAA,EAAW;AACvC,MAAA,MAAM,aAAA,GAAgB,EAAE,GAAG,aAAA,CAAc,SAAA,EAAU;AACnD,MAAA,KAAA,MAAW,QAAA,IAAY,gBAAgB,iBAAA,EAAmB;AACxD,QAAA,MAAM,KAAA,GAAQ,oBAAoB,QAAQ,CAAA;AAC1C,QAAA,aAAA,CAAc,KAAA,CAAM,QAAQ,CAAA,GAAI,EAAE,GAAG,cAAc,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAA,EAAS,IAAA,EAAK;AAAA,MACpF;AACA,MAAA,KAAA,CAAM,UAAA,CAAW,EAAE,GAAG,aAAA,EAAe,WAAW,aAAA,EAAe,KAAA,EAAO,iBAAiB,CAAA;AACvF,MAAA,0BAAA,CAA2B,KAAK,CAAA;AAChC,MAAA,cAAA,CAAe,eAAe,CAAA;AAC9B,MAAA,gBAAA,CAAiB,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,IACnC,SAAS,KAAA,EAAgB;AACvB,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,WAAA,CAAY,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EAAA,EAAI,MAAK,EAAG,IAAA,EAAM,UAAmB,OAAA,EAAS,CAAA,4BAAA,EAA+B,OAAO,CAAA,CAAA,EAAI,SAAA,sBAAe,IAAA,EAAK,EAAG,CAAC,CAAA;AAAA,IACpJ;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,CAAY,iBAAiB,CAAC,CAAA;AAElC,EAAA,MAAM,yBAAA,GAA4BA,YAAY,MAAM;AAClD,IAAA,0BAAA,CAA2B,IAAI,CAAA;AAC/B,IAAA,gBAAA,CAAiB,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAR,UAAU,MAAM;AACd,IAAA,IAAI,QAAQ,WAAA,IAAe,KAAA,CAAM,sBAAsB,QAAA,CAAS,MAAA,GAAS,KAAK,YAAA,EAAc;AAC5F,IAAA,IAAI,aAAA,CAAc,IAAA,KAAS,MAAA,IAAU,uBAAA,EAAyB;AAC9D,IAAA,IAAI,YAAY,qBAAA,KAA0B,MAAA,mBAA4B,EAAE,IAAA,EAAM,oBAAoB,CAAA;AAAA,EACpG,CAAA,EAAG,CAAC,YAAA,EAAc,QAAA,CAAS,QAAQ,OAAA,CAAQ,WAAA,EAAa,KAAA,CAAM,kBAAA,EAAoB,aAAA,CAAc,IAAA,EAAM,WAAA,CAAY,qBAAA,EAAuB,uBAAuB,CAAC,CAAA;AAIjK,EAAA,IAAI,aAAA,CAAc,SAAS,kBAAA,EAAoB;AAC7C,IAAA,uBACEH,GAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,mBAAmB,WAAA,CAAY,iBAAA;AAAA,QAC/B,wBAAwB,WAAA,CAAY,qBAAA;AAAA,QACpC,QAAA,EAAU,CAAC,QAAA,KAAa,KAAK,8BAA8B,QAAQ,CAAA;AAAA,QACnE,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,EAEJ;AAEA,EAAA,IAAI,aAAA,CAAc,SAAS,OAAA,EAAS;AAClC,IAAA,uBAAOA,GAAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAU,CAAC,QAAA,KAAa,KAAK,mBAAA,CAAoB,QAAQ,CAAA,EAAG,QAAA,EAAU,qBAAA,EAAuB,CAAA;AAAA,EACrH;AAEA,EAAA,IAAI,aAAA,CAAc,SAAS,OAAA,EAAS;AAClC,IAAA,uBAAOA,GAAAA,CAAC,aAAA,EAAA,EAAc,cAAA,EAAgB,OAAA,EAAS,QAAA,EAAU,mBAAA,EAAqB,QAAA,EAAU,qBAAA,EAAuB,UAAA,EAAY,iBAAA,IAAqB,oBAAA,EAAsB,CAAA;AAAA,EACxK;AAEA,EAAA,IAAI,aAAA,CAAc,SAAS,UAAA,EAAY;AACrC,IAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,aAAA,CAAc,OAAO,CAAA;AAC3D,IAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAS,aAAA,CAAc,SAAS,SAAA,EAAW,YAAA,EAAc,IAAA,IAAQ,aAAA,CAAc,SAAS,YAAA,EAAc,aAAA,EAAe,QAAA,EAAU,sBAAA,EAAwB,QAAQ,qBAAA,EAAuB,CAAA;AAAA,EACjN;AAEA,EAAA,IAAI,MAAM,kBAAA,EAAoB;AAC5B,IAAA,uBACEA,GAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,QAAQ,KAAA,CAAM,MAAA;AAAA,QAAQ,kBAAkB,KAAA,CAAM,gBAAA;AAAA,QAC9C,eAAe,KAAA,CAAM,WAAA;AAAA,QAAa,cAAc,KAAA,CAAM,YAAA;AAAA,QACtD,YAAA;AAAA,QAA4B,QAAA,EAAU,gBAAA;AAAA,QAAkB,QAAA,EAAU,YAAA;AAAA,QAClE,KAAA,EAAO,OAAA;AAAA,QAAS,MAAM,UAAA,CAAW,IAAA;AAAA,QAAM,UAAA,EAAY,WAAA;AAAA,QAAa,IAAA,EAAM,SAAA;AAAA,QAAW;AAAA;AAAA,KACnF;AAAA,EAEJ;AAEA,EAAA,uBACEA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,QAAA;AAAA,MAAoB,YAAA;AAAA,MACpB,QAAA,EAAU,gBAAA;AAAA,MAAkB,QAAA,EAAU,YAAA;AAAA,MACtC,KAAA,EAAO,OAAA;AAAA,MAAS,MAAM,UAAA,CAAW,IAAA;AAAA,MAAM,UAAA,EAAY,WAAA;AAAA,MAAa,IAAA,EAAM,SAAA;AAAA,MAAW,SAAA;AAAA,MACjF,kBAAkB,WAAA,CAAY,OAAA;AAAA,MAAS,UAAU,WAAA,CAAY,QAAA;AAAA,MAC7D,cAAA,EAAgB,iBAAA;AAAA,MAAmB,IAAA,EAAM,SAAA;AAAA,MAAW,YAAA,EAAc;AAAA;AAAA,GACpE;AAEJ;AAIA,eAAsB,iBAAiB,OAAA,EAA6C;AAClF,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,4BAA4B,CAAA;AACjE,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,IAAA,MAAA,GAAS,MAAM,UAAA,EAAW;AAAA,EAC5B,CAAA,CAAA,MAAQ;AACN,IAAA,MAAA,GAAS,cAAA;AAAA,EACX;AACA,EAAA,MAAM,EAAE,eAAc,GAAI,MAAA,iBAAOA,GAAAA,CAAC,GAAA,EAAA,EAAI,MAAA,EAAgB,OAAA,EAAkB,CAAE,CAAA;AAC1E,EAAA,MAAM,aAAA,EAAc;AACtB;AAEA,eAAsB,gBAAA,GAAkC;AACtD,EAAA,MAAM,EAAE,gBAAA,EAAkB,mBAAA,EAAoB,GAAI,MAAM,OAAO,yBAA2B,CAAA;AAC1F,EAAA,MAAM,mBAAA,EAAoB;AAC5B","file":"App-YAHJUWCX.js","sourcesContent":["/**\r\n * Semantic color token system for AemeathCLI terminal UI.\r\n * Brand palette: pink / rose / off-white / mauve / brown.\r\n */\r\n\r\n/** Primary brand color */\r\nexport const BRAND_COLOR = \"#F0C5DA\";\r\n\r\n/** Semantic color tokens */\r\nexport const colors = {\r\n text: {\r\n primary: \"#F9F5F5\",\r\n secondary: \"#d3acb3\",\r\n muted: \"#9e8085\",\r\n accent: \"#F0C5DA\",\r\n response: \"#F9F5F5\",\r\n },\r\n border: {\r\n dim: \"#6b5459\",\r\n active: \"#d3acb3\",\r\n focus: \"#F0C5DA\",\r\n },\r\n syntax: {\r\n keyword: \"#F0C5DA\",\r\n string: \"#EDD6DC\",\r\n function: \"#F9F5F5\",\r\n comment: \"#9e8085\",\r\n number: \"#EDD6DC\",\r\n type: \"#F0C5DA\",\r\n },\r\n status: {\r\n success: \"#F0C5DA\",\r\n error: \"#f87171\",\r\n warning: \"#EDD6DC\",\r\n info: \"#F0C5DA\",\r\n pending: \"#d3acb3\",\r\n active: \"#F0C5DA\",\r\n },\r\n role: {\r\n user: \"#F0C5DA\",\r\n assistant: \"#F9F5F5\",\r\n system: \"#EDD6DC\",\r\n tool: \"#d3acb3\",\r\n },\r\n} as const;\r\n","/**\r\n * Enhanced markdown renderer for terminal output.\r\n * Handles headers, bold, italic, inline code, fenced code blocks,\r\n * lists, blockquotes, horizontal rules, and links.\r\n */\r\n\r\nimport React from \"react\";\r\nimport { Box, Text } from \"ink\";\r\nimport { colors } from \"../theme.js\";\r\n\r\ninterface IMarkdownContentProps {\r\n readonly content: string;\r\n}\r\n\r\n// ── Block-level types ──────────────────────────────────────────────────\r\n\r\ninterface IContentBlock {\r\n readonly type: \"text\" | \"code\" | \"header\" | \"list\" | \"hr\" | \"blockquote\";\r\n readonly content: string;\r\n readonly lang?: string | undefined;\r\n readonly level?: number | undefined;\r\n}\r\n\r\n/** Parse raw markdown string into block-level segments. */\r\nfunction parseBlocks(raw: string): IContentBlock[] {\r\n const blocks: IContentBlock[] = [];\r\n const lines = raw.split(\"\\n\");\r\n let i = 0;\r\n\r\n while (i < lines.length) {\r\n const line = lines[i];\r\n if (line === undefined) {\r\n break;\r\n }\r\n\r\n // Fenced code block\r\n if (line.startsWith(\"```\")) {\r\n const lang = line.slice(3).trim();\r\n const codeLines: string[] = [];\r\n i++;\r\n while (i < lines.length) {\r\n const currentLine = lines[i];\r\n if (currentLine === undefined || currentLine.startsWith(\"```\")) {\r\n break;\r\n }\r\n codeLines.push(currentLine);\r\n i++;\r\n }\r\n blocks.push({ type: \"code\", content: codeLines.join(\"\\n\"), lang });\r\n i++;\r\n continue;\r\n }\r\n\r\n // ATX header (#–####)\r\n const headerMatch = line.match(/^(#{1,4})\\s+(.+)$/);\r\n if (headerMatch) {\r\n const hashes = headerMatch[1];\r\n const headerContent = headerMatch[2];\r\n if (hashes === undefined || headerContent === undefined) {\r\n i++;\r\n continue;\r\n }\r\n blocks.push({\r\n type: \"header\",\r\n content: headerContent,\r\n level: hashes.length,\r\n });\r\n i++;\r\n continue;\r\n }\r\n\r\n // Horizontal rule\r\n if (/^[-*_]{3,}\\s*$/.test(line)) {\r\n blocks.push({ type: \"hr\", content: \"\" });\r\n i++;\r\n continue;\r\n }\r\n\r\n // Blockquote (consecutive >-prefixed lines)\r\n if (line.startsWith(\"> \")) {\r\n const quoteLines: string[] = [];\r\n while (i < lines.length) {\r\n const quoteLine = lines[i];\r\n if (quoteLine === undefined || !quoteLine.startsWith(\"> \")) {\r\n break;\r\n }\r\n quoteLines.push(quoteLine.slice(2));\r\n i++;\r\n }\r\n blocks.push({ type: \"blockquote\", content: quoteLines.join(\"\\n\") });\r\n continue;\r\n }\r\n\r\n // List items (unordered or ordered)\r\n if (/^\\s*[-*+]\\s/.test(line) || /^\\s*\\d+\\.\\s/.test(line)) {\r\n const listLines: string[] = [];\r\n while (i < lines.length) {\r\n const l = lines[i];\r\n if (l === undefined) {\r\n break;\r\n }\r\n if (\r\n /^\\s*[-*+]\\s/.test(l) ||\r\n /^\\s*\\d+\\.\\s/.test(l) ||\r\n (l.startsWith(\" \") && listLines.length > 0)\r\n ) {\r\n listLines.push(l);\r\n i++;\r\n } else {\r\n break;\r\n }\r\n }\r\n blocks.push({ type: \"list\", content: listLines.join(\"\\n\") });\r\n continue;\r\n }\r\n\r\n // Plain text — accumulate until we hit a block-level construct\r\n const textLines: string[] = [];\r\n while (i < lines.length) {\r\n const l = lines[i];\r\n if (l === undefined) {\r\n break;\r\n }\r\n if (\r\n l.startsWith(\"```\") ||\r\n l.startsWith(\"#\") ||\r\n l.startsWith(\"> \") ||\r\n /^[-*_]{3,}\\s*$/.test(l) ||\r\n /^\\s*[-*+]\\s/.test(l) ||\r\n /^\\s*\\d+\\.\\s/.test(l)\r\n ) {\r\n break;\r\n }\r\n textLines.push(l);\r\n i++;\r\n }\r\n if (textLines.length > 0) {\r\n blocks.push({ type: \"text\", content: textLines.join(\"\\n\") });\r\n }\r\n }\r\n\r\n return blocks.length > 0 ? blocks : [{ type: \"text\", content: raw }];\r\n}\r\n\r\n// ── Inline markdown ────────────────────────────────────────────────────\r\n\r\n/** Render inline formatting: **bold**, *italic*, `code`, [link](url) */\r\nfunction InlineMarkdown({\r\n text,\r\n}: {\r\n readonly text: string;\r\n}): React.ReactElement {\r\n const segments: React.ReactElement[] = [];\r\n let remaining = text;\r\n let key = 0;\r\n\r\n while (remaining.length > 0) {\r\n // **bold**\r\n const boldMatch = remaining.match(/^\\*\\*(.+?)\\*\\*/);\r\n if (boldMatch) {\r\n segments.push(\r\n <Text key={key++} bold>\r\n {boldMatch[1]}\r\n </Text>,\r\n );\r\n remaining = remaining.slice(boldMatch[0].length);\r\n continue;\r\n }\r\n\r\n // *italic*\r\n const italicMatch = remaining.match(/^\\*(.+?)\\*/);\r\n if (italicMatch) {\r\n segments.push(\r\n <Text key={key++} italic>\r\n {italicMatch[1]}\r\n </Text>,\r\n );\r\n remaining = remaining.slice(italicMatch[0].length);\r\n continue;\r\n }\r\n\r\n // `inline code`\r\n const codeMatch = remaining.match(/^`([^`]+)`/);\r\n if (codeMatch) {\r\n segments.push(\r\n <Text key={key++} color={colors.syntax.string} bold>\r\n {codeMatch[1]}\r\n </Text>,\r\n );\r\n remaining = remaining.slice(codeMatch[0].length);\r\n continue;\r\n }\r\n\r\n // ~~strikethrough~~\r\n const strikeMatch = remaining.match(/^~~(.+?)~~/);\r\n if (strikeMatch) {\r\n segments.push(\r\n <Text key={key++} strikethrough dimColor>\r\n {strikeMatch[1]}\r\n </Text>,\r\n );\r\n remaining = remaining.slice(strikeMatch[0].length);\r\n continue;\r\n }\r\n\r\n // [text](url)\r\n const linkMatch = remaining.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)/);\r\n if (linkMatch) {\r\n segments.push(\r\n <Text key={key++} color={colors.status.info} underline>\r\n {linkMatch[1]}\r\n </Text>,\r\n );\r\n remaining = remaining.slice(linkMatch[0].length);\r\n continue;\r\n }\r\n\r\n // Plain text up to next special char\r\n const nextSpecial = remaining.search(/[[*`~]/);\r\n if (nextSpecial === -1) {\r\n segments.push(<Text key={key++}>{remaining}</Text>);\r\n break;\r\n } else if (nextSpecial === 0) {\r\n segments.push(<Text key={key++}>{remaining[0]}</Text>);\r\n remaining = remaining.slice(1);\r\n } else {\r\n segments.push(\r\n <Text key={key++}>{remaining.slice(0, nextSpecial)}</Text>,\r\n );\r\n remaining = remaining.slice(nextSpecial);\r\n }\r\n }\r\n\r\n return <Text wrap=\"wrap\">{segments}</Text>;\r\n}\r\n\r\n// ── Block renderers ────────────────────────────────────────────────────\r\n\r\nfunction HeaderBlock({\r\n content,\r\n level,\r\n}: {\r\n readonly content: string;\r\n readonly level: number;\r\n}): React.ReactElement {\r\n const headerColors: readonly string[] = [\r\n colors.text.accent,\r\n colors.status.active,\r\n colors.syntax.keyword,\r\n colors.text.secondary,\r\n ];\r\n const color = headerColors[level - 1] ?? colors.text.primary;\r\n const prefix = level === 1 ? \"\\u25C6 \" : level === 2 ? \"\\u25B8 \" : \" \";\r\n\r\n return (\r\n <Box marginY={level <= 2 ? 1 : 0}>\r\n <Text color={color} bold={level <= 2}>\r\n {prefix}\r\n {content}\r\n </Text>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction ListBlock({\r\n content,\r\n}: {\r\n readonly content: string;\r\n}): React.ReactElement {\r\n const items = content.split(\"\\n\");\r\n const bullets = [\"\\u25B8\", \"\\u25E6\", \"\\u00B7\", \"\\u2023\"];\r\n\r\n return (\r\n <Box flexDirection=\"column\">\r\n {items.map((item, i) => {\r\n const indent = item.match(/^(\\s*)/)?.[1]?.length ?? 0;\r\n const bulletLevel = Math.floor(indent / 2);\r\n const clean = item\r\n .replace(/^\\s*[-*+]\\s/, \"\")\r\n .replace(/^\\s*\\d+\\.\\s/, \"\");\r\n const bullet = bullets[bulletLevel % bullets.length];\r\n\r\n return (\r\n <Box key={i} marginLeft={bulletLevel * 2}>\r\n <Text color={colors.status.active}>{bullet} </Text>\r\n <InlineMarkdown text={clean} />\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n}\r\n\r\nfunction CodeBlockRender({\r\n content,\r\n lang,\r\n}: {\r\n readonly content: string;\r\n readonly lang?: string | undefined;\r\n}): React.ReactElement {\r\n const lines = content.split(\"\\n\");\r\n if (lines.length > 0 && lines[lines.length - 1]?.trim() === \"\") {\r\n lines.pop();\r\n }\r\n\r\n return (\r\n <Box\r\n flexDirection=\"column\"\r\n borderStyle=\"round\"\r\n borderColor={colors.border.dim}\r\n marginY={1}\r\n >\r\n {lang ? (\r\n <Box paddingX={1}>\r\n <Text color={colors.text.muted} dimColor>\r\n {lang}\r\n </Text>\r\n </Box>\r\n ) : null}\r\n <Box flexDirection=\"column\" paddingX={1}>\r\n {lines.map((line, i) => (\r\n <Box key={i}>\r\n <Text color={colors.text.muted} dimColor>\r\n {String(i + 1).padStart(3, \" \")} {\"\\u2502\"}{\" \"}\r\n </Text>\r\n <Text color={colors.text.response}>{line}</Text>\r\n </Box>\r\n ))}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n\r\n// ── Main component ─────────────────────────────────────────────────────\r\n\r\nexport function MarkdownContent({\r\n content,\r\n}: IMarkdownContentProps): React.ReactElement {\r\n const blocks = parseBlocks(content);\r\n\r\n // Fast path: single plain-text block\r\n if (blocks.length === 1 && blocks[0]?.type === \"text\") {\r\n const text = blocks[0].content;\r\n if (!/[[*`~]/.test(text)) {\r\n return <Text wrap=\"wrap\">{text}</Text>;\r\n }\r\n return <InlineMarkdown text={text} />;\r\n }\r\n\r\n return (\r\n <Box flexDirection=\"column\">\r\n {blocks.map((block, i) => {\r\n switch (block.type) {\r\n case \"code\":\r\n return (\r\n <CodeBlockRender\r\n key={i}\r\n content={block.content}\r\n lang={block.lang}\r\n />\r\n );\r\n case \"header\":\r\n return (\r\n <HeaderBlock\r\n key={i}\r\n content={block.content}\r\n level={block.level ?? 1}\r\n />\r\n );\r\n case \"list\":\r\n return <ListBlock key={i} content={block.content} />;\r\n case \"hr\":\r\n return (\r\n <Box key={i} marginY={1}>\r\n <Text color={colors.border.dim}>\r\n {\"\\u2500\".repeat(40)}\r\n </Text>\r\n </Box>\r\n );\r\n case \"blockquote\":\r\n return (\r\n <Box\r\n key={i}\r\n marginLeft={1}\r\n borderStyle=\"single\"\r\n borderLeft\r\n borderRight={false}\r\n borderTop={false}\r\n borderBottom={false}\r\n borderColor={colors.border.active}\r\n paddingLeft={1}\r\n >\r\n <Text color={colors.text.secondary} italic wrap=\"wrap\">\r\n {block.content}\r\n </Text>\r\n </Box>\r\n );\r\n case \"text\":\r\n default:\r\n return <InlineMarkdown key={i} text={block.content} />;\r\n }\r\n })}\r\n </Box>\r\n );\r\n}\r\n","import { useEffect, useState } from \"react\";\r\n\r\ninterface IAnimationBucket {\r\n tick: number;\r\n listeners: Set<(tick: number) => void>;\r\n timer: NodeJS.Timeout;\r\n}\r\n\r\nconst animationBuckets = new Map<number, IAnimationBucket>();\r\n\r\nfunction getOrCreateBucket(intervalMs: number): IAnimationBucket {\r\n const existing = animationBuckets.get(intervalMs);\r\n if (existing !== undefined) {\r\n return existing;\r\n }\r\n\r\n const bucket: IAnimationBucket = {\r\n tick: 0,\r\n listeners: new Set(),\r\n timer: setInterval(() => {\r\n bucket.tick += 1;\r\n for (const listener of bucket.listeners) {\r\n listener(bucket.tick);\r\n }\r\n }, intervalMs),\r\n };\r\n\r\n animationBuckets.set(intervalMs, bucket);\r\n return bucket;\r\n}\r\n\r\nexport function useAnimationTick(intervalMs: number, enabled = true): number {\r\n const [tick, setTick] = useState(0);\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n setTick(0);\r\n return undefined;\r\n }\r\n\r\n const bucket = getOrCreateBucket(intervalMs);\r\n setTick(bucket.tick);\r\n\r\n const listener = (nextTick: number): void => {\r\n setTick(nextTick);\r\n };\r\n\r\n bucket.listeners.add(listener);\r\n\r\n return () => {\r\n bucket.listeners.delete(listener);\r\n if (bucket.listeners.size === 0) {\r\n clearInterval(bucket.timer);\r\n animationBuckets.delete(intervalMs);\r\n }\r\n };\r\n }, [enabled, intervalMs]);\r\n\r\n return tick;\r\n}\r\n","/**\r\n * Animated spinner with multiple style variants.\r\n * Uses a single flat brand color — no gradients.\r\n */\r\n\r\nimport React from \"react\";\r\nimport { Text } from \"ink\";\r\nimport { BRAND_COLOR } from \"../theme.js\";\r\nimport { useAnimationTick } from \"../hooks/use-animation-tick.js\";\r\n\r\ninterface IGradientSpinnerProps {\r\n /** Text displayed after the spinner character */\r\n readonly label?: string | undefined;\r\n /** Label color override (defaults to secondary text) */\r\n readonly labelColor?: string | undefined;\r\n /** Spinner animation style */\r\n readonly variant?: \"dots\" | \"braille\" | \"arc\" | \"pulse\" | \"bounce\" | undefined;\r\n /** Per-frame interval override in ms */\r\n readonly speed?: number | undefined;\r\n}\r\n\r\nconst SPINNER_VARIANTS: Record<\r\n string,\r\n { readonly frames: readonly string[]; readonly interval: number }\r\n> = {\r\n dots: {\r\n frames: [\"\\u280B\", \"\\u2819\", \"\\u2839\", \"\\u2838\", \"\\u283C\", \"\\u2834\", \"\\u2826\", \"\\u2827\", \"\\u2807\", \"\\u280F\"],\r\n interval: 120,\r\n },\r\n braille: {\r\n frames: [\"\\u28FE\", \"\\u28FD\", \"\\u28FB\", \"\\u28BF\", \"\\u287F\", \"\\u28DF\", \"\\u28EF\", \"\\u28F7\"],\r\n interval: 120,\r\n },\r\n arc: {\r\n frames: [\"\\u25DC\", \"\\u25E0\", \"\\u25DD\", \"\\u25DE\", \"\\u25E1\", \"\\u25DF\"],\r\n interval: 100,\r\n },\r\n pulse: {\r\n frames: [\"\\u25C9\", \"\\u25CE\", \"\\u25CB\", \"\\u25CE\", \"\\u25C9\", \"\\u25CF\"],\r\n interval: 120,\r\n },\r\n bounce: {\r\n frames: [\"\\u2801\", \"\\u2802\", \"\\u2804\", \"\\u2840\", \"\\u2880\", \"\\u2820\", \"\\u2810\", \"\\u2808\"],\r\n interval: 120,\r\n },\r\n};\r\n\r\nexport function GradientSpinner({\r\n label,\r\n labelColor = \"#888888\",\r\n variant = \"dots\",\r\n speed,\r\n}: IGradientSpinnerProps): React.ReactElement {\r\n const spinnerDef = SPINNER_VARIANTS[variant] ?? SPINNER_VARIANTS[\"dots\"];\r\n if (!spinnerDef) {\r\n throw new Error(\"Missing default spinner configuration\");\r\n }\r\n const interval = speed ?? spinnerDef.interval;\r\n const tick = useAnimationTick(interval);\r\n const frame = tick % spinnerDef.frames.length;\r\n\r\n return (\r\n <Text>\r\n <Text color={BRAND_COLOR}>{spinnerDef.frames[frame]}</Text>\r\n {label ? <Text color={labelColor}> {label}</Text> : null}\r\n </Text>\r\n );\r\n}\r\n","/**\r\n * Rich tool execution visualization with animated status icons,\r\n * progress tracking, duration, and expandable output.\r\n */\r\n\r\nimport React from \"react\";\r\nimport { Box, Text } from \"ink\";\r\nimport { GradientSpinner } from \"./GradientSpinner.js\";\r\nimport { colors } from \"../theme.js\";\r\n\r\nexport type ToolStatus =\r\n | \"pending\"\r\n | \"executing\"\r\n | \"success\"\r\n | \"error\"\r\n | \"cancelled\";\r\n\r\ninterface IToolCallDisplayProps {\r\n readonly toolName: string;\r\n readonly status: ToolStatus;\r\n readonly description?: string | undefined;\r\n readonly output?: string | undefined;\r\n readonly isError?: boolean | undefined;\r\n readonly duration?: number | undefined;\r\n readonly isCollapsed?: boolean | undefined;\r\n}\r\n\r\n/** Animated status icon */\r\nfunction StatusIcon({\r\n status,\r\n}: {\r\n readonly status: ToolStatus;\r\n}): React.ReactElement {\r\n switch (status) {\r\n case \"pending\":\r\n return <Text color={colors.text.muted}>{\"\\u25CB\"}</Text>;\r\n case \"executing\":\r\n return <GradientSpinner variant=\"dots\" />;\r\n case \"success\":\r\n return <Text color={colors.status.success}>{\"\\u2713\"}</Text>;\r\n case \"error\":\r\n return <Text color={colors.status.error}>{\"\\u2717\"}</Text>;\r\n case \"cancelled\":\r\n return <Text color={colors.text.muted}>{\"\\u2298\"}</Text>;\r\n }\r\n}\r\n\r\nfunction formatDuration(ms: number): string {\r\n if (ms < 1000) return `${ms}ms`;\r\n return `${(ms / 1000).toFixed(1)}s`;\r\n}\r\n\r\n/** Map tool name to a descriptive icon character */\r\nfunction getToolIcon(name: string): string {\r\n switch (name) {\r\n case \"read\":\r\n return \"\\u{1F4C4}\";\r\n case \"write\":\r\n return \"\\u270F\\uFE0F\";\r\n case \"edit\":\r\n return \"\\u{1F4DD}\";\r\n case \"glob\":\r\n return \"\\u{1F50D}\";\r\n case \"grep\":\r\n return \"\\u{1F50E}\";\r\n case \"bash\":\r\n return \"\\u26A1\";\r\n case \"web_search\":\r\n case \"webSearch\":\r\n return \"\\u{1F310}\";\r\n case \"web_fetch\":\r\n case \"webFetch\":\r\n return \"\\u{1F4E1}\";\r\n default:\r\n return \"\\u2699\";\r\n }\r\n}\r\n\r\nexport function ToolCallDisplay({\r\n toolName,\r\n status,\r\n description,\r\n output,\r\n isError,\r\n duration,\r\n isCollapsed = true,\r\n}: IToolCallDisplayProps): React.ReactElement {\r\n const borderColor =\r\n status === \"error\"\r\n ? colors.status.error\r\n : status === \"executing\"\r\n ? colors.status.active\r\n : colors.border.dim;\r\n\r\n const icon = getToolIcon(toolName);\r\n\r\n return (\r\n <Box flexDirection=\"column\" marginY={0}>\r\n {/* Header line: status-icon tool-icon tool-name description (duration) */}\r\n <Box>\r\n <StatusIcon status={status} />\r\n <Text> </Text>\r\n <Text color={colors.role.tool} bold>\r\n {icon} {toolName}\r\n </Text>\r\n {description ? (\r\n <Text color={colors.text.muted}> {description}</Text>\r\n ) : null}\r\n {duration !== undefined && status !== \"executing\" ? (\r\n <Text color={colors.text.muted} dimColor>\r\n {\" \"}\r\n ({formatDuration(duration)})\r\n </Text>\r\n ) : null}\r\n </Box>\r\n\r\n {/* Expandable output section */}\r\n {!isCollapsed && output ? (\r\n <Box\r\n flexDirection=\"column\"\r\n marginLeft={2}\r\n borderStyle=\"single\"\r\n borderLeft\r\n borderRight={false}\r\n borderTop={false}\r\n borderBottom={false}\r\n borderColor={borderColor}\r\n paddingLeft={1}\r\n >\r\n <Text\r\n wrap=\"wrap\"\r\n color={isError ? colors.status.error : colors.text.secondary}\r\n >\r\n {output.length > 2000\r\n ? output.slice(0, 2000) + \"\\n\\u2026 (truncated)\"\r\n : output}\r\n </Text>\r\n </Box>\r\n ) : null}\r\n </Box>\r\n );\r\n}\r\n\r\n/** Compact group display for multiple tool calls in a message */\r\ninterface IToolCallGroupProps {\r\n readonly tools: readonly {\r\n readonly name: string;\r\n readonly status: ToolStatus;\r\n readonly description?: string | undefined;\r\n readonly duration?: number | undefined;\r\n }[];\r\n}\r\n\r\nexport function ToolCallGroup({\r\n tools,\r\n}: IToolCallGroupProps): React.ReactElement {\r\n return (\r\n <Box flexDirection=\"column\" marginLeft={2}>\r\n {tools.map((tool, i) => (\r\n <ToolCallDisplay\r\n key={i}\r\n toolName={tool.name}\r\n status={tool.status}\r\n description={tool.description}\r\n duration={tool.duration}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * Conversation message display with markdown rendering,\r\n * tool-call visualization, and visual role indicators.\r\n */\r\n\r\nimport React from \"react\";\r\nimport { Box, Text } from \"ink\";\r\nimport { MarkdownContent } from \"./MarkdownContent.js\";\r\nimport { ToolCallDisplay } from \"./ToolCallDisplay.js\";\r\nimport { colors } from \"../theme.js\";\r\nimport type { IChatMessage, MessageRole } from \"../../types/index.js\";\r\n\r\ninterface IMessageViewProps {\r\n readonly messages: readonly IChatMessage[];\r\n}\r\n\r\nfunction getRoleColor(role: MessageRole): string {\r\n switch (role) {\r\n case \"user\":\r\n return colors.role.user;\r\n case \"assistant\":\r\n return colors.role.assistant;\r\n case \"system\":\r\n return colors.role.system;\r\n case \"tool\":\r\n return colors.role.tool;\r\n }\r\n}\r\n\r\nfunction getRoleIcon(role: MessageRole): string {\r\n switch (role) {\r\n case \"user\":\r\n return \"\\u276F\";\r\n case \"assistant\":\r\n return \"\\u2726\";\r\n case \"system\":\r\n return \"\\u2022\";\r\n case \"tool\":\r\n return \"\\u2699\";\r\n }\r\n}\r\n\r\nfunction getRoleLabel(role: MessageRole, model?: string): string {\r\n switch (role) {\r\n case \"user\":\r\n return \"You\";\r\n case \"assistant\":\r\n return model ?? \"Assistant\";\r\n case \"system\":\r\n return \"System\";\r\n case \"tool\":\r\n return \"Tool\";\r\n }\r\n}\r\n\r\nfunction shortModelName(model: string): string {\r\n if (model.includes(\"opus\")) return \"Opus 4.6\";\r\n if (model.includes(\"sonnet\")) return \"Sonnet 4.6\";\r\n if (model.includes(\"haiku\")) return \"Haiku 4.5\";\r\n if (model.includes(\"gpt-5.2-mini\")) return \"GPT-5.2 mini\";\r\n if (model.includes(\"gpt-5.2\")) return \"GPT-5.2\";\r\n if (model.includes(\"o3\")) return \"o3\";\r\n if (model.includes(\"gemini\") && model.includes(\"pro\")) return \"Gemini Pro\";\r\n if (model.includes(\"gemini\") && model.includes(\"flash\")) return \"Gemini Flash\";\r\n if (model.includes(\"kimi\") || model.includes(\"k2\")) return \"Kimi K2.5\";\r\n return model;\r\n}\r\n\r\n/** Format tool call arguments as a readable one-liner */\r\nfunction formatToolArgs(\r\n name: string,\r\n args: Record<string, unknown>,\r\n): string {\r\n switch (name) {\r\n case \"read\":\r\n case \"write\":\r\n case \"edit\":\r\n return typeof args[\"file_path\"] === \"string\" ? args[\"file_path\"] : \"\";\r\n case \"glob\":\r\n return typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\r\n case \"grep\": {\r\n const pat = typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\r\n const dir = typeof args[\"path\"] === \"string\" ? ` in ${args[\"path\"]}` : \"\";\r\n return `\"${pat}\"${dir}`;\r\n }\r\n case \"bash\": {\r\n const cmd = typeof args[\"command\"] === \"string\" ? args[\"command\"] : \"\";\r\n return cmd.length > 60 ? cmd.slice(0, 60) + \"\\u2026\" : cmd;\r\n }\r\n default:\r\n return JSON.stringify(args).slice(0, 80);\r\n }\r\n}\r\n\r\n// ── Individual message item ────────────────────────────────────────────\r\n\r\ninterface IMessageItemProps {\r\n readonly message: IChatMessage;\r\n}\r\n\r\nfunction MessageItem({ message }: IMessageItemProps): React.ReactElement {\r\n const color = getRoleColor(message.role);\r\n const icon = getRoleIcon(message.role);\r\n const label = getRoleLabel(\r\n message.role,\r\n message.model ? shortModelName(message.model) : undefined,\r\n );\r\n\r\n // System messages — compact, dimmed\r\n if (message.role === \"system\") {\r\n return (\r\n <Box flexDirection=\"column\" marginBottom={1}>\r\n <Box>\r\n <Text color={colors.role.system} dimColor>\r\n {icon}{\" \"}\r\n </Text>\r\n <Text color={colors.role.system} dimColor wrap=\"wrap\">\r\n {message.content}\r\n </Text>\r\n </Box>\r\n </Box>\r\n );\r\n }\r\n\r\n // Tool result — show as rich tool call display\r\n if (message.role === \"tool\" && message.toolCalls && message.toolCalls.length > 0) {\r\n const firstCall = message.toolCalls[0];\r\n if (firstCall) {\r\n return (\r\n <Box marginY={0} marginLeft={2}>\r\n <ToolCallDisplay\r\n toolName={firstCall.name}\r\n status={message.content.startsWith(\"Error:\") ? \"error\" : \"success\"}\r\n description={formatToolArgs(firstCall.name, firstCall.arguments)}\r\n output={message.content}\r\n isError={message.content.startsWith(\"Error:\")}\r\n isCollapsed={message.content.length > 500}\r\n />\r\n </Box>\r\n );\r\n }\r\n }\r\n\r\n return (\r\n <Box flexDirection=\"column\" marginBottom={1}>\r\n {/* Role header */}\r\n <Box>\r\n <Text color={color} bold>\r\n {icon} {label}\r\n </Text>\r\n {message.tokenUsage ? (\r\n <Text color={colors.text.muted} dimColor>\r\n {\" \"}\r\n ({message.tokenUsage.totalTokens} tokens)\r\n </Text>\r\n ) : null}\r\n </Box>\r\n\r\n {/* Message content — full markdown rendering */}\r\n <Box marginLeft={2} flexDirection=\"column\">\r\n <MarkdownContent content={message.content} />\r\n </Box>\r\n\r\n {/* Tool calls that the assistant invoked */}\r\n {message.toolCalls && message.toolCalls.length > 0 ? (\r\n <Box marginLeft={2} flexDirection=\"column\" marginTop={0}>\r\n {message.toolCalls.map((call) => {\r\n const argSummary = formatToolArgs(call.name, call.arguments);\r\n return (\r\n <ToolCallDisplay\r\n key={call.id}\r\n toolName={call.name}\r\n status=\"success\"\r\n description={argSummary}\r\n />\r\n );\r\n })}\r\n </Box>\r\n ) : null}\r\n </Box>\r\n );\r\n}\r\n\r\n// ── Message list ───────────────────────────────────────────────────────\r\n\r\nconst MAX_VISIBLE_MESSAGES = 50;\r\n\r\nexport function MessageView({\r\n messages,\r\n}: IMessageViewProps): React.ReactElement {\r\n const visibleMessages =\r\n messages.length > MAX_VISIBLE_MESSAGES\r\n ? messages.slice(-MAX_VISIBLE_MESSAGES)\r\n : messages;\r\n\r\n return (\r\n <Box flexDirection=\"column\" flexGrow={1} paddingX={1}>\r\n {messages.length > MAX_VISIBLE_MESSAGES ? (\r\n <Text color={colors.text.muted} dimColor>\r\n {\" \"}({messages.length - MAX_VISIBLE_MESSAGES} earlier messages\r\n hidden)\r\n </Text>\r\n ) : null}\r\n {visibleMessages.map((msg) => (\r\n <MessageItem key={msg.id} message={msg} />\r\n ))}\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * Autocomplete popup overlay with themed colors,\r\n * scroll indicators, and visual selection highlight.\r\n */\r\n\r\nimport React from \"react\";\r\nimport { Box, Text } from \"ink\";\r\nimport { colors } from \"../theme.js\";\r\nimport type { IAutocompleteItem } from \"../autocomplete-data.js\";\r\n\r\nconst MAX_VISIBLE_ITEMS = 8;\r\nconst SCROLL_UP_LABEL = \"▲\";\r\nconst SCROLL_DOWN_LABEL = \"▼\";\r\nconst SELECTED_LABEL = \"▸ \";\r\n\r\ninterface IAutocompletePopupProps {\r\n readonly items: readonly IAutocompleteItem[];\r\n readonly selectedIndex: number;\r\n}\r\n\r\nexport function AutocompletePopup({\r\n items,\r\n selectedIndex,\r\n}: IAutocompletePopupProps): React.ReactElement | null {\r\n if (items.length === 0) return null;\r\n\r\n const totalItems = items.length;\r\n const windowSize = Math.min(MAX_VISIBLE_ITEMS, totalItems);\r\n\r\n let scrollOffset = 0;\r\n if (selectedIndex >= windowSize) {\r\n scrollOffset = selectedIndex - windowSize + 1;\r\n }\r\n scrollOffset = Math.max(\r\n 0,\r\n Math.min(scrollOffset, totalItems - windowSize),\r\n );\r\n\r\n const visibleItems = items.slice(scrollOffset, scrollOffset + windowSize);\r\n const hasMore = scrollOffset + windowSize < totalItems;\r\n const hasLess = scrollOffset > 0;\r\n\r\n return (\r\n <Box\r\n flexDirection=\"column\"\r\n borderStyle=\"round\"\r\n borderColor={colors.status.active}\r\n paddingX={1}\r\n marginBottom={0}\r\n >\r\n {/* Scroll-up indicator */}\r\n {hasLess ? (\r\n <Text color={colors.text.muted} dimColor>\r\n {\" \"}\r\n {SCROLL_UP_LABEL} {scrollOffset} above\r\n </Text>\r\n ) : null}\r\n\r\n {visibleItems.map((item, visibleIndex) => {\r\n const actualIndex = scrollOffset + visibleIndex;\r\n const isSelected = actualIndex === selectedIndex;\r\n return (\r\n <Box key={`${item.label}-${actualIndex}`}>\r\n <Text\r\n color={isSelected ? colors.status.active : colors.text.primary}\r\n bold={isSelected}\r\n >\r\n {isSelected ? SELECTED_LABEL : \" \"}\r\n {item.label}\r\n </Text>\r\n <Text color={colors.text.muted} dimColor>\r\n {\" \"}\r\n {item.description}\r\n </Text>\r\n </Box>\r\n );\r\n })}\r\n\r\n {/* Scroll-down indicator */}\r\n {hasMore ? (\r\n <Text color={colors.text.muted} dimColor>\r\n {\" \"}\r\n {SCROLL_DOWN_LABEL} {totalItems - scrollOffset - windowSize} more\r\n </Text>\r\n ) : null}\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * Autocomplete data definitions for InputBar triggers.\r\n * Skills are dynamically discovered from disk at startup.\r\n */\r\n\r\n// ── Slash Commands ──────────────────────────────────────────────────────────\r\n\r\nexport interface IAutocompleteItem {\r\n readonly label: string;\r\n readonly description: string;\r\n}\r\n\r\nexport interface ISlashCommand {\r\n readonly command: string;\r\n readonly description: string;\r\n}\r\n\r\nexport const SLASH_COMMANDS: readonly ISlashCommand[] = [\r\n { command: \"/login\", description: \"Log in to a provider (interactive)\" },\r\n { command: \"/help\", description: \"Show available commands\" },\r\n { command: \"/model\", description: \"Select a model with provider-specific thinking options\" },\r\n { command: \"/role\", description: \"Switch role (planning, coding, review, testing, bugfix)\" },\r\n { command: \"/cost\", description: \"Show session cost breakdown\" },\r\n { command: \"/clear\", description: \"Clear conversation\" },\r\n { command: \"/compact\", description: \"Compress context\" },\r\n { command: \"/team list\", description: \"List active teams\" },\r\n { command: \"/team stop\", description: \"Deactivate team and return to single-pane\" },\r\n { command: \"/mcp list\", description: \"List connected MCP servers\" },\r\n { command: \"/mcp add\", description: \"Add an MCP server\" },\r\n { command: \"/skill list\", description: \"List available skills\" },\r\n { command: \"/panel\", description: \"Show swarm layout information\" },\r\n { command: \"/login status\", description: \"Show login status for all providers\" },\r\n { command: \"/login logout\", description: \"Log out of a provider\" },\r\n { command: \"/config get\", description: \"Get a configuration value\" },\r\n { command: \"/config set\", description: \"Set a configuration value\" },\r\n { command: \"/history\", description: \"List past conversations\" },\r\n { command: \"/resume\", description: \"Resume a past conversation by number or ID\" },\r\n { command: \"/quit\", description: \"Exit\" },\r\n { command: \"/exit\", description: \"Exit\" },\r\n];\r\n\r\n// ── Context References (@) ──────────────────────────────────────────────────\r\n\r\nconst BUILTIN_CONTEXT_REFS: readonly IAutocompleteItem[] = [\r\n { label: \"@codebase\", description: \"Reference the entire codebase\" },\r\n { label: \"@git\", description: \"Reference git state\" },\r\n { label: \"@docs\", description: \"Reference project docs\" },\r\n { label: \"@web\", description: \"Reference web context\" },\r\n];\r\n\r\nlet dynamicFileRefs: readonly IAutocompleteItem[] = [];\r\n\r\n// ── Code References (`) ─────────────────────────────────────────────────────\r\n\r\nexport const CODE_REFS: readonly IAutocompleteItem[] = [\r\n { label: \"`src/\", description: \"Source directory\" },\r\n { label: \"`src/ui/\", description: \"UI components\" },\r\n { label: \"`src/auth/\", description: \"Authentication modules\" },\r\n { label: \"`src/providers/\", description: \"LLM provider adapters\" },\r\n { label: \"`src/teams/\", description: \"Team management\" },\r\n { label: \"`src/core/\", description: \"Core engine\" },\r\n { label: \"`src/tools/\", description: \"Tool implementations\" },\r\n { label: \"`src/types/\", description: \"Type definitions\" },\r\n { label: \"`src/storage/\", description: \"Storage layer\" },\r\n { label: \"`src/utils/\", description: \"Utility functions\" },\r\n];\r\n\r\n// ── Skill Invocation ($) — dynamically populated ────────────────────────────\r\n\r\n/** Fallback built-in skills shown before dynamic discovery completes. */\r\nconst BUILTIN_SKILL_REFS: readonly IAutocompleteItem[] = [\r\n { label: \"$review\", description: \"Comprehensive code review\" },\r\n { label: \"$commit\", description: \"Smart git commit with message generation\" },\r\n { label: \"$plan\", description: \"Create implementation plan from requirements\" },\r\n { label: \"$debug\", description: \"Systematic debugging workflow\" },\r\n { label: \"$test\", description: \"Generate tests for code\" },\r\n { label: \"$refactor\", description: \"Refactoring with safety checks\" },\r\n];\r\n\r\n/**\r\n * Mutable skill list — starts with built-ins, then gets replaced\r\n * by the full set once SkillRegistry finishes scanning disk.\r\n */\r\nlet dynamicSkillRefs: readonly IAutocompleteItem[] = BUILTIN_SKILL_REFS;\r\n\r\n/**\r\n * Replace the skill autocomplete list with dynamically discovered skills.\r\n * Called from App.tsx after SkillRegistry.initialize() completes.\r\n */\r\nexport function registerDynamicSkills(skills: readonly IAutocompleteItem[]): void {\r\n dynamicSkillRefs = skills.length > 0 ? skills : BUILTIN_SKILL_REFS;\r\n}\r\n\r\n/** Current skill list (dynamic once loaded, built-in fallback otherwise). */\r\nexport function getSkillRefs(): readonly IAutocompleteItem[] {\r\n return dynamicSkillRefs;\r\n}\r\n\r\nexport function registerDynamicFileRefs(files: readonly IAutocompleteItem[]): void {\r\n dynamicFileRefs = files;\r\n}\r\n\r\n// ── Trigger Detection ───────────────────────────────────────────────────────\r\n\r\nexport type AutocompleteTrigger = \"/\" | \"@\" | \"`\" | \"$\";\r\n\r\nexport function getAutocompleteItems(trigger: AutocompleteTrigger, query: string): readonly IAutocompleteItem[] {\r\n const normalizedQuery = query.toLowerCase();\r\n\r\n switch (trigger) {\r\n case \"/\": {\r\n const filtered = SLASH_COMMANDS.filter((cmd) => cmd.command.toLowerCase().includes(normalizedQuery));\r\n return filtered.map((cmd) => ({ label: cmd.command, description: cmd.description }));\r\n }\r\n case \"@\": {\r\n const fileMatches = dynamicFileRefs.filter((ref) => ref.label.toLowerCase().includes(normalizedQuery));\r\n const builtinMatches = BUILTIN_CONTEXT_REFS.filter((ref) => ref.label.toLowerCase().includes(normalizedQuery));\r\n return [...fileMatches, ...builtinMatches];\r\n }\r\n case \"`\": {\r\n return CODE_REFS.filter((ref) => ref.label.toLowerCase().includes(normalizedQuery));\r\n }\r\n case \"$\": {\r\n return dynamicSkillRefs.filter((ref) => ref.label.toLowerCase().includes(normalizedQuery));\r\n }\r\n }\r\n}\r\n","export function toCodePoints(value: string): string[] {\r\n return Array.from(value);\r\n}\r\n\r\nexport function codePointLength(value: string): number {\r\n return toCodePoints(value).length;\r\n}\r\n\r\nexport function sliceCodePoints(value: string, start: number, end?: number): string {\r\n return toCodePoints(value).slice(start, end).join(\"\");\r\n}\r\n\r\nexport function clampCursorOffset(value: string, offset: number): number {\r\n return Math.max(0, Math.min(offset, codePointLength(value)));\r\n}\r\n\r\nexport function codePointIndexToOffset(value: string, index: number): number {\r\n return sliceCodePoints(value, 0, index).length;\r\n}\r\n\r\nexport function insertTextAtCursor(\r\n value: string,\r\n cursorOffset: number,\r\n insertedText: string,\r\n): { text: string; cursorOffset: number } {\r\n const points = toCodePoints(value);\r\n const insertion = toCodePoints(insertedText);\r\n const safeOffset = clampCursorOffset(value, cursorOffset);\r\n points.splice(safeOffset, 0, ...insertion);\r\n return {\r\n text: points.join(\"\"),\r\n cursorOffset: safeOffset + insertion.length,\r\n };\r\n}\r\n\r\nexport function backspaceAtCursor(\r\n value: string,\r\n cursorOffset: number,\r\n): { text: string; cursorOffset: number } {\r\n const safeOffset = clampCursorOffset(value, cursorOffset);\r\n if (safeOffset === 0) {\r\n return { text: value, cursorOffset: safeOffset };\r\n }\r\n\r\n const points = toCodePoints(value);\r\n points.splice(safeOffset - 1, 1);\r\n return {\r\n text: points.join(\"\"),\r\n cursorOffset: safeOffset - 1,\r\n };\r\n}\r\n\r\nexport function deleteAtCursor(\r\n value: string,\r\n cursorOffset: number,\r\n): { text: string; cursorOffset: number } {\r\n const safeOffset = clampCursorOffset(value, cursorOffset);\r\n const points = toCodePoints(value);\r\n if (safeOffset >= points.length) {\r\n return { text: value, cursorOffset: safeOffset };\r\n }\r\n\r\n points.splice(safeOffset, 1);\r\n return {\r\n text: points.join(\"\"),\r\n cursorOffset: safeOffset,\r\n };\r\n}\r\n","import { clampCursorOffset, codePointLength } from \"./input-utils.js\";\r\n\r\nexport interface IHistorySnapshot {\r\n readonly text: string;\r\n readonly cursorOffset: number;\r\n}\r\n\r\nexport interface IHistoryNavigationState {\r\n readonly history: readonly string[];\r\n readonly historyIndex: number;\r\n readonly previousHistoryIndex: number | undefined;\r\n readonly cache: Readonly<Record<number, IHistorySnapshot>>;\r\n readonly currentInput: string;\r\n readonly currentCursorOffset: number;\r\n}\r\n\r\nexport interface IHistoryNavigationResult {\r\n readonly historyIndex: number;\r\n readonly previousHistoryIndex: number;\r\n readonly cache: Record<number, IHistorySnapshot>;\r\n readonly input: string;\r\n readonly cursorOffset: number;\r\n}\r\n\r\nexport function navigateHistoryState(\r\n state: IHistoryNavigationState,\r\n nextIndex: number,\r\n defaultCursor: \"start\" | \"end\",\r\n): IHistoryNavigationResult {\r\n const cache = { ...state.cache };\r\n const previousIndex = state.historyIndex;\r\n\r\n cache[previousIndex] = {\r\n text: state.currentInput,\r\n cursorOffset: clampCursorOffset(state.currentInput, state.currentCursorOffset),\r\n };\r\n\r\n const saved = cache[nextIndex];\r\n const isReturningToPrevious =\r\n nextIndex === -1 || nextIndex === state.previousHistoryIndex;\r\n\r\n if (\r\n isReturningToPrevious &&\r\n saved &&\r\n saved.cursorOffset > 0 &&\r\n saved.cursorOffset < codePointLength(saved.text)\r\n ) {\r\n return {\r\n historyIndex: nextIndex,\r\n previousHistoryIndex: previousIndex,\r\n cache,\r\n input: saved.text,\r\n cursorOffset: saved.cursorOffset,\r\n };\r\n }\r\n\r\n if (nextIndex === -1) {\r\n const text = saved?.text ?? \"\";\r\n return {\r\n historyIndex: nextIndex,\r\n previousHistoryIndex: previousIndex,\r\n cache,\r\n input: text,\r\n cursorOffset: defaultCursor === \"start\" ? 0 : codePointLength(text),\r\n };\r\n }\r\n\r\n if (saved) {\r\n return {\r\n historyIndex: nextIndex,\r\n previousHistoryIndex: previousIndex,\r\n cache,\r\n input: saved.text,\r\n cursorOffset: defaultCursor === \"start\" ? 0 : codePointLength(saved.text),\r\n };\r\n }\r\n\r\n const input = state.history[state.history.length - 1 - nextIndex] ?? \"\";\r\n return {\r\n historyIndex: nextIndex,\r\n previousHistoryIndex: previousIndex,\r\n cache,\r\n input,\r\n cursorOffset: defaultCursor === \"start\" ? 0 : codePointLength(input),\r\n };\r\n}\r\n","/**\r\n * User input component with autocomplete, history, animated cursor,\r\n * and Shift+Tab mode cycling (agent swarm / accept edits / chat).\r\n */\r\n\r\nimport React, { useState, useMemo, useEffect, useCallback, useRef } from \"react\";\r\nimport { Box, Text, useInput } from \"ink\";\r\nimport { AutocompletePopup } from \"./AutocompletePopup.js\";\r\nimport { BRAND_COLOR, colors } from \"../theme.js\";\r\nimport {\r\n getAutocompleteItems,\r\n type AutocompleteTrigger,\r\n type IAutocompleteItem,\r\n} from \"../autocomplete-data.js\";\r\nimport {\r\n backspaceAtCursor,\r\n clampCursorOffset,\r\n codePointLength,\r\n deleteAtCursor,\r\n insertTextAtCursor,\r\n sliceCodePoints,\r\n} from \"../input-utils.js\";\r\nimport { navigateHistoryState } from \"../history-navigation.js\";\r\n\r\n// ── Mode system ─────────────────────────────────────────────────────────\r\n\r\nexport type InputMode = \"agent-swarm\" | \"accept-edits\" | \"chat\";\r\n\r\nconst MODE_ORDER: readonly InputMode[] = [\"agent-swarm\", \"accept-edits\", \"chat\"];\r\n\r\ninterface IModeDisplay {\r\n readonly label: string;\r\n readonly icon: string;\r\n readonly color: string;\r\n}\r\n\r\nconst MODE_DISPLAY: Record<InputMode, IModeDisplay> = {\r\n \"agent-swarm\": {\r\n label: \"swarm orchestrator\",\r\n icon: \"\\u25B6\\u25B6\",\r\n color: BRAND_COLOR,\r\n },\r\n \"accept-edits\": {\r\n label: \"guided edits\",\r\n icon: \"\\u2551\\u2551\",\r\n color: \"#EDD6DC\",\r\n },\r\n chat: {\r\n label: \"direct chat\",\r\n icon: \"\\u25CB\",\r\n color: \"#8D7176\",\r\n },\r\n};\r\n\r\n// ── Props ───────────────────────────────────────────────────────────────\r\n\r\ninterface IInputBarProps {\r\n readonly onSubmit: (input: string) => void;\r\n readonly isProcessing: boolean;\r\n readonly placeholder?: string | undefined;\r\n readonly onCancel?: (() => void) | undefined;\r\n readonly initialHistory?: readonly string[] | undefined;\r\n /** Current mode — controlled by parent. */\r\n readonly mode?: InputMode | undefined;\r\n /** Called when user presses Shift+Tab to cycle mode. */\r\n readonly onModeChange?: ((mode: InputMode) => void) | undefined;\r\n}\r\n\r\n// ── Trigger detection ───────────────────────────────────────────────────\r\n\r\nconst TRIGGER_CHARS = new Set<string>([\"/\", \"@\", \"`\", \"$\"]);\r\n\r\ninterface ITriggerMatch {\r\n readonly trigger: AutocompleteTrigger;\r\n readonly query: string;\r\n readonly rangeStart: number;\r\n}\r\n\r\nfunction detectTrigger(\r\n input: string,\r\n cursorOffset: number,\r\n): ITriggerMatch | null {\r\n const safeOffset = clampCursorOffset(input, cursorOffset);\r\n const beforeCursor = sliceCodePoints(input, 0, safeOffset);\r\n if (beforeCursor.length === 0) return null;\r\n if (beforeCursor[0] === \"/\") return { trigger: \"/\", query: beforeCursor, rangeStart: 0 };\r\n if (beforeCursor[0] === \"$\") return { trigger: \"$\", query: beforeCursor, rangeStart: 0 };\r\n\r\n const points = Array.from(beforeCursor);\r\n for (let i = points.length - 1; i >= 0; i--) {\r\n const ch = points[i];\r\n if (ch === undefined) continue;\r\n if (TRIGGER_CHARS.has(ch) && ch !== \"/\" && ch !== \"$\") {\r\n if (i === 0 || points[i - 1] === \" \") {\r\n return {\r\n trigger: ch as AutocompleteTrigger,\r\n query: points.slice(i).join(\"\"),\r\n rangeStart: i,\r\n };\r\n }\r\n }\r\n if (ch === \" \") break;\r\n }\r\n return null;\r\n}\r\n\r\nconst MAX_HISTORY = 100;\r\n\r\n// ── Component ───────────────────────────────────────────────────────────\r\n\r\nexport function InputBar({\r\n onSubmit,\r\n isProcessing,\r\n placeholder,\r\n onCancel,\r\n initialHistory,\r\n mode = \"agent-swarm\",\r\n onModeChange,\r\n}: IInputBarProps): React.ReactElement {\r\n const [input, setInput] = useState(\"\");\r\n const [cursorOffset, setCursorOffset] = useState(0);\r\n const [selectedIndex, setSelectedIndex] = useState(0);\r\n const [history, setHistory] = useState<string[]>(\r\n initialHistory ? [...initialHistory] : [],\r\n );\r\n const [historyIndex, setHistoryIndex] = useState(-1);\r\n const inputRef = useRef(input);\r\n const cursorOffsetRef = useRef(cursorOffset);\r\n const historyRef = useRef(history);\r\n const historyIndexRef = useRef(historyIndex);\r\n const triggerStateRef = useRef<ITriggerMatch | null>(null);\r\n const autocompleteItemsRef = useRef<readonly IAutocompleteItem[]>([]);\r\n const isAutocompleteActiveRef = useRef(false);\r\n const previousHistoryIndexRef = useRef<number | undefined>(undefined);\r\n const historyCacheRef = useRef<Record<number, { text: string; cursorOffset: number }>>({});\r\n\r\n const setInputWithCursor = useCallback(\r\n (nextInput: string, cursorPosition: \"start\" | \"end\" | number = \"end\") => {\r\n const nextCursor = cursorPosition === \"start\"\r\n ? 0\r\n : cursorPosition === \"end\"\r\n ? codePointLength(nextInput)\r\n : clampCursorOffset(nextInput, cursorPosition);\r\n inputRef.current = nextInput;\r\n cursorOffsetRef.current = nextCursor;\r\n setInput(nextInput);\r\n setCursorOffset(nextCursor);\r\n setSelectedIndex(0);\r\n },\r\n [],\r\n );\r\n\r\n const setCursorPosition = useCallback(\r\n (nextCursor: number) => {\r\n const clamped = clampCursorOffset(inputRef.current, nextCursor);\r\n cursorOffsetRef.current = clamped;\r\n setCursorOffset(clamped);\r\n },\r\n [],\r\n );\r\n\r\n const resetHistoryNavigation = useCallback(() => {\r\n historyIndexRef.current = -1;\r\n setHistoryIndex(-1);\r\n previousHistoryIndexRef.current = undefined;\r\n historyCacheRef.current = {};\r\n }, []);\r\n\r\n const navigateHistory = useCallback(\r\n (nextIndex: number, defaultCursor: \"start\" | \"end\") => {\r\n const result = navigateHistoryState(\r\n {\r\n history: historyRef.current,\r\n historyIndex: historyIndexRef.current,\r\n previousHistoryIndex: previousHistoryIndexRef.current,\r\n cache: historyCacheRef.current,\r\n currentInput: inputRef.current,\r\n currentCursorOffset: cursorOffsetRef.current,\r\n },\r\n nextIndex,\r\n defaultCursor,\r\n );\r\n\r\n historyCacheRef.current = result.cache;\r\n historyIndexRef.current = result.historyIndex;\r\n previousHistoryIndexRef.current = result.previousHistoryIndex;\r\n setHistoryIndex(result.historyIndex);\r\n setInputWithCursor(result.input, result.cursorOffset);\r\n },\r\n [setInputWithCursor],\r\n );\r\n\r\n const applyAutocompleteSelection = useCallback(\r\n (selected: IAutocompleteItem, triggerMatch: ITriggerMatch) => {\r\n const currentInput = inputRef.current;\r\n const currentCursorOffset = cursorOffsetRef.current;\r\n const before = sliceCodePoints(currentInput, 0, triggerMatch.rangeStart);\r\n const after = sliceCodePoints(currentInput, currentCursorOffset);\r\n const nextInput = `${before}${selected.label} ${after}`;\r\n setInputWithCursor(nextInput, codePointLength(before) + codePointLength(selected.label) + 1);\r\n },\r\n [setInputWithCursor],\r\n );\r\n\r\n // Sync when initialHistory arrives async (after first render)\r\n useEffect(() => {\r\n if (initialHistory && initialHistory.length > 0) {\r\n setHistory((prev) => {\r\n if (prev.length === 0) return [...initialHistory];\r\n return prev;\r\n });\r\n }\r\n }, [initialHistory]);\r\n\r\n useEffect(() => {\r\n inputRef.current = input;\r\n cursorOffsetRef.current = cursorOffset;\r\n historyRef.current = history;\r\n historyIndexRef.current = historyIndex;\r\n }, [cursorOffset, history, historyIndex, input]);\r\n\r\n const triggerState = useMemo(() => detectTrigger(input, cursorOffset), [cursorOffset, input]);\r\n const autocompleteItems: readonly IAutocompleteItem[] = useMemo(() => {\r\n if (triggerState === null) return [];\r\n return getAutocompleteItems(triggerState.trigger, triggerState.query);\r\n }, [triggerState]);\r\n const isAutocompleteActive = autocompleteItems.length > 0;\r\n\r\n useEffect(() => {\r\n triggerStateRef.current = triggerState;\r\n autocompleteItemsRef.current = autocompleteItems;\r\n isAutocompleteActiveRef.current = isAutocompleteActive;\r\n }, [autocompleteItems, isAutocompleteActive, triggerState]);\r\n\r\n const appendToHistory = useCallback((entry: string) => {\r\n setHistory((prev) => {\r\n const next = [...prev.slice(-(MAX_HISTORY - 1)), entry];\r\n historyRef.current = next;\r\n return next;\r\n });\r\n }, []);\r\n\r\n useInput((inputChar, key) => {\r\n const currentInput = inputRef.current;\r\n const currentCursorOffset = cursorOffsetRef.current;\r\n const currentHistoryIndex = historyIndexRef.current;\r\n const currentHistory = historyRef.current;\r\n const currentTriggerState = triggerStateRef.current;\r\n const currentAutocompleteItems = autocompleteItemsRef.current;\r\n const currentAutocompleteActive = isAutocompleteActiveRef.current;\r\n\r\n if (isProcessing) {\r\n if (key.escape && onCancel) {\r\n onCancel();\r\n }\r\n return;\r\n }\r\n\r\n if (key.leftArrow) {\r\n setCursorPosition(currentCursorOffset - 1);\r\n return;\r\n }\r\n\r\n if (key.rightArrow) {\r\n setCursorPosition(currentCursorOffset + 1);\r\n return;\r\n }\r\n\r\n // ── Shift+Tab: cycle mode ───────────────────────────────\r\n if (key.tab && key.shift) {\r\n if (onModeChange) {\r\n const idx = MODE_ORDER.indexOf(mode);\r\n const next = MODE_ORDER[(idx + 1) % MODE_ORDER.length];\r\n if (next) {\r\n onModeChange(next);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n // ── History Navigation ──────────────────────────────────\r\n if (key.upArrow) {\r\n if (currentHistoryIndex !== -1) {\r\n if (currentHistoryIndex < currentHistory.length - 1) {\r\n navigateHistory(currentHistoryIndex + 1, \"end\");\r\n }\r\n return;\r\n }\r\n if (currentAutocompleteActive) {\r\n setSelectedIndex((prev) =>\r\n prev > 0 ? prev - 1 : currentAutocompleteItems.length - 1,\r\n );\r\n return;\r\n }\r\n if (currentHistory.length > 0) {\r\n navigateHistory(0, \"end\");\r\n }\r\n return;\r\n }\r\n\r\n if (key.downArrow) {\r\n if (currentHistoryIndex !== -1) {\r\n navigateHistory(currentHistoryIndex - 1, \"end\");\r\n return;\r\n }\r\n if (currentAutocompleteActive) {\r\n setSelectedIndex((prev) =>\r\n prev < currentAutocompleteItems.length - 1 ? prev + 1 : 0,\r\n );\r\n }\r\n return;\r\n }\r\n\r\n // ── Autocomplete Actions ────────────────────────────────\r\n if (currentAutocompleteActive) {\r\n if (key.tab) {\r\n const selected = currentAutocompleteItems[selectedIndex];\r\n if (selected && currentTriggerState) {\r\n applyAutocompleteSelection(selected, currentTriggerState);\r\n }\r\n return;\r\n }\r\n if (key.escape) {\r\n const result = insertTextAtCursor(currentInput, currentCursorOffset, \" \");\r\n setInputWithCursor(result.text, result.cursorOffset);\r\n return;\r\n }\r\n }\r\n\r\n // ── Submit ──────────────────────────────────────────────\r\n if (key.return) {\r\n if (currentHistoryIndex !== -1 && currentInput.trim().length > 0) {\r\n appendToHistory(currentInput.trim());\r\n onSubmit(currentInput.trim());\r\n setInputWithCursor(\"\");\r\n resetHistoryNavigation();\r\n return;\r\n }\r\n\r\n if (currentAutocompleteActive) {\r\n const selected = currentAutocompleteItems[selectedIndex];\r\n if (selected && currentTriggerState) {\r\n if (currentTriggerState.trigger === \"/\" && currentHistoryIndex === -1) {\r\n appendToHistory(selected.label.trim());\r\n onSubmit(selected.label.trim());\r\n setInputWithCursor(\"\");\r\n } else {\r\n applyAutocompleteSelection(selected, currentTriggerState);\r\n }\r\n resetHistoryNavigation();\r\n return;\r\n }\r\n }\r\n if (currentInput.trim().length > 0) {\r\n appendToHistory(currentInput.trim());\r\n onSubmit(currentInput.trim());\r\n setInputWithCursor(\"\");\r\n resetHistoryNavigation();\r\n }\r\n return;\r\n }\r\n\r\n // Backward delete (backspace): remove character before cursor.\r\n // On macOS, the keyboard Delete key sends \\x7f which Ink 5.x maps to\r\n // key.delete (not key.backspace). Both must trigger backward-delete so\r\n // the user can erase text normally. Ctrl+H is the classic fallback.\r\n if (key.backspace || key.delete || (key.ctrl && inputChar === \"h\")) {\r\n const result = backspaceAtCursor(currentInput, currentCursorOffset);\r\n setInputWithCursor(result.text, result.cursorOffset);\r\n return;\r\n }\r\n\r\n // Forward delete: Ctrl+D removes the character at/after the cursor.\r\n if (key.ctrl && inputChar === \"d\" && currentInput.length > 0) {\r\n const result = deleteAtCursor(currentInput, currentCursorOffset);\r\n setInputWithCursor(result.text, result.cursorOffset);\r\n return;\r\n }\r\n\r\n if (key.ctrl && inputChar === \"c\") { process.exit(0); return; }\r\n if (key.ctrl && inputChar === \"l\") return;\r\n\r\n if (!key.ctrl && !key.meta && inputChar) {\r\n const result = insertTextAtCursor(currentInput, currentCursorOffset, inputChar);\r\n setInputWithCursor(result.text, result.cursorOffset);\r\n }\r\n });\r\n\r\n const modeInfo = MODE_DISPLAY[mode];\r\n const borderColor = isProcessing ? colors.border.dim : modeInfo.color;\r\n const cursorChar = sliceCodePoints(input, cursorOffset, cursorOffset + 1);\r\n const beforeCursor = sliceCodePoints(input, 0, cursorOffset);\r\n const afterCursor = cursorChar.length > 0\r\n ? sliceCodePoints(input, cursorOffset + 1)\r\n : \"\";\r\n\r\n return (\r\n <Box flexDirection=\"column\">\r\n {isAutocompleteActive ? (\r\n <AutocompletePopup items={autocompleteItems} selectedIndex={selectedIndex} />\r\n ) : null}\r\n\r\n {/* Mode indicator bar */}\r\n <Box>\r\n <Text color={colors.border.dim}>{\"\\u2500\".repeat(4)} </Text>\r\n <Text color={modeInfo.color} bold>{modeInfo.icon} </Text>\r\n <Text color={modeInfo.color} bold>{modeInfo.label}</Text>\r\n <Text color={colors.text.muted}> (shift+tab to cycle)</Text>\r\n </Box>\r\n\r\n {/* Input box */}\r\n <Box borderStyle=\"round\" borderColor={borderColor} paddingX={1}>\r\n <Text color={modeInfo.color} bold>\r\n {\"\\u276F\"}{\" \"}\r\n </Text>\r\n {isProcessing ? (\r\n <Text color={colors.text.muted}>\r\n {onCancel ? \"esc to cancel\" : \"Processing\\u2026\"}\r\n </Text>\r\n ) : input.length > 0 ? (\r\n <Text>\r\n <Text color={colors.text.primary}>{beforeCursor}</Text>\r\n {cursorChar.length > 0 ? (\r\n <Text color={colors.text.primary} inverse>{cursorChar}</Text>\r\n ) : (\r\n <Text color={modeInfo.color}>{\"\\u2588\"}</Text>\r\n )}\r\n {afterCursor.length > 0 ? (\r\n <Text color={colors.text.primary}>{afterCursor}</Text>\r\n ) : null}\r\n </Text>\r\n ) : (\r\n <Text color={colors.text.muted}>\r\n {placeholder ?? \"Type a message\\u2026\"}\r\n <Text color={modeInfo.color}>{\"\\u2588\"}</Text>\r\n </Text>\r\n )}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * Status bar with flat brand color, model/role/token/cost display,\r\n * and git branch indicator.\r\n */\r\n\r\nimport React from \"react\";\r\nimport { Box, Text } from \"ink\";\r\nimport { BRAND_COLOR, colors } from \"../theme.js\";\r\n\r\ninterface IStatusBarProps {\r\n readonly model: string;\r\n readonly role?: string | undefined;\r\n readonly tokenCount: string;\r\n readonly cost: string;\r\n readonly gitBranch?: string | undefined;\r\n readonly gitChanges?: number | undefined;\r\n}\r\n\r\nfunction shortModelLabel(model: string): string {\r\n if (model.includes(\"opus\")) return \"Opus 4.6\";\r\n if (model.includes(\"sonnet\")) return \"Sonnet 4.6\";\r\n if (model.includes(\"haiku\")) return \"Haiku 4.5\";\r\n if (model.includes(\"gpt-5.2-mini\")) return \"GPT-5.2m\";\r\n if (model.includes(\"gpt-5.2\")) return \"GPT-5.2\";\r\n if (model.includes(\"o3\")) return \"o3\";\r\n if (model.includes(\"gemini\") && model.includes(\"pro\")) return \"Gem Pro\";\r\n if (model.includes(\"gemini\") && model.includes(\"flash\")) return \"Gem Flash\";\r\n if (model.includes(\"kimi\") || model.includes(\"k2\")) return \"Kimi\";\r\n return model;\r\n}\r\n\r\nconst SEP = \" \\u2502 \";\r\n\r\nexport function StatusBar({\r\n model,\r\n role,\r\n tokenCount,\r\n cost,\r\n gitBranch,\r\n gitChanges,\r\n}: IStatusBarProps): React.ReactElement {\r\n return (\r\n <Box borderStyle=\"round\" borderColor={colors.border.dim} paddingX={1}>\r\n <Text color={BRAND_COLOR} bold>\r\n {\"\\u25C6\"}{\" \"}\r\n </Text>\r\n <Text color={colors.status.active} bold>\r\n Aemeath Agent Swarm\r\n </Text>\r\n\r\n <Text color={colors.text.muted}>{SEP}</Text>\r\n <Text color={colors.status.warning} bold>\r\n {shortModelLabel(model)}\r\n </Text>\r\n\r\n {role ? (\r\n <>\r\n <Text color={colors.text.muted}>{SEP}</Text>\r\n <Text color={colors.role.tool}>{role}</Text>\r\n </>\r\n ) : null}\r\n\r\n <Text color={colors.text.muted}>{SEP}</Text>\r\n <Text color={colors.text.secondary}>{tokenCount} tok</Text>\r\n\r\n <Text color={colors.text.muted}>{SEP}</Text>\r\n <Text color={colors.status.success}>{cost}</Text>\r\n\r\n {gitBranch ? (\r\n <>\r\n <Text color={colors.text.muted}>{SEP}</Text>\r\n <Text color={colors.status.info}>\r\n {\"\\u2387\"} {gitBranch}\r\n {gitChanges !== undefined && gitChanges > 0\r\n ? ` \\u00B1${gitChanges}`\r\n : \"\"}\r\n </Text>\r\n </>\r\n ) : null}\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * AI thinking / processing state visualization.\r\n * Shows animated spinner with cycling status phrases, elapsed time,\r\n * and optional tool-activity description.\r\n */\r\n\r\nimport React, { useMemo } from \"react\";\r\nimport { Box, Text } from \"ink\";\r\nimport { GradientSpinner } from \"./GradientSpinner.js\";\r\nimport { colors } from \"../theme.js\";\r\nimport { useAnimationTick } from \"../hooks/use-animation-tick.js\";\r\n\r\ninterface IThinkingIndicatorProps {\r\n /** Current tool activity (e.g. \"Reading src/foo.ts\") */\r\n readonly activity?: string | undefined;\r\n /** True when the model has started emitting text tokens */\r\n readonly isStreaming?: boolean | undefined;\r\n /** Model name for the attribution line */\r\n readonly modelName?: string | undefined;\r\n /** Timestamp (ms) when thinking began, for the elapsed counter */\r\n readonly startTime?: number | undefined;\r\n}\r\n\r\nconst THINKING_PHRASES = [\r\n \"Thinking\",\r\n \"Analyzing\",\r\n \"Reasoning\",\r\n \"Processing\",\r\n \"Understanding\",\r\n \"Considering\",\r\n \"Evaluating\",\r\n] as const;\r\n\r\nconst PHRASE_CYCLE_MS = 2500;\r\n\r\nexport function ThinkingIndicator({\r\n activity,\r\n isStreaming,\r\n modelName,\r\n startTime,\r\n}: IThinkingIndicatorProps): React.ReactElement {\r\n const tick = useAnimationTick(1000);\r\n const elapsed = startTime === undefined ? 0 : Math.max(0, Date.now() - startTime);\r\n const phraseIndex = Math.floor(elapsed / PHRASE_CYCLE_MS) % THINKING_PHRASES.length;\r\n\r\n const elapsedStr = useMemo(() => {\r\n const secs = Math.floor(elapsed / 1000);\r\n if (secs < 1) return \"\";\r\n if (secs < 60) return `${secs}s`;\r\n const mins = Math.floor(secs / 60);\r\n return `${mins}m${secs % 60}s`;\r\n }, [elapsed]);\r\n\r\n const dotCount = tick % 4;\r\n const dots = \".\".repeat(dotCount);\r\n const phrase = THINKING_PHRASES[phraseIndex] ?? \"Thinking\";\r\n\r\n const displayText = activity\r\n ? activity\r\n : isStreaming\r\n ? \"Streaming response\"\r\n : `${phrase}${dots}`;\r\n\r\n return (\r\n <Box flexDirection=\"column\">\r\n {/* Model attribution */}\r\n {modelName ? (\r\n <Box>\r\n <Text color={colors.role.assistant} bold>\r\n {\"\\u2726\"}{\" \"}\r\n </Text>\r\n <Text color={colors.role.assistant} bold>\r\n {modelName}\r\n </Text>\r\n </Box>\r\n ) : null}\r\n\r\n {/* Spinner + activity label + elapsed */}\r\n <Box marginLeft={2}>\r\n <GradientSpinner\r\n variant={activity ? \"braille\" : \"dots\"}\r\n label={displayText}\r\n labelColor={activity ? colors.text.secondary : colors.text.muted}\r\n />\r\n {elapsedStr ? (\r\n <Text color={colors.text.muted}> ({elapsedStr})</Text>\r\n ) : null}\r\n </Box>\r\n\r\n {/* Cancel hint */}\r\n <Box marginLeft={2}>\r\n <Text color={colors.text.muted} dimColor>\r\n {\" \"}esc to cancel\r\n </Text>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * ASCII art welcome screen with mascot and flat brand colors.\r\n * Shown on first launch before any messages are sent.\r\n */\r\n\r\nimport React from \"react\";\r\nimport { Box, Text } from \"ink\";\r\nimport { BRAND_COLOR, colors } from \"../theme.js\";\r\n\r\ninterface IWelcomeScreenProps {\r\n readonly version?: string | undefined;\r\n}\r\n\r\nconst MASCOT_LINES = [\r\n \" :- \",\r\n \" :::::::: \",\r\n \" .:.:::.:::: \",\r\n \" ::--:::-:: :: \",\r\n \" -:##**%%:- \",\r\n \" :=+==++: : \",\r\n \" ::==++=-:. \",\r\n \"-:-=*:----:=-::*==:-\",\r\n \" = -::::- - \",\r\n] as const;\r\n\r\nconst LOGO_LINES = [\r\n \" \\u2588\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2557\",\r\n \"\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255D\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u2550\\u2550\\u255D\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2557\\u2554\\u2550\\u2550\\u2588\\u2588\\u2554\\u2550\\u2550\\u255D\\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551\",\r\n \"\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2554\\u2588\\u2588\\u2588\\u2588\\u2554\\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551 \\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2551\",\r\n \"\\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255D \\u2588\\u2588\\u2551\\u2554\\u2588\\u2588\\u2554\\u255D\\u2588\\u2588\\u2551\\u2588\\u2588\\u2554\\u2550\\u2550\\u255D \\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551 \\u2588\\u2588\\u2554\\u2550\\u2550\\u2588\\u2588\\u2551\",\r\n \"\\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551 \\u2554\\u2550\\u255D \\u2588\\u2588\\u2551\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2588\\u2557\\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551 \\u2588\\u2588\\u2551\",\r\n \"\\u2554\\u2550\\u255D \\u2554\\u2550\\u255D\\u2554\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255D\\u2554\\u2550\\u255D \\u2554\\u2550\\u255D\\u2554\\u2550\\u2550\\u2550\\u2550\\u2550\\u2550\\u255D\\u2554\\u2550\\u255D \\u2554\\u2550\\u255D \\u2554\\u2550\\u255D \\u2554\\u2550\\u255D \\u2554\\u2550\\u255D\",\r\n] as const;\r\n\r\nconst TIPS = [\r\n { key: \"/help\", desc: \"Show all commands\" },\r\n { key: \"/model\", desc: \"Switch AI model\" },\r\n { key: \"Shift+Tab\", desc: \"Cycle swarm/edit/chat modes\" },\r\n { key: \"Tab\", desc: \"Autocomplete or focus next agent\" },\r\n { key: \"@\", desc: \"Reference project files\" },\r\n { key: \"$skill\", desc: \"Invoke skills\" },\r\n] as const;\r\n\r\nconst TIP_ROWS = [TIPS.slice(0, 2), TIPS.slice(2, 4), TIPS.slice(4)] as const;\r\n\r\nexport function WelcomeScreen({\r\n version,\r\n}: IWelcomeScreenProps): React.ReactElement {\r\n return (\r\n <Box\r\n flexDirection=\"column\"\r\n flexGrow={1}\r\n paddingX={2}\r\n justifyContent=\"center\"\r\n alignItems=\"center\"\r\n marginBottom={1}\r\n >\r\n {/* Mascot (left) + Logo (right), vertically centered via alignItems */}\r\n <Box alignItems=\"center\">\r\n <Box flexDirection=\"column\" marginRight={2}>\r\n {MASCOT_LINES.map((line, i) => (\r\n <Text key={`m${i}`} color={BRAND_COLOR}>{line}</Text>\r\n ))}\r\n </Box>\r\n <Box flexDirection=\"column\">\r\n {LOGO_LINES.map((line, i) => (\r\n <Text key={i} color={BRAND_COLOR}>{line}</Text>\r\n ))}\r\n </Box>\r\n </Box>\r\n\r\n {/* Tagline divider — centered below */}\r\n <Box marginBottom={0}>\r\n <Text color={colors.border.active}>\r\n {\"\\u2500\".repeat(16)}{\" \"}\r\n </Text>\r\n <Text color={colors.text.accent} bold>\r\n Aemeath Agent Swarm\r\n </Text>\r\n <Text color={colors.border.active}>\r\n {\" \"}{\"\\u2500\".repeat(16)}\r\n </Text>\r\n </Box>\r\n\r\n {/* Version — centered */}\r\n {version ? (\r\n <Box>\r\n <Text color={colors.text.muted}>v{version}</Text>\r\n </Box>\r\n ) : null}\r\n\r\n {/* Quick-start tips */}\r\n <Box flexDirection=\"column\">\r\n <Box marginBottom={1}>\r\n <Text color={colors.text.secondary} bold>\r\n Quick Start\r\n </Text>\r\n </Box>\r\n {TIP_ROWS.map((row, rowIndex) => (\r\n <Box key={`tip-row-${rowIndex}`}>\r\n {row.map((tip, tipIndex) => (\r\n <Box\r\n key={tip.key}\r\n flexDirection=\"column\"\r\n width={40}\r\n marginRight={tipIndex < row.length - 1 ? 3 : 0}\r\n >\r\n <Text color={colors.status.active} bold>\r\n {tip.key}\r\n </Text>\r\n <Text color={colors.text.muted}>{tip.desc}</Text>\r\n </Box>\r\n ))}\r\n </Box>\r\n ))}\r\n </Box>\r\n\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * Default single-pane layout with animated welcome screen,\r\n * streaming content display, and thinking indicator.\r\n */\r\n\r\nimport React, { useRef } from \"react\";\r\nimport { Box, Text } from \"ink\";\r\nimport { MessageView } from \"../components/MessageView.js\";\r\nimport { InputBar } from \"../components/InputBar.js\";\r\nimport { StatusBar } from \"../components/StatusBar.js\";\r\nimport { ThinkingIndicator } from \"../components/ThinkingIndicator.js\";\r\nimport { WelcomeScreen } from \"../components/WelcomeScreen.js\";\r\nimport { MarkdownContent } from \"../components/MarkdownContent.js\";\r\nimport { colors } from \"../theme.js\";\r\nimport type { InputMode } from \"../components/InputBar.js\";\r\nimport type { IChatMessage } from \"../../types/index.js\";\r\nimport { PACKAGE_VERSION } from \"../../version.js\";\r\n\r\ninterface ISinglePaneProps {\r\n readonly messages: readonly IChatMessage[];\r\n readonly isProcessing: boolean;\r\n readonly onSubmit: (input: string) => void;\r\n readonly onCancel?: (() => void) | undefined;\r\n readonly model: string;\r\n readonly role?: string | undefined;\r\n readonly tokenCount: string;\r\n readonly cost: string;\r\n readonly gitBranch?: string | undefined;\r\n readonly gitChanges?: number | undefined;\r\n readonly streamingContent?: string | undefined;\r\n readonly activity?: string | undefined;\r\n readonly initialHistory?: readonly string[] | undefined;\r\n readonly mode?: InputMode | undefined;\r\n readonly onModeChange?: ((mode: InputMode) => void) | undefined;\r\n}\r\n\r\n/** Shorten model ID for display */\r\nfunction shortModelName(model: string): string {\r\n if (model.includes(\"opus\")) return \"Opus 4.6\";\r\n if (model.includes(\"sonnet\")) return \"Sonnet 4.6\";\r\n if (model.includes(\"haiku\")) return \"Haiku 4.5\";\r\n if (model.includes(\"gpt-5.2-mini\")) return \"GPT-5.2m\";\r\n if (model.includes(\"gpt-5.2\")) return \"GPT-5.2\";\r\n if (model.includes(\"o3\")) return \"o3\";\r\n if (model.includes(\"gemini\") && model.includes(\"pro\")) return \"Gem Pro\";\r\n if (model.includes(\"gemini\") && model.includes(\"flash\")) return \"Gem Flash\";\r\n if (model.includes(\"kimi\") || model.includes(\"k2\")) return \"Kimi\";\r\n return model;\r\n}\r\n\r\n/** Truncate text to last N lines for bounded display */\r\nfunction tailLines(text: string, maxLines: number): string {\r\n const lines = text.split(\"\\n\");\r\n if (lines.length <= maxLines) return text;\r\n return lines.slice(-maxLines).join(\"\\n\");\r\n}\r\n\r\nexport function SinglePane({\r\n messages,\r\n isProcessing,\r\n onSubmit,\r\n onCancel,\r\n model,\r\n role,\r\n tokenCount,\r\n cost,\r\n gitBranch,\r\n gitChanges,\r\n streamingContent,\r\n activity,\r\n initialHistory,\r\n mode,\r\n onModeChange,\r\n}: ISinglePaneProps): React.ReactElement {\r\n // Track when processing started for elapsed time display\r\n const processingStartRef = useRef<number | undefined>(undefined);\r\n if (isProcessing && processingStartRef.current === undefined) {\r\n processingStartRef.current = Date.now();\r\n } else if (!isProcessing) {\r\n processingStartRef.current = undefined;\r\n }\r\n\r\n const hasContent = streamingContent !== undefined && streamingContent.length > 0;\r\n\r\n return (\r\n <Box flexDirection=\"column\" height=\"100%\">\r\n <StatusBar\r\n model={model}\r\n role={role}\r\n tokenCount={tokenCount}\r\n cost={cost}\r\n gitBranch={gitBranch}\r\n gitChanges={gitChanges}\r\n />\r\n\r\n {messages.length === 0 && !isProcessing ? (\r\n /* ── Welcome screen ────────────────────────────────── */\r\n <WelcomeScreen\r\n version={PACKAGE_VERSION}\r\n />\r\n ) : (\r\n <>\r\n <MessageView messages={messages} />\r\n\r\n {isProcessing ? (\r\n <Box flexDirection=\"column\" marginLeft={1} marginBottom={1}>\r\n {/* Streaming content preview */}\r\n {hasContent ? (\r\n <Box flexDirection=\"column\" marginLeft={2} marginBottom={1}>\r\n <Box>\r\n <Text color={colors.role.assistant} bold>\r\n {\"\\u2726\"} {shortModelName(model)}\r\n </Text>\r\n </Box>\r\n <Box marginLeft={2}>\r\n <MarkdownContent content={tailLines(streamingContent, 12)} />\r\n </Box>\r\n </Box>\r\n ) : null}\r\n\r\n {/* Thinking indicator with elapsed time */}\r\n <ThinkingIndicator\r\n activity={activity}\r\n isStreaming={hasContent}\r\n modelName={hasContent ? undefined : shortModelName(model)}\r\n startTime={processingStartRef.current}\r\n />\r\n </Box>\r\n ) : null}\r\n </>\r\n )}\r\n\r\n <InputBar\r\n onSubmit={onSubmit}\r\n isProcessing={isProcessing}\r\n onCancel={onCancel}\r\n initialHistory={initialHistory}\r\n mode={mode}\r\n onModeChange={onModeChange}\r\n />\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * Multi-agent hub-and-spoke layout for fallback TUI mode.\r\n * The sponsoring master agent stays on the left half, while worker agents\r\n * remain visible in a stacked right column.\r\n */\r\n\r\nimport React from \"react\";\r\nimport { Box, Text, useInput } from \"ink\";\r\nimport { colors } from \"../theme.js\";\r\nimport type { IAgentState } from \"../../types/index.js\";\r\n\r\ninterface ISplitPanelProps {\r\n readonly agents: readonly IAgentState[];\r\n readonly activeAgentIndex: number;\r\n readonly onSelectAgent: (index: number) => void;\r\n readonly agentOutputs: ReadonlyMap<string, string>;\r\n}\r\n\r\nfunction getStatusColor(status: string): string {\r\n switch (status) {\r\n case \"active\":\r\n return colors.status.success;\r\n case \"idle\":\r\n return colors.status.warning;\r\n case \"error\":\r\n return colors.status.error;\r\n case \"shutdown\":\r\n return colors.text.muted;\r\n default:\r\n return colors.text.primary;\r\n }\r\n}\r\n\r\nfunction shortModelLabel(model: string): string {\r\n if (model.includes(\"opus\")) return \"Opus\";\r\n if (model.includes(\"sonnet\")) return \"Sonnet\";\r\n if (model.includes(\"haiku\")) return \"Haiku\";\r\n if (model.includes(\"gpt-5\")) return \"GPT-5\";\r\n if (model.includes(\"gemini\") && model.includes(\"pro\")) return \"Gem-Pro\";\r\n if (model.includes(\"gemini\") && model.includes(\"flash\")) return \"Gem-Flash\";\r\n if (model.includes(\"kimi\") || model.includes(\"k2\")) return \"Kimi\";\r\n const parts = model.split(\"-\");\r\n return parts[parts.length - 1] ?? model.slice(0, 8);\r\n}\r\n\r\nfunction statusIndicator(status: string): string {\r\n switch (status) {\r\n case \"active\":\r\n return \"\\u25CF\";\r\n case \"idle\":\r\n return \"\\u25CB\";\r\n case \"error\":\r\n return \"\\u2716\";\r\n default:\r\n return \"\\u2500\";\r\n }\r\n}\r\n\r\nfunction classifyLine(\r\n line: string,\r\n): \"tool\" | \"result\" | \"error\" | \"text\" | \"empty\" {\r\n if (line.length === 0) return \"empty\";\r\n if (line.startsWith(\"\\u2699\") || line.startsWith(\"\\u2699\\uFE0F\")) return \"tool\";\r\n if (line.startsWith(\" \\u2192\")) return \"result\";\r\n if (line.startsWith(\"Error:\") || line.startsWith(\"Stream error:\")) return \"error\";\r\n return \"text\";\r\n}\r\n\r\nfunction renderLine(line: string, key: string): React.ReactElement {\r\n const type = classifyLine(line);\r\n switch (type) {\r\n case \"tool\":\r\n return (\r\n <Text key={key} color={colors.role.tool}>\r\n {line}\r\n </Text>\r\n );\r\n case \"result\":\r\n return (\r\n <Text key={key} color={colors.text.muted}>\r\n {line}\r\n </Text>\r\n );\r\n case \"error\":\r\n return (\r\n <Text key={key} color={colors.status.error} bold>\r\n {line}\r\n </Text>\r\n );\r\n case \"empty\":\r\n return <Text key={key}>{\" \"}</Text>;\r\n default:\r\n return (\r\n <Text key={key} wrap=\"wrap\">\r\n {line}\r\n </Text>\r\n );\r\n }\r\n}\r\n\r\ninterface IVisibleLine {\r\n readonly absoluteIndex: number;\r\n readonly content: string;\r\n}\r\n\r\nfunction getVisibleLines(output: string, maxLines: number): readonly IVisibleLine[] {\r\n const lines = output.split(\"\\n\");\r\n const startIndex = Math.max(0, lines.length - maxLines);\r\n return lines.slice(startIndex).map((content, index) => ({\r\n absoluteIndex: startIndex + index,\r\n content,\r\n }));\r\n}\r\n\r\nfunction getLastActivity(output: string): string | undefined {\r\n const lines = output.split(\"\\n\");\r\n for (let index = lines.length - 1; index >= 0; index--) {\r\n const line = lines[index];\r\n if (!line) continue;\r\n const trimmed = line.trim();\r\n if (trimmed.length === 0) continue;\r\n const type = classifyLine(trimmed);\r\n if (type === \"tool\" || type === \"result\" || type === \"error\") {\r\n return trimmed;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction AgentFrameComponent({\r\n agent,\r\n output,\r\n titlePrefix,\r\n isFocused,\r\n maxLines,\r\n}: {\r\n readonly agent: IAgentState;\r\n readonly output: string;\r\n readonly titlePrefix: string;\r\n readonly isFocused: boolean;\r\n readonly maxLines: number;\r\n}): React.ReactElement {\r\n const previewLines = React.useMemo(\r\n () => getVisibleLines(output, maxLines),\r\n [maxLines, output],\r\n );\r\n const lastActivity = React.useMemo(\r\n () => getLastActivity(output),\r\n [output],\r\n );\r\n\r\n return (\r\n <Box\r\n flexDirection=\"column\"\r\n borderStyle={isFocused ? \"round\" : \"single\"}\r\n borderColor={isFocused ? colors.status.active : colors.border.dim}\r\n paddingX={1}\r\n paddingY={0}\r\n marginBottom={1}\r\n >\r\n <Box>\r\n <Text color={getStatusColor(agent.status)}>{statusIndicator(agent.status)} </Text>\r\n <Text color={colors.status.active} bold>\r\n {titlePrefix} {agent.config.name}\r\n </Text>\r\n <Text color={colors.text.muted}>\r\n {\" \"}\r\n {\"\\u2014\"} {agent.config.role} {\"\\u00B7\"} {shortModelLabel(agent.config.model)}\r\n </Text>\r\n </Box>\r\n {lastActivity ? (\r\n <Box>\r\n <Text color={colors.text.muted} dimColor>\r\n {lastActivity.length > 72 ? `${lastActivity.slice(0, 72)}\\u2026` : lastActivity}\r\n </Text>\r\n </Box>\r\n ) : null}\r\n <Box flexDirection=\"column\" marginTop={1}>\r\n {previewLines.length > 0\r\n ? previewLines.map((line) =>\r\n renderLine(\r\n line.content,\r\n `${agent.config.agentId}-${line.absoluteIndex}`,\r\n ))\r\n : (\r\n <Text color={colors.text.muted}>\r\n {agent.status === \"active\" ? \"Initializing\\u2026\" : \"Waiting for work\\u2026\"}\r\n </Text>\r\n )}\r\n </Box>\r\n {agent.status === \"active\" ? (\r\n <Box marginTop={1}>\r\n <Text color={colors.text.muted}>\r\n {titlePrefix === \"Master\" ? \"Coordinating\\u2026\" : \"Working\\u2026\"}\r\n </Text>\r\n </Box>\r\n ) : null}\r\n </Box>\r\n );\r\n}\r\n\r\nconst AgentFrame = React.memo(\r\n AgentFrameComponent,\r\n (previousProps, nextProps) => (\r\n previousProps.agent === nextProps.agent &&\r\n previousProps.output === nextProps.output &&\r\n previousProps.titlePrefix === nextProps.titlePrefix &&\r\n previousProps.isFocused === nextProps.isFocused &&\r\n previousProps.maxLines === nextProps.maxLines\r\n ),\r\n);\r\n\r\nexport function SplitPanel({\r\n agents,\r\n activeAgentIndex,\r\n onSelectAgent,\r\n agentOutputs,\r\n}: ISplitPanelProps): React.ReactElement {\r\n useInput((input, key) => {\r\n if (key.tab) {\r\n onSelectAgent((activeAgentIndex + 1) % agents.length);\r\n return;\r\n }\r\n\r\n const numericKey = Number.parseInt(input, 10);\r\n if (\r\n !Number.isNaN(numericKey) &&\r\n numericKey >= 1 &&\r\n numericKey <= agents.length &&\r\n key.ctrl\r\n ) {\r\n onSelectAgent(numericKey - 1);\r\n }\r\n });\r\n\r\n const [masterAgent, ...workerAgents] = agents;\r\n const focusedAgent = agents[activeAgentIndex];\r\n\r\n if (!masterAgent) {\r\n return (\r\n <Box flexGrow={1} borderStyle=\"round\" borderColor={colors.border.dim} paddingX={1}>\r\n <Text color={colors.text.muted}>No agents active</Text>\r\n </Box>\r\n );\r\n }\r\n\r\n const masterOutput = agentOutputs.get(masterAgent.config.agentId) ?? \"\";\r\n\r\n return (\r\n <Box flexDirection=\"column\" flexGrow={1}>\r\n <Box marginBottom={1}>\r\n <Text color={colors.text.muted}>Focus: </Text>\r\n <Text color={colors.status.active} bold>\r\n {focusedAgent?.config.name ?? masterAgent.config.name}\r\n </Text>\r\n <Text color={colors.text.muted}> </Text>\r\n <Text color={colors.status.active} bold>Tab</Text>\r\n <Text color={colors.text.muted}> cycle </Text>\r\n <Text color={colors.status.active} bold>Ctrl+1</Text>\r\n <Text color={colors.text.muted}>-</Text>\r\n <Text color={colors.status.active} bold>{agents.length}</Text>\r\n <Text color={colors.text.muted}> jump </Text>\r\n <Text color={colors.status.warning} bold>/team stop</Text>\r\n <Text color={colors.text.muted}> exit swarm</Text>\r\n </Box>\r\n\r\n <Box flexGrow={1}>\r\n <Box flexBasis=\"50%\" flexDirection=\"column\" paddingRight={1}>\r\n <AgentFrame\r\n agent={masterAgent}\r\n output={masterOutput}\r\n titlePrefix=\"Master\"\r\n isFocused={activeAgentIndex === 0}\r\n maxLines={28}\r\n />\r\n </Box>\r\n\r\n <Box flexBasis=\"50%\" flexDirection=\"column\" paddingLeft={1}>\r\n {workerAgents.length > 0 ? (\r\n workerAgents.map((agent, index) => (\r\n <AgentFrame\r\n key={agent.config.agentId}\r\n agent={agent}\r\n output={agentOutputs.get(agent.config.agentId) ?? \"\"}\r\n titlePrefix=\"Worker\"\r\n isFocused={activeAgentIndex === index + 1}\r\n maxLines={8}\r\n />\r\n ))\r\n ) : (\r\n <Box borderStyle=\"single\" borderColor={colors.border.dim} paddingX={1}>\r\n <Text color={colors.text.muted}>No worker agents in this swarm.</Text>\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n <Box marginTop={0}>\r\n <Text color={colors.text.muted}>\r\n Input is sent to the focused agent. The master agent remains pinned to the left pane.\r\n </Text>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * Split-pane team layout per PRD section 9.5 (in-process fallback)\r\n */\r\n\r\nimport React from \"react\";\r\nimport { Box } from \"ink\";\r\nimport { SplitPanel } from \"../components/SplitPanel.js\";\r\nimport { InputBar } from \"../components/InputBar.js\";\r\nimport { StatusBar } from \"../components/StatusBar.js\";\r\nimport type { IAgentState } from \"../../types/index.js\";\r\n\r\ninterface ISplitPaneProps {\r\n readonly agents: readonly IAgentState[];\r\n readonly activeAgentIndex: number;\r\n readonly onSelectAgent: (index: number) => void;\r\n readonly agentOutputs: ReadonlyMap<string, string>;\r\n readonly isProcessing: boolean;\r\n readonly onSubmit: (input: string) => void;\r\n readonly onCancel?: (() => void) | undefined;\r\n readonly model: string;\r\n readonly role?: string | undefined;\r\n readonly tokenCount: string;\r\n readonly cost: string;\r\n readonly gitBranch?: string | undefined;\r\n}\r\n\r\nexport function SplitPane({\r\n agents,\r\n activeAgentIndex,\r\n onSelectAgent,\r\n agentOutputs,\r\n isProcessing,\r\n onSubmit,\r\n onCancel,\r\n model,\r\n role,\r\n tokenCount,\r\n cost,\r\n gitBranch,\r\n}: ISplitPaneProps): React.ReactElement {\r\n return (\r\n <Box flexDirection=\"column\" height=\"100%\">\r\n <StatusBar model={model} role={role} tokenCount={tokenCount} cost={cost} gitBranch={gitBranch} />\r\n <SplitPanel\r\n agents={agents}\r\n activeAgentIndex={activeAgentIndex}\r\n onSelectAgent={onSelectAgent}\r\n agentOutputs={agentOutputs}\r\n />\r\n <InputBar onSubmit={onSubmit} isProcessing={isProcessing} onCancel={onCancel} />\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * Model interaction hook per PRD section 6.2\r\n * Manages the active model resolution and provider access\r\n */\r\n\r\nimport { useState, useCallback, useMemo } from \"react\";\r\nimport type { ModelRole, IModelResolution, IGlobalConfig } from \"../../types/index.js\";\r\nimport { createModelRouter } from \"../../core/index.js\";\r\nimport type { ModelRouter } from \"../../core/index.js\";\r\n\r\ninterface IUseModelReturn {\r\n readonly resolution: IModelResolution;\r\n readonly modelId: string;\r\n readonly switchModel: (modelId: string) => void;\r\n readonly switchRole: (role: ModelRole) => void;\r\n readonly router: ModelRouter;\r\n}\r\n\r\nexport function useModel(\r\n config: IGlobalConfig,\r\n initialModel?: string,\r\n initialRole?: ModelRole,\r\n): IUseModelReturn {\r\n const router = useMemo(() => createModelRouter(config), [config]);\r\n\r\n const [userOverride, setUserOverride] = useState<string | undefined>(initialModel);\r\n const [currentRole, setCurrentRole] = useState<ModelRole | undefined>(initialRole);\r\n\r\n const resolution = useMemo(\r\n () => {\r\n router.setUserOverride(userOverride);\r\n return router.resolve(currentRole);\r\n },\r\n [router, currentRole, userOverride],\r\n );\r\n\r\n const switchModel = useCallback((modelId: string) => {\r\n setUserOverride(modelId);\r\n }, []);\r\n\r\n const switchRole = useCallback(\r\n (role: ModelRole) => {\r\n router.setUserOverride(undefined);\r\n setCurrentRole(role);\r\n setUserOverride(undefined);\r\n },\r\n [router],\r\n );\r\n\r\n return {\r\n resolution,\r\n modelId: resolution.modelId,\r\n switchModel,\r\n switchRole,\r\n router,\r\n };\r\n}\r\n","/**\r\n * Streaming response hook with tool-call state tracking.\r\n * Handles real-time token-by-token output from AI models\r\n * and provides structured tool execution state for UI rendering.\r\n */\r\n\r\nimport { useState, useCallback, useRef } from \"react\";\r\nimport type { IStreamChunk, ITokenUsage } from \"../../types/index.js\";\r\nimport type { ToolStatus } from \"../components/ToolCallDisplay.js\";\r\n\r\nexport interface IToolCallState {\r\n readonly id: string;\r\n readonly name: string;\r\n readonly description: string;\r\n readonly status: ToolStatus;\r\n readonly startTime: number;\r\n readonly endTime?: number;\r\n}\r\n\r\ninterface IStreamState {\r\n readonly isStreaming: boolean;\r\n readonly content: string;\r\n readonly usage: ITokenUsage | undefined;\r\n readonly error: string | undefined;\r\n readonly activity: string | undefined;\r\n /** Ordered list of tool calls with their current status. */\r\n readonly toolCalls: readonly IToolCallState[];\r\n /** Timestamp when streaming began. */\r\n readonly startTime: number | undefined;\r\n}\r\n\r\ninterface IUseStreamReturn {\r\n readonly state: IStreamState;\r\n readonly startStream: (stream: AsyncIterable<IStreamChunk>) => Promise<void>;\r\n readonly cancelStream: () => void;\r\n readonly reset: () => void;\r\n}\r\n\r\n/** Format a tool call into a short human-readable activity label. */\r\nfunction formatToolActivity(toolCall: {\r\n name: string;\r\n arguments: Record<string, unknown>;\r\n}): string {\r\n const args = toolCall.arguments;\r\n switch (toolCall.name) {\r\n case \"read\": {\r\n const fp = typeof args[\"file_path\"] === \"string\" ? args[\"file_path\"] : \"\";\r\n const short = fp.split(\"/\").slice(-2).join(\"/\");\r\n return `Reading ${short || \"file\"}`;\r\n }\r\n case \"write\": {\r\n const fp = typeof args[\"file_path\"] === \"string\" ? args[\"file_path\"] : \"\";\r\n const short = fp.split(\"/\").slice(-2).join(\"/\");\r\n return `Writing ${short || \"file\"}`;\r\n }\r\n case \"edit\": {\r\n const fp = typeof args[\"file_path\"] === \"string\" ? args[\"file_path\"] : \"\";\r\n const short = fp.split(\"/\").slice(-2).join(\"/\");\r\n return `Editing ${short || \"file\"}`;\r\n }\r\n case \"glob\": {\r\n const pat =\r\n typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\r\n return `Searching files ${pat}`;\r\n }\r\n case \"grep\": {\r\n const pat =\r\n typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\r\n return `Searching for \"${pat.length > 30 ? pat.slice(0, 30) + \"\\u2026\" : pat}\"`;\r\n }\r\n case \"bash\": {\r\n const cmd =\r\n typeof args[\"command\"] === \"string\" ? args[\"command\"] : \"\";\r\n const short = cmd.length > 40 ? cmd.slice(0, 40) + \"\\u2026\" : cmd;\r\n return `Running ${short}`;\r\n }\r\n case \"web_search\":\r\n case \"webSearch\":\r\n return \"Searching the web\";\r\n case \"web_fetch\":\r\n case \"webFetch\":\r\n return \"Fetching URL\";\r\n default:\r\n return `Calling ${toolCall.name}`;\r\n }\r\n}\r\n\r\nexport function useStream(): IUseStreamReturn {\r\n const [state, setState] = useState<IStreamState>({\r\n isStreaming: false,\r\n content: \"\",\r\n usage: undefined,\r\n error: undefined,\r\n activity: undefined,\r\n toolCalls: [],\r\n startTime: undefined,\r\n });\r\n\r\n const cancelRef = useRef(false);\r\n const isCancelled = (): boolean => cancelRef.current;\r\n\r\n const startStream = useCallback(\r\n async (stream: AsyncIterable<IStreamChunk>) => {\r\n cancelRef.current = false;\r\n setState({\r\n isStreaming: true,\r\n content: \"\",\r\n usage: undefined,\r\n error: undefined,\r\n activity: undefined,\r\n toolCalls: [],\r\n startTime: Date.now(),\r\n });\r\n\r\n try {\r\n for await (const chunk of stream) {\r\n if (isCancelled()) break;\r\n\r\n switch (chunk.type) {\r\n case \"text\":\r\n if (chunk.content !== undefined) {\r\n const text = chunk.content;\r\n setState((prev) => ({\r\n ...prev,\r\n content: prev.content + text,\r\n activity: undefined,\r\n }));\r\n }\r\n break;\r\n\r\n case \"tool_call\":\r\n if (chunk.toolCall !== undefined) {\r\n const toolCall = chunk.toolCall;\r\n const desc = formatToolActivity(toolCall);\r\n const callState: IToolCallState = {\r\n id:\r\n toolCall.name +\r\n \"-\" +\r\n Date.now().toString(36),\r\n name: toolCall.name,\r\n description: desc,\r\n status: \"executing\",\r\n startTime: Date.now(),\r\n };\r\n setState((prev) => ({\r\n ...prev,\r\n activity: desc,\r\n toolCalls: [\r\n // Mark previous executing calls as success\r\n ...prev.toolCalls.map((tc) =>\r\n tc.status === \"executing\"\r\n ? {\r\n ...tc,\r\n status: \"success\" as const,\r\n endTime: Date.now(),\r\n }\r\n : tc,\r\n ),\r\n callState,\r\n ],\r\n }));\r\n }\r\n break;\r\n\r\n case \"usage\":\r\n if (chunk.usage) {\r\n setState((prev) => ({\r\n ...prev,\r\n usage: chunk.usage,\r\n }));\r\n }\r\n break;\r\n\r\n case \"error\":\r\n setState((prev) => ({\r\n ...prev,\r\n error: chunk.error,\r\n isStreaming: false,\r\n activity: undefined,\r\n toolCalls: prev.toolCalls.map((tc) =>\r\n tc.status === \"executing\"\r\n ? {\r\n ...tc,\r\n status: \"error\" as const,\r\n endTime: Date.now(),\r\n }\r\n : tc,\r\n ),\r\n }));\r\n return;\r\n\r\n case \"done\":\r\n setState((prev) => ({\r\n ...prev,\r\n isStreaming: false,\r\n usage: chunk.usage ?? prev.usage,\r\n activity: undefined,\r\n toolCalls: prev.toolCalls.map((tc) =>\r\n tc.status === \"executing\"\r\n ? {\r\n ...tc,\r\n status: \"success\" as const,\r\n endTime: Date.now(),\r\n }\r\n : tc,\r\n ),\r\n }));\r\n return;\r\n }\r\n }\r\n\r\n setState((prev) => ({\r\n ...prev,\r\n isStreaming: false,\r\n activity: undefined,\r\n toolCalls: prev.toolCalls.map((tc) =>\r\n tc.status === \"executing\"\r\n ? {\r\n ...tc,\r\n status: \"success\" as const,\r\n endTime: Date.now(),\r\n }\r\n : tc,\r\n ),\r\n }));\r\n } catch (error: unknown) {\r\n setState((prev) => ({\r\n ...prev,\r\n isStreaming: false,\r\n error: error instanceof Error ? error.message : String(error),\r\n activity: undefined,\r\n }));\r\n }\r\n },\r\n [],\r\n );\r\n\r\n const cancelStream = useCallback(() => {\r\n cancelRef.current = true;\r\n setState((prev) => ({\r\n ...prev,\r\n isStreaming: false,\r\n toolCalls: prev.toolCalls.map((tc) =>\r\n tc.status === \"executing\"\r\n ? {\r\n ...tc,\r\n status: \"cancelled\" as const,\r\n endTime: Date.now(),\r\n }\r\n : tc,\r\n ),\r\n }));\r\n }, []);\r\n\r\n const reset = useCallback(() => {\r\n cancelRef.current = true;\r\n setState({\r\n isStreaming: false,\r\n content: \"\",\r\n usage: undefined,\r\n error: undefined,\r\n activity: undefined,\r\n toolCalls: [],\r\n startTime: undefined,\r\n });\r\n }, []);\r\n\r\n return { state, startStream, cancelStream, reset };\r\n}\r\n","/**\r\n * Cost tracking hook per PRD section 7.5\r\n */\r\n\r\nimport { useState, useEffect, useCallback, useRef } from \"react\";\r\nimport type { ICostConfig, ProviderName, ModelRole } from \"../../types/index.js\";\r\nimport { CostTracker, getEventBus } from \"../../core/index.js\";\r\nimport { formatCost, formatTokenCount } from \"../../utils/index.js\";\r\n\r\ninterface IUseCostReturn {\r\n readonly totalCost: string;\r\n readonly totalTokens: string;\r\n readonly isBudgetExceeded: boolean;\r\n readonly record: (\r\n provider: ProviderName,\r\n model: string,\r\n inputTokens: number,\r\n outputTokens: number,\r\n role?: ModelRole,\r\n ) => void;\r\n readonly tracker: CostTracker;\r\n}\r\n\r\nexport function useCost(config: ICostConfig): IUseCostReturn {\r\n const trackerRef = useRef(new CostTracker(config));\r\n const [totalCost, setTotalCost] = useState(\"$0.00\");\r\n const [totalTokens, setTotalTokens] = useState(\"0\");\r\n const [isBudgetExceeded, setIsBudgetExceeded] = useState(false);\r\n\r\n useEffect(() => {\r\n const eventBus = getEventBus();\r\n\r\n const unsubCost = eventBus.on(\"cost:updated\", ({ total }) => {\r\n setTotalCost(formatCost(total));\r\n const tokens = trackerRef.current.getSessionTokens();\r\n setTotalTokens(formatTokenCount(tokens.total));\r\n });\r\n\r\n const unsubExceeded = eventBus.on(\"cost:exceeded\", () => {\r\n setIsBudgetExceeded(true);\r\n });\r\n\r\n return () => {\r\n unsubCost();\r\n unsubExceeded();\r\n };\r\n }, []);\r\n\r\n const record = useCallback(\r\n (\r\n provider: ProviderName,\r\n model: string,\r\n inputTokens: number,\r\n outputTokens: number,\r\n role?: ModelRole,\r\n ) => {\r\n trackerRef.current.record(provider, model, inputTokens, outputTokens, role);\r\n },\r\n [],\r\n );\r\n\r\n return {\r\n totalCost,\r\n totalTokens,\r\n isBudgetExceeded,\r\n record,\r\n tracker: trackerRef.current,\r\n };\r\n}\r\n","/**\r\n * Panel management hook per PRD section 9\r\n */\r\n\r\nimport {\r\n startTransition,\r\n useState,\r\n useCallback,\r\n useMemo,\r\n useRef,\r\n useEffect,\r\n} from \"react\";\r\nimport type { IAgentState, AgentStatus } from \"../../types/index.js\";\r\n\r\ninterface IUsePanelReturn {\r\n readonly agents: readonly IAgentState[];\r\n readonly activeAgentIndex: number;\r\n readonly agentOutputs: ReadonlyMap<string, string>;\r\n readonly isSplitPanelActive: boolean;\r\n readonly selectAgent: (index: number) => void;\r\n readonly appendOutput: (\r\n agentId: string,\r\n content: string,\r\n options?: { readonly immediate?: boolean },\r\n ) => void;\r\n readonly updateAgentStatus: (agentId: string, status: AgentStatus) => void;\r\n readonly setAgents: (agents: readonly IAgentState[]) => void;\r\n readonly activate: () => void;\r\n readonly deactivate: () => void;\r\n}\r\n\r\nexport function usePanel(): IUsePanelReturn {\r\n const flushIntervalMs = 100;\r\n const [agents, setAgentsState] = useState<readonly IAgentState[]>([]);\r\n const [activeAgentIndex, setActiveAgentIndex] = useState(0);\r\n const [agentOutputs, setAgentOutputs] = useState<Map<string, string>>(new Map());\r\n const [isSplitPanelActive, setIsSplitPanelActive] = useState(false);\r\n const pendingOutputRef = useRef<Map<string, string>>(new Map());\r\n const flushTimerRef = useRef<NodeJS.Timeout | undefined>(undefined);\r\n\r\n const flushPendingOutput = useCallback(() => {\r\n flushTimerRef.current = undefined;\r\n\r\n if (pendingOutputRef.current.size === 0) {\r\n return;\r\n }\r\n\r\n const pending = pendingOutputRef.current;\r\n pendingOutputRef.current = new Map();\r\n\r\n startTransition(() => {\r\n setAgentOutputs((prev) => {\r\n const next = new Map(prev);\r\n for (const [agentId, content] of pending.entries()) {\r\n const existing = next.get(agentId) ?? \"\";\r\n next.set(agentId, existing + content);\r\n }\r\n return next;\r\n });\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n return () => {\r\n if (flushTimerRef.current !== undefined) {\r\n clearTimeout(flushTimerRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n const selectAgent = useCallback((index: number) => {\r\n setActiveAgentIndex(index);\r\n }, []);\r\n\r\n const appendOutput = useCallback((\r\n agentId: string,\r\n content: string,\r\n options?: { readonly immediate?: boolean },\r\n ) => {\r\n const pending = pendingOutputRef.current;\r\n pending.set(agentId, (pending.get(agentId) ?? \"\") + content);\r\n\r\n if (options?.immediate === true) {\r\n if (flushTimerRef.current !== undefined) {\r\n clearTimeout(flushTimerRef.current);\r\n }\r\n flushPendingOutput();\r\n return;\r\n }\r\n\r\n if (flushTimerRef.current === undefined) {\r\n flushTimerRef.current = setTimeout(flushPendingOutput, flushIntervalMs);\r\n }\r\n }, [flushIntervalMs, flushPendingOutput]);\r\n\r\n const updateAgentStatus = useCallback((agentId: string, status: AgentStatus) => {\r\n setAgentsState((prev) =>\r\n prev.map((agent) =>\r\n agent.config.agentId === agentId\r\n ? { ...agent, status }\r\n : agent,\r\n ),\r\n );\r\n }, []);\r\n\r\n const setAgents = useCallback((newAgents: readonly IAgentState[]) => {\r\n setAgentsState(newAgents);\r\n setActiveAgentIndex(0);\r\n }, []);\r\n\r\n const activate = useCallback(() => {\r\n setIsSplitPanelActive(true);\r\n }, []);\r\n\r\n const deactivate = useCallback(() => {\r\n if (flushTimerRef.current !== undefined) {\r\n clearTimeout(flushTimerRef.current);\r\n flushTimerRef.current = undefined;\r\n }\r\n pendingOutputRef.current = new Map();\r\n setIsSplitPanelActive(false);\r\n setAgentsState([]);\r\n setAgentOutputs(new Map());\r\n setActiveAgentIndex(0);\r\n }, []);\r\n\r\n return useMemo(() => ({\r\n agents,\r\n activeAgentIndex,\r\n agentOutputs,\r\n isSplitPanelActive,\r\n selectAgent,\r\n appendOutput,\r\n updateAgentStatus,\r\n setAgents,\r\n activate,\r\n deactivate,\r\n }), [agents, activeAgentIndex, agentOutputs, isSplitPanelActive, selectAgent, appendOutput, updateAgentStatus, setAgents, activate, deactivate]);\r\n}\r\n","/**\r\n * UI utility functions\r\n */\r\n\r\nimport { randomUUID } from \"node:crypto\";\r\n\r\n/**\r\n * Generate a unique ID for messages and other UI elements.\r\n */\r\nexport function v4Id(): string {\r\n return randomUUID();\r\n}\r\n","/**\r\n * Interactive model selector with provider grouping,\r\n * gradient highlights, and provider icons.\r\n */\r\n\r\nimport React, { useState, useMemo } from \"react\";\r\nimport { Box, Text, useInput } from \"ink\";\r\nimport { colors } from \"../theme.js\";\r\nimport type { IModelDisplayEntry } from \"../../types/model.js\";\r\n\r\ninterface IModelSelectorProps {\r\n readonly currentModelId: string;\r\n readonly onSelect: (modelId: string) => void;\r\n readonly onCancel: () => void;\r\n /** Provider-grouped model list (dynamic, from model-discovery). */\r\n readonly modelOrder?: Readonly<Record<string, readonly IModelDisplayEntry[]>> | undefined;\r\n}\r\n\r\ninterface ISelectorRow {\r\n readonly type: \"header\" | \"model\";\r\n readonly label: string;\r\n readonly description?: string;\r\n readonly modelId?: string;\r\n readonly isCurrent?: boolean;\r\n}\r\n\r\nconst PROVIDER_LABELS: Readonly<Record<string, string>> = {\r\n anthropic: \"\\u2726 Claude (Anthropic)\",\r\n openai: \"\\u2B22 Codex (OpenAI)\",\r\n google: \"\\u25C6 Gemini (Google)\",\r\n kimi: \"\\u25CE Kimi (Moonshot)\",\r\n};\r\n\r\nexport function ModelSelector({\r\n currentModelId,\r\n onSelect,\r\n onCancel,\r\n modelOrder,\r\n}: IModelSelectorProps): React.ReactElement {\r\n const rows = useMemo<readonly ISelectorRow[]>(() => {\r\n // Use dynamic model order if provided, otherwise lazy-import hardcoded\r\n const order = modelOrder ?? {};\r\n const result: ISelectorRow[] = [];\r\n for (const [providerKey, entries] of Object.entries(order)) {\r\n result.push({\r\n type: \"header\",\r\n label: PROVIDER_LABELS[providerKey] ?? providerKey,\r\n });\r\n for (const entry of entries) {\r\n result.push({\r\n type: \"model\",\r\n label: entry.label,\r\n description: entry.description,\r\n modelId: entry.id,\r\n isCurrent: entry.id === currentModelId,\r\n });\r\n }\r\n }\r\n return result;\r\n }, [currentModelId]);\r\n\r\n const selectableIndices = useMemo(() => {\r\n const indices: number[] = [];\r\n for (let i = 0; i < rows.length; i++) {\r\n if (rows[i]?.type === \"model\") indices.push(i);\r\n }\r\n return indices;\r\n }, [rows]);\r\n\r\n const initialIndex = useMemo(() => {\r\n const rowIdx = rows.findIndex(\r\n (r) => r.type === \"model\" && r.modelId === currentModelId,\r\n );\r\n const selectIdx = selectableIndices.indexOf(rowIdx);\r\n return selectIdx >= 0 ? selectIdx : 0;\r\n }, [rows, selectableIndices, currentModelId]);\r\n\r\n const [cursor, setCursor] = useState(initialIndex);\r\n\r\n useInput((_input, key) => {\r\n if (key.upArrow) {\r\n setCursor((prev) =>\r\n prev > 0 ? prev - 1 : selectableIndices.length - 1,\r\n );\r\n } else if (key.downArrow) {\r\n setCursor((prev) =>\r\n prev < selectableIndices.length - 1 ? prev + 1 : 0,\r\n );\r\n } else if (key.return) {\r\n const rowIdx = selectableIndices[cursor];\r\n const row = rowIdx !== undefined ? rows[rowIdx] : undefined;\r\n if (row?.modelId) onSelect(row.modelId);\r\n } else if (key.escape) {\r\n onCancel();\r\n }\r\n });\r\n\r\n return (\r\n <Box flexDirection=\"column\" padding={1}>\r\n <Box marginBottom={1}>\r\n <Text bold color={colors.status.active}>\r\n Select Model\r\n </Text>\r\n <Text color={colors.text.muted}>\r\n {\" \"}\\u2191\\u2193 navigate \\u00B7 Enter select \\u00B7 Esc cancel\r\n </Text>\r\n </Box>\r\n\r\n {rows.map((row, idx) => {\r\n if (row.type === \"header\") {\r\n return (\r\n <Box key={`header-${idx}`} marginTop={idx > 0 ? 1 : 0}>\r\n <Text bold color={colors.status.warning}>\r\n {\" \"}\r\n {row.label}\r\n </Text>\r\n </Box>\r\n );\r\n }\r\n\r\n const isHighlighted = selectableIndices[cursor] === idx;\r\n const currentTag = row.isCurrent ? \" (current)\" : \"\";\r\n\r\n return (\r\n <Box key={row.modelId ?? `row-${idx}`}>\r\n <Text\r\n color={\r\n isHighlighted\r\n ? colors.status.success\r\n : row.isCurrent\r\n ? colors.text.accent\r\n : colors.text.primary\r\n }\r\n bold={isHighlighted}\r\n >\r\n {isHighlighted ? \"\\u25B8 \" : \" \"}\r\n {row.label.padEnd(30)}\r\n </Text>\r\n <Text color={colors.text.muted}>\r\n {\" \"}\r\n {row.description}\r\n {currentTag}\r\n </Text>\r\n </Box>\r\n );\r\n })}\r\n\r\n <Box marginTop={1}>\r\n <Text color={colors.text.muted}>\r\n {\" \"}Current: {currentModelId}\r\n </Text>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * Interactive thinking-level selector with up/down arrow key navigation.\r\n * Shows provider-specific thinking options for the selected model.\r\n * Page 2 of the /model selection flow.\r\n */\r\n\r\nimport React, { useState, useMemo } from \"react\";\r\nimport { Box, Text, useInput } from \"ink\";\r\nimport { getThinkingConfigForModel } from \"../../types/model.js\";\r\n\r\ninterface IThinkingSelectorProps {\r\n readonly modelId: string;\r\n readonly modelName: string;\r\n readonly currentValue: string;\r\n readonly onSelect: (value: string) => void;\r\n readonly onBack: () => void;\r\n}\r\n\r\nfunction formatMethod(method: string): string {\r\n switch (method) {\r\n case \"extended_thinking\": return \"Extended Thinking\";\r\n case \"reasoning_effort\": return \"Reasoning Effort\";\r\n case \"thinking_budget\": return \"Thinking Budget\";\r\n case \"thinking_level\": return \"Thinking Level\";\r\n case \"thinking_mode\": return \"Thinking Mode\";\r\n default: return \"Thinking\";\r\n }\r\n}\r\n\r\nexport function ThinkingSelector({\r\n modelId,\r\n modelName,\r\n currentValue,\r\n onSelect,\r\n onBack,\r\n}: IThinkingSelectorProps): React.ReactElement {\r\n const config = useMemo(() => getThinkingConfigForModel(modelId), [modelId]);\r\n\r\n const initialIdx = useMemo(() => {\r\n if (!config) return 0;\r\n const idx = config.options.findIndex((o) => o.value === currentValue);\r\n if (idx >= 0) return idx;\r\n const defaultIdx = config.options.findIndex((o) => o.value === config.defaultValue);\r\n return Math.max(0, defaultIdx);\r\n }, [config, currentValue]);\r\n\r\n const [cursor, setCursor] = useState(initialIdx);\r\n\r\n useInput((_input, key) => {\r\n if (!config) {\r\n if (key.return || key.escape) onBack();\r\n return;\r\n }\r\n if (key.upArrow) {\r\n setCursor((prev) => (prev > 0 ? prev - 1 : config.options.length - 1));\r\n } else if (key.downArrow) {\r\n setCursor((prev) => (prev < config.options.length - 1 ? prev + 1 : 0));\r\n } else if (key.return) {\r\n const option = config.options[cursor];\r\n if (option) onSelect(option.value);\r\n } else if (key.escape) {\r\n onBack();\r\n }\r\n });\r\n\r\n if (!config) {\r\n return (\r\n <Box flexDirection=\"column\" padding={1}>\r\n <Text color=\"yellow\">No thinking options available for {modelName}.</Text>\r\n <Text color=\"gray\">Press Enter or Esc to continue.</Text>\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box flexDirection=\"column\" padding={1}>\r\n <Box marginBottom={1} flexDirection=\"column\">\r\n <Text bold color=\"cyan\">{formatMethod(config.method)}</Text>\r\n <Text color=\"gray\"> Model: {modelName} (up/down navigate, Enter select, Esc back)</Text>\r\n </Box>\r\n {config.options.map((option, idx) => {\r\n const isHighlighted = cursor === idx;\r\n const isCurrent = option.value === currentValue;\r\n const currentTag = isCurrent ? \" (current)\" : \"\";\r\n return (\r\n <Box key={option.value}>\r\n <Text {...(isHighlighted ? { color: \"green\" } : {})} bold={isHighlighted}>\r\n {isHighlighted ? \"> \" : \" \"}{option.label.padEnd(22)}\r\n </Text>\r\n <Text color=\"gray\"> {option.description}{currentTag}</Text>\r\n </Box>\r\n );\r\n })}\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * Interactive provider login selector with up/down arrow key navigation.\r\n * Shows available providers, user selects one, then browser login is triggered.\r\n */\r\n\r\nimport React, { useState } from \"react\";\r\nimport { Box, Text, useInput } from \"ink\";\r\n\r\ninterface ILoginSelectorProps {\r\n readonly onSelect: (provider: string) => void;\r\n readonly onCancel: () => void;\r\n}\r\n\r\ninterface IProviderChoice {\r\n readonly label: string;\r\n readonly value: string;\r\n readonly description: string;\r\n}\r\n\r\nconst PROVIDERS: readonly IProviderChoice[] = [\r\n { label: \"Claude\", value: \"claude\", description: \"Anthropic — Claude models\" },\r\n { label: \"Codex\", value: \"codex\", description: \"OpenAI — GPT / Codex models\" },\r\n { label: \"Gemini\", value: \"gemini\", description: \"Google — Gemini models\" },\r\n { label: \"Kimi\", value: \"kimi\", description: \"Moonshot — Kimi models\" },\r\n];\r\n\r\nexport function LoginSelector({ onSelect, onCancel }: ILoginSelectorProps): React.ReactElement {\r\n const [cursor, setCursor] = useState(0);\r\n\r\n useInput((_input, key) => {\r\n if (key.upArrow) {\r\n setCursor((prev) => (prev > 0 ? prev - 1 : PROVIDERS.length - 1));\r\n } else if (key.downArrow) {\r\n setCursor((prev) => (prev < PROVIDERS.length - 1 ? prev + 1 : 0));\r\n } else if (key.return) {\r\n const selected = PROVIDERS[cursor];\r\n if (selected) onSelect(selected.value);\r\n } else if (key.escape) {\r\n onCancel();\r\n }\r\n });\r\n\r\n return (\r\n <Box flexDirection=\"column\" padding={1}>\r\n <Box marginBottom={1}>\r\n <Text bold color=\"cyan\">Select a provider to log in to</Text>\r\n <Text color=\"gray\"> (up/down navigate, Enter select, Esc cancel)</Text>\r\n </Box>\r\n {PROVIDERS.map((provider, idx) => {\r\n const isHighlighted = cursor === idx;\r\n return (\r\n <Box key={provider.value}>\r\n <Text {...(isHighlighted ? { color: \"green\" } : {})} bold={isHighlighted}>\r\n {isHighlighted ? \"> \" : \" \"}{provider.label.padEnd(12)}\r\n </Text>\r\n <Text color=\"gray\"> {provider.description}</Text>\r\n </Box>\r\n );\r\n })}\r\n <Box marginTop={1}>\r\n <Text color=\"gray\"> Login will open your browser for authentication.</Text>\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import React, { useMemo, useState } from \"react\";\r\nimport { Box, Text, useInput } from \"ink\";\r\n\r\nimport type { CliProviderType } from \"../../orchestrator/constants.js\";\r\nimport { getCliProviderEntry } from \"../../orchestrator/utils/provider-catalog.js\";\r\nimport { colors } from \"../theme.js\";\r\n\r\ninterface ISwarmOnboardingProps {\r\n readonly detectedProviders: readonly CliProviderType[];\r\n readonly currentPrimaryProvider?: CliProviderType | undefined;\r\n readonly onSelect: (provider: CliProviderType) => void;\r\n readonly onSkip: () => void;\r\n}\r\n\r\nexport function SwarmOnboarding({\r\n detectedProviders,\r\n currentPrimaryProvider,\r\n onSelect,\r\n onSkip,\r\n}: ISwarmOnboardingProps): React.ReactElement {\r\n const entries = useMemo(\r\n () => detectedProviders.map((provider) => getCliProviderEntry(provider)),\r\n [detectedProviders],\r\n );\r\n\r\n const initialCursor = useMemo(() => {\r\n if (!currentPrimaryProvider) {\r\n return 0;\r\n }\r\n\r\n const currentIndex = detectedProviders.indexOf(currentPrimaryProvider);\r\n return currentIndex >= 0 ? currentIndex : 0;\r\n }, [currentPrimaryProvider, detectedProviders]);\r\n\r\n const [cursor, setCursor] = useState(initialCursor);\r\n\r\n useInput((_input, key) => {\r\n if (entries.length === 0) {\r\n if (key.return || key.escape) {\r\n onSkip();\r\n }\r\n return;\r\n }\r\n\r\n if (key.upArrow) {\r\n setCursor((prev) => (prev > 0 ? prev - 1 : entries.length - 1));\r\n return;\r\n }\r\n\r\n if (key.downArrow) {\r\n setCursor((prev) => (prev < entries.length - 1 ? prev + 1 : 0));\r\n return;\r\n }\r\n\r\n if (key.return) {\r\n const selected = detectedProviders[cursor];\r\n if (selected) {\r\n onSelect(selected);\r\n }\r\n return;\r\n }\r\n\r\n if (key.escape && entries.length === 0) {\r\n onSkip();\r\n }\r\n });\r\n\r\n return (\r\n <Box flexDirection=\"column\" padding={1}>\r\n <Box marginBottom={1} flexDirection=\"column\">\r\n <Text color={colors.status.active} bold>\r\n Swarm Setup\r\n </Text>\r\n <Text color={colors.text.muted}>\r\n Select the master agent provider for swarm orchestration.\r\n </Text>\r\n </Box>\r\n\r\n {entries.length > 0 ? (\r\n <>\r\n {entries.map((entry, index) => {\r\n const isSelected = index === cursor;\r\n const isCurrent = currentPrimaryProvider === entry.type;\r\n return (\r\n <Box key={entry.type}>\r\n <Text\r\n color={isSelected ? colors.status.success : colors.text.primary}\r\n bold={isSelected}\r\n >\r\n {isSelected ? \"\\u25B8 \" : \" \"}\r\n {entry.label.padEnd(16)}\r\n </Text>\r\n <Text color={colors.text.muted}>\r\n {entry.description}\r\n {isCurrent ? \" (current)\" : \"\"}\r\n </Text>\r\n </Box>\r\n );\r\n })}\r\n\r\n <Box marginTop={1} flexDirection=\"column\">\r\n <Text color={colors.text.muted}>\r\n Enter sets the master agent. Remaining detected providers become fallbacks.\r\n </Text>\r\n <Text color={colors.text.muted}>\r\n \\u2191\\u2193 navigate · Enter confirm\r\n </Text>\r\n </Box>\r\n </>\r\n ) : (\r\n <Box flexDirection=\"column\">\r\n <Text color={colors.status.warning}>\r\n No supported native agent CLI was detected.\r\n </Text>\r\n <Text color={colors.text.muted}>\r\n Install Claude Code, Codex, Gemini CLI, Kimi CLI, or Ollama, then restart.\r\n </Text>\r\n <Box marginTop={1}>\r\n <Text color={colors.text.muted}>\r\n Enter or Esc continues without swarm setup.\r\n </Text>\r\n </Box>\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n}\r\n","/**\r\n * Shared types for slash command handlers.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n */\r\n\r\nimport type { IChatMessage, IAgentState } from \"../../types/index.js\";\r\nimport type { ProviderRegistry } from \"../../providers/registry.js\";\r\nimport { v4Id } from \"../utils.js\";\r\n\r\nexport type SelectionMode =\r\n | { readonly type: \"none\" }\r\n | { readonly type: \"swarm-onboarding\" }\r\n | { readonly type: \"model\" }\r\n | { readonly type: \"thinking\"; readonly modelId: string }\r\n | { readonly type: \"login\" };\r\n\r\nexport interface IPanelControls {\r\n readonly setAgents: (agents: readonly IAgentState[]) => void;\r\n readonly activate: () => void;\r\n readonly deactivate: () => void;\r\n readonly appendOutput: (\r\n agentId: string,\r\n content: string,\r\n options?: { readonly immediate?: boolean },\r\n ) => void;\r\n}\r\n\r\nexport type SetMessagesDispatch = (\r\n updater: IChatMessage[] | ((prev: IChatMessage[]) => IChatMessage[]),\r\n) => void;\r\n\r\nexport interface ICommandContext {\r\n readonly totalCost: string;\r\n readonly totalTokens: string;\r\n readonly setMessages: SetMessagesDispatch;\r\n readonly modelId: string;\r\n readonly thinkingValue: string;\r\n readonly setThinkingValue: (value: string) => void;\r\n readonly setSelectionMode: (mode: SelectionMode) => void;\r\n readonly resolution: { readonly provider: string; readonly role?: string | undefined };\r\n readonly panel: IPanelControls;\r\n readonly getRegistry: () => Promise<ProviderRegistry>;\r\n /** Current project root — used for per-project history/resume. */\r\n readonly projectRoot: string;\r\n}\r\n\r\nexport function addSystemMessage(ctx: ICommandContext, content: string): void {\r\n ctx.setMessages((prev) => [\r\n ...prev,\r\n {\r\n id: v4Id(),\r\n role: \"system\" as const,\r\n content,\r\n createdAt: new Date(),\r\n },\r\n ]);\r\n}\r\n","/**\r\n * Model selection helpers for slash commands.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n */\r\n\r\nimport { SUPPORTED_MODELS, PROVIDER_MODEL_ORDER } from \"../../types/index.js\";\r\n\r\n/**\r\n * Resolve a model selection input — either a model ID or a global index number\r\n * from the /model display list.\r\n */\r\nexport function resolveModelSelection(input: string): string | undefined {\r\n // Direct model ID match\r\n if (SUPPORTED_MODELS[input]) {\r\n return input;\r\n }\r\n\r\n // Numeric index into the global ordered list\r\n if (/^\\d+$/.test(input)) {\r\n const index = Number(input);\r\n let globalIndex = 1;\r\n for (const entries of Object.values(PROVIDER_MODEL_ORDER)) {\r\n for (const entry of entries) {\r\n if (globalIndex === index) {\r\n return entry.id;\r\n }\r\n globalIndex++;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Human-readable label for a provider's thinking method.\r\n */\r\nexport function formatThinkingMethod(method: string): string {\r\n switch (method) {\r\n case \"extended_thinking\":\r\n return \"Extended Thinking\";\r\n case \"reasoning_effort\":\r\n return \"Reasoning Effort\";\r\n case \"thinking_budget\":\r\n return \"Thinking Budget\";\r\n case \"thinking_level\":\r\n return \"Thinking Level\";\r\n case \"thinking_mode\":\r\n return \"Thinking Mode\";\r\n default:\r\n return \"Thinking\";\r\n }\r\n}\r\n","/**\r\n * /team slash command handler.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n */\r\n\r\nimport type { ICommandContext } from \"./types.js\";\r\nimport { addSystemMessage } from \"./types.js\";\r\nimport {\r\n getActiveTeamManager,\r\n getActiveTeamName,\r\n getActiveTmuxCleanup,\r\n setActiveTeamManager,\r\n setActiveTeamName,\r\n setActiveTmuxCleanup,\r\n} from \"../team-state.js\";\r\n\r\nexport async function handleTeamCommand(args: readonly string[], ctx: ICommandContext): Promise<void> {\r\n const subcommand = args[0];\r\n\r\n if (subcommand === \"stop\") {\r\n const cleanup = getActiveTmuxCleanup();\r\n if (cleanup) {\r\n try {\r\n await cleanup();\r\n } catch (error: unknown) {\r\n const errMsg = error instanceof Error ? error.message : String(error);\r\n addSystemMessage(ctx, `Warning: tmux cleanup failed (${errMsg}). Session may need manual cleanup.`);\r\n }\r\n setActiveTmuxCleanup(undefined);\r\n }\r\n\r\n const manager = getActiveTeamManager();\r\n const teamName = getActiveTeamName();\r\n if (manager && teamName) {\r\n try {\r\n await manager.deleteTeam(teamName);\r\n } catch (error: unknown) {\r\n const errMsg = error instanceof Error ? error.message : String(error);\r\n addSystemMessage(ctx, `Warning: team cleanup failed (${errMsg}). Processes may need manual cleanup.`);\r\n }\r\n setActiveTeamManager(undefined);\r\n }\r\n\r\n setActiveTeamName(undefined);\r\n ctx.panel.deactivate();\r\n addSystemMessage(ctx, \"Team shut down. All agents stopped. Returned to single-pane mode.\");\r\n return;\r\n }\r\n\r\n if (subcommand === \"list\") {\r\n try {\r\n const { TeamManager } = await import(\"../../teams/team-manager.js\");\r\n const manager = new TeamManager();\r\n const teams = manager.listTeams();\r\n if (teams.length === 0) {\r\n addSystemMessage(ctx, \"No active teams.\");\r\n } else {\r\n const lines = teams.map((t) => ` ${t.teamName} — ${t.members.length} agents (${t.status})`);\r\n addSystemMessage(ctx, lines.join(\"\\n\"));\r\n }\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n addSystemMessage(ctx, `Failed to list teams: ${msg}`);\r\n }\r\n return;\r\n }\r\n\r\n addSystemMessage(\r\n ctx,\r\n \"Usage: /team list | /team stop\\n\" +\r\n \"Teams are created automatically from natural language.\\n\" +\r\n \"Examples: \\\"Create a team to refactor the auth module\\\"\\n\" +\r\n \" \\\"I need agents to review this PR from different angles\\\"\",\r\n );\r\n}\r\n","/**\r\n * /mcp slash command handler.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n */\r\n\r\nimport type { ICommandContext } from \"./types.js\";\r\nimport { addSystemMessage } from \"./types.js\";\r\n\r\nexport async function handleMcpCommand(args: readonly string[], ctx: ICommandContext): Promise<void> {\r\n const subcommand = args[0];\r\n\r\n if (subcommand === \"list\") {\r\n try {\r\n const { MCPServerManager } = await import(\"../../mcp/server-manager.js\");\r\n const manager = new MCPServerManager();\r\n const connected = manager.getConnectedServers();\r\n if (connected.length === 0) {\r\n addSystemMessage(ctx, \"No MCP servers connected.\\nConfigure servers in ~/.aemeathcli/mcp.json\");\r\n } else {\r\n const lines = connected.map((name) => {\r\n const status = manager.getServerStatus(name) ?? \"unknown\";\r\n return ` ${name} — ${status}`;\r\n });\r\n addSystemMessage(ctx, `MCP Servers:\\n${lines.join(\"\\n\")}`);\r\n }\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n addSystemMessage(ctx, `Failed to list MCP servers: ${msg}`);\r\n }\r\n return;\r\n }\r\n\r\n if (subcommand === \"add\") {\r\n const name = args[1];\r\n if (!name) {\r\n addSystemMessage(ctx, \"Usage: /mcp add <server-name>\\n\\nExample:\\n /mcp add my-server\");\r\n return;\r\n }\r\n addSystemMessage(\r\n ctx,\r\n `To add MCP server \"${name}\", add this to ~/.aemeathcli/mcp.json:\\n\\n` +\r\n `{\\n \"mcpServers\": {\\n \"${name}\": {\\n \"command\": \"npx\",\\n` +\r\n ` \"args\": [\"-y\", \"@your-org/${name}-server\"],\\n` +\r\n ` \"env\": {}\\n }\\n }\\n}\\n\\n` +\r\n `Then restart AemeathCLI. Use /mcp list to verify the connection.`,\r\n );\r\n return;\r\n }\r\n\r\n addSystemMessage(ctx, \"Usage: /mcp list | /mcp add <name>\");\r\n}\r\n","/**\r\n * /skill slash command handler and $skill invocation handler.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n */\r\n\r\nimport type { ICommandContext, SetMessagesDispatch } from \"./types.js\";\r\nimport { addSystemMessage } from \"./types.js\";\r\nimport { v4Id } from \"../utils.js\";\r\n\r\nexport async function handleSkillCommand(args: readonly string[], ctx: ICommandContext): Promise<void> {\r\n const subcommand = args[0];\r\n\r\n if (subcommand === \"list\") {\r\n try {\r\n const { SkillRegistry } = await import(\"../../skills/registry.js\");\r\n const { findProjectRoot } = await import(\"../../utils/pathResolver.js\");\r\n const registry = new SkillRegistry();\r\n await registry.initialize(findProjectRoot());\r\n const skills = registry.listAll();\r\n if (skills.length === 0) {\r\n addSystemMessage(ctx, \"No skills found.\\nAdd skills in ~/.agents/skills/, ~/.aemeathcli/skills/, .agents/skills/, or .aemeathcli/skills/\");\r\n } else {\r\n const lines = skills.map((s) => ` $${s.name.padEnd(16)} ${s.description} [${s.source}]`);\r\n addSystemMessage(ctx, `Available Skills:\\n${lines.join(\"\\n\")}`);\r\n }\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n addSystemMessage(ctx, `Failed to list skills: ${msg}`);\r\n }\r\n return;\r\n }\r\n\r\n addSystemMessage(ctx, \"Usage: /skill list\\nInvoke a skill with $skill-name (e.g., $review, $commit, $plan)\");\r\n}\r\n\r\nexport async function handleSkillInvocation(\r\n input: string,\r\n setMessages: SetMessagesDispatch,\r\n): Promise<void> {\r\n const parts = input.trim().split(/\\s+/);\r\n const trigger = parts[0] ?? \"\";\r\n const skillName = trigger.replace(/^\\$/, \"\");\r\n\r\n if (!skillName) {\r\n setMessages((prev) => [\r\n ...prev,\r\n { id: v4Id(), role: \"system\" as const, content: \"Usage: $skill-name [args]\\nType /skill list to see available skills.\", createdAt: new Date() },\r\n ]);\r\n return;\r\n }\r\n\r\n setMessages((prev) => [\r\n ...prev,\r\n { id: v4Id(), role: \"user\" as const, content: input, createdAt: new Date() },\r\n ]);\r\n\r\n try {\r\n const { SkillRegistry } = await import(\"../../skills/registry.js\");\r\n const { SkillExecutor } = await import(\"../../skills/executor.js\");\r\n const { findProjectRoot } = await import(\"../../utils/pathResolver.js\");\r\n const registry = new SkillRegistry();\r\n await registry.initialize(findProjectRoot());\r\n\r\n const executor = new SkillExecutor(registry);\r\n const result = await executor.activateByTrigger(trigger);\r\n\r\n if (!result.success) {\r\n setMessages((prev) => [\r\n ...prev,\r\n { id: v4Id(), role: \"system\" as const, content: result.errorMessage ?? `Skill not found: \"${skillName}\"\\nType /skill list to see available skills.`, createdAt: new Date() },\r\n ]);\r\n return;\r\n }\r\n\r\n const content = executor.getActiveSkillContent();\r\n const warningText = result.warnings && result.warnings.length > 0\r\n ? `\\nWarnings: ${result.warnings.join(\", \")}`\r\n : \"\";\r\n setMessages((prev) => [\r\n ...prev,\r\n { id: v4Id(), role: \"system\" as const, content: `Skill \"$${skillName}\" activated.${warningText}\\n${content ? content.slice(0, 500) : \"\"}`, createdAt: new Date() },\r\n ]);\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n setMessages((prev) => [\r\n ...prev,\r\n { id: v4Id(), role: \"system\" as const, content: `Skill error: ${msg}`, createdAt: new Date() },\r\n ]);\r\n }\r\n}\r\n","/**\r\n * /login slash command handler and login module loader.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n */\r\n\r\nimport type { ICommandContext } from \"./types.js\";\r\nimport { addSystemMessage } from \"./types.js\";\r\n\r\nexport async function handleLoginSlashCommand(args: readonly string[], ctx: ICommandContext): Promise<void> {\r\n const subcommand = args[0];\r\n\r\n if (subcommand === \"status\") {\r\n try {\r\n const { getAuthStatusRecords, formatCompactAuthStatusLine } = await import(\"../../auth/auth-status.js\");\r\n const records = await getAuthStatusRecords();\r\n const lines = records.map((record) => formatCompactAuthStatusLine(record));\r\n addSystemMessage(ctx, lines.join(\"\\n\"));\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n addSystemMessage(ctx, `Failed to get auth status: ${msg}`);\r\n }\r\n return;\r\n }\r\n\r\n if (subcommand === \"logout\") {\r\n const provider = args[1];\r\n if (!provider) {\r\n addSystemMessage(ctx, \"Usage: /login logout <provider>\\nProviders: claude, codex, gemini, kimi\");\r\n return;\r\n }\r\n try {\r\n const loginMod = await loadLoginModuleForSlash(provider as \"claude\" | \"codex\" | \"gemini\" | \"kimi\");\r\n await loginMod.logout();\r\n addSystemMessage(ctx, `Logged out of ${provider}`);\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n addSystemMessage(ctx, `Logout failed: ${msg}`);\r\n }\r\n return;\r\n }\r\n\r\n // No subcommand → open interactive provider selector\r\n ctx.setSelectionMode({ type: \"login\" });\r\n}\r\n\r\ninterface ISlashLoginModule {\r\n login(): Promise<unknown>;\r\n logout(): Promise<void>;\r\n getStatus(): Promise<{ loggedIn: boolean; email?: string | undefined; plan?: string | undefined }>;\r\n}\r\n\r\nexport async function loadLoginModuleForSlash(provider: string): Promise<ISlashLoginModule> {\r\n switch (provider) {\r\n case \"claude\": {\r\n const mod = await import(\"../../auth/providers/claude-login.js\");\r\n return new mod.ClaudeLogin();\r\n }\r\n case \"codex\": {\r\n const mod = await import(\"../../auth/providers/codex-login.js\");\r\n return new mod.CodexLogin();\r\n }\r\n case \"gemini\": {\r\n const mod = await import(\"../../auth/providers/gemini-login.js\");\r\n return new mod.GeminiLogin();\r\n }\r\n case \"kimi\": {\r\n const mod = await import(\"../../auth/providers/kimi-login.js\");\r\n return new mod.KimiLogin();\r\n }\r\n default:\r\n throw new Error(`Unknown provider: ${provider}`);\r\n }\r\n}\r\n","/**\r\n * /config slash command handler.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n */\r\n\r\nimport type { ICommandContext } from \"./types.js\";\r\nimport { addSystemMessage } from \"./types.js\";\r\n\r\nexport async function handleConfigSlashCommand(args: readonly string[], ctx: ICommandContext): Promise<void> {\r\n const subcommand = args[0];\r\n\r\n if (subcommand === \"get\") {\r\n const key = args[1];\r\n try {\r\n const { ConfigStore } = await import(\"../../storage/config-store.js\");\r\n const store = new ConfigStore();\r\n const cfg = store.loadGlobal();\r\n if (!key) {\r\n addSystemMessage(ctx, JSON.stringify(cfg, null, 2));\r\n } else {\r\n const value = getNestedConfigValue(cfg, key);\r\n if (value === undefined) {\r\n addSystemMessage(ctx, `Key not found: ${key}`);\r\n } else {\r\n addSystemMessage(ctx, `${key} = ${JSON.stringify(value, null, 2)}`);\r\n }\r\n }\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n addSystemMessage(ctx, `Failed to read config: ${msg}`);\r\n }\r\n return;\r\n }\r\n\r\n if (subcommand === \"set\") {\r\n const key = args[1];\r\n const value = args.slice(2).join(\" \");\r\n if (!key || !value) {\r\n addSystemMessage(ctx, \"Usage: /config set <key> <value>\");\r\n return;\r\n }\r\n try {\r\n const { ConfigStore } = await import(\"../../storage/config-store.js\");\r\n const store = new ConfigStore();\r\n const cfg = store.loadGlobal();\r\n let parsedValue: unknown;\r\n try { parsedValue = JSON.parse(value); } catch { parsedValue = value; }\r\n setNestedConfigValue(cfg as unknown as Record<string, unknown>, key, parsedValue);\r\n store.saveGlobal(cfg);\r\n addSystemMessage(ctx, `Set ${key} = ${JSON.stringify(parsedValue)}`);\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n addSystemMessage(ctx, `Failed to set config: ${msg}`);\r\n }\r\n return;\r\n }\r\n\r\n addSystemMessage(ctx, \"Usage: /config get [key] | /config set <key> <value>\");\r\n}\r\n\r\nfunction getNestedConfigValue(obj: unknown, path: string): unknown {\r\n const keys = path.split(\".\");\r\n let current: unknown = obj;\r\n for (const key of keys) {\r\n if (current === null || current === undefined || typeof current !== \"object\") return undefined;\r\n current = (current as Record<string, unknown>)[key];\r\n }\r\n return current;\r\n}\r\n\r\nfunction setNestedConfigValue(obj: Record<string, unknown>, path: string, value: unknown): void {\r\n const keys = path.split(\".\");\r\n let current: Record<string, unknown> = obj;\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n if (!key) continue;\r\n if (typeof current[key] !== \"object\" || current[key] === null) current[key] = {};\r\n current = current[key] as Record<string, unknown>;\r\n }\r\n const lastKey = keys[keys.length - 1];\r\n if (lastKey) current[lastKey] = value;\r\n}\r\n","/**\r\n * /history and /resume slash command handlers.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n */\r\n\r\nimport type { IChatMessage } from \"../../types/index.js\";\r\nimport type { ICommandContext } from \"./types.js\";\r\nimport { addSystemMessage } from \"./types.js\";\r\nimport { v4Id } from \"../utils.js\";\r\n\r\nexport async function handleHistoryCommand(ctx: ICommandContext): Promise<void> {\r\n try {\r\n const { SqliteStore } = await import(\"../../storage/sqlite-store.js\");\r\n const { ConversationStore } = await import(\"../../storage/conversation-store.js\");\r\n const db = new SqliteStore();\r\n db.open();\r\n const store = new ConversationStore(db);\r\n const conversations = store.listConversations(ctx.projectRoot);\r\n db.close();\r\n\r\n if (conversations.length === 0) {\r\n addSystemMessage(ctx, \"No conversation history for this project.\");\r\n return;\r\n }\r\n\r\n const lines = conversations.slice(0, 20).map((c, i) => {\r\n const date = new Date(c.createdAt).toLocaleDateString();\r\n const model = c.defaultModel ?? \"unknown\";\r\n return ` ${String(i + 1).padStart(2)}. ${date} ${model.padEnd(20)} ${c.id.slice(0, 8)}\\u2026`;\r\n });\r\n addSystemMessage(\r\n ctx,\r\n `Conversations in this project (${conversations.length} total):\\n${lines.join(\"\\n\")}\\n\\nUse /resume <number> or /resume <id> to load.`,\r\n );\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n addSystemMessage(ctx, `Failed to load history: ${msg}`);\r\n }\r\n}\r\n\r\nexport async function handleResumeCommand(\r\n arg: string | undefined,\r\n ctx: ICommandContext,\r\n): Promise<void> {\r\n if (!arg) {\r\n addSystemMessage(ctx, \"Usage: /resume <number> or /resume <conversation-id>\\nUse /history to see past conversations.\");\r\n return;\r\n }\r\n\r\n try {\r\n const { SqliteStore } = await import(\"../../storage/sqlite-store.js\");\r\n const { ConversationStore } = await import(\"../../storage/conversation-store.js\");\r\n const db = new SqliteStore();\r\n db.open();\r\n const store = new ConversationStore(db);\r\n\r\n let conversationId: string;\r\n\r\n const num = parseInt(arg, 10);\r\n if (!isNaN(num) && num > 0) {\r\n const conversations = store.listConversations(ctx.projectRoot);\r\n const target = conversations[num - 1];\r\n if (!target) {\r\n db.close();\r\n addSystemMessage(ctx, `Conversation #${num} not found. Use /history to see available.`);\r\n return;\r\n }\r\n conversationId = target.id;\r\n } else {\r\n const conversations = store.listConversations(ctx.projectRoot);\r\n const match = conversations.find((c) => c.id.startsWith(arg));\r\n if (!match) {\r\n db.close();\r\n addSystemMessage(ctx, `No conversation matching \"${arg}\". Use /history to see available.`);\r\n return;\r\n }\r\n conversationId = match.id;\r\n }\r\n\r\n const storedMessages = store.getMessages(conversationId);\r\n db.close();\r\n\r\n if (storedMessages.length === 0) {\r\n addSystemMessage(ctx, \"Conversation found but contains no messages.\");\r\n return;\r\n }\r\n\r\n const restored: IChatMessage[] = storedMessages.map((m) => ({\r\n id: v4Id(),\r\n role: m.role,\r\n content: m.content,\r\n model: m.model ?? undefined,\r\n provider: m.provider ?? undefined,\r\n createdAt: new Date(m.createdAt),\r\n }));\r\n\r\n ctx.setMessages(restored);\r\n addSystemMessage(ctx, `Resumed conversation (${restored.length} messages loaded).`);\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n addSystemMessage(ctx, `Failed to resume: ${msg}`);\r\n }\r\n}\r\n","/**\r\n * Main slash command router — delegates to per-domain command handlers.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n */\r\n\r\nimport type { ModelRole } from \"../../types/index.js\";\r\nimport { SUPPORTED_MODELS, getThinkingConfigForModel } from \"../../types/index.js\";\r\nimport { SLASH_COMMANDS } from \"../autocomplete-data.js\";\r\nimport type { ICommandContext } from \"./types.js\";\r\nimport { addSystemMessage } from \"./types.js\";\r\nimport { resolveModelSelection } from \"./model-helpers.js\";\r\nimport { handleTeamCommand } from \"./team-commands.js\";\r\nimport { handleMcpCommand } from \"./mcp-commands.js\";\r\nimport { handleSkillCommand } from \"./skill-commands.js\";\r\nimport { handleLoginSlashCommand } from \"./login-commands.js\";\r\nimport { handleConfigSlashCommand } from \"./config-commands.js\";\r\nimport { handleHistoryCommand, handleResumeCommand } from \"./history-commands.js\";\r\n\r\nexport async function handleInternalCommand(\r\n input: string,\r\n switchModel: (model: string) => void,\r\n switchRole: (role: ModelRole) => void,\r\n ctx: ICommandContext,\r\n): Promise<void> {\r\n const parts = input.trim().split(/\\s+/);\r\n const command = parts[0];\r\n const args = parts.slice(1);\r\n const arg = args[0];\r\n\r\n switch (command) {\r\n case \"/help\": {\r\n const helpLines = SLASH_COMMANDS.map((cmd) => ` ${cmd.command.padEnd(17)}${cmd.description}`).join(\"\\n\");\r\n addSystemMessage(ctx, helpLines);\r\n break;\r\n }\r\n\r\n case \"/model\": {\r\n if (arg) {\r\n const resolvedId = resolveModelSelection(arg);\r\n if (!resolvedId) {\r\n addSystemMessage(ctx, `Unknown model: ${arg}`);\r\n break;\r\n }\r\n const info = SUPPORTED_MODELS[resolvedId];\r\n if (!info) {\r\n addSystemMessage(ctx, `Unknown model: ${arg}`);\r\n break;\r\n }\r\n switchModel(resolvedId);\r\n const thinkingCfg = getThinkingConfigForModel(resolvedId);\r\n if (thinkingCfg) {\r\n const isValid = thinkingCfg.options.some((o) => o.value === ctx.thinkingValue);\r\n if (!isValid) ctx.setThinkingValue(thinkingCfg.defaultValue);\r\n }\r\n addSystemMessage(ctx, `Switched to model: ${info.name}`);\r\n } else {\r\n ctx.setSelectionMode({ type: \"model\" });\r\n }\r\n break;\r\n }\r\n\r\n case \"/role\": {\r\n if (arg) {\r\n const validRoles = [\"planning\", \"coding\", \"review\", \"testing\", \"bugfix\", \"documentation\"];\r\n if (validRoles.includes(arg)) {\r\n switchRole(arg as ModelRole);\r\n addSystemMessage(ctx, `Switched to role: ${arg}`);\r\n } else {\r\n addSystemMessage(ctx, `Unknown role: ${arg}\\nValid roles: ${validRoles.join(\", \")}`);\r\n }\r\n } else {\r\n addSystemMessage(ctx, `Current role: ${ctx.resolution.role ?? \"default\"}`);\r\n }\r\n break;\r\n }\r\n\r\n case \"/cost\":\r\n addSystemMessage(ctx, `Session cost: ${ctx.totalCost} | Tokens: ${ctx.totalTokens}`);\r\n break;\r\n\r\n case \"/clear\":\r\n ctx.setMessages([]);\r\n break;\r\n\r\n case \"/compact\":\r\n ctx.setMessages((prev) => {\r\n if (prev.length <= 4) return prev;\r\n const systemMsgs = prev.filter((m) => m.role === \"system\");\r\n const recent = prev.filter((m) => m.role !== \"system\").slice(-4);\r\n return [...systemMsgs, ...recent];\r\n });\r\n addSystemMessage(ctx, `Context compacted — kept last 4 messages. Use /clear to remove all.`);\r\n break;\r\n\r\n case \"/team\":\r\n await handleTeamCommand(args, ctx);\r\n break;\r\n\r\n case \"/mcp\":\r\n await handleMcpCommand(args, ctx);\r\n break;\r\n\r\n case \"/skill\":\r\n await handleSkillCommand(args, ctx);\r\n break;\r\n\r\n case \"/panel\": {\r\n const layout = arg;\r\n if (!layout) {\r\n addSystemMessage(\r\n ctx,\r\n \"Swarm layout is fixed to hub-and-spoke:\\n- master agent on the left half\\n- worker agents stacked on the right\\nUse Shift+Tab to enter swarm mode, then Tab/Ctrl+N to focus agents.\",\r\n );\r\n } else {\r\n addSystemMessage(ctx, `Panel layout overrides are disabled. Active swarm layout remains hub-spoke (master left, workers right). Ignored: ${layout}`);\r\n }\r\n break;\r\n }\r\n\r\n case \"/login\":\r\n await handleLoginSlashCommand(args, ctx);\r\n break;\r\n\r\n case \"/config\":\r\n await handleConfigSlashCommand(args, ctx);\r\n break;\r\n\r\n case \"/launch\":\r\n addSystemMessage(\r\n ctx,\r\n \"Swarm orchestration now lives inside the default TUI.\\n\\n\" +\r\n \"Use Shift+Tab to switch into swarm mode, then describe the work you want the team to handle.\\n\" +\r\n \"The configured master agent will sponsor the team and own the left pane.\",\r\n );\r\n break;\r\n\r\n case \"/history\":\r\n await handleHistoryCommand(ctx);\r\n break;\r\n\r\n case \"/resume\":\r\n await handleResumeCommand(arg, ctx);\r\n break;\r\n\r\n case \"/quit\":\r\n case \"/exit\": {\r\n // Graceful shutdown: stop active team before exiting\r\n const { getActiveTeamManager, getActiveTeamName, getActiveTmuxCleanup } = await import(\"../team-state.js\");\r\n const teamCleanup = getActiveTmuxCleanup();\r\n if (teamCleanup) {\r\n try { await teamCleanup(); } catch { /* best-effort */ }\r\n }\r\n const mgr = getActiveTeamManager();\r\n const name = getActiveTeamName();\r\n if (mgr && name) {\r\n try { await mgr.deleteTeam(name); } catch { /* best-effort */ }\r\n }\r\n process.exit(0);\r\n break;\r\n }\r\n\r\n default:\r\n addSystemMessage(ctx, `Unknown command: ${command}. Type /help for available commands.`);\r\n }\r\n}\r\n\r\nexport { formatThinkingMethod } from \"./model-helpers.js\";\r\n","/**\r\n * Conversation persistence to SQLite.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n */\r\n\r\nimport type { IChatMessage, ProviderName } from \"../types/index.js\";\r\nimport type { ConversationStore } from \"../storage/conversation-store.js\";\r\n\r\n/** Lazily-initialized conversation DB reference. */\r\nlet convDbRef: { store: ConversationStore; convId: string } | undefined;\r\n\r\nexport async function persistMessages(\r\n projectRoot: string,\r\n userMsg: IChatMessage,\r\n assistantMsg: IChatMessage,\r\n model: string,\r\n provider: ProviderName,\r\n): Promise<void> {\r\n try {\r\n const { SqliteStore } = await import(\"../storage/sqlite-store.js\");\r\n const { ConversationStore } = await import(\"../storage/conversation-store.js\");\r\n\r\n if (!convDbRef) {\r\n const db = new SqliteStore();\r\n db.open();\r\n const store = new ConversationStore(db);\r\n const conv = store.createConversation(projectRoot, model);\r\n convDbRef = { store, convId: conv.id };\r\n }\r\n\r\n const { store, convId } = convDbRef;\r\n\r\n store.addMessage({\r\n conversationId: convId,\r\n role: \"user\",\r\n content: userMsg.content,\r\n });\r\n\r\n store.addMessage({\r\n conversationId: convId,\r\n role: \"assistant\",\r\n model,\r\n provider,\r\n content: assistantMsg.content,\r\n });\r\n } catch (error: unknown) {\r\n // Non-critical — don't break the chat, but log for diagnostics\r\n const { logger } = await import(\"../utils/logger.js\");\r\n const msg = error instanceof Error ? error.message : String(error);\r\n logger.warn({ error: msg }, \"Conversation persistence failed\");\r\n }\r\n}\r\n","/**\r\n * LLM-driven dynamic team design — system prompt, parsing, and spec types.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n *\r\n * Teams are NEVER predefined — every team is dynamically designed by the LLM\r\n * based on the user's prompt, following the Claude Code agent-team pattern.\r\n */\r\n\r\nimport type { ModelRole, ProviderName, IGlobalConfig } from \"../types/index.js\";\r\nimport { SUPPORTED_MODELS } from \"../types/index.js\";\r\nimport type { CliProviderType } from \"../orchestrator/constants.js\";\r\nimport { getCliProviderEntry, getCliProviderForModelProvider } from \"../orchestrator/utils/provider-catalog.js\";\r\n\r\n/**\r\n * System prompt for the LLM to design an agent team from natural language.\r\n * The LLM analyzes the user's request and outputs a JSON array of agent specs.\r\n */\r\nexport const TEAM_DESIGN_SYSTEM_PROMPT =\r\n \"You are an expert team architect for an AI-powered CLI coding tool. \" +\r\n \"Your job is to analyze a user's request and design an optimal agent team to accomplish it.\\n\\n\" +\r\n \"You MUST respond with ONLY a JSON array (no markdown, no explanation, no code fences). \" +\r\n \"Each element represents one agent with these exact fields:\\n\" +\r\n '- \"name\": string — PascalCase name describing the agent\\'s function (e.g. \"ProjectManager\", \"TypeScriptDeveloper\", \"SecurityAuditor\")\\n' +\r\n '- \"agentType\": string — short role type (e.g. \"lead\", \"developer\", \"reviewer\", \"researcher\", \"designer\", \"architect\", \"auditor\", \"tester\")\\n' +\r\n '- \"model\": string — one of the available models (provided in the user message)\\n' +\r\n '- \"role\": string — one of: \"planning\", \"coding\", \"review\", \"testing\", \"bugfix\", \"documentation\"\\n' +\r\n '- \"taskPrompt\": string — detailed, specific instructions for this agent. Include: what to focus on, what files/areas to examine, what deliverables are expected, and what tools to use. This must be tailored to the user\\'s actual request, NOT generic.\\n\\n' +\r\n \"Guidelines for team design:\\n\" +\r\n \"- Use the MINIMUM number of agents needed to accomplish the task (typically 2-5, max 8)\\n\" +\r\n \"- Assign the most capable models (opus, gpt-5.2, gemini pro) to critical roles like planning and review\\n\" +\r\n \"- Assign efficient models (sonnet, haiku, flash) to implementation, testing, and documentation\\n\" +\r\n \"- Every team MUST have at least one agent with role \\\"coding\\\" to do actual implementation\\n\" +\r\n \"- For complex tasks, include a planner/lead agent and a reviewer agent\\n\" +\r\n \"- If only one provider's models are available, use those models for all agents\\n\" +\r\n \"- Each agent's taskPrompt must be highly specific to the user's request — never use generic instructions\\n\" +\r\n \"- Agent names should reflect their specific responsibility in this task\\n\";\r\n\r\n/** Parsed agent specification from the LLM's team design response. */\r\nexport interface ILLMAgentSpec {\r\n readonly name: string;\r\n readonly agentType: string;\r\n readonly model: string;\r\n readonly role: ModelRole;\r\n readonly taskPrompt: string;\r\n}\r\n\r\nconst VALID_ROLES: ReadonlySet<string> = new Set([\r\n \"planning\", \"coding\", \"review\", \"testing\", \"bugfix\", \"documentation\",\r\n]);\r\n\r\n/**\r\n * Parse the LLM's team design response into validated agent specs.\r\n * Extracts JSON from the response, validates each agent, and falls back\r\n * to safe defaults for any invalid fields.\r\n */\r\nexport function parseLLMTeamDesign(\r\n response: string,\r\n availableModels: readonly string[],\r\n fallbackModel: string,\r\n): ILLMAgentSpec[] {\r\n let jsonStr = response.trim();\r\n\r\n const fenceMatch = /```(?:json)?\\s*\\n?([\\s\\S]*?)\\n?```/.exec(jsonStr);\r\n if (fenceMatch?.[1] !== undefined) {\r\n jsonStr = fenceMatch[1].trim();\r\n }\r\n\r\n const arrayStart = jsonStr.indexOf(\"[\");\r\n const arrayEnd = jsonStr.lastIndexOf(\"]\");\r\n if (arrayStart === -1 || arrayEnd === -1 || arrayEnd <= arrayStart) {\r\n throw new Error(\"LLM response does not contain a valid JSON array for team design\");\r\n }\r\n jsonStr = jsonStr.slice(arrayStart, arrayEnd + 1);\r\n\r\n let parsed: unknown;\r\n try {\r\n parsed = JSON.parse(jsonStr);\r\n } catch {\r\n throw new Error(\"Failed to parse LLM team design as JSON\");\r\n }\r\n\r\n if (!Array.isArray(parsed) || parsed.length === 0) {\r\n throw new Error(\"LLM team design must be a non-empty array\");\r\n }\r\n\r\n const availableSet = new Set(availableModels);\r\n const specs: ILLMAgentSpec[] = [];\r\n\r\n for (const item of parsed) {\r\n if (typeof item !== \"object\" || item === null) continue;\r\n const record = item as Record<string, unknown>;\r\n\r\n const name = typeof record[\"name\"] === \"string\" && record[\"name\"].length > 0\r\n ? record[\"name\"]\r\n : `Agent${specs.length + 1}`;\r\n const agentType = typeof record[\"agentType\"] === \"string\" && record[\"agentType\"].length > 0\r\n ? record[\"agentType\"]\r\n : \"developer\";\r\n const rawModel = typeof record[\"model\"] === \"string\" ? record[\"model\"] : \"\";\r\n const rawRole = typeof record[\"role\"] === \"string\" ? record[\"role\"] : \"coding\";\r\n const taskPrompt = typeof record[\"taskPrompt\"] === \"string\" ? record[\"taskPrompt\"] : \"\";\r\n\r\n const model = availableSet.has(rawModel) ? rawModel : fallbackModel;\r\n const role = VALID_ROLES.has(rawRole) ? (rawRole as ModelRole) : \"coding\";\r\n\r\n specs.push({ name, agentType, model, role, taskPrompt });\r\n }\r\n\r\n if (specs.length === 0) {\r\n throw new Error(\"LLM team design produced no valid agent specifications\");\r\n }\r\n\r\n return specs.slice(0, 8);\r\n}\r\n\r\n/**\r\n * Build the user prompt sent to the LLM for team design.\r\n */\r\nexport function buildTeamDesignUserPrompt(\r\n userRequest: string,\r\n availableModels: readonly string[],\r\n): string {\r\n const modelList = availableModels.map((id) => {\r\n const info = SUPPORTED_MODELS[id];\r\n if (!info) return `- ${id}`;\r\n return `- ${id} (${info.provider}, ${info.name})`;\r\n }).join(\"\\n\");\r\n\r\n return (\r\n `Available models:\\n${modelList}\\n\\n` +\r\n `User request:\\n${userRequest}\\n\\n` +\r\n \"Design the agent team. Respond with ONLY a JSON array.\"\r\n );\r\n}\r\n\r\nexport function resolveMasterProviderPriority(\r\n swarmConfig: IGlobalConfig[\"swarm\"],\r\n installedProviders: readonly CliProviderType[],\r\n): readonly CliProviderType[] {\r\n const configuredProviders = [\r\n ...(swarmConfig.primaryMasterProvider ? [swarmConfig.primaryMasterProvider] : []),\r\n ...swarmConfig.fallbackMasterProviders,\r\n ];\r\n const prioritized = configuredProviders.filter((provider) => installedProviders.includes(provider));\r\n const remaining = installedProviders.filter((provider) => !prioritized.includes(provider));\r\n return [...prioritized, ...remaining];\r\n}\r\n\r\nexport function getAvailableModelsForProviders(providers: readonly CliProviderType[]): readonly string[] {\r\n const allowedProviders = new Set(\r\n providers.map((provider) => getCliProviderEntry(provider).provider),\r\n );\r\n\r\n return Object.keys(SUPPORTED_MODELS).filter((modelId) => {\r\n const info = SUPPORTED_MODELS[modelId];\r\n return info !== undefined && allowedProviders.has(info.provider);\r\n });\r\n}\r\n\r\nexport function pickLeadModel(\r\n config: IGlobalConfig,\r\n prioritizedProviders: readonly CliProviderType[],\r\n availableModels: readonly string[],\r\n): string | undefined {\r\n for (const provider of prioritizedProviders) {\r\n const providerName = getCliProviderEntry(provider).provider;\r\n const planningCandidates = [\r\n config.roles.planning?.primary,\r\n ...(config.roles.planning?.fallback ?? []),\r\n ].filter((modelId): modelId is string => modelId !== undefined);\r\n\r\n const preferredPlanningModel = planningCandidates.find((modelId) => {\r\n const info = SUPPORTED_MODELS[modelId];\r\n return info?.provider === providerName && availableModels.includes(modelId);\r\n });\r\n if (preferredPlanningModel) {\r\n return preferredPlanningModel;\r\n }\r\n\r\n const firstAvailableModel = availableModels.find((modelId) => {\r\n const info = SUPPORTED_MODELS[modelId];\r\n return info?.provider === providerName;\r\n });\r\n if (firstAvailableModel) {\r\n return firstAvailableModel;\r\n }\r\n }\r\n\r\n return availableModels[0];\r\n}\r\n\r\nexport function normalizeLeadAgentSpec(\r\n specs: readonly ILLMAgentSpec[],\r\n masterModel: string,\r\n): readonly ILLMAgentSpec[] {\r\n const leadSpec = specs.find((spec) => spec.agentType === \"lead\")\r\n ?? specs.find((spec) => spec.role === \"planning\")\r\n ?? specs[0];\r\n\r\n if (!leadSpec) {\r\n return specs;\r\n }\r\n\r\n const normalizedLead: ILLMAgentSpec = {\r\n ...leadSpec,\r\n name: leadSpec.name,\r\n agentType: \"lead\",\r\n model: masterModel,\r\n role: \"planning\",\r\n taskPrompt:\r\n `${leadSpec.taskPrompt}\\n\\n` +\r\n \"You are the sponsoring master agent. Own planning, delegation, and final synthesis.\",\r\n };\r\n\r\n const workerSpecs = specs.filter((spec) => spec.name !== leadSpec.name);\r\n return [normalizedLead, ...workerSpecs];\r\n}\r\n\r\n/**\r\n * Build a launcher script for an agent pane.\r\n * Generates bash scripts on macOS/Linux and PowerShell scripts on Windows.\r\n */\r\nexport function writeAgentLauncherScript(\r\n provider: string,\r\n model: string,\r\n promptFile: string,\r\n launcherFile: string,\r\n projectRoot: string,\r\n shellEscapeFn: (s: string) => string,\r\n writeFileSyncFn: (path: string, data: string, opts?: { mode?: number }) => void,\r\n): string {\r\n if (process.platform === \"win32\") {\r\n return writeWindowsLauncherScript(\r\n provider, model, promptFile, launcherFile, projectRoot, writeFileSyncFn,\r\n );\r\n }\r\n\r\n const cliProvider = getCliProviderForModelProvider(provider as ProviderName);\r\n\r\n if (cliProvider) {\r\n const startCommand = getCliProviderEntry(cliProvider).startCommand(model);\r\n const script = [\r\n \"#!/bin/bash\",\r\n `cd '${shellEscapeFn(projectRoot)}' || exit 1`,\r\n `${startCommand} \"$(cat '${shellEscapeFn(promptFile)}')\"`,\r\n ].join(\"\\n\");\r\n writeFileSyncFn(launcherFile, script, { mode: 0o755 });\r\n return `bash '${shellEscapeFn(launcherFile)}'`;\r\n }\r\n\r\n const script = [\r\n \"#!/bin/bash\",\r\n `cd '${shellEscapeFn(projectRoot)}' || exit 1`,\r\n `export AEMEATHCLI_PROMPT_FILE='${shellEscapeFn(promptFile)}'`,\r\n `'${shellEscapeFn(process.execPath)}' '${shellEscapeFn(process.argv[1] ?? \"aemeathcli\")}' --model ${model}`,\r\n ].join(\"\\n\");\r\n writeFileSyncFn(launcherFile, script, { mode: 0o755 });\r\n return `bash '${shellEscapeFn(launcherFile)}'`;\r\n}\r\n\r\n/**\r\n * Windows variant: generates a PowerShell (.ps1) launcher script.\r\n * PowerShell handles multi-line prompt files correctly (unlike cmd.exe set /p).\r\n */\r\nfunction writeWindowsLauncherScript(\r\n provider: string,\r\n model: string,\r\n promptFile: string,\r\n launcherFile: string,\r\n projectRoot: string,\r\n writeFileSyncFn: (path: string, data: string, opts?: { mode?: number }) => void,\r\n): string {\r\n const ps1File = launcherFile.replace(/\\.[^.]+$/, \".ps1\");\r\n const cliProvider = getCliProviderForModelProvider(provider as ProviderName);\r\n\r\n if (cliProvider) {\r\n const startCommand = getCliProviderEntry(cliProvider).startCommand(model);\r\n const script = [\r\n `Set-Location -Path '${projectRoot.replace(/'/g, \"''\")}'`,\r\n `$prompt = Get-Content -Path '${promptFile.replace(/'/g, \"''\")}' -Raw`,\r\n `& ${startCommand} $prompt`,\r\n ].join(\"\\r\\n\");\r\n writeFileSyncFn(ps1File, script);\r\n return `powershell -ExecutionPolicy Bypass -File \"${ps1File}\"`;\r\n }\r\n\r\n const script = [\r\n `Set-Location -Path '${projectRoot.replace(/'/g, \"''\")}'`,\r\n `$env:AEMEATHCLI_PROMPT_FILE = '${promptFile.replace(/'/g, \"''\")}'`,\r\n `& '${process.execPath.replace(/'/g, \"''\")}' '${(process.argv[1] ?? \"aemeathcli\").replace(/'/g, \"''\")}' --model ${model}`,\r\n ].join(\"\\r\\n\");\r\n writeFileSyncFn(ps1File, script);\r\n return `powershell -ExecutionPolicy Bypass -File \"${ps1File}\"`;\r\n}\r\n","/**\r\n * Prompt-based team creation — orchestrates LLM design and pane launches.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n *\r\n * Supports three launch modes:\r\n * 1. iTerm2 native panes (macOS, preferred when in iTerm2)\r\n * 2. tmux split panes (inside existing tmux session or new session)\r\n * 3. In-process split-panel mode (fallback when tmux unavailable)\r\n */\r\n\r\nimport type {\r\n IGlobalConfig,\r\n IAgentState,\r\n AgentStatus,\r\n ProviderName,\r\n IPaneConfig,\r\n ILayoutConfig,\r\n PaneLayout,\r\n} from \"../types/index.js\";\r\nimport { SUPPORTED_MODELS } from \"../types/index.js\";\r\nimport type { ProviderRegistry } from \"../providers/registry.js\";\r\nimport type { SetMessagesDispatch } from \"./commands/types.js\";\r\nimport { v4Id } from \"./utils.js\";\r\nimport type { ILLMAgentSpec } from \"./team-design.js\";\r\nimport {\r\n TEAM_DESIGN_SYSTEM_PROMPT,\r\n buildTeamDesignUserPrompt,\r\n parseLLMTeamDesign,\r\n normalizeLeadAgentSpec,\r\n resolveMasterProviderPriority,\r\n getAvailableModelsForProviders,\r\n pickLeadModel,\r\n writeAgentLauncherScript,\r\n} from \"./team-design.js\";\r\nimport { getCliProviderEntry } from \"../orchestrator/utils/provider-catalog.js\";\r\nimport type { TmuxManager } from \"../panes/tmux-manager.js\";\r\nimport type { execa as ExecaFn } from \"execa\";\r\nimport type NodeFs from \"node:fs\";\r\nimport type NodePath from \"node:path\";\r\nimport {\r\n setActiveTeamManager,\r\n setActiveTeamName,\r\n setActiveTmuxCleanup,\r\n} from \"./team-state.js\";\r\n\r\ninterface ITeamPanelControls {\r\n readonly isSplitPanelActive: boolean;\r\n readonly setAgents: (agents: readonly IAgentState[]) => void;\r\n readonly activate: () => void;\r\n readonly appendOutput: (\r\n agentId: string,\r\n content: string,\r\n options?: { readonly immediate?: boolean },\r\n ) => void;\r\n readonly updateAgentStatus: (agentId: string, status: AgentStatus) => void;\r\n}\r\n\r\nfunction sysMsg(setMessages: SetMessagesDispatch, content: string): void {\r\n setMessages((prev) => [\r\n ...prev,\r\n { id: v4Id(), role: \"system\" as const, content, createdAt: new Date() },\r\n ]);\r\n}\r\n\r\nexport async function handlePromptBasedTeamCreation(\r\n input: string,\r\n setMessages: SetMessagesDispatch,\r\n panel: ITeamPanelControls,\r\n getRegistry: () => Promise<ProviderRegistry>,\r\n currentModelId: string,\r\n config: IGlobalConfig,\r\n swarmConfig: IGlobalConfig[\"swarm\"],\r\n): Promise<string | undefined> {\r\n const teamName = `team-${Date.now()}`;\r\n\r\n setMessages((prev) => [\r\n ...prev,\r\n { id: v4Id(), role: \"user\" as const, content: input, createdAt: new Date() },\r\n { id: v4Id(), role: \"system\" as const, content: \"Analyzing your request to design the agent team...\", createdAt: new Date() },\r\n ]);\r\n\r\n try {\r\n // 1. Detect installed CLIs and resolve master-agent preference order.\r\n const registry = await getRegistry();\r\n const { detectInstalledProviders } = await import(\"../orchestrator/utils/detect-providers.js\");\r\n const installedClis = detectInstalledProviders();\r\n const prioritizedMasterProviders = resolveMasterProviderPriority(swarmConfig, installedClis);\r\n const availableModels = getAvailableModelsForProviders(installedClis);\r\n\r\n if (availableModels.length === 0) {\r\n sysMsg(setMessages, \"No AI CLI tools detected. Install at least one: claude, codex, gemini, kimi, or ollama.\");\r\n return;\r\n }\r\n\r\n const masterLeadModel = pickLeadModel(config, prioritizedMasterProviders, availableModels);\r\n if (masterLeadModel === undefined) {\r\n return;\r\n }\r\n\r\n // 2. Use the user's current active model to design the team (already authenticated).\r\n // Fall back to the resolved planning model only if the registry lacks the current model.\r\n const designModel = registry.hasModel(currentModelId)\r\n ? currentModelId\r\n : registry.hasModel(masterLeadModel) ? masterLeadModel : undefined;\r\n if (!designModel) {\r\n sysMsg(setMessages, \"Swarm team design needs at least one authenticated chat provider. Run `aemeathcli auth login` or configure an API key, then try again.\");\r\n return;\r\n }\r\n const designProvider = registry.getForModel(designModel);\r\n const primaryMasterLabel = prioritizedMasterProviders[0]\r\n ? getCliProviderEntry(prioritizedMasterProviders[0]).label\r\n : \"current configuration\";\r\n const userPrompt =\r\n `${buildTeamDesignUserPrompt(input, availableModels)}\\n\\n` +\r\n `Master-agent provider priority:\\n` +\r\n `${prioritizedMasterProviders.map((provider) => `- ${getCliProviderEntry(provider).label}`).join(\"\\n\")}\\n\\n` +\r\n `The sponsoring lead agent must use ${primaryMasterLabel} when possible.`;\r\n\r\n const DESIGN_TIMEOUT_MS = 60_000;\r\n sysMsg(setMessages, `Designing team with ${designModel}...`);\r\n\r\n const designStream = designProvider.stream({\r\n model: designModel,\r\n messages: [{ id: v4Id(), role: \"user\" as const, content: userPrompt, createdAt: new Date() }],\r\n system: TEAM_DESIGN_SYSTEM_PROMPT,\r\n maxTokens: 4000,\r\n });\r\n\r\n let designResponse = \"\";\r\n const designResult = await Promise.race([\r\n (async () => {\r\n for await (const chunk of designStream) {\r\n if (chunk.type === \"text\" && chunk.content) designResponse += chunk.content;\r\n if (chunk.type === \"error\" && chunk.error) throw new Error(`Design stream error: ${chunk.error}`);\r\n }\r\n return designResponse;\r\n })(),\r\n new Promise<never>((_resolve, reject) => {\r\n setTimeout(() => { reject(new Error(`Team design timed out after ${DESIGN_TIMEOUT_MS / 1000}s. Check your API credentials and try again.`)); }, DESIGN_TIMEOUT_MS);\r\n }),\r\n ]);\r\n designResponse = designResult;\r\n\r\n // 3. Parse the LLM's team design.\r\n // Prefer the user's active model for the lead agent when it's in the available pool.\r\n const teamMasterModel = availableModels.includes(currentModelId)\r\n ? currentModelId\r\n : masterLeadModel;\r\n const agentSpecs = normalizeLeadAgentSpec(\r\n parseLLMTeamDesign(designResponse, availableModels, designModel),\r\n teamMasterModel,\r\n );\r\n\r\n const projectRoot = process.cwd();\r\n const isWindows = process.platform === \"win32\";\r\n const isWindowsTerminal = isWindows\r\n && typeof process.env[\"WT_SESSION\"] === \"string\"\r\n && process.env[\"WT_SESSION\"].length > 0;\r\n\r\n // 4. Windows without Windows Terminal — no native pane support available.\r\n // Skip bash/PS1 script generation and go directly to in-process split-panel.\r\n if (isWindows && !isWindowsTerminal) {\r\n await launchInProcess(\r\n agentSpecs, input, teamName, config, panel, setMessages, projectRoot,\r\n );\r\n return undefined;\r\n }\r\n\r\n // 5. Prepare shared resources for terminal-pane launch modes.\r\n const fs = await import(\"node:fs\");\r\n const path = await import(\"node:path\");\r\n const os = await import(\"node:os\");\r\n const { execa: execaPane } = await import(\"execa\");\r\n\r\n const boardDir = path.join(process.cwd(), \".aemeathcli\", \"team-board\");\r\n fs.mkdirSync(boardDir, { recursive: true });\r\n const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), \"aemeathcli-team-\"));\r\n const shellEscape = (s: string): string => s.replace(/'/gu, \"'\\\\''\");\r\n\r\n const [leadSpec, ...workerSpecs] = agentSpecs;\r\n if (!leadSpec) return;\r\n\r\n // Write team manifest\r\n const teamManifest = {\r\n teamName, task: input, boardDir, leadAgent: leadSpec.name,\r\n agents: agentSpecs.map((s) => ({\r\n name: s.name, agentType: s.agentType, model: s.model, role: s.role,\r\n outputFile: path.join(boardDir, `${s.name}.md`),\r\n })),\r\n createdAt: new Date().toISOString(),\r\n };\r\n fs.writeFileSync(path.join(boardDir, \"team-manifest.json\"), JSON.stringify(teamManifest, null, 2), \"utf-8\");\r\n\r\n const teamRoster = agentSpecs\r\n .map((s) => ` - ${s.name} (${s.agentType}, ${s.model}) — role: ${s.role}`)\r\n .join(\"\\n\");\r\n\r\n // Build worker commands\r\n const workerCommands: Array<{ name: string; command: string }> = [];\r\n for (const spec of workerSpecs) {\r\n const outputFile = path.join(boardDir, `${spec.name}.md`);\r\n const promptFile = path.join(tempDir, `${spec.name}.txt`);\r\n const prompt = [\r\n `# Team Role: ${spec.name}`,\r\n `Type: ${spec.agentType} | Model: ${spec.model} | Role: ${spec.role}`,\r\n \"\", \"## Your Task\", spec.taskPrompt, \"\",\r\n \"## Team Context\",\r\n `You are part of a ${agentSpecs.length}-agent team working collaboratively.`,\r\n `Each agent has a specific domain. Do NOT overlap with other agents' responsibilities.`,\r\n \"\", \"### Team Members:\", teamRoster, \"\",\r\n \"## Shared Workspace\",\r\n `Team board directory: ${boardDir}`,\r\n `Your output file: ${outputFile}`,\r\n `Team manifest: ${path.join(boardDir, \"team-manifest.json\")}`,\r\n \"\", \"## Coordination Protocol\",\r\n `1. Write ALL your findings, analysis, and deliverables to your output file: ${outputFile}`,\r\n `2. You can read other agents' output files in ${boardDir}/ to check their progress and avoid duplication.`,\r\n `3. Focus on YOUR specific domain. Reference other agents' work when relevant to your analysis.`,\r\n `4. Read and analyze source files in the project directory to complete your task.`,\r\n `5. Be thorough and specific. Include file paths, line numbers, and code snippets in your findings.`,\r\n \"\", \"## Coordination with Lead\",\r\n `The team lead is ${leadSpec.name}. Check their coordination plan at: ${path.join(boardDir, \"coordinator.md\")}`,\r\n `After completing your work, the lead agent will read your output and synthesize findings.`,\r\n \"\", \"## User's Original Request\", input,\r\n ].join(\"\\n\");\r\n fs.writeFileSync(promptFile, prompt, \"utf-8\");\r\n\r\n const modelInfo = SUPPORTED_MODELS[spec.model];\r\n const provider = modelInfo?.provider ?? \"anthropic\";\r\n const launcherFile = path.join(tempDir, `${spec.name}-launch.sh`);\r\n const cmd = writeAgentLauncherScript(\r\n provider, spec.model, promptFile, launcherFile,\r\n projectRoot, shellEscape, fs.writeFileSync,\r\n );\r\n workerCommands.push({ name: spec.name, command: cmd });\r\n }\r\n\r\n // Build lead agent coordination task\r\n const leadOutputFile = path.join(boardDir, `${leadSpec.name}.md`);\r\n const leadCoordinationTask = [\r\n `I am the team coordinator (${leadSpec.name}, ${leadSpec.model}).`,\r\n \"\", leadSpec.taskPrompt, \"\",\r\n `## My Responsibilities`,\r\n `1. Break down the user's request into clear subtasks for each team member.`,\r\n `2. Write my coordination plan and task assignments to: ${path.join(boardDir, \"coordinator.md\")}`,\r\n `3. After completing my own analysis, read other agents' output files in ${boardDir}/ to check progress.`,\r\n `4. Synthesize findings from all agents into a final team summary at: ${path.join(boardDir, \"SUMMARY.md\")}`,\r\n `5. Flag any conflicts, gaps, or overlaps between agents' work.`,\r\n \"\", `## Team Members Working in Parallel Panes`,\r\n ...workerSpecs.map((s) => `- ${s.name} (${s.model}): writing to ${path.join(boardDir, s.name + \".md\")}`),\r\n \"\", `## My Output File: ${leadOutputFile}`,\r\n \"\", `## User's Original Request`, input, \"\",\r\n `Start by reading the codebase and writing my coordination plan to ${path.join(boardDir, \"coordinator.md\")}.`,\r\n ].join(\"\\n\");\r\n\r\n const leadPromptFile = path.join(tempDir, `${leadSpec.name}.txt`);\r\n const leadLauncherFile = path.join(tempDir, `${leadSpec.name}-launch.sh`);\r\n fs.writeFileSync(leadPromptFile, leadCoordinationTask, \"utf-8\");\r\n const leadCommand = writeAgentLauncherScript(\r\n SUPPORTED_MODELS[leadSpec.model]?.provider ?? \"anthropic\",\r\n leadSpec.model, leadPromptFile, leadLauncherFile,\r\n projectRoot, shellEscape, fs.writeFileSync,\r\n );\r\n const allPaneCommands = [{ name: leadSpec.name, command: leadCommand }, ...workerCommands];\r\n\r\n const formatAgentLines = (lead: string) =>\r\n agentSpecs.map((spec) =>\r\n spec.name === lead\r\n ? ` ${spec.name} (${spec.model}) — ${spec.role} [LEAD — this pane]`\r\n : ` ${spec.name} (${spec.model}) — ${spec.role}`,\r\n );\r\n\r\n // 6. iTerm2 native pane support (macOS)\r\n const isITerm2 = process.platform === \"darwin\" && process.env[\"TERM_PROGRAM\"] === \"iTerm.app\";\r\n\r\n if (isITerm2) {\r\n return await launchITerm2(\r\n agentSpecs, leadSpec, workerCommands, teamName, tempDir, boardDir,\r\n shellEscape, fs, path, execaPane, setMessages, formatAgentLines, leadCoordinationTask,\r\n );\r\n }\r\n\r\n // 7. Windows Terminal native pane support (Windows)\r\n if (isWindowsTerminal) {\r\n return await launchWindowsTerminal(\r\n agentSpecs, leadSpec, workerCommands, teamName, tempDir, boardDir,\r\n fs, execaPane, setMessages, formatAgentLines, leadCoordinationTask, projectRoot,\r\n );\r\n }\r\n\r\n // 8. tmux-based split-panel mode\r\n const { TmuxManager } = await import(\"../panes/tmux-manager.js\");\r\n const tmux = new TmuxManager();\r\n const tmuxAvailable = await tmux.isAvailable();\r\n\r\n if (tmuxAvailable) {\r\n const insideTmux = typeof process.env[\"TMUX\"] === \"string\" && process.env[\"TMUX\"].length > 0;\r\n if (insideTmux) {\r\n return await launchTmuxInSession(\r\n agentSpecs, leadSpec, workerCommands, teamName, tempDir, boardDir,\r\n fs, execaPane, setMessages, formatAgentLines, leadCoordinationTask,\r\n );\r\n }\r\n return await launchTmuxNewSession(\r\n agentSpecs, teamName, tempDir, boardDir, allPaneCommands,\r\n tmux, fs, setMessages, formatAgentLines, leadSpec, leadCoordinationTask,\r\n );\r\n }\r\n\r\n // 9. In-process fallback (no native pane support detected)\r\n await launchInProcess(\r\n agentSpecs, input, teamName, config, panel, setMessages, projectRoot,\r\n );\r\n return undefined;\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n sysMsg(setMessages, `Failed to create team: ${msg}`);\r\n return undefined;\r\n }\r\n}\r\n\r\n// ── iTerm2 Launch ────────────────────────────────────────────────────────\r\n\r\nasync function launchITerm2(\r\n agentSpecs: readonly ILLMAgentSpec[],\r\n leadSpec: ILLMAgentSpec,\r\n workerCommands: Array<{ name: string; command: string }>,\r\n teamName: string,\r\n tempDir: string,\r\n boardDir: string,\r\n shellEscape: (s: string) => string,\r\n fs: typeof NodeFs,\r\n path: typeof NodePath,\r\n execaPane: typeof ExecaFn,\r\n setMessages: SetMessagesDispatch,\r\n formatAgentLines: (lead: string) => string[],\r\n leadCoordinationTask: string,\r\n): Promise<string | undefined> {\r\n sysMsg(setMessages, `Designed ${agentSpecs.length}-agent team. Creating iTerm2 split panes...`);\r\n\r\n const asEscape = (s: string): string => s.replace(/\\\\/gu, \"\\\\\\\\\").replace(/\"/gu, '\\\\\"');\r\n const scriptLines: string[] = [];\r\n scriptLines.push('tell application \"iTerm2\"');\r\n scriptLines.push(\" tell current window\");\r\n scriptLines.push(\" set leaderSession to current session of current tab\");\r\n\r\n for (const [i, agent] of workerCommands.entries()) {\r\n const prevVar = i === 0 ? \"leaderSession\" : `agent${i - 1}`;\r\n const curVar = `agent${i}`;\r\n const splitDir = i === 0 ? \"vertically\" : \"horizontally\";\r\n scriptLines.push(` tell ${prevVar}`);\r\n scriptLines.push(` set ${curVar} to (split ${splitDir} with default profile)`);\r\n scriptLines.push(\" end tell\");\r\n scriptLines.push(` tell ${curVar}`);\r\n scriptLines.push(` set name to \"${asEscape(agent.name)}\"`);\r\n scriptLines.push(` write text \"${asEscape(agent.command)}\"`);\r\n scriptLines.push(\" end tell\");\r\n }\r\n\r\n scriptLines.push(\" select leaderSession\");\r\n scriptLines.push(\" end tell\");\r\n scriptLines.push(\"end tell\");\r\n\r\n const scriptFile = path.join(tempDir, \"create-panes.applescript\");\r\n fs.writeFileSync(scriptFile, scriptLines.join(\"\\n\"), \"utf-8\");\r\n\r\n try {\r\n await execaPane(\"osascript\", [scriptFile]);\r\n } catch (scriptErr: unknown) {\r\n const errMsg = scriptErr instanceof Error ? scriptErr.message : String(scriptErr);\r\n sysMsg(setMessages, `Failed to create iTerm2 panes: ${errMsg.slice(0, 200)}`);\r\n return;\r\n }\r\n\r\n setActiveTeamName(teamName);\r\n setActiveTeamManager(undefined);\r\n setActiveTmuxCleanup(async () => {\r\n try {\r\n const { execFileSync } = await import(\"node:child_process\");\r\n execFileSync(\"pkill\", [\"-f\", tempDir], { stdio: \"ignore\" });\r\n } catch { /* no matching processes */ }\r\n try {\r\n fs.rmSync(tempDir, { recursive: true, force: true });\r\n fs.rmSync(boardDir, { recursive: true, force: true });\r\n } catch { /* non-critical */ }\r\n });\r\n\r\n const agentLines = formatAgentLines(leadSpec.name);\r\n sysMsg(setMessages,\r\n `Team \"${teamName}\" — ${agentSpecs.length} agents active.\\n` +\r\n `${workerCommands.length} worker panes in iTerm2 + lead coordinating here.\\n` +\r\n `${agentLines.join(\"\\n\")}\\n/team stop to shut down all agents.`,\r\n );\r\n return leadCoordinationTask;\r\n}\r\n\r\n// ── Windows Terminal Launch ───────────────────────────────────────────────\r\n\r\nasync function launchWindowsTerminal(\r\n agentSpecs: readonly ILLMAgentSpec[],\r\n leadSpec: ILLMAgentSpec,\r\n workerCommands: Array<{ name: string; command: string }>,\r\n teamName: string,\r\n tempDir: string,\r\n boardDir: string,\r\n fs: typeof NodeFs,\r\n execaPane: typeof ExecaFn,\r\n setMessages: SetMessagesDispatch,\r\n formatAgentLines: (lead: string) => string[],\r\n leadCoordinationTask: string,\r\n projectRoot: string,\r\n): Promise<string | undefined> {\r\n sysMsg(setMessages, `Designed ${agentSpecs.length}-agent team. Creating Windows Terminal split panes...`);\r\n\r\n // Build hub-and-spoke layout using wt.exe split-pane commands.\r\n // First worker: vertical split (creates left/right halves).\r\n // Subsequent workers: horizontal splits (stack on the right side).\r\n // After all splits, focus returns to the leader pane (first/leftmost).\r\n for (const [i, agent] of workerCommands.entries()) {\r\n const splitDir = i === 0 ? \"-V\" : \"-H\";\r\n const args = [\"-w\", \"0\", \"sp\", splitDir];\r\n if (i === 0) args.push(\"-s\", \"0.5\");\r\n args.push(\"-d\", projectRoot, \"--title\", agent.name);\r\n // The agent.command is a PowerShell launcher: powershell -ExecutionPolicy Bypass -File \"path.ps1\"\r\n // Pass it via cmd /c so wt.exe treats it as the pane's commandline.\r\n args.push(\"cmd\", \"/c\", agent.command);\r\n\r\n try {\r\n await execaPane(\"wt\", args);\r\n } catch (err: unknown) {\r\n const errMsg = err instanceof Error ? err.message : String(err);\r\n sysMsg(setMessages, `Failed to create WT pane for ${agent.name}: ${errMsg.slice(0, 200)}`);\r\n }\r\n }\r\n\r\n // Return focus to the leader pane (leftmost).\r\n try {\r\n await execaPane(\"wt\", [\"-w\", \"0\", \"mf\", \"first\"]);\r\n } catch { /* non-fatal — focus may already be correct */ }\r\n\r\n setActiveTeamName(teamName);\r\n setActiveTeamManager(undefined);\r\n // eslint-disable-next-line @typescript-eslint/require-await\r\n setActiveTmuxCleanup(async () => {\r\n // Clean up temp files. WT panes close when their process exits.\r\n try {\r\n fs.rmSync(tempDir, { recursive: true, force: true });\r\n fs.rmSync(boardDir, { recursive: true, force: true });\r\n } catch { /* non-critical */ }\r\n });\r\n\r\n const agentLines = formatAgentLines(leadSpec.name);\r\n sysMsg(setMessages,\r\n `Team \"${teamName}\" — ${agentSpecs.length} agents active.\\n` +\r\n `${workerCommands.length} worker panes in Windows Terminal + lead coordinating here.\\n` +\r\n `${agentLines.join(\"\\n\")}\\n` +\r\n `Keybindings:\\n Alt+Arrow Switch pane\\n Alt+Shift+Arrow Resize pane\\n` +\r\n `/team stop to shut down all agents.`,\r\n );\r\n return leadCoordinationTask;\r\n}\r\n\r\n// ── tmux In-Session Launch ───────────────────────────────────────────────\r\n\r\nasync function launchTmuxInSession(\r\n agentSpecs: readonly ILLMAgentSpec[],\r\n leadSpec: ILLMAgentSpec,\r\n workerCommands: Array<{ name: string; command: string }>,\r\n teamName: string,\r\n tempDir: string,\r\n boardDir: string,\r\n fs: typeof NodeFs,\r\n execaPane: typeof ExecaFn,\r\n setMessages: SetMessagesDispatch,\r\n formatAgentLines: (lead: string) => string[],\r\n leadCoordinationTask: string,\r\n): Promise<string | undefined> {\r\n sysMsg(setMessages, `Designed ${agentSpecs.length}-agent team. Creating tmux split panes...`);\r\n\r\n const currentResult = await execaPane(\"tmux\", [\"display-message\", \"-p\", \"#{pane_id}\"]);\r\n const leaderPaneId = currentResult.stdout.trim();\r\n const agentPaneIds: string[] = [];\r\n\r\n for (const [i, agent] of workerCommands.entries()) {\r\n const splitResult = await execaPane(\"tmux\", [\r\n \"split-window\", i === 0 ? \"-h\" : \"-v\", \"-P\", \"-F\", \"#{pane_id}\",\r\n ]);\r\n const newPaneId = splitResult.stdout.trim();\r\n agentPaneIds.push(newPaneId);\r\n await execaPane(\"tmux\", [\"send-keys\", \"-t\", newPaneId, agent.command, \"Enter\"]);\r\n }\r\n if (workerCommands.length > 0) {\r\n try { await execaPane(\"tmux\", [\"select-layout\", \"main-vertical\"]); } catch { /* non-fatal */ }\r\n }\r\n try { await execaPane(\"tmux\", [\"select-pane\", \"-t\", leaderPaneId]); } catch { /* non-fatal */ }\r\n\r\n setActiveTeamName(teamName);\r\n setActiveTeamManager(undefined);\r\n setActiveTmuxCleanup(async () => {\r\n const { execa: ex } = await import(\"execa\");\r\n for (const pid of agentPaneIds) {\r\n try { await ex(\"tmux\", [\"kill-pane\", \"-t\", pid]); } catch { /* pane may be gone */ }\r\n }\r\n try {\r\n fs.rmSync(tempDir, { recursive: true, force: true });\r\n fs.rmSync(boardDir, { recursive: true, force: true });\r\n } catch { /* non-critical */ }\r\n });\r\n\r\n const agentLines = formatAgentLines(leadSpec.name);\r\n sysMsg(setMessages,\r\n `Team \"${teamName}\" — ${agentSpecs.length} agents active.\\n` +\r\n `${workerCommands.length} worker panes in tmux + lead coordinating here.\\n` +\r\n `${agentLines.join(\"\\n\")}\\n/team stop to shut down all agents.`,\r\n );\r\n return leadCoordinationTask;\r\n}\r\n\r\n// ── tmux New-Session Launch ──────────────────────────────────────────────\r\n\r\nasync function launchTmuxNewSession(\r\n agentSpecs: readonly ILLMAgentSpec[],\r\n teamName: string,\r\n tempDir: string,\r\n boardDir: string,\r\n allPaneCommands: Array<{ name: string; command: string }>,\r\n tmux: TmuxManager,\r\n fs: typeof NodeFs,\r\n setMessages: SetMessagesDispatch,\r\n formatAgentLines: (lead: string) => string[],\r\n leadSpec: ILLMAgentSpec,\r\n leadCoordinationTask: string,\r\n): Promise<string | undefined> {\r\n sysMsg(setMessages, `Designed ${agentSpecs.length}-agent team. Opening tmux split-panel view...`);\r\n\r\n const sessionName = await tmux.createSession(teamName);\r\n const paneConfigs: IPaneConfig[] = agentSpecs.map((spec, i) => ({\r\n paneId: `pane-${i}`, agentName: spec.name, model: spec.model, role: spec.role,\r\n title: `${spec.name} (${spec.model})`,\r\n }));\r\n const layoutConfig: ILayoutConfig = {\r\n layout: \"hub-spoke\" as PaneLayout, panes: paneConfigs, maxPanes: paneConfigs.length,\r\n };\r\n await tmux.createPanes(layoutConfig);\r\n\r\n for (const [i, agent] of allPaneCommands.entries()) {\r\n await tmux.sendCommand(`pane-${i}`, agent.command);\r\n }\r\n\r\n setActiveTeamName(teamName);\r\n setActiveTeamManager(undefined);\r\n setActiveTmuxCleanup(async () => {\r\n await tmux.destroy();\r\n try {\r\n fs.rmSync(tempDir, { recursive: true, force: true });\r\n fs.rmSync(boardDir, { recursive: true, force: true });\r\n } catch { /* non-critical */ }\r\n });\r\n\r\n sysMsg(setMessages,\r\n `Attaching to tmux session \"${sessionName}\" with ${agentSpecs.length} agents\\u2026\\n\\n` +\r\n `Inside tmux:\\n Ctrl+B \\u2192/\\u2190/\\u2191/\\u2193 Switch pane\\n Ctrl+B d Detach (return to aemeath)\\n Ctrl+B z Zoom pane fullscreen`,\r\n );\r\n\r\n // Auto-attach: temporarily release terminal from Ink, hand it to tmux.\r\n const { execFileSync } = await import(\"node:child_process\");\r\n if (process.stdin.isTTY && typeof process.stdin.setRawMode === \"function\") {\r\n process.stdin.setRawMode(false);\r\n }\r\n process.stdin.pause();\r\n\r\n try {\r\n execFileSync(\"tmux\", [\"attach-session\", \"-t\", sessionName], { stdio: \"inherit\" });\r\n } catch { /* User detached from tmux or attach failed */ }\r\n\r\n if (process.stdin.isTTY && typeof process.stdin.setRawMode === \"function\") {\r\n process.stdin.setRawMode(true);\r\n }\r\n process.stdin.resume();\r\n\r\n const agentLines = formatAgentLines(leadSpec.name);\r\n sysMsg(setMessages,\r\n `Detached from tmux. Agents may still be running.\\n\\nAgents:\\n${agentLines.join(\"\\n\")}\\n\\n` +\r\n `Keybindings (inside tmux):\\n` +\r\n ` Ctrl+B \\u2192 \\u2190 \\u2191 \\u2193 Switch between panes\\n` +\r\n ` Ctrl+B d Detach (return here)\\n Ctrl+B z Zoom active pane (fullscreen toggle)\\n` +\r\n ` Ctrl+B x Close active pane\\n\\n` +\r\n `Re-attach: tmux attach -t ${sessionName}\\n/team stop Shut down all agents and kill session`,\r\n );\r\n return leadCoordinationTask;\r\n}\r\n\r\n// ── In-Process Fallback Launch ───────────────────────────────────────────\r\n\r\nasync function launchInProcess(\r\n agentSpecs: readonly ILLMAgentSpec[],\r\n input: string,\r\n teamName: string,\r\n config: IGlobalConfig,\r\n panel: ITeamPanelControls,\r\n setMessages: SetMessagesDispatch,\r\n projectRoot: string,\r\n): Promise<undefined> {\r\n sysMsg(setMessages,\r\n `Designed ${agentSpecs.length}-agent team. Starting agents (in-process mode)\\u2026\\n\\n` +\r\n `Keybindings:\\n Tab Switch to next agent\\n` +\r\n ` Ctrl+1-${agentSpecs.length} Jump to agent N\\n /team stop Exit team mode`,\r\n );\r\n\r\n const agentDefinitions = agentSpecs.map((spec) => {\r\n const modelInfo = SUPPORTED_MODELS[spec.model];\r\n const provider: ProviderName = modelInfo?.provider ?? \"anthropic\";\r\n return { name: spec.name, agentType: spec.agentType, model: spec.model, provider, role: spec.role };\r\n });\r\n\r\n const { TeamManager: TM } = await import(\"../teams/team-manager.js\");\r\n const manager = new TM();\r\n setActiveTeamManager(manager);\r\n setActiveTeamName(teamName);\r\n setActiveTmuxCleanup(undefined);\r\n\r\n const agentAllowedPaths = Array.from(new Set([projectRoot, ...config.permissions.allowedPaths]));\r\n const teamConfig = manager.createTeam(teamName, {\r\n description: `Agent team for: ${input.slice(0, 120)}`,\r\n agents: agentDefinitions,\r\n agentEnv: {\r\n AEMEATHCLI_TOOL_PROJECT_ROOT: projectRoot,\r\n AEMEATHCLI_TOOL_WORKING_DIRECTORY: projectRoot,\r\n AEMEATHCLI_TOOL_PERMISSION_MODE: config.permissions.mode,\r\n AEMEATHCLI_TOOL_ALLOWED_PATHS: JSON.stringify(agentAllowedPaths),\r\n AEMEATHCLI_TOOL_BLOCKED_COMMANDS: JSON.stringify(config.permissions.blockedCommands),\r\n },\r\n });\r\n\r\n const agentStates: IAgentState[] = teamConfig.members.map((member) => ({\r\n config: member, status: \"idle\" as const,\r\n }));\r\n panel.setAgents(agentStates);\r\n panel.activate();\r\n\r\n for (const member of teamConfig.members) {\r\n panel.appendOutput(member.agentId, `[${member.name}] Starting (${member.model})...\\n`, { immediate: true });\r\n }\r\n\r\n manager.onAgentMessages(teamName, (_agentName, method, params) => {\r\n if (method === \"agent.streamChunk\") {\r\n const agentId = typeof params[\"agentId\"] === \"string\" ? params[\"agentId\"] : \"\";\r\n const content = typeof params[\"content\"] === \"string\" ? params[\"content\"] : \"\";\r\n if (agentId && content) panel.appendOutput(agentId, content);\r\n }\r\n if (method === \"agent.taskUpdate\") {\r\n const agentId = typeof params[\"agentId\"] === \"string\" ? params[\"agentId\"] : \"\";\r\n const rawStatus = typeof params[\"status\"] === \"string\" ? params[\"status\"] : \"\";\r\n if (agentId && rawStatus) {\r\n const statusMap: Record<string, AgentStatus> = { in_progress: \"active\", completed: \"idle\" };\r\n const mapped = statusMap[rawStatus];\r\n if (mapped) panel.updateAgentStatus(agentId, mapped);\r\n }\r\n }\r\n });\r\n\r\n try { await manager.startAgents(teamName); } catch (startErr: unknown) {\r\n const errMsg = startErr instanceof Error ? startErr.message : String(startErr);\r\n sysMsg(setMessages, `Warning: Some agents failed to start: ${errMsg.slice(0, 200)}`);\r\n }\r\n\r\n const agentStatesAfterStart = manager.getAgentStates(teamName);\r\n const aliveCount = agentStatesAfterStart.filter((s) => s.status !== \"error\" && s.status !== \"shutdown\").length;\r\n if (aliveCount === 0) {\r\n sysMsg(setMessages, \"All agents failed to start. Check your API credentials and try again.\");\r\n return undefined;\r\n }\r\n\r\n for (const [i, member] of teamConfig.members.entries()) {\r\n const spec = agentSpecs[i];\r\n const taskId = v4Id();\r\n const prompt = spec\r\n ? `You are ${spec.name} (${spec.agentType}).\\n\\n${spec.taskPrompt}\\n\\nUser request:\\n${input}`\r\n : `Work on the following task:\\n\\n${input}`;\r\n manager.assignTask(teamName, member.name, taskId, `${member.role}: ${input.slice(0, 80)}`, prompt);\r\n }\r\n\r\n const agentLines = agentSpecs.map((spec) => ` ${spec.name} (${spec.model}) — ${spec.role}`);\r\n sysMsg(setMessages,\r\n `Team \"${teamName}\" created with ${teamConfig.members.length} agents — split-panel active.\\n` +\r\n `${agentLines.join(\"\\n\")}\\nUse Tab to switch agents. /team stop to return to single-pane.`,\r\n );\r\n return undefined;\r\n}\r\n","/**\r\n * Pure helper functions for the App component.\r\n * Extracted from App.tsx to enforce the 300-line component limit (PRD 6.2).\r\n */\r\n\r\nimport type { IGlobalConfig, IModelResolution } from \"../types/index.js\";\r\nimport type { CliProviderType } from \"../orchestrator/constants.js\";\r\n\r\nexport const DEFAULT_SYSTEM_PROMPT =\r\n \"You are AemeathCLI (aemeathcli), a multi-model AI agent orchestrator. \" +\r\n \"You help users with coding tasks, code review, debugging, refactoring, and project management. \" +\r\n \"You are NOT Claude Code, Codex, or Gemini CLI — you are Aemeath Agent Swarm, an independent tool \" +\r\n \"that orchestrates multiple AI providers (Anthropic, OpenAI, Google, Kimi, Ollama).\\n\\n\" +\r\n \"Answer concisely and directly. Key features:\\n\" +\r\n \"- Multi-model: /model to switch between Claude, GPT, Gemini, Kimi, Ollama\\n\" +\r\n \"- Agent orchestration: use Shift+Tab to switch into swarm mode inside the TUI\\n\" +\r\n \" - swarm mode designs and coordinates multi-agent teams from natural language\\n\" +\r\n \" - the master agent owns the left pane, worker agents stream on the right\\n\" +\r\n \" - follow the configured master-agent provider preference when building teams\\n\" +\r\n \"- Skills: $review, $commit, $plan, $debug, $test, $refactor\\n\" +\r\n \"- Commands: /help, /model, /role, /history, /resume, /cost\\n\\n\" +\r\n \"When users ask about agent swarm, multi-agent, team mode, or orchestration, \" +\r\n \"keep them in the current TUI session and tell them to switch modes with Shift+Tab. \" +\r\n \"Do not redirect them to a separate `launch` command.\";\r\n\r\nexport function getCandidateModels(\r\n config: IGlobalConfig,\r\n resolution: IModelResolution,\r\n activeModelId: string,\r\n): readonly string[] {\r\n const candidates: string[] = [activeModelId];\r\n\r\n if (resolution.source !== \"user_override\" && resolution.role) {\r\n const roleConfig = config.roles[resolution.role];\r\n if (roleConfig) {\r\n candidates.push(roleConfig.primary, ...roleConfig.fallback);\r\n }\r\n }\r\n\r\n const seen = new Set<string>();\r\n const unique: string[] = [];\r\n for (const modelId of candidates) {\r\n if (!seen.has(modelId)) {\r\n seen.add(modelId);\r\n unique.push(modelId);\r\n }\r\n }\r\n\r\n return unique;\r\n}\r\n\r\nexport function cliProviderListsEqual(\r\n left: readonly CliProviderType[],\r\n right: readonly CliProviderType[],\r\n): boolean {\r\n return left.length === right.length && left.every((value, index) => value === right[index]);\r\n}\r\n\r\nexport function normalizeSwarmConfig(\r\n swarm: IGlobalConfig[\"swarm\"],\r\n detectedProviders: readonly CliProviderType[],\r\n): IGlobalConfig[\"swarm\"] {\r\n const primaryMasterProvider = swarm.primaryMasterProvider !== undefined &&\r\n detectedProviders.includes(swarm.primaryMasterProvider)\r\n ? swarm.primaryMasterProvider\r\n : undefined;\r\n const fallbackMasterProviders = swarm.fallbackMasterProviders.filter(\r\n (provider) => provider !== primaryMasterProvider && detectedProviders.includes(provider),\r\n );\r\n\r\n return {\r\n onboardingComplete: swarm.onboardingComplete && primaryMasterProvider !== undefined,\r\n detectedProviders: [...detectedProviders],\r\n primaryMasterProvider,\r\n fallbackMasterProviders,\r\n };\r\n}\r\n\r\nexport function swarmConfigsEqual(\r\n left: IGlobalConfig[\"swarm\"],\r\n right: IGlobalConfig[\"swarm\"],\r\n): boolean {\r\n return (\r\n left.onboardingComplete === right.onboardingComplete &&\r\n left.primaryMasterProvider === right.primaryMasterProvider &&\r\n cliProviderListsEqual(left.detectedProviders, right.detectedProviders) &&\r\n cliProviderListsEqual(left.fallbackMasterProviders, right.fallbackMasterProviders)\r\n );\r\n}\r\n","/**\r\n * Root TUI application component per PRD section 6.2\r\n * Orchestrates the entire interactive chat experience.\r\n *\r\n * Command handlers, team creation, and persistence logic are extracted to\r\n * separate modules to meet the PRD's module size guidelines.\r\n */\r\n\r\nimport React, { useState, useCallback, useEffect, useRef } from \"react\";\r\nimport { render } from \"ink\";\r\nimport { SinglePane } from \"./layouts/SinglePane.js\";\r\nimport { SplitPane } from \"./layouts/SplitPane.js\";\r\nimport { useModel } from \"./hooks/useModel.js\";\r\nimport { useStream } from \"./hooks/useStream.js\";\r\nimport { useCost } from \"./hooks/useCost.js\";\r\nimport { usePanel } from \"./hooks/usePanel.js\";\r\nimport type {\r\n IChatMessage,\r\n ModelRole,\r\n IGlobalConfig,\r\n IStreamChunk,\r\n ProviderName,\r\n IModelDisplayEntry,\r\n} from \"../types/index.js\";\r\nimport {\r\n DEFAULT_CONFIG,\r\n SUPPORTED_MODELS,\r\n PROVIDER_MODEL_ORDER,\r\n getThinkingConfigForModel,\r\n} from \"../types/index.js\";\r\nimport type { ProviderRegistry } from \"../providers/registry.js\";\r\nimport type { InputMode } from \"./components/InputBar.js\";\r\nimport { v4Id } from \"./utils.js\";\r\nimport {\r\n registerDynamicFileRefs,\r\n registerDynamicSkills,\r\n} from \"./autocomplete-data.js\";\r\nimport { ModelSelector } from \"./components/ModelSelector.js\";\r\nimport { ThinkingSelector } from \"./components/ThinkingSelector.js\";\r\nimport { LoginSelector } from \"./components/LoginSelector.js\";\r\nimport { SwarmOnboarding } from \"./components/SwarmOnboarding.js\";\r\nimport { getCliProviderEntry } from \"../orchestrator/utils/provider-catalog.js\";\r\nimport type { CliProviderType } from \"../orchestrator/constants.js\";\r\n\r\n// Extracted modules\r\nimport type { SelectionMode } from \"./commands/types.js\";\r\nimport { handleInternalCommand } from \"./commands/slash-router.js\";\r\nimport { formatThinkingMethod } from \"./commands/model-helpers.js\";\r\nimport { handleSkillInvocation } from \"./commands/skill-commands.js\";\r\nimport { loadLoginModuleForSlash } from \"./commands/login-commands.js\";\r\nimport { persistMessages } from \"./conversation-persistence.js\";\r\nimport { handlePromptBasedTeamCreation } from \"./team-launcher.js\";\r\nimport { getActiveTeamManager, getActiveTeamName } from \"./team-state.js\";\r\nimport {\r\n DEFAULT_SYSTEM_PROMPT,\r\n getCandidateModels,\r\n normalizeSwarmConfig,\r\n swarmConfigsEqual,\r\n} from \"./app-helpers.js\";\r\n\r\ninterface IChatSessionOptions {\r\n readonly initialMessage?: string | undefined;\r\n readonly model?: string | undefined;\r\n readonly role?: string | undefined;\r\n readonly systemPrompt?: string | undefined;\r\n readonly streaming?: boolean | undefined;\r\n readonly isAgentPane?: boolean | undefined;\r\n}\r\n\r\ninterface IAppProps {\r\n readonly config: IGlobalConfig;\r\n readonly options: IChatSessionOptions;\r\n}\r\n\r\nfunction App({ config, options }: IAppProps): React.ReactElement {\r\n const { resolution, modelId, switchModel, switchRole } = useModel(\r\n config,\r\n options.model,\r\n options.role as ModelRole | undefined,\r\n );\r\n const { state: streamState, startStream, cancelStream, reset: resetStream } = useStream();\r\n const { totalCost, totalTokens, record } = useCost(config.cost);\r\n\r\n const totalCostRef = useRef(totalCost);\r\n totalCostRef.current = totalCost;\r\n const totalTokensRef = useRef(totalTokens);\r\n totalTokensRef.current = totalTokens;\r\n const panel = usePanel();\r\n\r\n const [messages, setMessages] = useState<IChatMessage[]>([]);\r\n const [isProcessing, setIsProcessing] = useState(false);\r\n const messagesRef = useRef<IChatMessage[]>([]);\r\n messagesRef.current = messages;\r\n const [gitBranch, setGitBranch] = useState<string | undefined>();\r\n const [thinkingValue, setThinkingValue] = useState<string>(\"medium\");\r\n const [selectionMode, setSelectionMode] = useState<SelectionMode>({ type: \"none\" });\r\n const [modelDisplayOrder, setModelDisplayOrder] = useState<\r\n Readonly<Record<string, readonly IModelDisplayEntry[]>> | undefined\r\n >(undefined);\r\n const [persistentHistory, setPersistentHistory] = useState<string[]>([]);\r\n const [inputMode, setInputMode] = useState<InputMode>(\"agent-swarm\");\r\n const [swarmConfig, setSwarmConfig] = useState<IGlobalConfig[\"swarm\"]>(config.swarm);\r\n const [swarmOnboardingDeferred, setSwarmOnboardingDeferred] = useState(false);\r\n\r\n const registryRef = useRef<ProviderRegistry | undefined>(undefined);\r\n const getRegistry = useCallback(async (): Promise<ProviderRegistry> => {\r\n if (registryRef.current !== undefined) return registryRef.current;\r\n const { createDefaultRegistry } = await import(\"../providers/registry.js\");\r\n registryRef.current = await createDefaultRegistry();\r\n return registryRef.current;\r\n }, []);\r\n\r\n const projectRootRef = useRef<string>(process.cwd());\r\n\r\n // ── Mount-time effects ─────────────────────────────────────────────────\r\n\r\n useEffect(() => {\r\n void import(\"../utils/pathResolver.js\")\r\n .then(({ findProjectRoot }) => { projectRootRef.current = findProjectRoot(); })\r\n .catch(() => {});\r\n }, []);\r\n\r\n useEffect(() => {\r\n void (async () => {\r\n try {\r\n const { findProjectRoot } = await import(\"../utils/pathResolver.js\");\r\n const root = findProjectRoot();\r\n projectRootRef.current = root;\r\n const { loadInputHistory } = await import(\"../storage/input-history.js\");\r\n const history = await loadInputHistory(root);\r\n if (history.length > 0) setPersistentHistory(history);\r\n } catch { /* Non-critical */ }\r\n })();\r\n }, []);\r\n\r\n useEffect(() => {\r\n void import(\"node:child_process\")\r\n .then(({ execFile }) => {\r\n execFile(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"], { timeout: 2000 }, (error, stdout) => {\r\n if (!error && stdout) setGitBranch(stdout.trim());\r\n });\r\n })\r\n .catch(() => {});\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (options.isAgentPane) return;\r\n void import(\"../orchestrator/utils/detect-providers.js\")\r\n .then(({ detectInstalledProviders }) => {\r\n const detected = detectInstalledProviders();\r\n if (detected.length > 0) setSwarmOnboardingDeferred(false);\r\n setSwarmConfig((prev) => {\r\n const next = normalizeSwarmConfig(prev, detected);\r\n return swarmConfigsEqual(prev, next) ? prev : next;\r\n });\r\n })\r\n .catch(() => {});\r\n }, [options.isAgentPane]);\r\n\r\n useEffect(() => {\r\n void (async () => {\r\n try {\r\n const { findProjectRoot } = await import(\"../utils/pathResolver.js\");\r\n const projectRoot = findProjectRoot();\r\n projectRootRef.current = projectRoot;\r\n const { default: fg } = await import(\"fast-glob\");\r\n const pathModule = await import(\"node:path\");\r\n const fileRefs = await fg([\"**/*\"], {\r\n cwd: projectRoot, onlyFiles: true, dot: false, followSymbolicLinks: false,\r\n unique: true, suppressErrors: true,\r\n ignore: [\".git/**\", \"node_modules/**\", \"dist/**\", \"coverage/**\", \".aemeathcli/**\", \".agents/**\", \"reference-gemini-cli/**\", \"cli-agent-orchestrator/**\"],\r\n });\r\n const autocompleteItems = fileRefs\r\n .sort((left, right) => left.length !== right.length ? left.length - right.length : left.localeCompare(right))\r\n .slice(0, 400)\r\n .map((filePath) => ({\r\n label: `@${filePath}`,\r\n description: pathModule.dirname(filePath) === \".\" ? \"project root file\" : pathModule.dirname(filePath),\r\n }));\r\n registerDynamicFileRefs(autocompleteItems);\r\n } catch { registerDynamicFileRefs([]); }\r\n })();\r\n }, []);\r\n\r\n useEffect(() => {\r\n void (async () => {\r\n try {\r\n const { SkillRegistry } = await import(\"../skills/registry.js\");\r\n const { findProjectRoot } = await import(\"../utils/pathResolver.js\");\r\n const registry = new SkillRegistry();\r\n await registry.initialize(findProjectRoot());\r\n const all = registry.listAll();\r\n if (all.length > 0) {\r\n registerDynamicSkills(all.map((s) => ({ label: `$${s.name}`, description: s.description })));\r\n }\r\n } catch { /* Skill discovery failed */ }\r\n })();\r\n }, []);\r\n\r\n useEffect(() => {\r\n void (async () => {\r\n try {\r\n const { discoverModels, getDisplayOrder } = await import(\"../providers/model-discovery.js\");\r\n await discoverModels();\r\n setModelDisplayOrder(getDisplayOrder());\r\n } catch { /* Model discovery failed */ }\r\n })();\r\n }, []);\r\n\r\n // ── Core submit handler ────────────────────────────────────────────────\r\n\r\n const handleSubmit = useCallback(\r\n async (input: string) => {\r\n if (input.startsWith(\"/\")) {\r\n await handleInternalCommand(input, switchModel, switchRole, {\r\n totalCost: totalCostRef.current, totalTokens: totalTokensRef.current,\r\n setMessages, modelId, thinkingValue, setThinkingValue, setSelectionMode,\r\n resolution, panel: { setAgents: panel.setAgents, activate: panel.activate, deactivate: panel.deactivate, appendOutput: panel.appendOutput },\r\n getRegistry, projectRoot: projectRootRef.current,\r\n });\r\n return;\r\n }\r\n\r\n if (input.startsWith(\"$\")) {\r\n await handleSkillInvocation(input, setMessages);\r\n return;\r\n }\r\n\r\n const activeTeamName = getActiveTeamName();\r\n const activeTeamManager = getActiveTeamManager();\r\n\r\n if (inputMode === \"agent-swarm\" && !options.isAgentPane && !panel.isSplitPanelActive && !activeTeamName) {\r\n setIsProcessing(true);\r\n try {\r\n const leaderTask = await handlePromptBasedTeamCreation(\r\n input, setMessages, panel, getRegistry, modelId, config, swarmConfig,\r\n );\r\n if (leaderTask) setTimeout(() => void handleSubmit(leaderTask), 1500);\r\n } finally {\r\n setIsProcessing(false);\r\n }\r\n return;\r\n }\r\n\r\n if (panel.isSplitPanelActive && activeTeamManager && activeTeamName) {\r\n const targetAgent = panel.agents[panel.activeAgentIndex] ?? panel.agents[0];\r\n if (!targetAgent) {\r\n setMessages((prev) => [...prev, { id: v4Id(), role: \"system\", content: \"No active swarm agent is available to receive input.\", createdAt: new Date() }]);\r\n return;\r\n }\r\n const taskId = v4Id();\r\n activeTeamManager.assignTask(activeTeamName, targetAgent.config.name, taskId, `User steering: ${input.slice(0, 72)}`, input);\r\n panel.appendOutput(targetAgent.config.agentId, `\\n[User] ${input}\\n`);\r\n panel.updateAgentStatus(targetAgent.config.agentId, \"active\");\r\n return;\r\n }\r\n\r\n const userMessage: IChatMessage = { id: v4Id(), role: \"user\", content: input, createdAt: new Date() };\r\n import(\"../storage/input-history.js\")\r\n .then(({ appendInputHistory }) => appendInputHistory(projectRootRef.current, input))\r\n .catch(() => {});\r\n\r\n setMessages((prev) => [...prev, userMessage]);\r\n setIsProcessing(true);\r\n resetStream();\r\n\r\n try {\r\n const registry = await getRegistry();\r\n const allMessages = [...messagesRef.current, userMessage].filter((m) => m.role !== \"system\");\r\n const candidateModels = getCandidateModels(config, resolution, modelId);\r\n\r\n let responseModel = modelId;\r\n let responseProvider: ProviderName = resolution.provider;\r\n let fullContent = \"\";\r\n let completed = false;\r\n let lastError: unknown;\r\n\r\n for (const candidateModel of candidateModels) {\r\n const providerOrUndefined = registry.hasModel(candidateModel) ? registry.getForModel(candidateModel) : undefined;\r\n if (!providerOrUndefined) { lastError = new Error(`No provider available for model \"${candidateModel}\"`); continue; }\r\n const candidateProvider = providerOrUndefined;\r\n\r\n let candidateContent = \"\";\r\n let caughtError: unknown;\r\n\r\n const stream = candidateProvider.stream({\r\n model: candidateModel, messages: allMessages,\r\n system: options.systemPrompt ?? DEFAULT_SYSTEM_PROMPT, maxTokens: 16_000,\r\n });\r\n\r\n async function* instrumentedStream(source: AsyncIterable<IStreamChunk>): AsyncGenerator<IStreamChunk> {\r\n try {\r\n for await (const chunk of source) {\r\n if (chunk.type === \"text\" && chunk.content) candidateContent += chunk.content;\r\n if (chunk.type === \"usage\" && chunk.usage) {\r\n record(candidateProvider.name as ProviderName, candidateModel, chunk.usage.inputTokens, chunk.usage.outputTokens, resolution.role);\r\n }\r\n if (chunk.type === \"error\") caughtError = new Error(chunk.error ?? `Model \"${candidateModel}\" stream failed`);\r\n yield chunk;\r\n }\r\n } catch (err: unknown) { caughtError = err; throw err; }\r\n }\r\n\r\n resetStream();\r\n await startStream(instrumentedStream(stream));\r\n if (caughtError !== undefined) { lastError = caughtError; continue; }\r\n\r\n responseModel = candidateModel;\r\n responseProvider = candidateProvider.name as ProviderName;\r\n fullContent = candidateContent;\r\n completed = true;\r\n break;\r\n }\r\n\r\n if (!completed) {\r\n throw lastError instanceof Error ? lastError : new Error(typeof lastError === \"string\" ? lastError : \"No model could produce a response\");\r\n }\r\n\r\n if (fullContent.length > 0) {\r\n const assistantMessage: IChatMessage = {\r\n id: v4Id(), role: \"assistant\", content: fullContent,\r\n model: responseModel, provider: responseProvider, createdAt: new Date(),\r\n };\r\n setMessages((prev) => {\r\n const output: IChatMessage[] = [...prev];\r\n if (responseModel !== modelId) {\r\n output.push({ id: v4Id(), role: \"system\", content: `Primary model \"${modelId}\" failed. Switched to fallback \"${responseModel}\".`, createdAt: new Date() });\r\n }\r\n output.push(assistantMessage);\r\n return output;\r\n });\r\n void persistMessages(projectRootRef.current, userMessage, assistantMessage, responseModel, responseProvider);\r\n }\r\n } catch (error: unknown) {\r\n const errorContent = error instanceof Error ? error.message : String(error);\r\n setMessages((prev) => [...prev, { id: v4Id(), role: \"assistant\", content: `Error: ${errorContent}`, model: modelId, createdAt: new Date() }]);\r\n } finally {\r\n setIsProcessing(false);\r\n }\r\n },\r\n [config, modelId, resolution, options.systemPrompt, record, switchModel, switchRole, startStream, resetStream, getRegistry, panel, thinkingValue, inputMode, options.isAgentPane, swarmConfig],\r\n );\r\n\r\n useEffect(() => {\r\n if (options.initialMessage) void handleSubmit(options.initialMessage);\r\n }, [handleSubmit, options.initialMessage]);\r\n\r\n const handleSubmitSync = useCallback((input: string): void => { void handleSubmit(input); }, [handleSubmit]);\r\n const handleCancel = useCallback(() => { cancelStream(); setIsProcessing(false); }, [cancelStream]);\r\n\r\n // ── Selection callbacks ────────────────────────────────────────────────\r\n\r\n const handleModelSelected = useCallback((selectedModelId: string) => {\r\n const thinkingCfg = getThinkingConfigForModel(selectedModelId);\r\n if (thinkingCfg) {\r\n setSelectionMode({ type: \"thinking\", modelId: selectedModelId });\r\n } else {\r\n switchModel(selectedModelId);\r\n setSelectionMode({ type: \"none\" });\r\n const info = SUPPORTED_MODELS[selectedModelId];\r\n setMessages((prev) => [...prev, { id: v4Id(), role: \"system\" as const, content: `Switched to model: ${info?.name ?? selectedModelId}`, createdAt: new Date() }]);\r\n }\r\n }, [switchModel]);\r\n\r\n const handleThinkingSelected = useCallback((value: string) => {\r\n if (selectionMode.type !== \"thinking\") return;\r\n const { modelId: selectedModelId } = selectionMode;\r\n switchModel(selectedModelId);\r\n setThinkingValue(value);\r\n setSelectionMode({ type: \"none\" });\r\n const info = SUPPORTED_MODELS[selectedModelId];\r\n const cfg = getThinkingConfigForModel(selectedModelId);\r\n const methodLabel = cfg ? formatThinkingMethod(cfg.method) : \"Thinking\";\r\n const optionLabel = cfg?.options.find((o) => o.value === value)?.label ?? value;\r\n setMessages((prev) => [...prev, { id: v4Id(), role: \"system\" as const, content: `Switched to model: ${info?.name ?? selectedModelId}\\n${methodLabel}: ${optionLabel}`, createdAt: new Date() }]);\r\n }, [selectionMode, switchModel]);\r\n\r\n const handleSelectionCancel = useCallback(() => { setSelectionMode({ type: \"none\" }); }, []);\r\n\r\n const handleLoginSelected = useCallback(async (provider: string) => {\r\n setSelectionMode({ type: \"none\" });\r\n const loginMsg = provider === \"gemini\" ? \"Logging in to gemini... A new terminal window will open for authentication.\" : `Logging in to ${provider}...`;\r\n setMessages((prev) => [...prev, { id: v4Id(), role: \"system\" as const, content: loginMsg, createdAt: new Date() }]);\r\n try {\r\n const loginModule = await loadLoginModuleForSlash(provider as \"claude\" | \"codex\" | \"gemini\" | \"kimi\");\r\n await loginModule.login();\r\n setMessages((prev) => [...prev, { id: v4Id(), role: \"system\" as const, content: `Successfully logged in to ${provider}`, createdAt: new Date() }]);\r\n } catch (error: unknown) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n setMessages((prev) => [...prev, { id: v4Id(), role: \"system\" as const, content: `Login failed: ${msg}`, createdAt: new Date() }]);\r\n }\r\n }, []);\r\n\r\n const handleSwarmOnboardingSelected = useCallback(async (primaryProvider: CliProviderType) => {\r\n const nextSwarmConfig: IGlobalConfig[\"swarm\"] = {\r\n onboardingComplete: true, detectedProviders: swarmConfig.detectedProviders,\r\n primaryMasterProvider: primaryProvider,\r\n fallbackMasterProviders: swarmConfig.detectedProviders.filter((p) => p !== primaryProvider),\r\n };\r\n try {\r\n const { ConfigStore } = await import(\"../storage/config-store.js\");\r\n const store = new ConfigStore();\r\n const currentConfig = store.loadGlobal();\r\n const nextProviders = { ...currentConfig.providers };\r\n for (const provider of nextSwarmConfig.detectedProviders) {\r\n const entry = getCliProviderEntry(provider);\r\n nextProviders[entry.provider] = { ...nextProviders[entry.provider], enabled: true };\r\n }\r\n store.saveGlobal({ ...currentConfig, providers: nextProviders, swarm: nextSwarmConfig });\r\n setSwarmOnboardingDeferred(false);\r\n setSwarmConfig(nextSwarmConfig);\r\n setSelectionMode({ type: \"none\" });\r\n } catch (error: unknown) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n setMessages((prev) => [...prev, { id: v4Id(), role: \"system\" as const, content: `Failed to save swarm setup: ${message}`, createdAt: new Date() }]);\r\n }\r\n }, [swarmConfig.detectedProviders]);\r\n\r\n const handleSwarmOnboardingSkip = useCallback(() => {\r\n setSwarmOnboardingDeferred(true);\r\n setSelectionMode({ type: \"none\" });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (options.isAgentPane || panel.isSplitPanelActive || messages.length > 0 || isProcessing) return;\r\n if (selectionMode.type !== \"none\" || swarmOnboardingDeferred) return;\r\n if (swarmConfig.primaryMasterProvider === undefined) setSelectionMode({ type: \"swarm-onboarding\" });\r\n }, [isProcessing, messages.length, options.isAgentPane, panel.isSplitPanelActive, selectionMode.type, swarmConfig.primaryMasterProvider, swarmOnboardingDeferred]);\r\n\r\n // ── Render ─────────────────────────────────────────────────────────────\r\n\r\n if (selectionMode.type === \"swarm-onboarding\") {\r\n return (\r\n <SwarmOnboarding\r\n detectedProviders={swarmConfig.detectedProviders}\r\n currentPrimaryProvider={swarmConfig.primaryMasterProvider}\r\n onSelect={(provider) => void handleSwarmOnboardingSelected(provider)}\r\n onSkip={handleSwarmOnboardingSkip}\r\n />\r\n );\r\n }\r\n\r\n if (selectionMode.type === \"login\") {\r\n return <LoginSelector onSelect={(provider) => void handleLoginSelected(provider)} onCancel={handleSelectionCancel} />;\r\n }\r\n\r\n if (selectionMode.type === \"model\") {\r\n return <ModelSelector currentModelId={modelId} onSelect={handleModelSelected} onCancel={handleSelectionCancel} modelOrder={modelDisplayOrder ?? PROVIDER_MODEL_ORDER} />;\r\n }\r\n\r\n if (selectionMode.type === \"thinking\") {\r\n const selectedInfo = SUPPORTED_MODELS[selectionMode.modelId];\r\n return <ThinkingSelector modelId={selectionMode.modelId} modelName={selectedInfo?.name ?? selectionMode.modelId} currentValue={thinkingValue} onSelect={handleThinkingSelected} onBack={handleSelectionCancel} />;\r\n }\r\n\r\n if (panel.isSplitPanelActive) {\r\n return (\r\n <SplitPane\r\n agents={panel.agents} activeAgentIndex={panel.activeAgentIndex}\r\n onSelectAgent={panel.selectAgent} agentOutputs={panel.agentOutputs}\r\n isProcessing={isProcessing} onSubmit={handleSubmitSync} onCancel={handleCancel}\r\n model={modelId} role={resolution.role} tokenCount={totalTokens} cost={totalCost} gitBranch={gitBranch}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <SinglePane\r\n messages={messages} isProcessing={isProcessing}\r\n onSubmit={handleSubmitSync} onCancel={handleCancel}\r\n model={modelId} role={resolution.role} tokenCount={totalTokens} cost={totalCost} gitBranch={gitBranch}\r\n streamingContent={streamState.content} activity={streamState.activity}\r\n initialHistory={persistentHistory} mode={inputMode} onModeChange={setInputMode}\r\n />\r\n );\r\n}\r\n\r\n// ── Public API ────────────────────────────────────────────────────────────\r\n\r\nexport async function startChatSession(options: IChatSessionOptions): Promise<void> {\r\n let config: IGlobalConfig;\r\n try {\r\n const { ConfigStore } = await import(\"../storage/config-store.js\");\r\n const store = new ConfigStore();\r\n config = store.loadGlobal();\r\n } catch {\r\n config = DEFAULT_CONFIG;\r\n }\r\n const { waitUntilExit } = render(<App config={config} options={options} />);\r\n await waitUntilExit();\r\n}\r\n\r\nexport async function runFirstRunSetup(): Promise<void> {\r\n const { runFirstRunSetup: runCliFirstRunSetup } = await import(\"../cli/setup/first-run.js\");\r\n await runCliFirstRunSetup();\r\n}\r\n"]}