@mieweb/ui 0.11.0-dev.30 → 0.11.0-dev.31

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 (268) hide show
  1. package/dist/CsvBlock-AV4VM7JT.cjs +18 -0
  2. package/dist/{CsvBlock-RGO7JXHJ.cjs.map → CsvBlock-AV4VM7JT.cjs.map} +1 -1
  3. package/dist/CsvBlock-XBNYCEMP.js +9 -0
  4. package/dist/{CsvBlock-CFXSDPBI.js.map → CsvBlock-XBNYCEMP.js.map} +1 -1
  5. package/dist/HtmlPreviewBlock-DQAVD6IO.cjs +18 -0
  6. package/dist/{HtmlPreviewBlock-VBYXCXVT.cjs.map → HtmlPreviewBlock-DQAVD6IO.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-QQHRNLIY.js +9 -0
  8. package/dist/{HtmlPreviewBlock-Z2GCK325.js.map → HtmlPreviewBlock-QQHRNLIY.js.map} +1 -1
  9. package/dist/MermaidBlock-LHGYKC23.cjs +18 -0
  10. package/dist/{MermaidBlock-I2R2BQOX.cjs.map → MermaidBlock-LHGYKC23.cjs.map} +1 -1
  11. package/dist/MermaidBlock-QPKMIP3B.js +9 -0
  12. package/dist/{MermaidBlock-XCAK7IA5.js.map → MermaidBlock-QPKMIP3B.js.map} +1 -1
  13. package/dist/SurveyBlock-6DPTWHKI.js +9 -0
  14. package/dist/{SurveyBlock-KI5JOWCL.js.map → SurveyBlock-6DPTWHKI.js.map} +1 -1
  15. package/dist/SurveyBlock-6IXNVHS5.cjs +18 -0
  16. package/dist/{SurveyBlock-UKSGISRT.cjs.map → SurveyBlock-6IXNVHS5.cjs.map} +1 -1
  17. package/dist/{chunk-7XKM6V2K.cjs → chunk-2OXNJJHJ.cjs} +8 -8
  18. package/dist/{chunk-7XKM6V2K.cjs.map → chunk-2OXNJJHJ.cjs.map} +1 -1
  19. package/dist/{chunk-AJPFQF3H.cjs → chunk-2R3ILG4Y.cjs} +11 -11
  20. package/dist/{chunk-AJPFQF3H.cjs.map → chunk-2R3ILG4Y.cjs.map} +1 -1
  21. package/dist/{chunk-XQHDQ64G.cjs → chunk-2Z2GFDRS.cjs} +4 -4
  22. package/dist/{chunk-XQHDQ64G.cjs.map → chunk-2Z2GFDRS.cjs.map} +1 -1
  23. package/dist/{chunk-GM32IDVL.cjs → chunk-32ZILZ2T.cjs} +6 -6
  24. package/dist/{chunk-GM32IDVL.cjs.map → chunk-32ZILZ2T.cjs.map} +1 -1
  25. package/dist/{chunk-VOEXGDL5.js → chunk-33Y3KQWL.js} +3 -3
  26. package/dist/{chunk-VOEXGDL5.js.map → chunk-33Y3KQWL.js.map} +1 -1
  27. package/dist/{chunk-GYXSF6BJ.cjs → chunk-3IKIRGHI.cjs} +6 -6
  28. package/dist/{chunk-GYXSF6BJ.cjs.map → chunk-3IKIRGHI.cjs.map} +1 -1
  29. package/dist/{chunk-5HKZR6UG.js → chunk-43L4KGLU.js} +4 -4
  30. package/dist/{chunk-5HKZR6UG.js.map → chunk-43L4KGLU.js.map} +1 -1
  31. package/dist/{chunk-6BNZLN4B.cjs → chunk-4I5V6SXP.cjs} +10 -10
  32. package/dist/{chunk-6BNZLN4B.cjs.map → chunk-4I5V6SXP.cjs.map} +1 -1
  33. package/dist/{chunk-NUFUV43P.cjs → chunk-4UDEMJE4.cjs} +2 -2
  34. package/dist/chunk-4UDEMJE4.cjs.map +1 -0
  35. package/dist/{chunk-L5Y52F2E.cjs → chunk-4VSK3EE5.cjs} +4 -4
  36. package/dist/{chunk-L5Y52F2E.cjs.map → chunk-4VSK3EE5.cjs.map} +1 -1
  37. package/dist/{chunk-Y7ZJZLJY.js → chunk-566FIEPE.js} +4 -4
  38. package/dist/{chunk-Y7ZJZLJY.js.map → chunk-566FIEPE.js.map} +1 -1
  39. package/dist/{chunk-UTIPENPW.cjs → chunk-67SD6VPF.cjs} +5 -5
  40. package/dist/{chunk-UTIPENPW.cjs.map → chunk-67SD6VPF.cjs.map} +1 -1
  41. package/dist/{chunk-6CGM5H4J.js → chunk-6LIC3DKE.js} +2 -2
  42. package/dist/chunk-6LIC3DKE.js.map +1 -0
  43. package/dist/{chunk-6N7NMOSV.js → chunk-76ECYE5G.js} +3 -3
  44. package/dist/{chunk-6N7NMOSV.js.map → chunk-76ECYE5G.js.map} +1 -1
  45. package/dist/{chunk-56VTM4OX.js → chunk-7LKTIZLR.js} +3 -3
  46. package/dist/{chunk-56VTM4OX.js.map → chunk-7LKTIZLR.js.map} +1 -1
  47. package/dist/{chunk-7C5W744U.cjs → chunk-ARRJRFPD.cjs} +8 -8
  48. package/dist/{chunk-7C5W744U.cjs.map → chunk-ARRJRFPD.cjs.map} +1 -1
  49. package/dist/{chunk-5KGYTNOA.cjs → chunk-BP4LXRC6.cjs} +9 -9
  50. package/dist/{chunk-5KGYTNOA.cjs.map → chunk-BP4LXRC6.cjs.map} +1 -1
  51. package/dist/{chunk-UNFDIBKJ.js → chunk-CLNTWFEB.js} +3 -3
  52. package/dist/{chunk-UNFDIBKJ.js.map → chunk-CLNTWFEB.js.map} +1 -1
  53. package/dist/{chunk-X5JOEZVR.js → chunk-CRSJRWN2.js} +4 -4
  54. package/dist/{chunk-X5JOEZVR.js.map → chunk-CRSJRWN2.js.map} +1 -1
  55. package/dist/{chunk-FIKO4WR6.js → chunk-CVMD2A3J.js} +3 -3
  56. package/dist/{chunk-FIKO4WR6.js.map → chunk-CVMD2A3J.js.map} +1 -1
  57. package/dist/{chunk-SMPLM6K3.js → chunk-DG3CXR24.js} +5 -5
  58. package/dist/{chunk-SMPLM6K3.js.map → chunk-DG3CXR24.js.map} +1 -1
  59. package/dist/{chunk-LRAAJRE7.cjs → chunk-DO7EED3B.cjs} +154 -154
  60. package/dist/{chunk-LRAAJRE7.cjs.map → chunk-DO7EED3B.cjs.map} +1 -1
  61. package/dist/{chunk-UJDWFDKE.js → chunk-DXKE4YZT.js} +3 -3
  62. package/dist/{chunk-UJDWFDKE.js.map → chunk-DXKE4YZT.js.map} +1 -1
  63. package/dist/{chunk-KQ6GLYFZ.cjs → chunk-ECKIFQSD.cjs} +6 -6
  64. package/dist/{chunk-KQ6GLYFZ.cjs.map → chunk-ECKIFQSD.cjs.map} +1 -1
  65. package/dist/{chunk-4P27Y52M.js → chunk-EPKPHWIL.js} +4 -4
  66. package/dist/{chunk-4P27Y52M.js.map → chunk-EPKPHWIL.js.map} +1 -1
  67. package/dist/{chunk-RIUQP2QS.cjs → chunk-FNSFMM4F.cjs} +5 -5
  68. package/dist/{chunk-RIUQP2QS.cjs.map → chunk-FNSFMM4F.cjs.map} +1 -1
  69. package/dist/{chunk-3Y3ZCDNF.cjs → chunk-FQUSSPXX.cjs} +19 -19
  70. package/dist/{chunk-3Y3ZCDNF.cjs.map → chunk-FQUSSPXX.cjs.map} +1 -1
  71. package/dist/{chunk-ANMX7YDL.cjs → chunk-FSARTLUE.cjs} +4 -4
  72. package/dist/{chunk-ANMX7YDL.cjs.map → chunk-FSARTLUE.cjs.map} +1 -1
  73. package/dist/{chunk-ERACGSDY.cjs → chunk-G42V64UW.cjs} +8 -8
  74. package/dist/{chunk-ERACGSDY.cjs.map → chunk-G42V64UW.cjs.map} +1 -1
  75. package/dist/{chunk-UUI7WXI5.js → chunk-GAI6SRJ3.js} +3 -3
  76. package/dist/{chunk-UUI7WXI5.js.map → chunk-GAI6SRJ3.js.map} +1 -1
  77. package/dist/{chunk-4I6BW3FB.js → chunk-GLRKXJCR.js} +3 -3
  78. package/dist/{chunk-4I6BW3FB.js.map → chunk-GLRKXJCR.js.map} +1 -1
  79. package/dist/{chunk-NPKPCYAT.cjs → chunk-GM376OD6.cjs} +17 -17
  80. package/dist/{chunk-NPKPCYAT.cjs.map → chunk-GM376OD6.cjs.map} +1 -1
  81. package/dist/{chunk-DXEPYK3I.cjs → chunk-HGJHWI7W.cjs} +5 -3
  82. package/dist/chunk-HGJHWI7W.cjs.map +1 -0
  83. package/dist/{chunk-6ZA574PU.cjs → chunk-IIV5GNSK.cjs} +5 -5
  84. package/dist/{chunk-6ZA574PU.cjs.map → chunk-IIV5GNSK.cjs.map} +1 -1
  85. package/dist/{chunk-XPVQI3MM.cjs → chunk-INMDLVUB.cjs} +17 -2
  86. package/dist/chunk-INMDLVUB.cjs.map +1 -0
  87. package/dist/{chunk-RZSSQ7AT.js → chunk-JATLYCS4.js} +3 -3
  88. package/dist/{chunk-RZSSQ7AT.js.map → chunk-JATLYCS4.js.map} +1 -1
  89. package/dist/{chunk-4NB4WOGU.cjs → chunk-JCO62XMU.cjs} +6 -6
  90. package/dist/{chunk-4NB4WOGU.cjs.map → chunk-JCO62XMU.cjs.map} +1 -1
  91. package/dist/{chunk-QR7B6UPR.js → chunk-JN2CL7MK.js} +3 -3
  92. package/dist/{chunk-QR7B6UPR.js.map → chunk-JN2CL7MK.js.map} +1 -1
  93. package/dist/{chunk-FBCDYTWM.js → chunk-JNSSA4YN.js} +3 -3
  94. package/dist/{chunk-FBCDYTWM.js.map → chunk-JNSSA4YN.js.map} +1 -1
  95. package/dist/{chunk-BIQIE3VW.js → chunk-JQAGNAY2.js} +5 -5
  96. package/dist/{chunk-BIQIE3VW.js.map → chunk-JQAGNAY2.js.map} +1 -1
  97. package/dist/{chunk-TOJ56HKQ.cjs → chunk-KD7YD6US.cjs} +8 -8
  98. package/dist/{chunk-TOJ56HKQ.cjs.map → chunk-KD7YD6US.cjs.map} +1 -1
  99. package/dist/{chunk-5LNLB2XT.js → chunk-KSQQBFDQ.js} +3 -3
  100. package/dist/{chunk-5LNLB2XT.js.map → chunk-KSQQBFDQ.js.map} +1 -1
  101. package/dist/{chunk-3NOVISM6.js → chunk-L52HKEUD.js} +3 -3
  102. package/dist/{chunk-3NOVISM6.js.map → chunk-L52HKEUD.js.map} +1 -1
  103. package/dist/{chunk-IXUIOR4K.cjs → chunk-M42FTWY2.cjs} +6 -6
  104. package/dist/{chunk-IXUIOR4K.cjs.map → chunk-M42FTWY2.cjs.map} +1 -1
  105. package/dist/{chunk-32ZCJOSR.cjs → chunk-N7AIZWQS.cjs} +4 -4
  106. package/dist/{chunk-32ZCJOSR.cjs.map → chunk-N7AIZWQS.cjs.map} +1 -1
  107. package/dist/{chunk-P7D7BYFE.js → chunk-NA3NRLX2.js} +4 -4
  108. package/dist/{chunk-P7D7BYFE.js.map → chunk-NA3NRLX2.js.map} +1 -1
  109. package/dist/{chunk-Y424YL55.js → chunk-OLA7OYAS.js} +3 -3
  110. package/dist/{chunk-Y424YL55.js.map → chunk-OLA7OYAS.js.map} +1 -1
  111. package/dist/{chunk-F6W62K4J.js → chunk-OWYWRBED.js} +3 -3
  112. package/dist/{chunk-F6W62K4J.js.map → chunk-OWYWRBED.js.map} +1 -1
  113. package/dist/{chunk-RSJGTWLM.js → chunk-OYLZ5PF2.js} +3 -3
  114. package/dist/{chunk-RSJGTWLM.js.map → chunk-OYLZ5PF2.js.map} +1 -1
  115. package/dist/{chunk-7XC6E4BT.cjs → chunk-PJN4HM2X.cjs} +37 -37
  116. package/dist/{chunk-7XC6E4BT.cjs.map → chunk-PJN4HM2X.cjs.map} +1 -1
  117. package/dist/{chunk-NIO3XVUV.js → chunk-PLBWZW4F.js} +4 -4
  118. package/dist/{chunk-NIO3XVUV.js.map → chunk-PLBWZW4F.js.map} +1 -1
  119. package/dist/{chunk-XI74P5F2.cjs → chunk-PW2E7YBD.cjs} +5 -5
  120. package/dist/{chunk-XI74P5F2.cjs.map → chunk-PW2E7YBD.cjs.map} +1 -1
  121. package/dist/{chunk-HDY7YQFX.js → chunk-Q5APDRMO.js} +3 -3
  122. package/dist/{chunk-HDY7YQFX.js.map → chunk-Q5APDRMO.js.map} +1 -1
  123. package/dist/{chunk-FGLIP6YR.js → chunk-QATEO4KC.js} +4 -4
  124. package/dist/{chunk-FGLIP6YR.js.map → chunk-QATEO4KC.js.map} +1 -1
  125. package/dist/{chunk-254QK722.cjs → chunk-QHCAWDMG.cjs} +18 -7
  126. package/dist/chunk-QHCAWDMG.cjs.map +1 -0
  127. package/dist/{chunk-7HFZL5V5.js → chunk-QNJEDBIN.js} +4 -4
  128. package/dist/{chunk-7HFZL5V5.js.map → chunk-QNJEDBIN.js.map} +1 -1
  129. package/dist/{chunk-AIJYZP7M.js → chunk-R3MJKY63.js} +6 -6
  130. package/dist/{chunk-AIJYZP7M.js.map → chunk-R3MJKY63.js.map} +1 -1
  131. package/dist/{chunk-N54FYWG6.js → chunk-R5P7NAJQ.js} +4 -4
  132. package/dist/{chunk-N54FYWG6.js.map → chunk-R5P7NAJQ.js.map} +1 -1
  133. package/dist/{chunk-BWSZ2BHJ.cjs → chunk-S6457ZNC.cjs} +5 -5
  134. package/dist/{chunk-BWSZ2BHJ.cjs.map → chunk-S6457ZNC.cjs.map} +1 -1
  135. package/dist/{chunk-Z2OOJGHL.cjs → chunk-SCYLVQWA.cjs} +53 -53
  136. package/dist/{chunk-Z2OOJGHL.cjs.map → chunk-SCYLVQWA.cjs.map} +1 -1
  137. package/dist/{chunk-7IRTD4JT.cjs → chunk-SGDNEIJM.cjs} +4 -4
  138. package/dist/{chunk-7IRTD4JT.cjs.map → chunk-SGDNEIJM.cjs.map} +1 -1
  139. package/dist/{chunk-4JXO5JTE.js → chunk-SNAMNKFH.js} +17 -2
  140. package/dist/chunk-SNAMNKFH.js.map +1 -0
  141. package/dist/{chunk-GW4RFJZ5.js → chunk-TUYWCUKH.js} +18 -7
  142. package/dist/chunk-TUYWCUKH.js.map +1 -0
  143. package/dist/{chunk-CLQW724U.cjs → chunk-TXB3UHIO.cjs} +9 -9
  144. package/dist/{chunk-CLQW724U.cjs.map → chunk-TXB3UHIO.cjs.map} +1 -1
  145. package/dist/{chunk-4RI3CQGE.js → chunk-ULEX7OOJ.js} +4 -4
  146. package/dist/{chunk-4RI3CQGE.js.map → chunk-ULEX7OOJ.js.map} +1 -1
  147. package/dist/{chunk-KDW6BD4O.cjs → chunk-UVVZD3AS.cjs} +4 -4
  148. package/dist/{chunk-KDW6BD4O.cjs.map → chunk-UVVZD3AS.cjs.map} +1 -1
  149. package/dist/{chunk-MA3Y6AYA.cjs → chunk-V2KSJLUL.cjs} +8 -8
  150. package/dist/{chunk-MA3Y6AYA.cjs.map → chunk-V2KSJLUL.cjs.map} +1 -1
  151. package/dist/{chunk-SW2E7XKY.cjs → chunk-VIVS44IG.cjs} +9 -9
  152. package/dist/{chunk-SW2E7XKY.cjs.map → chunk-VIVS44IG.cjs.map} +1 -1
  153. package/dist/{chunk-GVM6DTR5.js → chunk-VP3XNLUL.js} +5 -3
  154. package/dist/chunk-VP3XNLUL.js.map +1 -0
  155. package/dist/{chunk-IGDO62KR.cjs → chunk-VVKUYQER.cjs} +5 -5
  156. package/dist/{chunk-IGDO62KR.cjs.map → chunk-VVKUYQER.cjs.map} +1 -1
  157. package/dist/{chunk-BJ6ABRSQ.cjs → chunk-WG2ANSDG.cjs} +6 -6
  158. package/dist/{chunk-BJ6ABRSQ.cjs.map → chunk-WG2ANSDG.cjs.map} +1 -1
  159. package/dist/{chunk-WFBUBT54.js → chunk-WX2XB6FP.js} +3 -3
  160. package/dist/{chunk-WFBUBT54.js.map → chunk-WX2XB6FP.js.map} +1 -1
  161. package/dist/{chunk-7QW6TU4X.js → chunk-YCPWQWQQ.js} +3 -3
  162. package/dist/{chunk-7QW6TU4X.js.map → chunk-YCPWQWQQ.js.map} +1 -1
  163. package/dist/{chunk-DSQCYX7L.js → chunk-YSIFPHLX.js} +7 -7
  164. package/dist/{chunk-DSQCYX7L.js.map → chunk-YSIFPHLX.js.map} +1 -1
  165. package/dist/{chunk-2X54ZLT6.js → chunk-ZFJJMDV3.js} +4 -4
  166. package/dist/{chunk-2X54ZLT6.js.map → chunk-ZFJJMDV3.js.map} +1 -1
  167. package/dist/{chunk-PYI2IWNX.cjs → chunk-ZOSM6D7F.cjs} +4 -4
  168. package/dist/{chunk-PYI2IWNX.cjs.map → chunk-ZOSM6D7F.cjs.map} +1 -1
  169. package/dist/components/ActionPlan/index.cjs +6 -6
  170. package/dist/components/ActionPlan/index.js +4 -4
  171. package/dist/components/ActivityFeed/index.cjs +6 -6
  172. package/dist/components/ActivityFeed/index.js +4 -4
  173. package/dist/components/AlertDialog/index.cjs +7 -7
  174. package/dist/components/AlertDialog/index.js +3 -3
  175. package/dist/components/AssociationList/index.cjs +6 -6
  176. package/dist/components/AssociationList/index.js +4 -4
  177. package/dist/components/Button/index.cjs +4 -4
  178. package/dist/components/Button/index.d.cts +1 -1
  179. package/dist/components/Button/index.d.ts +1 -1
  180. package/dist/components/Button/index.js +2 -2
  181. package/dist/components/CalendarView/index.cjs +5 -5
  182. package/dist/components/CalendarView/index.js +3 -3
  183. package/dist/components/CustomizableDashboard/index.cjs +10 -10
  184. package/dist/components/CustomizableDashboard/index.js +3 -3
  185. package/dist/components/EmailEditor/index.cjs +14 -14
  186. package/dist/components/EmailEditor/index.js +5 -5
  187. package/dist/components/FieldHistory/index.cjs +6 -6
  188. package/dist/components/FieldHistory/index.js +4 -4
  189. package/dist/components/FloatingWindow/index.cjs +5 -5
  190. package/dist/components/FloatingWindow/index.js +3 -3
  191. package/dist/components/ListView/index.cjs +5 -5
  192. package/dist/components/ListView/index.js +3 -3
  193. package/dist/components/Markdown/index.cjs +17 -17
  194. package/dist/components/Markdown/index.js +8 -8
  195. package/dist/components/MediaEditor/index.cjs +12 -12
  196. package/dist/components/MediaEditor/index.d.cts +13 -0
  197. package/dist/components/MediaEditor/index.d.ts +13 -0
  198. package/dist/components/MediaEditor/index.js +7 -7
  199. package/dist/components/MediaFeed/index.cjs +6 -6
  200. package/dist/components/MediaFeed/index.js +5 -5
  201. package/dist/components/MediaPlayer/index.cjs +7 -7
  202. package/dist/components/MediaPlayer/index.js +4 -4
  203. package/dist/components/MegaMenu/index.cjs +6 -6
  204. package/dist/components/MegaMenu/index.js +3 -3
  205. package/dist/components/RadialExplorer/index.cjs +4 -4
  206. package/dist/components/RadialExplorer/index.js +3 -3
  207. package/dist/components/RecordHeader/index.cjs +5 -5
  208. package/dist/components/RecordHeader/index.d.cts +1 -1
  209. package/dist/components/RecordHeader/index.d.ts +1 -1
  210. package/dist/components/RecordHeader/index.js +3 -3
  211. package/dist/components/RichTextEditor/index.cjs +6 -6
  212. package/dist/components/RichTextEditor/index.js +3 -3
  213. package/dist/components/SectionSpyNav/index.cjs +4 -4
  214. package/dist/components/SectionSpyNav/index.js +3 -3
  215. package/dist/components/SuperChat/index.cjs +9 -9
  216. package/dist/components/SuperChat/index.js +5 -5
  217. package/dist/components/Textarea/index.cjs +7 -7
  218. package/dist/components/Textarea/index.js +4 -4
  219. package/dist/components/TranscriptView/index.cjs +2 -2
  220. package/dist/components/TranscriptView/index.d.cts +14 -1
  221. package/dist/components/TranscriptView/index.d.ts +14 -1
  222. package/dist/components/TranscriptView/index.js +1 -1
  223. package/dist/components/ViewSet/index.cjs +6 -6
  224. package/dist/components/ViewSet/index.js +5 -5
  225. package/dist/datavis.cjs +3 -3
  226. package/dist/datavis.js +2 -2
  227. package/dist/deck.cjs +15 -15
  228. package/dist/deck.js +2 -2
  229. package/dist/esheet.cjs +130 -130
  230. package/dist/esheet.js +8 -8
  231. package/dist/hooks/index.cjs +12 -12
  232. package/dist/hooks/index.d.cts +15 -2
  233. package/dist/hooks/index.d.ts +15 -2
  234. package/dist/hooks/index.js +3 -3
  235. package/dist/index.cjs +2056 -418
  236. package/dist/index.cjs.map +1 -1
  237. package/dist/index.d.cts +178 -87
  238. package/dist/index.d.ts +178 -87
  239. package/dist/index.js +1693 -55
  240. package/dist/index.js.map +1 -1
  241. package/dist/{model-Y7WRIGGA.cjs → model-NPW2JMHZ.cjs} +20 -20
  242. package/dist/{model-Y7WRIGGA.cjs.map → model-NPW2JMHZ.cjs.map} +1 -1
  243. package/dist/{model-WFFZRQMY.js → model-SG5H3TCJ.js} +6 -6
  244. package/dist/{model-WFFZRQMY.js.map → model-SG5H3TCJ.js.map} +1 -1
  245. package/dist/org-chart.cjs +4 -4
  246. package/dist/org-chart.js +2 -2
  247. package/dist/styles.css +1 -1
  248. package/dist/tailwind-preset.cjs +4 -4
  249. package/dist/tailwind-preset.js +1 -1
  250. package/dist/templates.cjs +38 -38
  251. package/dist/templates.js +3 -3
  252. package/package.json +1 -1
  253. package/dist/CsvBlock-CFXSDPBI.js +0 -9
  254. package/dist/CsvBlock-RGO7JXHJ.cjs +0 -18
  255. package/dist/HtmlPreviewBlock-VBYXCXVT.cjs +0 -18
  256. package/dist/HtmlPreviewBlock-Z2GCK325.js +0 -9
  257. package/dist/MermaidBlock-I2R2BQOX.cjs +0 -18
  258. package/dist/MermaidBlock-XCAK7IA5.js +0 -9
  259. package/dist/SurveyBlock-KI5JOWCL.js +0 -9
  260. package/dist/SurveyBlock-UKSGISRT.cjs +0 -18
  261. package/dist/chunk-254QK722.cjs.map +0 -1
  262. package/dist/chunk-4JXO5JTE.js.map +0 -1
  263. package/dist/chunk-6CGM5H4J.js.map +0 -1
  264. package/dist/chunk-DXEPYK3I.cjs.map +0 -1
  265. package/dist/chunk-GVM6DTR5.js.map +0 -1
  266. package/dist/chunk-GW4RFJZ5.js.map +0 -1
  267. package/dist/chunk-NUFUV43P.cjs.map +0 -1
  268. package/dist/chunk-XPVQI3MM.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/EncounterVisit/date.ts","../src/components/EncounterVisit/definition.ts","../src/components/EncounterVisit/mdy.ts","../src/components/EncounterVisit/model.ts"],"names":["fieldDisplay","closing","parseDocument","data","merged","isMap","isSeq","yaml","createEncounterSnapshot","render","markdownToHtml","record","nonempty","DateTime","currentAssertion","assertion"],"mappings":";;;;;;;;;AACO,SAAS,gBAAgB,KAAA,EAAiC;AAC/D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,qBAAA,CAAsB,KAAK,KAAK,CAAA;AAChE,IAAA,OAAO,KAAA;AACT,EAAA,MAAM,CAAC,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA,GAAI,MAAM,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA;AACtD,EAAA,IAAI,IAAA,GAAO,KAAK,KAAA,GAAQ,CAAA,IAAK,QAAQ,EAAA,IAAM,GAAA,GAAM,GAAG,OAAO,KAAA;AAC3D,EAAA,MAAM,IAAA,GAAO,OAAO,CAAA,KAAM,CAAA,KAAM,OAAO,GAAA,KAAQ,CAAA,IAAK,OAAO,GAAA,KAAQ,CAAA,CAAA;AACnE,EAAA,MAAM,IAAA,GAAO,CAAC,EAAA,EAAI,IAAA,GAAO,KAAK,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE,CAAA;AACxE,EAAA,OAAO,GAAA,IAAO,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA;AAC9B;;;ACGO,SAAS,mBAAA,CACd,WACA,aAAA,EACQ;AACR,EAAA,MAAM,MAAA,GAAS,CAAA,UAAA,EAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AACzD,EAAA,OAAO,aAAA,KAAkB,MAAA,GACrB,CAAA,EAAG,MAAM,CAAA,UAAA,CAAA,GACT,GAAG,MAAM,CAAA,aAAA,EAAgB,kBAAA,CAAmB,aAAa,CAAC,CAAA,CAAA;AAChE;AAEO,SAAS,2BAA2B,SAAA,EAA2B;AACpE,EAAA,OAAO,CAAA,UAAA,EAAa,kBAAA,CAAmB,SAAS,CAAC,CAAA,QAAA,CAAA;AACnD;AAEO,SAAS,4BACd,OAAA,EACU;AACV,EAAA,IAAI,OAAA,CAAQ,SAAS,WAAA,EAAa,OAAO,CAAC,mBAAA,CAAoB,OAAA,CAAQ,EAAE,CAAC,CAAA;AACzE,EAAA,IAAI,OAAA,CAAQ,SAAS,cAAA,EAAgB;AACnC,IAAA,OAAO;AAAA,MACL,GAAI,QAAQ,SAAA,GAAY,CAAC,oBAAoB,OAAA,CAAQ,EAAE,CAAC,CAAA,GAAI,EAAC;AAAA,MAC7D,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,OAAO;AAAA,KACzC;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,GAAI,QAAQ,SAAA,GAAY,CAAC,oBAAoB,OAAA,CAAQ,EAAE,CAAC,CAAA,GAAI,EAAC;AAAA,IAC7D,GAAA,CAAI,OAAA,CAAQ,YAAA,IAAgB,EAAC,EAAG,GAAA;AAAA,MAAI,CAAC,WAAA,KACnC,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,YAAY,EAAE;AAAA;AAChD,GACF;AACF;AAEA,IAAM,aAAA,GAAwC;AAAA,EAC5C,WAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAEA,SAAS,SAAS,KAAA,EAAiC;AACjD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA;AAC5D;AAEA,SAAS,eAAe,KAAA,EAAyB;AAC/C,EAAA,OAAO,KAAA,KAAU,MAAA,IAAa,OAAO,KAAA,KAAU,QAAA;AACjD;AAEA,SAAS,QAAQ,OAAA,EAAwB;AACvC,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,OAAO,CAAA,CAAE,CAAA;AAC5D;AAEA,SAAS,gBAAA,CACP,UACA,QAAA,EACM;AACN,EAAA,IAAI,aAAa,MAAA,EAAW;AAC5B,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA;AACzB,IAAA,OAAA,CAAQ,CAAA,6BAAA,EAAgC,QAAQ,CAAA,CAAE,CAAA;AACpD,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAY;AAC5B,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IACE,CAAC,OAAA,IACD,OAAO,YAAY,QAAA,IACnB,CAAC,SAAS,OAAA,CAAQ,EAAE,CAAA,IACpB,CAAC,SAAS,OAAA,CAAQ,KAAK,KACvB,CAAC,QAAA,CAAS,QAAQ,IAAI,CAAA;AAEtB,MAAA,OAAA,CAAQ,CAAA,uCAAA,EAA0C,QAAQ,CAAA,CAAE,CAAA;AAC9D,IAAA,IAAI,GAAA,CAAI,GAAA,CAAI,OAAA,CAAQ,EAAE,CAAA;AACpB,MAAA,OAAA,CAAQ,CAAA,qBAAA,EAAwB,OAAA,CAAQ,EAAE,CAAA,IAAA,EAAO,QAAQ,CAAA,CAAE,CAAA;AAC7D,IAAA,GAAA,CAAI,GAAA,CAAI,QAAQ,EAAE,CAAA;AAClB,IAAA,IACE,OAAA,CAAQ,IAAA,KAAS,MAAA,KAChB,CAAC,OAAA,CAAQ,IAAA,IACR,OAAO,OAAA,CAAQ,IAAA,KAAS,QAAA,IACxB,CAAC,QAAA,CAAS,OAAA,CAAQ,KAAK,MAAM,CAAA,IAC7B,CAAC,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,IAC3B,CAAC,cAAA,CAAe,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,CAAA;AAEtC,MAAA,OAAA,CAAQ,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAE,CAAA;AAAA,EACjD;AACF;AAGO,SAAS,4BACd,UAAA,EACM;AACN,EAAA,IAAI,CAAC,UAAA,IAAc,OAAO,UAAA,KAAe,QAAA;AACvC,IAAA,OAAA,CAAQ,oBAAoB,CAAA;AAC9B,EAAA,IAAI,CAAC,SAAS,UAAA,CAAW,EAAE,KAAK,CAAC,QAAA,CAAS,UAAA,CAAW,KAAK,CAAA,EAAG;AAC3D,IAAA,OAAA,CAAQ,uCAAuC,CAAA;AAAA,EACjD;AACA,EAAA,IACE,WAAW,aAAA,KAAkB,MAAA,IAC7B,CAAC,eAAA,CAAgB,WAAW,aAAa,CAAA;AAEzC,IAAA,OAAA,CAAQ,+CAA+C,CAAA;AACzD,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,IAAK,UAAA,CAAW,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAC3E,IAAA,OAAA,CAAQ,kCAAkC,CAAA;AAAA,EAC5C;AACA,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,QAAA,EAAU;AACzC,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA;AACjC,MAAA,OAAA,CAAQ,2BAA2B,CAAA;AACrC,IAAA,IAAI,CAAC,SAAS,OAAA,CAAQ,EAAE,KAAK,CAAC,QAAA,CAAS,OAAA,CAAQ,KAAK,CAAA,EAAG;AACrD,MAAA,OAAA,CAAQ,uCAAuC,CAAA;AAAA,IACjD;AACA,IAAA,IAAI,UAAA,CAAW,GAAA,CAAI,OAAA,CAAQ,EAAE,CAAA;AAC3B,MAAA,OAAA,CAAQ,CAAA,qBAAA,EAAwB,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAC9C,IAAA,UAAA,CAAW,GAAA,CAAI,QAAQ,EAAE,CAAA;AACzB,IAAA,IAAI,CAAC,aAAA,CAAc,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACtC,MAAA,OAAA,CAAQ,CAAA,qBAAA,EAAwB,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAChD,IAAA,IAAI,CAAC,cAAA,CAAe,OAAA,CAAQ,WAAW,CAAA;AACrC,MAAA,OAAA,CAAQ,CAAA,uBAAA,EAA0B,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAChD,IAAA,IACE,QAAQ,QAAA,KAAa,MAAA,IACrB,OAAO,OAAA,CAAQ,aAAa,SAAA,EAC5B;AACA,MAAA,OAAA,CAAQ,CAAA,4BAAA,EAA+B,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,IACrD;AACA,IAAA,IACE,QAAQ,SAAA,KAAc,MAAA,IACtB,OAAO,OAAA,CAAQ,cAAc,SAAA,EAC7B;AACA,MAAA,OAAA,CAAQ,CAAA,6BAAA,EAAgC,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,IACtD;AACA,IAAA,IACE,OAAA,CAAQ,iBAAiB,MAAA,IACzB,CAAC,MAAM,OAAA,CAAQ,OAAA,CAAQ,YAAY,CAAA,EACnC;AACA,MAAA,OAAA,CAAQ,CAAA,iCAAA,EAAoC,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,IAC1D;AACA,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,cAAA,IAAkB,OAAA,CAAQ,cAAc,MAAA,EAAQ;AACnE,MAAA,OAAA;AAAA,QACE,CAAA,2DAAA,EAA8D,QAAQ,EAAE,CAAA,CAAA;AAAA,OAC1E;AAAA,IACF;AACA,IAAA,IACE,OAAA,CAAQ,SAAS,cAAA,IACjB,CAAC,QAAQ,SAAA,IACT,CAAC,OAAA,CAAQ,YAAA,EAAc,MAAA,EACvB;AACA,MAAA,OAAA,CAAQ,CAAA,qBAAA,EAAwB,OAAA,CAAQ,EAAE,CAAA,cAAA,CAAgB,CAAA;AAAA,IAC5D;AACA,IAAA,IACE,OAAA,CAAQ,aAAA,KAAkB,MAAA,IAC1B,OAAO,QAAQ,aAAA,KAAkB,SAAA;AAEjC,MAAA,OAAA,CAAQ,CAAA,iCAAA,EAAoC,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AAC1D,IAAA,gBAAA,CAAiB,OAAA,CAAQ,QAAA,EAAU,OAAA,CAAQ,EAAE,CAAA;AAC7C,IAAA,IACE,QAAQ,QAAA,EAAU,MAAA,IAClB,QAAQ,IAAA,KAAS,WAAA,IACjB,CAAC,OAAA,CAAQ,SAAA;AAET,MAAA,OAAA,CAAQ,CAAA,wCAAA,EAA2C,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AACjE,IAAA,MAAM,cAAA,uBAAqB,GAAA,EAAY;AACvC,IAAA,KAAA,MAAW,WAAA,IAAe,OAAA,CAAQ,YAAA,IAAgB,EAAC,EAAG;AACpD,MAAA,IACE,CAAC,WAAA,IACD,OAAO,WAAA,KAAgB,YACvB,CAAC,QAAA,CAAS,WAAA,CAAY,EAAE,CAAA,IACxB,CAAC,QAAA,CAAS,WAAA,CAAY,KAAK,CAAA,EAC3B;AACA,QAAA,OAAA,CAAQ,CAAA,gBAAA,EAAmB,OAAA,CAAQ,EAAE,CAAA,wBAAA,CAA0B,CAAA;AAAA,MACjE;AACA,MAAA,IAAI,cAAA,CAAe,GAAA,CAAI,WAAA,CAAY,EAAE,CAAA;AACnC,QAAA,OAAA,CAAQ,4BAA4B,WAAA,CAAY,EAAE,CAAA,IAAA,EAAO,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AACvE,MAAA,cAAA,CAAe,GAAA,CAAI,YAAY,EAAE,CAAA;AACjC,MAAA,IACE,WAAA,CAAY,IAAA,KAAS,MAAA,IACrB,CAAC,CAAC,MAAA,EAAQ,QAAA,EAAU,QAAQ,CAAA,CAAE,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA,EACvD;AACA,QAAA,OAAA,CAAQ,+BAA+B,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,WAAA,CAAY,EAAE,CAAA,CAAE,CAAA;AAAA,MACvE;AACA,MAAA,IAAI,CAAC,cAAA,CAAe,WAAA,CAAY,IAAI,CAAA;AAClC,QAAA,OAAA,CAAQ,mBAAmB,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,WAAA,CAAY,EAAE,CAAA,CAAE,CAAA;AAC3D,MAAA,IACE,YAAY,QAAA,KAAa,MAAA,IACzB,OAAO,WAAA,CAAY,aAAa,SAAA,EAChC;AACA,QAAA,OAAA,CAAQ,+BAA+B,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,WAAA,CAAY,EAAE,CAAA,CAAE,CAAA;AAAA,MACvE;AACA,MAAA,IACE,WAAA,CAAY,IAAA,KAAS,MAAA,KACpB,CAAC,WAAA,CAAY,IAAA,IACZ,OAAO,WAAA,CAAY,IAAA,KAAS,QAAA,IAC5B,CAAC,QAAA,CAAS,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA,IACjC,CAAC,QAAA,CAAS,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,IAC/B,CAAC,cAAA,CAAe,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA,CAAA,EAC1C;AACA,QAAA,OAAA,CAAQ,mBAAmB,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,WAAA,CAAY,EAAE,CAAA,CAAE,CAAA;AAAA,MAC3D;AACA,MAAA,IACE,WAAA,CAAY,OAAA,KAAY,MAAA,KACvB,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAA,CAAY,OAAO,CAAA,IACjC,WAAA,CAAY,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,CAAC,QAAA,CAAS,MAAM,CAAC,CAAA,IACtD,IAAI,GAAA,CAAI,WAAA,CAAY,OAAO,CAAA,CAAE,IAAA,KAAS,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAA,EAC5D;AACA,QAAA,OAAA;AAAA,UACE,CAAA,6CAAA,EAAgD,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,YAAY,EAAE,CAAA;AAAA,SAC9E;AAAA,MACF;AACA,MAAA,gBAAA,CAAiB,WAAA,CAAY,UAAU,CAAA,EAAG,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,WAAA,CAAY,EAAE,CAAA,CAAE,CAAA;AACxE,MAAA,IACE,YAAY,QAAA,EAAU,MAAA,IACtB,WAAA,CAAY,IAAA,IACZ,YAAY,IAAA,KAAS,MAAA;AAErB,QAAA,OAAA;AAAA,UACE,CAAA,uCAAA,EAA0C,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,YAAY,EAAE,CAAA;AAAA,SACxE;AACF,MAAA,IAAI,YAAY,IAAA,KAAS,QAAA,IAAY,CAAC,WAAA,CAAY,SAAS,MAAA,EAAQ;AACjE,QAAA,OAAA;AAAA,UACE,CAAA,mBAAA,EAAsB,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,YAAY,EAAE,CAAA,iBAAA;AAAA,SACpD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,gBAAA,CACP,WACA,WAAA,EACiB;AACjB,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,EAAA,EAAI,mBAAA,CAAoB,SAAA,EAAW,WAAA,CAAY,EAAE,CAAA;AAAA,IACjD,UAAU,WAAA,CAAY,KAAA;AAAA,IACtB,UAAU,WAAA,CAAY,QAAA;AAAA,IACtB,KAAA,EAAO,MAAA;AAAA,IACP,aAAa,EAAE,GAAG,WAAA,EAAa,iBAAA,EAAmB,YAAY,QAAA;AAAS,GACzE;AACA,EAAA,IAAI,WAAA,CAAY,SAAS,QAAA,EAAU;AACjC,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,SAAA,EAAW,UAAA;AAAA,MACX,OAAA,EAAS,WAAA,CAAY,OAAA,EAAS,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,QAC5C,EAAA,EAAI,mBAAmB,KAAK,CAAA;AAAA,QAC5B,KAAA;AAAA,QACA,IAAA,EAAM;AAAA,OACR,CAAE;AAAA,KACJ;AAAA,EACF;AACA,EAAA,IAAI,WAAA,CAAY,SAAS,QAAA,EAAU;AACjC,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,SAAA,EAAW,MAAA;AAAA,MACX,SAAA,EAAW,QAAA;AAAA,MACX,MAAM,WAAA,CAAY,IAAA;AAAA,MAClB,UAAA,EAAY;AAAA,QACV,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,oCAAA;AAAqC;AAClE,KACF;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,SAAA,EAAW,oBAAA;AAAA,IACX,MAAM,WAAA,CAAY;AAAA,GACpB;AACF;AAEA,IAAM,kBAAA,GAAqB;AAAA,EACzB,MAAA,EAAQ,iBAAA;AAAA,EACR,WAAA,EAAa,sBAAA;AAAA,EACb,SAAA,EAAW,oBAAA;AAAA,EACX,UAAA,EAAY,qBAAA;AAAA,EACZ,IAAA,EAAM,eAAA;AAAA,EACN,UAAA,EAAY;AACd,CAAA;AAGO,SAAS,8BACd,UAAA,EACgB;AAChB,EAAA,2BAAA,CAA4B,UAAU,CAAA;AACtC,EAAA,OAAO;AAAA,IACL,IAAI,UAAA,CAAW,EAAA;AAAA,IACf,OAAO,UAAA,CAAW,KAAA;AAAA,IAClB,KAAA,EAAO;AAAA,MACL;AAAA,QACE,EAAA,EAAI,CAAA,EAAG,UAAA,CAAW,EAAE,CAAA,MAAA,CAAA;AAAA,QACpB,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,MAAA,EAAQ,UAAA,CAAW,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY;AAC3C,UAAA,MAAM,SAA4B,EAAC;AACnC,UAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,YAAA,MAAA,CAAO,IAAA,CAAK;AAAA,cACV,EAAA,EAAI,CAAA,EAAG,0BAAA,CAA2B,OAAA,CAAQ,EAAE,CAAC,CAAA,YAAA,CAAA;AAAA,cAC7C,SAAA,EAAW,SAAA;AAAA,cACX,SAAS,OAAA,CAAQ,WAAA;AAAA,cACjB,KAAA,EAAO;AAAA,aACR,CAAA;AAAA,UACH;AACA,UAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,WAAA,IAAe,OAAA,CAAQ,SAAA,EAAW;AACrD,YAAA,MAAA,CAAO,IAAA,CAAK;AAAA,cACV,EAAA,EAAI,mBAAA,CAAoB,OAAA,CAAQ,EAAE,CAAA;AAAA,cAClC,SAAA,EAAW,oBAAA;AAAA,cACX,QAAA,EACE,QAAQ,IAAA,KAAS,WAAA,GACb,QAAQ,KAAA,GACR,CAAA,EAAG,QAAQ,KAAK,CAAA,UAAA,CAAA;AAAA,cACtB,QAAA,EACE,OAAA,CAAQ,IAAA,KAAS,WAAA,GAAc,QAAQ,QAAA,GAAW,MAAA;AAAA,cACpD,KAAA,EAAO,MAAA;AAAA,cACP,WAAA,EAAa;AAAA,gBACX,kBAAA,EAAoB,IAAA;AAAA,gBACpB,mBAAmB,OAAA,CAAQ;AAAA;AAC7B,aAC6B,CAAA;AAAA,UACjC;AACA,UAAA,IAAI,OAAA,CAAQ,SAAS,cAAA,EAAgB;AACnC,YAAA,MAAA,CAAO,IAAA;AAAA,cACL,GAAA,CAAI,OAAA,CAAQ,YAAA,IAAgB,EAAC,EAAG,GAAA;AAAA,gBAAI,CAAC,WAAA,KACnC,gBAAA,CAAiB,OAAA,CAAQ,IAAI,WAAW;AAAA;AAC1C,aACF;AAAA,UACF,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,WAAA,EAAa;AAEvC,YAAA,MAAA,CAAO,IAAA,CAAK;AAAA,cACV,EAAA,EAAI,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAA;AAAA,cAC3C,SAAA,EAAW,kBAAA,CAAmB,OAAA,CAAQ,IAAI,CAAA;AAAA,cAC1C,UAAU,OAAA,CAAQ,KAAA;AAAA,cAClB,UAAU,OAAA,CAAQ,QAAA;AAAA,cAClB,WAAA,EAAa;AAAA,gBACX,sBAAA,EAAwB,QAAQ,aAAA,IAAiB,IAAA;AAAA,gBACjD,eAAe,UAAA,CAAW;AAAA,eAC5B;AAAA,cACA,KAAA,EAAO;AAAA,aACsB,CAAA;AAAA,UACjC;AACA,UAAA,OAAO;AAAA,YACL,EAAA,EAAI,0BAAA,CAA2B,OAAA,CAAQ,EAAE,CAAA;AAAA,YACzC,SAAA,EAAW,SAAA;AAAA,YACX,OAAO,OAAA,CAAQ,KAAA;AAAA,YACf,eAAA,EAAiB,UAAA;AAAA,YACjB,KAAA,EAAO,MAAA;AAAA,YACP;AAAA,WACF;AAAA,QACF,CAAC;AAAA;AACH;AACF,GACF;AACF;AAGO,IAAM,kCAAA,GAA+D;AAAA,EAC1E,EAAA,EAAI,qBAAA;AAAA,EACJ,KAAA,EAAO,iBAAA;AAAA,EACP,QAAA,EAAU;AAAA,IACR;AAAA,MACE,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO,4BAAA;AAAA,MACP,IAAA,EAAM,WAAA;AAAA,MACN,QAAA,EAAU;AAAA,QACR,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,MAAM,eAAA,EAAgB;AAAA,QAC3D,EAAE,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,MAAM,uBAAA,EAAwB;AAAA,QACrE;AAAA,UACE,EAAA,EAAI,cAAA;AAAA,UACJ,KAAA,EAAO,cAAA;AAAA,UACP,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAI,SAAA;AAAA,MACJ,KAAA,EAAO,iBAAA;AAAA,MACP,IAAA,EAAM,cAAA;AAAA,MACN,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,QACR;AAAA,UACE,EAAA,EAAI,gBAAA;AAAA,UACJ,KAAA,EAAO,0BAAA;AAAA,UACP,IAAA,EAAM;AAAA,SACR;AAAA,QACA;AAAA,UACE,EAAA,EAAI,kBAAA;AAAA,UACJ,KAAA,EAAO,kBAAA;AAAA,UACP,IAAA,EAAM;AAAA;AACR,OACF;AAAA,MACA,YAAA,EAAc;AAAA,QACZ;AAAA,UACE,EAAA,EAAI,SAAA;AAAA,UACJ,KAAA,EAAO,iBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,UAAA;AAAA,cACJ,KAAA,EAAO,kBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,uBAAA;AAAA,cACJ,KAAA,EAAO,uBAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,UAAA;AAAA,UACJ,KAAA,EAAO,kBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,cAAA;AAAA,cACJ,KAAA,EAAO,kBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,UAAA;AAAA,cACJ,KAAA,EAAO,kBAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,QAAA;AAAA,UACJ,KAAA,EAAO,gBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,SAAA;AAAA,cACJ,KAAA,EAAO,iBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,iBAAA;AAAA,cACJ,KAAA,EAAO,sBAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,QAAA;AAAA,UACJ,KAAA,EAAO,gBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,cAAA;AAAA,cACJ,KAAA,EAAO,cAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,YAAA;AAAA,cACJ,KAAA,EAAO,gBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,uBAAA;AAAA,cACJ,KAAA,EAAO,0BAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO,mBAAA;AAAA,MACP,IAAA,EAAM,cAAA;AAAA,MACN,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,QACR;AAAA,UACE,EAAA,EAAI,eAAA;AAAA,UACJ,KAAA,EAAO,4BAAA;AAAA,UACP,IAAA,EAAM;AAAA,SACR;AAAA,QACA;AAAA,UACE,EAAA,EAAI,gBAAA;AAAA,UACJ,KAAA,EAAO,gBAAA;AAAA,UACP,IAAA,EAAM;AAAA;AACR,OACF;AAAA,MACA,YAAA,EAAc;AAAA,QACZ;AAAA,UACE,EAAA,EAAI,gBAAA;AAAA,UACJ,KAAA,EAAO,gBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,iBAAA;AAAA,cACJ,KAAA,EAAO,oBAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,gBAAA;AAAA,UACJ,KAAA,EAAO,gBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,eAAA;AAAA,cACJ,KAAA,EAAO,eAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,aAAA;AAAA,UACJ,KAAA,EAAO,aAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,YAAA;AAAA,cACJ,KAAA,EAAO,YAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,MAAM,eAAA;AAAgB;AAC7D,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,iBAAA;AAAA,UACJ,KAAA,EAAO,iBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR,EAAE,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,MAAM,oBAAA,EAAqB;AAAA,YAClE;AAAA,cACE,EAAA,EAAI,mBAAA;AAAA,cACJ,KAAA,EAAO,mBAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,cAAA;AAAA,UACJ,KAAA,EAAO,cAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,aAAA;AAAA,cACJ,KAAA,EAAO,aAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,sBAAA;AAAA,cACJ,KAAA,EAAO,wBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,0BAAA;AAAA,cACJ,KAAA,EAAO,4BAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAI,QAAA;AAAA,MACJ,KAAA,EAAO,QAAA;AAAA,MACP,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAA,EAAI,MAAA;AAAA,MACJ,KAAA,EAAO,sBAAA;AAAA,MACP,IAAA,EAAM,cAAA;AAAA,MACN,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,QACR;AAAA,UACE,EAAA,EAAI,SAAA;AAAA,UACJ,KAAA,EAAO,qBAAA;AAAA,UACP,IAAA,EAAM;AAAA,SACR;AAAA,QACA;AAAA,UACE,EAAA,EAAI,iBAAA;AAAA,UACJ,KAAA,EAAO,iBAAA;AAAA,UACP,IAAA,EAAM;AAAA;AACR,OACF;AAAA,MACA,YAAA,EAAc;AAAA,QACZ;AAAA,UACE,EAAA,EAAI,SAAA;AAAA,UACJ,KAAA,EAAO,oBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,aAAA;AAAA,cACJ,KAAA,EAAO,mBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA,EAAE,EAAA,EAAI,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,MAAM,uBAAA;AAAwB;AAC/D,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,WAAA;AAAA,UACJ,KAAA,EAAO,eAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,mBAAA;AAAA,cACJ,KAAA,EAAO,6BAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,iBAAA;AAAA,cACJ,KAAA,EAAO,iBAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,gBAAA;AAAA,UACJ,KAAA,EAAO,gBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,SAAA;AAAA,cACJ,KAAA,EAAO,gBAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,aAAA;AAAA,UACJ,KAAA,EAAO,aAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,OAAA;AAAA,cACJ,KAAA,EAAO,aAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,YAAA;AAAA,cACJ,KAAA,EAAO,YAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,SAAA;AAAA,UACJ,KAAA,EAAO,SAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,MAAA;AAAA,cACJ,KAAA,EAAO,kBAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,iBAAA;AAAA,UACJ,KAAA,EAAO,wBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,uBAAA;AAAA,cACJ,KAAA,EAAO,uBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,uBAAA;AAAA,cACJ,KAAA,EAAO,uBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,iBAAA;AAAA,cACJ,KAAA,EAAO,2BAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,cAAA;AAAA,UACJ,KAAA,EAAO,cAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,oBAAA;AAAA,cACJ,KAAA,EAAO,wBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,aAAA;AAAA,cACJ,KAAA,EAAO,oBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,aAAA;AAAA,cACJ,KAAA,EAAO,aAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,MAAA;AAAA,UACJ,KAAA,EAAO,MAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,YAAA,EAAc,MAAM,oBAAA;AAAqB;AACpE;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAI,YAAA;AAAA,MACJ,KAAA,EAAO,YAAA;AAAA,MACP,IAAA,EAAM,YAAA;AAAA,MACN,aAAA,EAAe;AAAA,KACjB;AAAA,IACA;AAAA,MACE,EAAA,EAAI,aAAA;AAAA,MACJ,KAAA,EAAO,wBAAA;AAAA,MACP,IAAA,EAAM,aAAA;AAAA,MACN,aAAA,EAAe;AAAA,KACjB;AAAA,IACA;AAAA,MACE,EAAA,EAAI,WAAA;AAAA,MACJ,KAAA,EAAO,4BAAA;AAAA,MACP,IAAA,EAAM,WAAA;AAAA,MACN,aAAA,EAAe;AAAA,KACjB;AAAA,IACA;AAAA,MACE,EAAA,EAAI,YAAA;AAAA,MACJ,KAAA,EAAO,uBAAA;AAAA,MACP,IAAA,EAAM,YAAA;AAAA,MACN,aAAA,EAAe;AAAA,KACjB;AAAA,IACA;AAAA,MACE,EAAA,EAAI,MAAA;AAAA,MACJ,KAAA,EAAO,MAAA;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,SAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAe,IAAA;AAAA,MACf,QAAA,EAAU;AAAA,QACR;AAAA,UACE,EAAA,EAAI,WAAA;AAAA,UACJ,KAAA,EAAO,oBAAA;AAAA,UACP,IAAA,EAAM;AAAA,SACR;AAAA,QACA;AAAA,UACE,EAAA,EAAI,eAAA;AAAA,UACJ,KAAA,EAAO,yBAAA;AAAA,UACP,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAI,WAAA;AAAA,MACJ,KAAA,EAAO,4BAAA;AAAA,MACP,IAAA,EAAM,cAAA;AAAA,MACN,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,QACR;AAAA,UACE,EAAA,EAAI,uBAAA;AAAA,UACJ,KAAA,EAAO,uBAAA;AAAA,UACP,IAAA,EAAM;AAAA,SACR;AAAA,QACA;AAAA,UACE,EAAA,EAAI,qBAAA;AAAA,UACJ,KAAA,EAAO,uBAAA;AAAA,UACP,IAAA,EAAM;AAAA;AACR,OACF;AAAA,MACA,YAAA,EAAc;AAAA,QACZ;AAAA,UACE,EAAA,EAAI,UAAA;AAAA,UACJ,KAAA,EAAO,iBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR,EAAE,EAAA,EAAI,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,MAAM,QAAA,EAAS;AAAA,YAClD,EAAE,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,YACrD,EAAE,EAAA,EAAI,cAAA,EAAgB,KAAA,EAAO,UAAA,EAAY,MAAM,UAAA;AAAW;AAC5D,SACF;AAAA,QACA;AAAA,UACE,EAAA,EAAI,aAAA;AAAA,UACJ,KAAA,EAAO,qBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR;AAAA,cACE,EAAA,EAAI,WAAA;AAAA,cACJ,KAAA,EAAO,uBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,qBAAA;AAAA,cACJ,KAAA,EAAO,qBAAA;AAAA,cACP,IAAA,EAAM;AAAA,aACR;AAAA,YACA;AAAA,cACE,EAAA,EAAI,oBAAA;AAAA,cACJ,KAAA,EAAO,oBAAA;AAAA,cACP,IAAA,EAAM;AAAA;AACR;AACF;AACF;AACF;AACF;AAEJ;AAGO,IAAM,iCAAA,GAAwD;AAAA,EACnE,CAAC,mBAAA,CAAoB,KAAK,CAAC,GAAG;AAAA,IAC5B,MAAA,EAAQ;AAAA;AAEZ;ACzwBO,IAAM,2BAAA,GAA8B;AA4C3C,SAAS,OAAO,KAAA,EAAkD;AAChE,EAAA,OAAO,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,SAAS,KAAA,EAAyB;AACzC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,SAAiB,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA;AAC5D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,WAAW,OAAO,IAAA;AACpE,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,GAAG,OAAO,KAAA,CAAM,KAAK,QAAQ,CAAA;AACpD,EAAA,IAAI,MAAA,CAAO,KAAK,CAAA,EAAG,OAAO,OAAO,MAAA,CAAO,KAAK,CAAA,CAAE,IAAA,CAAK,QAAQ,CAAA;AAC5D,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,iBAAiB,QAAA,EAA4B;AACpD,EAAA,IAAI,MAAM,OAAA,CAAQ,QAAQ,GAAG,OAAO,QAAA,CAAS,KAAK,gBAAgB,CAAA;AAClE,EAAA,IAAI,CAAC,MAAA,CAAO,QAAQ,CAAA,EAAG,OAAO,KAAA;AAC9B,EAAA,IAAI,OAAA,IAAW,QAAA,EAAU,OAAO,QAAA,CAAS,SAAS,KAAK,CAAA;AACvD,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,CAAE,KAAK,gBAAgB,CAAA;AACtD;AAEA,SAAS,cAAA,CACP,QAAA,EACA,WAAA,GAAc,KAAA,EACL;AACT,EAAA,OACG,QAAA,EAAU,MAAA,KAAW,MAAA,IACpB,QAAA,CAAS,WAAA,GAAc,cAAA,CAAe,QAAQ,CAAA,GAAI,QAAA,CAAS,MAAM,CAAA,IACnE,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AAEvC;AAGA,SAAS,OAAO,OAAA,EAAyB;AACvC,EAAA,OAAO,SAAS,KAAA,CAAM,IAAA;AAAA,IAAK,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,IAAG,CAAC,SAC7D,IAAA,CAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG;AAAA,GACnC,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AACZ;AAEA,SAAS,YAAY,IAAA,EAAmC;AACtD,EAAA,OAAO,IAAA,KAAS,QACZ,OAAA,GACA,IAAA,KAAS,WACP,MAAA,GACA,IAAA,KAAS,YACP,KAAA,GACA,IAAA;AACV;AAEA,SAAS,mBAAmB,WAAA,EAA2C;AACrE,EAAA,MAAM,IAAA,GAAO,WAAA,CAAY,WAAA,CAAY,IAAI,CAAA;AACzC,EAAA,OAAO,CAAA,EAAG,YAAY,KAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,IAAI,KAAK,EAAE,CAAA,CAAA;AACtD;AAEA,SAAS,cAAA,CACP,cACA,aAAA,EACQ;AACR,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoC;AACvD,EAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AACtC,IAAA,MAAM,GAAA,GAAM,YAAY,OAAA,IAAW,EAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,GAAG,KAAK,EAAC;AAClC,IAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,IAAA,MAAA,CAAO,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,MAAM,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAC,OAAA,EAAS,MAAM,CAAA,KAAM;AAC/C,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,gBAAgB,OAAA,GAAU,MAAA;AAAA,MAC1B,KAAA,CAAM,UAAA;AAAA,MACN,KAAA,CAAM,QAAA;AAAA,MACN,KAAA,CAAM;AAAA,KACR,CAAE,OAAO,OAAO,CAAA;AAChB,IAAA,MAAM,OAAA,GAAU,MAAA,CACb,GAAA,CAAI,CAAC,UAAU,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,mBAAmB,KAAK,CAAC,CAAA,CAAE,CAAA,CAC7D,KAAK,IAAI,CAAA;AACZ,IAAA,OAAO,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,KAAK,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,OAAA;AAAA,EACnE,CAAC,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAChB;AAGO,SAAS,sBACd,QAAA,EACqB;AACrB,EAAA,OAAO,QAAA,CAAS,WAAW,QAAA,CAAS,OAAA;AAAA,IAAQ,CAAC,OAAA,KAC3C,2BAAA,CAA4B,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,OAAA,KAAY;AACpD,MAAA,MAAM,YAAA,GAAe,SAAS,YAAA,CAAa,MAAA;AAAA,QACzC,CAAC,WAAA,KAAgB,WAAA,CAAY,OAAA,KAAY;AAAA,OAC3C;AACA,MAAA,MAAM,qBAAA,GAAwB,QAAQ,YAAA,EAAc,IAAA;AAAA,QAClD,CAAC,WAAA,KACC,mBAAA,CAAoB,QAAQ,EAAA,EAAI,WAAA,CAAY,EAAE,CAAA,KAAM;AAAA,OACxD;AACA,MAAA,MAAM,SAAA,GAAY,OAAA,KAAY,mBAAA,CAAoB,OAAA,CAAQ,EAAE,CAAA;AAC5D,MAAA,MAAM,KAAA,GAAQ,SAAA,GACV,OAAA,CAAQ,IAAA,KAAS,WAAA,GACf,OAAA,CAAQ,KAAA,GACR,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,UAAA,CAAA,GACjB,qBAAA,EAAuB,SAAS,OAAA,CAAQ,KAAA;AAC7C,MAAA,MAAM,UAAA,GAAa,CAAC,SAAA,IAAa,OAAA,CAAQ,IAAA,KAAS,cAAA;AAClD,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,OAAA,GAAU,cAAA,CAAe,YAAA,EAAc,OAAA,CAAQ,IAAA,KAAS,QAAQ,CAAA;AAAA,MAClE,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC9B,QAAA,OAAA,GAAU,YAAA,CAAa,GAAA,CAAI,kBAAkB,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,MAC1D,CAAA,MAAO;AAEL,QAAA,OAAA,GAAUA,qBAAa,EAAE,GAAG,SAAS,SAAA,CAAU,OAAO,GAAG,CAAA;AAAA,MAC3D;AACA,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,OAAO,OAAO,CAAA;AAAA,QAClB,OAAA;AAAA,QACA,WAAW,OAAA,CAAQ,EAAA;AAAA,QACnB,KAAA;AAAA,QACA,OAAA,EAAS,OAAA,CAAQ,IAAA,EAAK,GAAI,OAAA,GAAU,QAAA;AAAA,QACpC,KAAA,EAAO,UAAA,GACH,YAAA,CAAa,MAAA,KAAW,KAAK,CAAC,OAAA,CAAQ,IAAA,EAAK,GAC3C,CAAC,cAAA,CAAe,QAAA,CAAS,SAAA,CAAU,OAAO,CAAC;AAAA,OACjD;AAAA,IACF,CAAC;AAAA,GACH;AACF;AAEA,SAAS,aAAa,KAAA,EAAuB;AAC3C,EAAA,OAAO,KAAA,CACJ,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,QAAA,EAAU,QAAK,CAAA,CACvB,OAAA,CAAQ,gBAAA,EAAkB,MAAM,CAAA;AACrC;AAEA,SAAS,UAAU,KAAA,EAAkC;AACnD,EAAA,OAAO,IAAI,eAAA,CAAgB,KAAA,CAAM,OAAO,CAAC,CAAA,MAAA,EAAS,MAAM,EAAE,CAAA,CAAA,CAAA;AAC5D;AAGA,SAAS,gBAAgB,KAAA,EAAuB;AAC9C,EAAA,OAAO,KAAA,CAAM,MAAM,OAAO,CAAA,CAAE,IAAI,YAAY,CAAA,CAAE,KAAK,MAAM,CAAA;AAC3D;AAEA,SAAS,WAAA,CACP,UACA,MAAA,EACQ;AACR,EAAA,OAAO;AAAA,IACL,CAAA,EAAA,EAAK,YAAA,CAAa,QAAA,CAAS,UAAA,CAAW,KAAK,CAAC,CAAA,CAAA;AAAA,IAC5C,GAAG,QAAA,CAAS,UAAA,CAAW,QAAA,CAAS,GAAA;AAAA,MAAI,CAAC,OAAA,KACnC;AAAA,QACE,CAAA,GAAA,EAAM,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AAAA,QACjC,MAAA,CACG,OAAO,CAAC,KAAA,KAAU,MAAM,SAAA,KAAc,OAAA,CAAQ,EAAE,CAAA,CAChD,GAAA;AAAA,UAAI,CAAC,KAAA,KACJ,OAAA,CAAQ,IAAA,KAAS,WAAA,GACb,UAAU,KAAK,CAAA,GACf,CAAA,IAAA,EAAO,YAAA,CAAa,MAAM,KAAK,CAAC,CAAA,IAAA,EAAO,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,SAC7D,CACC,KAAK,IAAI;AAAA,OACd,CAAE,KAAK,MAAM;AAAA;AACf,GACF,CAAE,KAAK,MAAM,CAAA;AACf;AAUA,SAAS,eAAe,IAAA,EAA0B;AAChD,EAAA,MAAM,QAAoB,EAAC;AAG3B,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAAoB;AAChD,EAAA,MAAM,kBAA4B,EAAC;AACnC,EAAA,KAAA,IAAS,SAAS,CAAA,EAAG,MAAA,GAAS,IAAA,CAAK,MAAA,EAAQ,UAAU,CAAA,EAAG;AACtD,IAAA,IAAI,IAAA,CAAK,MAAM,CAAA,KAAM,IAAA,EAAM,MAAA,IAAU,CAAA;AAAA,SAAA,IAC5B,KAAK,MAAM,CAAA,KAAM,GAAA,EAAK,eAAA,CAAgB,KAAK,MAAM,CAAA;AAAA,SAAA,IACjD,IAAA,CAAK,MAAM,CAAA,KAAM,GAAA,EAAK;AAC7B,MAAA,MAAM,OAAA,GAAU,gBAAgB,GAAA,EAAI;AACpC,MAAA,IAAI,OAAA,KAAY,MAAA,EAAW,eAAA,CAAgB,GAAA,CAAI,SAAS,MAAM,CAAA;AAAA,IAChE;AAAA,EACF;AAGA,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAsB;AAChD,EAAA,KAAA,IAAS,SAAS,CAAA,EAAG,MAAA,GAAS,IAAA,CAAK,MAAA,EAAQ,UAAU,CAAA,EAAG;AACtD,IAAA,IAAI,IAAA,CAAK,MAAM,CAAA,KAAM,GAAA,EAAK;AAC1B,IAAA,MAAM,KAAA,GAAQ,MAAA;AACd,IAAA,OAAO,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA,KAAM,KAAK,MAAA,IAAU,CAAA;AAC3C,IAAA,MAAM,MAAA,GAAS,SAAS,KAAA,GAAQ,CAAA;AAChC,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,MAAM,KAAK,EAAC;AAC3C,IAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACf,IAAA,aAAA,CAAc,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,EAChC;AACA,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAC5C,EAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,OAAO,KAAA,GAAQ,KAAK,MAAA,EAAQ;AAC1B,IAAA,MAAM,YAAY,KAAA,KAAU,CAAA,IAAK,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA,KAAM,IAAA;AACrD,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC7B,MAAA,MAAM,KAAA,GAAQ,oCAAA,CAAqC,IAAA,CAAK,IAAI,CAAA;AAC5D,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,MAAA,GAAS,KAAA,CAAM,CAAC,CAAA,CAAE,CAAC,CAAA;AACzB,QAAA,MAAM,QAAQ,IAAI,MAAA;AAAA,UAChB,UAAU,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,EAAE,MAAM,CAAA,cAAA,CAAA;AAAA,UACnC;AAAA,SACF,CAAE,KAAK,IAAA,CAAK,KAAA,CAAM,MAAM,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA;AAClC,QAAA,KAAA,IAAS,KAAA,GACL,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,GAAS,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,GACzC,IAAA,CAAK,MAAA;AACT,QAAA;AAAA,MACF;AACA,MAAA,IAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,EAAG;AAC7B,QAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA;AACpC,QAAA,KAAA,GAAQ,GAAA,GAAM,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAA,GAAM,CAAA;AACtC,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAA,EAAQ,KAAK,CAAA,EAAG;AAClC,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAC,CAAA;AACzC,MAAA,KAAA,GAAQ,GAAA,GAAM,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,GAAA,GAAM,CAAA;AACtC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAA,GACJ,CAAC,aAAA,IAAiB,IAAA,CAAK,KAAK,CAAA,KAAM,GAAA,GAC9B,8BAAA,CAA+B,IAAA,CAAK,KAAK,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAC,CAAA,GAChE,IAAA;AACN,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,GAAA,EAAK,QAAQ,UAAA,CAAW,CAAC,EAAE,MAAM,CAAA;AAC7D,MAAA,IAAI,MAAA,GAAS,GAAG,aAAA,GAAgB,IAAA;AAAA,WAC3B;AACH,QAAA,MAAM,eAAe,MAAA,GAAS,CAAA;AAC9B,QAAA,MAAM,GAAA,GAAM,IAAI,MAAA,CAAO,CAAA,EAAA,EAAK,WAAW,CAAC,CAAC,CAAA,KAAA,CAAA,EAAS,GAAG,CAAA,CAAE,IAAA;AAAA,UACrD,IAAA,CAAK,MAAM,YAAY;AAAA,SACzB;AACA,QAAA,KAAA,GAAQ,GAAA,GAAM,eAAe,GAAA,CAAI,KAAA,GAAQ,IAAI,CAAC,CAAA,CAAE,SAAS,IAAA,CAAK,MAAA;AAC9D,QAAA;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,KAAK,CAAA,KAAM,IAAA,EAAM;AACxB,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,KAAK,CAAA,KAAM,GAAA,EAAK;AACvB,MAAA,IAAI,WAAW,KAAA,GAAQ,CAAA;AACvB,MAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,KAAM,GAAA,EAAK,QAAA,IAAY,CAAA;AAC3C,MAAA,MAAM,SAAS,QAAA,GAAW,KAAA;AAC1B,MAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,MAAM,KAAK,EAAC;AAC3C,MAAA,IAAI,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA,IAAK,CAAA;AACxC,MAAA,OAAO,SAAS,IAAA,CAAK,MAAA,IAAU,KAAK,MAAM,CAAA,GAAI,UAAU,MAAA,IAAU,CAAA;AAClE,MAAA,WAAA,CAAY,GAAA,CAAI,QAAQ,MAAM,CAAA;AAC9B,MAAA,MAAMC,QAAAA,GAAU,KAAK,MAAM,CAAA;AAC3B,MAAA,KAAA,GAAQA,QAAAA,KAAY,MAAA,GAAY,QAAA,GAAWA,QAAAA,GAAU,MAAA;AACrD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,KAAK,CAAA,KAAM,GAAA,IAAO,KAAK,KAAA,GAAQ,CAAC,MAAM,GAAA,EAAK;AAClD,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA;AAC1C,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,KAAA,IAAS,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,MAAM,UAAU,QAAA,GAAW,CAAA;AAC3B,IAAA,MAAM,cACJ,0GAAA,CAA2G,IAAA;AAAA,MACzG,IAAA,CAAK,MAAM,OAAO;AAAA,KACpB;AACF,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,GAAA,GAAM,OAAA,GAAU,WAAA,CAAY,CAAC,CAAA,CAAE,MAAA;AACrC,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,EAAA,EAAI,WAAA,CAAY,CAAC,CAAA,IAAK,YAAY,CAAC,CAAA;AAAA,QACnC,KAAA,EAAO,KAAA;AAAA,QACP,QAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,KAAA,GAAQ,GAAA;AAAA,IACV,CAAA,MAAO;AACL,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,wBAAA,CACd,MACA,MAAA,EACQ;AACR,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,EAAA,EAAI,KAAK,CAAC,CAAC,CAAA;AAC7D,EAAA,IAAI,MAAA,GAAS,IAAA;AACb,EAAA,KAAA,MAAW,IAAA,IAAQ,cAAA,CAAe,IAAI,CAAA,CAAE,SAAQ,EAAG;AACjD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AAC9B,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,MAAA,GACE,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAC,CAAA,GAC9B,eAAA,CAAgB,KAAA,CAAM,OAAO,CAAA,GAC7B,MAAA,CAAO,KAAA,CAAM,KAAK,QAAQ,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,MAAA;AACT;AAUA,SAAS,YAAY,MAAA,EAAyC;AAC5D,EAAA,MAAM,OAAA,GAAU,wBAAA,CAAyB,IAAA,CAAK,MAAM,CAAA;AACpD,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,MAAM,YAAY,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,EAAE,MAAM,CAAA;AAChD,EAAA,MAAM,OAAA,GAAU,6BAAA,CAA8B,IAAA,CAAK,SAAS,CAAA;AAC5D,EAAA,IAAI,CAAC,SAAS,OAAO,MAAA;AACrB,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,CAAC,CAAA,CAAE,MAAA;AAC3C,EAAA,MAAM,GAAA,GAAM,QAAQ,CAAC,CAAA,CAAE,SAAS,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,CAAC,CAAA,CAAE,MAAA;AAC3D,EAAA,OAAO;AAAA,IACL,iBAAA,EAAmB,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAAA,IACtC,UAAA,EAAY,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA;AAAA,IACtC,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAA,IACtB,OAAA,EAAS,QAAQ,CAAC,CAAA;AAAA,IAClB,OAAA,EAAS,QAAQ,CAAC,CAAA,CAAE,MAAM,OAAA,CAAQ,CAAC,EAAE,MAAM;AAAA,GAC7C;AACF;AAEA,SAAS,sBACP,WAAA,EACqB;AACrB,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,CAAE,OAAA;AAAA,IAAQ,CAAC,CAAC,EAAA,EAAI,KAAK,MACpD,eAAA,CAAgB,IAAA,CAAK,EAAE,CAAA,IACvB,MAAA,CAAO,KAAK,KACZ,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,IACzB,OAAO,KAAA,CAAM,cAAc,QAAA,IAC3B,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,GACrB;AAAA,MACE;AAAA,QACE,EAAA;AAAA,QACA,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,OACE,OAAO,KAAA,CAAM,UAAU,QAAA,GAAW,KAAA,CAAM,QAAQ,KAAA,CAAM,OAAA;AAAA,QACxD,OAAA,EAASD,qBAAa,KAAK;AAAA;AAC7B,QAEF;AAAC,GACP;AACF;AAEA,SAAS,gBAAgB,KAAA,EAAyC;AAChE,EAAA,IACE,CAAC,MAAA,CAAO,KAAK,CAAA,IACb,OAAO,KAAA,CAAM,EAAA,KAAO,QAAA,IACpB,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA;AAE1B,IAAA,OAAO,KAAA;AACT,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAY;AAC5B,EAAA,MAAM,WAAA,GAAc,CAAC,MAAA,KACnB,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,IACpB,MAAA,CAAO,KAAA,CAAM,CAAC,KAAA,KAAU;AACtB,IAAA,IACE,CAAC,MAAA,CAAO,KAAK,KACb,OAAO,KAAA,CAAM,OAAO,QAAA,IACpB,CAAC,KAAA,CAAM,EAAA,IACP,OAAO,KAAA,CAAM,SAAA,KAAc,YAC3B,GAAA,CAAI,GAAA,CAAI,MAAM,EAAE,CAAA;AAEhB,MAAA,OAAO,KAAA;AACT,IAAA,GAAA,CAAI,GAAA,CAAI,MAAM,EAAE,CAAA;AAChB,IAAA,OAAO,KAAA,CAAM,MAAA,KAAW,MAAA,IAAa,WAAA,CAAY,MAAM,MAAM,CAAA;AAAA,EAC/D,CAAC,CAAA;AACH,EAAA,OAAO,MAAM,KAAA,CAAM,KAAA;AAAA,IACjB,CAAC,IAAA,KACC,MAAA,CAAO,IAAI,CAAA,IAAK,OAAO,IAAA,CAAK,EAAA,KAAO,QAAA,IAAY,WAAA,CAAY,IAAA,CAAK,MAAM;AAAA,GAC1E;AACF;AAEA,SAAS,qBAAqB,KAAA,EAA6C;AACzE,EAAA,OACE,OAAO,KAAK,CAAA,IACZ,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA;AAAA,IACnB,CAAC,aACC,MAAA,CAAO,QAAQ,MACd,QAAA,CAAS,MAAA,KAAW,MAAA,IACnB,OAAO,QAAA,CAAS,MAAA,KAAW,cAC5B,QAAA,CAAS,QAAA,KAAa,UACrB,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,IACxB,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AAAA,GACrC;AAEJ;AAEA,SAAS,kBAAkB,IAAA,EAAuB;AAChD,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,MAAM,CAAA,IAAK;AAAA,IAC7B,CAAC,MAAM,IAAI,CAAA;AAAA,IACX,CAAC,MAAM,IAAI;AAAA,GACb,EAAG;AAGD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AACjC,IAAA,IAAI,KAAA,IAAS,KAAK,IAAA,CAAK,OAAA,CAAQ,QAAQ,KAAA,GAAQ,MAAA,CAAO,MAAM,CAAA,IAAK,CAAA;AAC/D,MAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,kBAAkB,MAAA,EAAoC;AACpE,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM,CAAA;AAChC,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA;AAAA,IACA,iBAAA,EAAmB,OAAO,iBAAA,IAAqB,EAAA;AAAA,IAC/C,IAAA,EAAM,OAAO,IAAA,IAAQ,MAAA;AAAA,IACrB,WAAA,EAAa,IAAA;AAAA,IACb,aAAa;AAAC,GAChB;AACA,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,EAAsC,OAAA,KACnD,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,EAAE,QAAA,EAAU,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA;AAC9D,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,KAAA;AAAA,MACE,aAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,MAAM,WAAWE,kBAAA,CAAc,KAAA,CAAM,YAAY,EAAE,UAAA,EAAY,MAAM,CAAA;AACrE,IAAA,IAAI,QAAA,CAAS,MAAA,CAAO,MAAA,IAAU,QAAA,CAAS,SAAS,MAAA,EAAQ;AACtD,MAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,IAC9D;AACA,IAAA,MAAMC,QAAgB,QAAA,CAAS,IAAA,CAAK,EAAE,aAAA,EAAe,KAAK,CAAA;AAC1D,IAAA,IAAI,CAAC,MAAA,CAAOA,KAAI,GAAG,MAAM,IAAI,MAAM,sCAAsC,CAAA;AACzE,IAAA,MAAA,CAAO,WAAA,GAAcA,KAAAA;AAAA,EACvB,SAAS,KAAA,EAAO;AACd,IAAA,KAAA;AAAA,MACE,aAAA;AAAA,MACA,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAC3C;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAO,MAAA,CAAO,WAAA;AACpB,EAAA,IAAI,gBAAgB,IAAA,CAAK,IAAI,CAAA,EAAG,MAAA,CAAO,OAAO,IAAA,CAAK,IAAA;AAAA,OAC9C,KAAA,CAAM,QAAQ,wDAAwD,CAAA;AAC3E,EAAA,IAAI,qBAAqB,IAAA,CAAK,QAAQ,CAAA,EAAG,MAAA,CAAO,WAAW,IAAA,CAAK,QAAA;AAAA,OAC3D,KAAA,CAAM,YAAY,qDAAqD,CAAA;AAC5E,EAAA,IAAI,IAAA,CAAK,wBAAwB,MAAA,EAAW;AAC1C,IAAA,IAAI;AACF,MAAA,2BAAA;AAAA,QACE,IAAA,CAAK;AAAA,OACP;AACA,MAAA,MAAA,CAAO,aAAa,IAAA,CAAK,mBAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AACN,MAAA,KAAA;AAAA,QACE,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,sBAAsB,IAAI,CAAA;AACzC,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,EAAA,EAAI,KAAK,CAAC,CAAC,CAAA;AAC7D,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAC/B,EAAA,KAAA,MAAW,IAAA,IAAQ,cAAA,CAAe,MAAA,CAAO,IAAI,CAAA,EAAG;AAC9C,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AAEtB,MAAA,IACE,IAAA,CAAK,EAAA,CAAG,UAAA,CAAW,QAAQ,KAC3B,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,GAAG,CAAA,CAAE,SAAS,MAAM,CAAA;AAE1D,QAAA,MAAA,CAAO,YAAY,IAAA,CAAK;AAAA,UACtB,QAAA,EAAU,OAAA;AAAA,UACV,IAAA,EAAM,eAAA;AAAA,UACN,OAAA,EAAS,CAAA,WAAA,EAAc,IAAA,CAAK,EAAE,CAAA,qBAAA;AAAA,SAC/B,CAAA;AAAA,IACL,CAAA,MAAO,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AAAA,EAC3B;AACA,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,IAAK,KAAA,CAAM,OAAA,KAAY,QAAA,IAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAK;AACvE,MAAA,MAAA,CAAO,YAAY,IAAA,CAAK;AAAA,QACtB,QAAA,EAAU,SAAA;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,4CAAA,CAAA;AAAA,QACvB,SAAS,KAAA,CAAM;AAAA,OAChB,CAAA;AAAA,EACL;AACA,EAAA,IAAI,iBAAA,CAAkB,OAAO,IAAI,CAAA;AAC/B,IAAA,MAAA,CAAO,YAAY,IAAA,CAAK;AAAA,MACtB,QAAA,EAAU,SAAA;AAAA,MACV,IAAA,EAAM,iBAAA;AAAA,MACN,OAAA,EACE;AAAA,KACH,CAAA;AACH,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,yBACd,SAAA,EACoB;AACpB,EAAA,OAAO,SAAA,CAAU,2BAA2B,CAAA,EAAG,MAAA;AACjD;AAEO,SAAS,2BAAA,CACd,SAAA,EACA,IAAA,EACA,OAAA,GAA6B,EAAC,EACV;AACpB,EAAA,OAAO;AAAA,IACL,GAAG,SAAA;AAAA,IACH,CAAC,2BAA2B,GAAG;AAAA,MAC7B,GAAG,UAAU,2BAA2B,CAAA;AAAA,MACxC,MAAA,EAAQ,IAAA;AAAA,MACR,GAAG;AAAA;AACL,GACF;AACF;AAGO,SAAS,0BAA0B,MAAA,EAA+B;AACvE,EAAA,MAAM,MAAA,GAAS,kBAAkB,MAAM,CAAA;AACvC,EAAA,OAAO;AAAA,IACL,QAAQ,MAAA,CAAO,IAAA;AAAA,IACf,UAAA,EAAY,EAAE,oBAAA,EAAsB,MAAA,CAAO,iBAAA;AAAkB,GAC/D;AACF;AAEA,SAAS,eAAe,QAAA,EAAmC;AACzD,EAAA,IAAI,QAAA,EAAU,WAAW,MAAA,EAAW;AAClC,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA;AAAA,IACnC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,QAAA,CAAS,MAAA;AAAA,IAClB;AAAA,EACF;AACA,EAAA,OAAO,UAAU,QAAA,IAAY,IAAA;AAC/B;AAEA,IAAM,kCAAkB,IAAI,GAAA,CAAI,CAAC,IAAA,EAAM,OAAA,EAAS,OAAO,CAAC,CAAA;AACxD,IAAM,kCAAkB,IAAI,GAAA,CAAI,CAAC,IAAA,EAAM,OAAA,EAAS,QAAQ,CAAC,CAAA;AACzD,IAAM,gBAAA,uBAAuB,GAAA,CAAI;AAAA,EAC/B,IAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC,CAAA;AACD,IAAM,iBAAA,uBAAwB,GAAA,CAAI;AAAA,EAChC,IAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,oBAAA;AAAA,EACA,UAAA;AAAA,EACA,mBAAA;AAAA,EACA,wBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,aAAA,CACP,QAAA,EACA,IAAA,EACA,KAAA,EACyB;AACzB,EAAA,MAAM,MAAA,GAAS,EAAE,GAAI,MAAA,CAAO,QAAQ,IAAI,QAAA,GAAW,EAAC,EAAI,GAAG,IAAA,EAAK;AAChE,EAAA,KAAA,MAAW,YAAY,KAAA,EAAO;AAC5B,IAAA,IAAI,EAAE,QAAA,IAAY,IAAA,CAAA,EAAO,OAAO,OAAO,QAAQ,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,uBAAA,CACP,UACA,IAAA,EACgB;AAChB,EAAA,IAAI,CAAC,OAAO,QAAQ,CAAA,IAAK,SAAS,EAAA,KAAO,IAAA,CAAK,IAAI,OAAO,IAAA;AACzD,EAAA,MAAM,WAAA,GAAc,CAClB,SAAA,EACA,SAAA,KAC8B;AAC9B,IAAA,MAAM,UAAU,IAAI,GAAA;AAAA,MAAA,CACjB,MAAM,OAAA,CAAQ,SAAS,CAAA,GAAI,SAAA,GAAY,EAAC,EACtC,MAAA,CAAO,MAAM,CAAA,CACb,IAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,EAAA,EAAI,KAAK,CAAC;AAAA,KACrC;AACA,IAAA,OAAO,UAAU,MAAA,CAAO,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,KAAU;AAC7C,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA;AACrC,MAAA,MAAMC,OAAAA,GAAS,aAAA,CAAc,QAAA,EAAU,KAAA,EAAO,gBAAgB,CAAA;AAC9D,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA;AAC5B,QAAAA,QAAO,MAAA,GAAS,WAAA,CAAY,QAAA,EAAU,MAAA,EAAQ,MAAM,MAAM,CAAA;AAC5D,MAAA,IAAI,MAAA,CAAO,MAAM,WAAW,CAAA;AAC1B,QAAAA,QAAO,WAAA,GAAc,aAAA;AAAA,UACnB,QAAA,EAAU,WAAA;AAAA,UACV,KAAA,CAAM,WAAA;AAAA,UACN;AAAA,SACF;AACF,MAAA,OAAOA,OAAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA;AACA,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IAAA,CAClB,MAAM,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,GAAI,QAAA,CAAS,QAAQ,EAAC,EAChD,OAAO,MAAM,CAAA,CACb,IAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,EAAA,EAAI,IAAI,CAAC;AAAA,GAClC;AACA,EAAA,MAAM,MAAA,GAAS,aAAA;AAAA,IACb,QAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACtC,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA;AACpC,IAAA,OAAO;AAAA,MACL,GAAG,aAAA;AAAA,QACD,OAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAQ,WAAA,CAAY,OAAA,EAAS,QAAQ,IAAA,CAAK,MAAA,IAAU,EAAE;AAAA,KACxD;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,aAAA,CACP,QAAA,EACA,IAAA,EACA,KAAA,EACS;AACT,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AACtC,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AACpC,EAAA,IAAI,IAAA,CAAK,UAAU,QAAQ,CAAA,KAAM,KAAK,SAAA,CAAU,KAAK,GAAG,OAAO,KAAA;AAC/D,EAAA,IAAI,MAAA,CAAO,KAAK,CAAA,IAAKC,UAAA,CAAM,IAAI,CAAA,EAAG;AAChC,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,MAAM,OAAO,IAAI,GAAA;AAAA,MACf,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,KAAQ,KAAA,CAAM,GAAG,CAAA,KAAM,MAAS;AAAA,KAC7D;AACA,IAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,GAAG,IAAA,CAAK,KAAK,CAAA,EAAG;AAClC,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAC3B,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AAClB,QAAA,QAAA,CAAS,QAAA,CAAS,CAAC,GAAG,IAAA,EAAM,GAAG,CAAC,CAAA;AAChC,QAAA,OAAA,GAAU,IAAA;AAAA,MACZ;AAAA,IACF;AACA,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,OAAA,GAAU,aAAA,CAAc,QAAA,EAAU,CAAC,GAAG,IAAA,EAAM,GAAG,CAAA,EAAG,KAAA,CAAM,GAAG,CAAC,CAAA,IAAK,OAAA;AAAA,IACnE;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,IAAI,MAAM,OAAA,CAAQ,KAAK,CAAA,IAAKC,UAAA,CAAM,IAAI,CAAA,EAAG;AACvC,IAAA,IACE,KAAA,CAAM,KAAA,CAAM,CAAC,IAAA,KAAS,MAAA,CAAO,IAAI,CAAA,IAAK,OAAO,IAAA,CAAK,EAAA,KAAO,QAAQ,CAAA,IACjE,KAAK,KAAA,CAAM,KAAA;AAAA,MACT,CAAC,SAASD,UAAA,CAAM,IAAI,KAAK,OAAO,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,KAAM;AAAA,KACrD,EACA;AAGA,MAAA,MAAM,OAAO,IAAI,GAAA;AAAA,QACf,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AAAA,UACvBA,WAAM,IAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,GAAI,MAAA;AAAA,UAC/B;AAAA,SACD;AAAA,OACH;AACA,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AAC/B,QAAA,MAAM,KAAM,IAAA,CAAiC,EAAA;AAC7C,QAAA,OAAO,KAAK,GAAA,CAAI,EAAE,CAAA,IAAK,QAAA,CAAS,WAAW,IAAI,CAAA;AAAA,MACjD,CAAC,CAAA;AACD,MAAA,KAAA,CAAM,OAAA;AAAA,QAAQ,CAAC,IAAA,EAAM,KAAA,KACnB,aAAA,CAAc,QAAA,EAAU,CAAC,GAAG,IAAA,EAAM,KAAK,CAAA,EAAG,IAAI;AAAA,OAChD;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ;AACtC,MAAA,OAAO,KAAA,CAAM,MAAA;AAAA,QACX,CAAC,OAAA,EAAS,IAAA,EAAM,KAAA,KACd,aAAA,CAAc,QAAA,EAAU,CAAC,GAAG,IAAA,EAAM,KAAK,CAAA,EAAG,IAAI,CAAA,IAAK,OAAA;AAAA,QACrD;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,QAAA,CAAS,KAAA,CAAM,MAAM,KAAK,CAAA;AAC1B,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,kBAAA,CACd,QAAA,EACA,IAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,SAAA,CAAU,2BAA2B,CAAA;AAC/D,EAAA,MAAM,cAAA,GACJ,MAAA,IAAU,QAAA,EAAU,UAAA,EAAY,oBAAA,IAAwB,EAAA;AAC1D,EAAA,MAAM,KAAA,GAAQ,YAAY,cAAc,CAAA;AACxC,EAAA,MAAM,MAAA,GAAS,sBAAsB,QAAQ,CAAA;AAC7C,EAAA,MAAM,YAAA,GACJ,QAAQ,QAAA,EAAU,MAAA,IAAU,OAAO,IAAA,IAAQ,WAAA,CAAY,UAAU,MAAM,CAAA;AACzE,EAAA,IAAI,aAAA,GAAgB,wBAAA,CAAyB,YAAA,EAAc,MAAM,CAAA;AACjE,EAAA,MAAM,YAAY,MAAA,CAAO,WAAA;AAAA,IACvB,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAA,CAAE,MAAA;AAAA,MACjC,CAAC,CAAC,EAAE,CAAA,KAAM,EAAA,KAAO;AAAA;AACnB,GACF;AACA,EAAA,MAAM,QAAA,GAAW,KAAA,GACbH,kBAAA,CAAc,KAAA,CAAM,UAAA,EAAY,EAAE,UAAA,EAAY,IAAA,EAAM,CAAA,GACpDA,kBAAA,CAAc,MAAM,CAAA;AACxB,EAAA,IACE,QAAA,CAAS,OAAO,MAAA,IAChB,QAAA,CAAS,SAAS,MAAA,IAClB,CAACG,UAAA,CAAM,QAAA,CAAS,QAAQ,CAAA;AAExB,IAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAC3D,EAAA,IAAI,CAAC,KAAA,EAAO,QAAA,CAAS,QAAA,CAAS,IAAA,GAAO,KAAA;AACrC,EAAA,IAAI,OAAA,GAAU,KAAA;AACd,EAAA,MAAM,WAAoB,QAAA,CAAS,IAAA,CAAK,EAAE,aAAA,EAAe,KAAK,CAAA;AAC9D,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,KAAA,CAAM,EAAE,CAAC,CAAA;AACzD,EAAA,MAAM,gBAAqC,EAAC;AAC5C,EAAA,IAAI,MAAA,CAAO,QAAQ,CAAA,EAAG;AACpB,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAClD,MAAA,IACE,CAAC,SAAA,CAAU,GAAA,CAAI,EAAE,CAAA,IACjB,OAAO,KAAK,CAAA,IACZ,OAAO,KAAA,CAAM,YAAY,QAAA,IACzB,EAAA,KAAO,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,EAC3B;AACA,QAAA,QAAA,CAAS,OAAO,EAAE,CAAA;AAClB,QAAA,OAAA,GAAU,IAAA;AACV,QAAA,aAAA,CAAc,IAAA,CAAK;AAAA,UACjB,EAAA;AAAA,UACA,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,WAAW,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,GAAW,MAAM,SAAA,GAAY,EAAA;AAAA,UACnE,KAAA,EAAO,4BAAA;AAAA,UACP,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACA,EAAA,aAAA,GAAgB,wBAAA,CAAyB,eAAe,aAAa,CAAA;AACrE,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAQ,CAAA,IAAK,MAAA,CAAO,SAAS,GAAG,CAAA,GAAI,QAAA,CAAS,GAAA,GAAM,EAAC;AAC1E,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,GAAG,MAAA;AAAA,IACH,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,OAAO,QAAA,IAAY;AAAA,MAC3B,IAAA,EAAM,SAAS,UAAA,CAAW,KAAA;AAAA,MAC1B,OAAA,EAAS;AAAA;AACX,GACF;AACA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ;AAAA,IACxC,GAAA,EAAK,QAAA;AAAA,IACL,IAAA,EAAM,uBAAA;AAAA,MACJ,MAAA,CAAO,QAAQ,CAAA,GAAI,QAAA,CAAS,IAAA,GAAO,MAAA;AAAA,MACnC,6BAAA,CAA8B,SAAS,UAAU;AAAA,KACnD;AAAA,IACA,QAAA,EAAU,SAAA;AAAA,IACV,qBAAqB,QAAA,CAAS;AAAA,GAC/B,CAAA,EAAG;AACF,IAAA,OAAA,GAAU,cAAc,QAAA,EAAU,CAAC,GAAG,CAAA,EAAG,KAAK,CAAA,IAAK,OAAA;AAAA,EACrD;AACA,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,WAAW,MAAA,CAAO,QAAQ,IAAI,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA,GAAI,MAAA;AACzD,IAAA,OAAA,GACE,aAAA,CAAc,QAAA,EAAU,CAAC,KAAA,CAAM,EAAE,CAAA,EAAG;AAAA,MAClC,GAAI,MAAA,CAAO,QAAQ,CAAA,GAAI,WAAW,EAAC;AAAA,MACnC,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,KAAA,EAAO,cAAA,CAAe,SAAA,CAAU,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,MAC9C,SAAS,KAAA,CAAM;AAAA,KAChB,CAAA,IAAK,OAAA;AAAA,EACV;AACA,EAAA,MAAM,UAAU,KAAA,EAAO,OAAA,CAAQ,QAAA,CAAS,MAAM,IAAI,MAAA,GAAS,IAAA;AAC3D,EAAA,IAAI,KAAA,IAAS,CAAC,OAAA,EAAS;AACrB,IAAA,MAAM,QAAA,GACJ,iBAAiB,CAAC,KAAA,CAAM,kBAAkB,QAAA,CAAS,IAAI,IAAI,OAAA,GAAU,EAAA;AACvE,IAAA,OAAO,GAAG,KAAA,CAAM,iBAAiB,CAAA,EAAG,QAAQ,GAAG,aAAa,CAAA,CAAA;AAAA,EAC9D;AACA,EAAA,MAAME,MAAA,GAAO,QAAA,CAAS,QAAA,CAAS,EAAE,SAAA,EAAW,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,OAAO,CAAA;AACvE,EAAA,IAAI,OAAA,GAAU,KAAA,EAAO,OAAA,IAAW,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA;AAC7C,EAAA,IAAI,iBAAiB,CAAC,OAAA,CAAQ,QAAA,CAAS,IAAI,GAAG,OAAA,IAAW,OAAA;AACzD,EAAA,OAAO,CAAA,EAAG,KAAA,EAAO,OAAA,IAAW,CAAA,GAAA,EAAM,OAAO,CAAA,CAAE,CAAA,EAAGA,MAAI,CAAA,EAAG,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA;AAC9E;AAOA,eAAsB,mBAAmB,MAAA,EAKtC;AACD,EAAA,IAAI,MAAA,GAAS,kBAAkB,MAAM,CAAA;AACrC,EAAA,IAAI,MAAA,GAAS,qBAAA,CAAsB,MAAA,CAAO,WAAA,IAAe,EAAE,CAAA;AAC3D,EAAA,IAAI,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,QAAA,EAAU;AAIxC,IAAA,MAAM,EAAE,uBAAA,EAAAC,wBAAAA,EAAwB,GAAI,MAAM,OAAO,sBAAS,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAWA,wBAAAA,CAAwB,MAAA,CAAO,UAAA,EAAY;AAAA,MAC1D,GAAG,MAAA,CAAO,QAAA;AAAA,MACV,CAAC,2BAA2B,GAAG,yBAAA,CAA0B,MAAM;AAAA,KAChE,CAAA;AACD,IAAA,MAAA,GAAS,iBAAA,CAAkB,SAAS,GAAG,CAAA;AACvC,IAAA,MAAM,YAAY,IAAI,GAAA;AAAA,MACpB,qBAAA,CAAsB,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,UAAU,CAAC,KAAA,CAAM,OAAA,EAAS,KAAK,CAAC;AAAA,KACvE;AACA,IAAA,MAAA,GAAS,qBAAA,CAAsB,OAAO,WAAA,IAAe,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACvE,GAAG,KAAA;AAAA,MACH,SAAS,SAAA,CAAU,GAAA,CAAI,MAAM,OAAO,CAAA,EAAG,WAAW,KAAA,CAAM,OAAA;AAAA,MACxD,KAAA,EACE,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA,EAAG,KAAA,IAC9B,CAAC,cAAA,CAAe,MAAA,CAAO,QAAA,GAAW,KAAA,CAAM,OAAO,GAAG,IAAI;AAAA,KAC1D,CAAE,CAAA;AAAA,EACJ,CAAA,MAAA,IAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAoB;AACtC,IAAA,MAAM,UAAA,GAAa,CAAC,YAAA,KAAgC;AAClD,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,EAAG;AAClC,MAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,QAAA,IAAI,CAAC,MAAA,CAAO,KAAK,CAAA,EAAG;AACpB,QAAA,IAAI,OAAO,KAAA,CAAM,EAAA,KAAO,QAAA,IAAY,OAAO,MAAM,IAAA,KAAS,QAAA;AACxD,UAAA,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,KAAA,CAAM,IAAI,CAAA;AAChC,QAAA,UAAA,CAAW,MAAM,MAAM,CAAA;AAAA,MACzB;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,IAAA,EAAM,MAAM,OAAA,CAAQ,CAAC,SAAS,UAAA,CAAW,IAAA,CAAK,MAAM,CAAC,CAAA;AAC5D,IAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AACxB,IAAA,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AAC7B,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,GAAc,KAAA,CAAM,EAAE,CAAA;AAC5C,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AACrC,MAAA,MAAM,KAAA,GAAQ,CAAC,cAAA,CAAe,MAAA,EAAQ,IAAI,CAAA;AAC1C,MAAA,IACE,CAAC,MAAA,IACD,CAAC,MAAA,CAAO,MAAM,CAAA,IACd,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,KAAK,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,cAAA,CAAe,MAAM,CAAC,CAAA;AAEtE,QAAA,OAAO,EAAE,GAAG,KAAA,EAAO,KAAA,EAAM;AAC3B,MAAA,MAAM,UAAUR,oBAAA,CAAa;AAAA,QAC3B,GAAG,MAAA;AAAA,QACH,IAAA,EAAM,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,OAAO;AAAA,OAC9B,CAAA;AACD,MAAA,MAAA,CAAO,YAAY,IAAA,CAAK;AAAA,QACtB,QAAA,EAAU,SAAA;AAAA,QACV,IAAA,EAAM,UAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,OAAA,EAAS,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,4EAAA;AAAA,OACxB,CAAA;AACD,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,OAAA,EAAS,QAAQ,IAAA,EAAK,GAAI,OAAA,GAAU,QAAA,EAAK,KAAA,EAAM;AAAA,IACpE,CAAC,CAAA;AAAA,EACH;AACA,EAAA,MAAM,IAAA,GAAO,wBAAA,CAAyB,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAKzD,EAAA,MAAM,QAAA,GAAW,OAAO,iBAAA,IAAqB,gBAAA;AAC7C,EAAA,MAAM,EAAE,GAAA,EAAK,IAAA,EAAK,GAAI,MAAMS,cAAA;AAAA,IAC1B,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,IAClB,EAAC;AAAA,IACD;AAAA,MACE,QAAQ,EAAE,IAAA,EAAM,0BAA0B,MAAA,EAAQ,CAAC,YAAY,OAAA,EAAQ;AAAA,MACvE,QAAA,EAAUC,uBAAA;AAAA,MACV,UAAA,EAAY;AAAA;AACd,GACF;AACA,EAAA,OAAO,EAAE,GAAA,EAAK,IAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,OAAO,WAAA,EAAY;AAC9D;;;ACv5BA,SAASC,QAAO,KAAA,EAAkD;AAChE,EAAA,OAAO,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAASC,UAAS,KAAA,EAAiC;AACjD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA;AAC5D;AAEA,SAAS,YAAY,KAAA,EAAiC;AACpD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,KAAK,KAAA,IAAS,CAAA;AACzE;AAEA,SAAS,UAAU,MAAA,EAAqC;AACtD,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,MAAA,CAAO,IAAA,IAAQ,OAAO,MAAA;AACzD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAcA,IAAM,MAAA,GAAsB;AAAA,EAC1B,EAAE,KAAK,OAAA,EAAS,KAAA,EAAO,SAAS,IAAA,EAAM,MAAA,EAAQ,MAAM,QAAA,EAAS;AAAA,EAC7D;AAAA,IACE,GAAA,EAAK,iBAAA;AAAA,IACL,KAAA,EAAO,kBAAA;AAAA,IACP,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,EAAE,KAAK,aAAA,EAAe,KAAA,EAAO,eAAe,IAAA,EAAM,KAAA,EAAO,MAAM,QAAA,EAAS;AAAA,EACxE;AAAA,IACE,GAAA,EAAK,kBAAA;AAAA,IACL,KAAA,EAAO,mBAAA;AAAA,IACP,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,EAAE,KAAK,QAAA,EAAU,KAAA,EAAO,UAAU,IAAA,EAAM,IAAA,EAAM,MAAM,QAAA,EAAS;AAAA,EAC7D,EAAE,KAAK,QAAA,EAAU,KAAA,EAAO,UAAU,IAAA,EAAM,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,EAC9D,EAAE,KAAK,MAAA,EAAQ,KAAA,EAAO,cAAc,IAAA,EAAM,SAAA,EAAW,MAAM,SAAA;AAC7D,CAAA;AACA,IAAM,UAAA,GAAa;AAAA,EACjB,UAAA;AAAA,EACA,WAAA;AAAA,EACA,GAAG,MAAA,CAAO,GAAA,CAAI,CAAC,EAAE,GAAA,OAAU,GAAG;AAChC,CAAA;AAEA,SAAS,KAAA,CAAM,MAAc,OAAA,EAAgC;AAC3D,EAAA,OAAO,EAAE,MAAA,EAAQ,kBAAA,EAAoB,IAAA,EAAM,OAAA,EAAQ;AACrD;AAGO,SAAS,qBAAqB,MAAA,EAAuC;AAC1E,EAAA,MAAM,MAAA,GAAS,UAAU,MAAM,CAAA;AAC/B,EAAA,IAAI,CAACD,QAAO,MAAM,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,QAAQ,CAAA;AACnD,IAAA,OAAO,EAAE,QAAA,EAAU,EAAC,EAAE;AACxB,EAAA,MAAM,QAAA,GAAW,OAAO,QAAA,CACrB,MAAA;AAAA,IACC,CAAC,OAAA,KACCA,OAAAA,CAAO,OAAO,CAAA,IAAKC,SAAAA,CAAS,QAAQ,EAAE;AAAA,GAC1C,CACC,GAAA,CAAI,CAAC,OAAA,KAAY;AAChB,IAAA,MAAM,IAAA,GAA8B,EAAE,EAAA,EAAI,OAAA,CAAQ,EAAA,EAAa;AAC/D,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,IAAI,OAAO,QAAQ,GAAG,CAAA,KAAM,YAAY,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAC,CAAA;AAClE,QAAA,IAAA,CAAK,GAAG,CAAA,GAAI,OAAA,CAAQ,GAAG,CAAA;AAAA,IAC3B;AACA,IAAA,KAAA,MAAW,GAAA,IAAO,CAAC,YAAA,EAAc,UAAA,EAAY,MAAM,CAAA,EAAY;AAC7D,MAAA,IAAI,OAAO,QAAQ,GAAG,CAAA,KAAM,UAAU,IAAA,CAAK,GAAG,CAAA,GAAI,OAAA,CAAQ,GAAG,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACH,EAAA,MAAM,cAAc,KAAA,CAAM,OAAA,CAAQ,OAAO,WAAW,CAAA,GAChD,OAAO,WAAA,CAAY,MAAA;AAAA,IACjB,CAAC,KAAA,KACCD,OAAAA,CAAO,KAAK,CAAA,IACZC,UAAS,KAAA,CAAM,SAAS,CAAA,IACxBA,SAAAA,CAAS,MAAM,IAAI,CAAA,IACnB,UAAA,CAAW,QAAA,CAAS,MAAM,GAAsC;AAAA,GACpE,GACA,MAAA;AAEJ,EAAA,KAAA,MAAW,KAAA,IAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA,GAChD,MAAA,CAAO,WAAA,GACP,EAAC,EAAG;AACN,IAAA,IACE,CAACD,OAAAA,CAAO,KAAK,CAAA,IACb,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,IAC3B,CAAC,UAAA,CAAW,QAAA,CAAS,KAAA,CAAM,GAAsC,CAAA;AAEjE,MAAA;AACF,IAAA,MAAM,OAAA,GAAU,SAAS,IAAA,CAAK,CAAC,EAAE,EAAA,EAAG,KAAM,EAAA,KAAO,KAAA,CAAM,SAAS,CAAA;AAChE,IAAA,IAAI,OAAA,EAAS,OAAO,OAAA,CAAQ,KAAA,CAAM,GAAsC,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,cAAc,EAAE,QAAA,EAAU,WAAA,EAAY,GAAI,EAAE,QAAA,EAAS;AAC9D;AAGO,SAAS,uBAAA,CACd,KAAA,EACA,OAAA,GAAU,EAAA,EACV,YAAY,EAAA,EACgB;AAC5B,EAAA,MAAM,SAAqC,EAAC;AAC5C,EAAA,MAAM,MAAM,CACV,OAAA,EACA,IAAA,EACA,SAAA,EACA,OAAyC,eAAA,KACtC;AACH,IAAA,MAAA,CAAO,IAAA,CAAK,EAAE,SAAA,EAAW,OAAA,EAAS,MAAM,OAAA,EAAS,IAAA,EAAM,WAAW,CAAA;AAAA,EACpE,CAAA;AACA,EAAA,IAAI,CAACA,QAAO,KAAK,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA,EAAG;AACpD,IAAA,GAAA,CAAI,yCAAyC,UAAU,CAAA;AACvD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AACpC,IAAA,IAAI,CAAC,CAAC,UAAA,EAAY,aAAa,CAAA,CAAE,SAAS,GAAG,CAAA;AAC3C,MAAA,GAAA,CAAI,CAAA,wBAAA,EAA2B,GAAG,CAAA,CAAA,CAAA,EAAK,GAAG,CAAA;AAAA,EAC9C;AACA,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAY;AAC5B,EAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,EAAkB,KAAA,KAAkB;AACpD,IAAA,MAAM,IAAA,GAAO,YAAY,KAAK,CAAA,CAAA;AAC9B,IAAA,IAAI,CAACA,QAAO,OAAO,CAAA,IAAK,CAACC,SAAAA,CAAS,OAAA,CAAQ,EAAE,CAAA,EAAG;AAC7C,MAAA,GAAA,CAAI,4CAAA,EAA8C,CAAA,EAAG,IAAI,CAAA,GAAA,CAAK,CAAA;AAC9D,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAK,OAAA,CAAQ,EAAA;AACnB,IAAA,IAAI,GAAA,CAAI,IAAI,EAAE,CAAA,MAAO,mCAAA,EAAqC,CAAA,EAAG,IAAI,CAAA,GAAA,CAAA,EAAO,EAAE,CAAA;AAC1E,IAAA,GAAA,CAAI,IAAI,EAAE,CAAA;AACV,IAAA,MAAM,WAAA,uBAAkB,GAAA,CAAY;AAAA,MAClC,IAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAG;AAAA,KACJ,CAAA;AACD,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAG;AACtC,MAAA,IAAI,CAAC,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AACtB,QAAA,GAAA,CAAI,CAAA,uBAAA,EAA0B,GAAG,CAAA,CAAA,CAAA,EAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,IAAI,EAAE,CAAA;AAAA,IAC9D;AACA,IAAA,IAAI,CAAC,WAAW,IAAA,CAAK,CAAC,QAAQ,OAAA,CAAQ,GAAG,CAAA,KAAM,MAAS,CAAA,EAAG;AACzD,MAAA,GAAA,CAAI,qDAAA,EAAuD,MAAM,EAAE,CAAA;AAAA,IACrE;AACA,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,KAAM,MAAA,IAAa,CAAC,WAAA,CAAY,OAAA,CAAQ,GAAG,CAAC,CAAA,EAAG;AAC5D,QAAA,GAAA;AAAA,UACE,GAAG,GAAG,CAAA,qCAAA,CAAA;AAAA,UACN,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AAAA,UACd,EAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,IACG,OAAA,CAAQ,QAAA,KAAa,MAAA,MACrB,OAAA,CAAQ,cAAc,MAAA,CAAA,EACvB;AACA,MAAA,GAAA;AAAA,QACE,yEAAA;AAAA,QACA,IAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,IACE,YAAY,OAAA,CAAQ,gBAAgB,CAAA,IACpC,OAAA,CAAQ,mBAAmB,GAAA,EAC3B;AACA,MAAA,GAAA;AAAA,QACE,sDAAA;AAAA,QACA,GAAG,IAAI,CAAA,iBAAA,CAAA;AAAA,QACP,EAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,YAAY,OAAA,CAAQ,IAAI,CAAA,IAAK,OAAA,CAAQ,OAAO,EAAA,EAAI;AAClD,MAAA,GAAA;AAAA,QACE,sCAAA;AAAA,QACA,GAAG,IAAI,CAAA,KAAA,CAAA;AAAA,QACP,EAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,KAAA,MAAW,GAAA,IAAO,CAAC,YAAA,EAAc,UAAA,EAAY,MAAM,CAAA,EAAG;AACpD,MAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,KAAM,MAAA,IAAa,OAAO,OAAA,CAAQ,GAAG,MAAM,QAAA,EAAU;AAClE,QAAA,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,kBAAA,CAAA,EAAsB,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,IAAI,EAAE,CAAA;AAAA,MACtD;AAAA,IACF;AACA,IAAA,IACEA,SAAAA,CAAS,QAAQ,UAAU,CAAA,KAC1B,CAAC,gCAAA,CAAiC,IAAA,CAAK,QAAQ,UAAU,CAAA,IACxD,CAACC,cAAA,CAAS,OAAA,CAAQ,QAAQ,UAAA,EAAY,EAAE,SAAS,IAAA,EAAM,EAAE,OAAA,CAAA,EAC3D;AACA,MAAA,GAAA;AAAA,QACE,8CAAA;AAAA,QACA,GAAG,IAAI,CAAA,WAAA,CAAA;AAAA,QACP;AAAA,OACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,IAAI,KAAA,CAAM,gBAAgB,MAAA,EAAW;AACnC,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,EAAG;AACrC,MAAA,GAAA;AAAA,QACE,uDAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAClC,MAAA,KAAA,CAAM,WAAA,CAAY,OAAA,CAAQ,CAAC,KAAA,EAAgB,KAAA,KAAkB;AAC3D,QAAA,MAAM,IAAA,GAAO,eAAe,KAAK,CAAA,CAAA;AACjC,QAAA,IACE,CAACF,OAAAA,CAAO,KAAK,KACb,CAACC,SAAAA,CAAS,MAAM,SAAS,CAAA,IACzB,CAACA,SAAAA,CAAS,KAAA,CAAM,IAAI,CAAA,IACpB,CAAC,WAAW,QAAA,CAAS,KAAA,CAAM,GAAsC,CAAA,EACjE;AACA,UAAA,GAAA;AAAA,YACE,yFAAA;AAAA,YACA,IAAA;AAAA,YACAD,OAAAA,CAAO,KAAK,CAAA,IAAK,OAAO,MAAM,SAAA,KAAc,QAAA,GACxC,MAAM,SAAA,GACN;AAAA,WACN;AACA,UAAA,GAAA;AAAA,YACE,4DAAA;AAAA,YACA,IAAA;AAAA,YACAA,OAAAA,CAAO,KAAK,CAAA,IAAK,OAAO,MAAM,SAAA,KAAc,QAAA,GACxC,MAAM,SAAA,GACN,MAAA;AAAA,YACJ;AAAA,WACF;AACA,UAAA;AAAA,QACF;AACA,QAAA,MAAM,YAAY,KAAA,CAAM,SAAA;AACxB,QAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,SAAS,CAAA;AACpB,UAAA,GAAA;AAAA,YACE,sDAAA;AAAA,YACA,GAAG,IAAI,CAAA,UAAA,CAAA;AAAA,YACP;AAAA,WACF;AACF,QAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,EAAG;AACpC,UAAA,IAAI,CAAC,CAAC,WAAA,EAAa,OAAO,MAAM,CAAA,CAAE,SAAS,GAAG,CAAA;AAC5C,YAAA,GAAA;AAAA,cACE,qCAAqC,GAAG,CAAA,CAAA,CAAA;AAAA,cACxC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AAAA,cACd;AAAA,aACF;AAAA,QACJ;AACA,QAAA,MAAM,WAAW,IAAA,CAAK,SAAA,CAAU,CAAC,SAAA,EAAW,KAAA,CAAM,GAAG,CAAC,CAAA;AACtD,QAAA,IAAI,SAAA,CAAU,IAAI,QAAQ,CAAA;AACxB,UAAA,GAAA;AAAA,YACE,sDAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACF;AACF,QAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,QAAA,MAAM,eAAe,QAAA,CAAS,SAAA;AAAA,UAC5B,CAAC,OAAA,KAAqBA,OAAAA,CAAO,OAAO,CAAA,IAAK,QAAQ,EAAA,KAAO;AAAA,SAC1D;AACA,QAAA,GAAA;AAAA,UACE,CAAA,oBAAA,EAAuB,MAAM,GAAG,CAAA,qBAAA,CAAA;AAAA,UAChC,CAAA,SAAA,EAAY,YAAY,CAAA,CAAA,EAAI,KAAA,CAAM,GAAG,CAAA,CAAA;AAAA,UACrC,SAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,eAAA,CACP,OACA,IAAA,EACS;AACT,EAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACV,CAAC,QAAQ,KAAA,CAAM,GAAG,MAAM,MAAA,IAAa,OAAO,KAAA,CAAM,GAAG,CAAA,KAAM;AAAA,GAC7D;AACF;AAEA,SAAS,UAAU,KAAA,EAAyB;AAC1C,EAAA,OACE,UAAU,MAAA,IACTA,OAAAA,CAAO,KAAK,CAAA,IACXC,UAAS,KAAA,CAAM,MAAM,CAAA,IACrBA,SAAAA,CAAS,MAAM,IAAI,CAAA,IACnB,gBAAgB,KAAA,EAAO,CAAC,SAAS,CAAC,CAAA;AAExC;AAKA,SAAS,sBAAsB,KAAA,EAAyB;AACtD,EAAA,OACED,OAAAA,CAAO,KAAK,CAAA,IACZ,OAAO,MAAM,KAAA,KAAU,SAAA,KACtB,KAAA,CAAM,MAAA,KAAW,UAChB,CAAC,eAAA,EAAiB,WAAA,EAAa,QAAA,EAAU,aAAa,CAAA,CAAE,QAAA;AAAA,IACtD,KAAA,CAAM;AAAA,SAET,KAAA,CAAM,UAAA,KAAe,MAAA,IACpB,CAAC,OAAO,QAAA,EAAU,MAAM,CAAA,CAAE,QAAA,CAAS,MAAM,UAAoB,CAAA,CAAA,IAC/D,gBAAgB,KAAA,EAAO,CAAC,MAAM,CAAC,CAAA;AAEnC;AAEA,SAAS,iBAAiB,KAAA,EAAyB;AACjD,EAAA,IAAI,CAACA,OAAAA,CAAO,KAAK,CAAA,EAAG,OAAO,KAAA;AAC3B,EAAA,IACE,KAAA,CAAM,OAAA,KAAY,MAAA,IAClB,CAAC,CAAC,WAAA,EAAa,KAAA,EAAO,QAAA,EAAU,MAAM,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,OAAiB,CAAA,EACxE;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,MAAA,EAAW,OAAO,IAAA;AACvC,EAAA,IAAI,CAACA,OAAAA,CAAO,KAAA,CAAM,MAAM,GAAG,OAAO,KAAA;AAClC,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,CAAE,KAAA;AAAA,IAClC,CAAC,CAAC,KAAA,EAAO,gBAAgB,CAAA,KACvB,CAAC,QAAA,EAAU,OAAA,EAAS,UAAA,EAAY,YAAA,EAAc,UAAU,CAAA,CAAE,QAAA;AAAA,MACxD;AAAA,KACF,IAAK,sBAAsB,gBAAgB;AAAA,GAC/C;AACF;AAEA,SAAS,gBAAgB,KAAA,EAAqC;AAC5D,EAAA,OACEA,OAAAA,CAAO,KAAK,CAAA,IACZC,SAAAA,CAAS,KAAA,CAAM,EAAE,CAAA,IACjBA,SAAAA,CAAS,KAAA,CAAM,IAAI,CAAA,IACnB;AAAA,IACE,cAAA;AAAA,IACA,QAAA;AAAA,IACA,qBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,IACA,QAAA,CAAS,KAAA,CAAM,MAAgB,CAAA,IACjC,gBAAgB,KAAA,EAAO;AAAA,IACrB,KAAA;AAAA,IACA,kBAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAA,KACA,KAAA,CAAM,OAAA,KAAY,MAAA,IAAa,OAAO,KAAA,CAAM,OAAA,KAAY,SAAA,CAAA,KACxD,KAAA,CAAM,GAAA,KAAQ,MAAA,IAAa,OAAO,KAAA,CAAM,GAAA,KAAQ,SAAA,CAAA,KAChD,KAAA,CAAM,YAAA,KAAiB,MAAA,IACtB,CAAC,GAAA,EAAK,GAAG,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,YAAsB,CAAA,CAAA,IAClD,SAAA,CAAU,MAAM,IAAI,CAAA;AAExB;AAEA,SAAS,aAAa,KAAA,EAAkC;AACtD,EAAA,OACED,OAAAA,CAAO,KAAK,CAAA,IACZC,SAAAA,CAAS,KAAA,CAAM,EAAE,CAAA,IACjBA,SAAAA,CAAS,KAAA,CAAM,QAAQ,CAAA,IACvB,eAAA,CAAgB,KAAA,EAAO,CAAC,UAAA,EAAY,WAAA,EAAa,MAAM,CAAC,CAAA,KACvD,KAAA,CAAM,IAAA,KAAS,MAAA,IACd,CAAC,MAAA,EAAQ,MAAA,EAAQ,eAAA,EAAiB,OAAO,CAAA,CAAE,QAAA;AAAA,IACzC,KAAA,CAAM;AAAA,GACR,CAAA,KACD,KAAA,CAAM,IAAA,KAAS,MAAA,IACd,CAAC,SAAA,EAAW,aAAa,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,IAAc,CAAA,CAAA,KACzD,KAAA,CAAM,aAAa,MAAA,IAClB,CAAC,MAAA,EAAQ,UAAA,EAAY,QAAQ,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,QAAkB,CAAA,CAAA,KACjE,KAAA,CAAM,QAAA,KAAa,MAAA,IAAa,OAAO,KAAA,CAAM,QAAA,KAAa,SAAA,CAAA,IAC3D,SAAA,CAAU,MAAM,IAAI,CAAA;AAExB;AAEA,SAAS,YAAA,CAAa,QAAmC,GAAA,EAAsB;AAC7E,EAAA,OAAO,IAAI,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,GAAG,CAAC,CAAC,CAAA,CAAE,IAAA,KAAS,MAAA,CAAO,MAAA;AACpE;AAGO,SAAS,oBAAoB,KAAA,EAAyC;AAC3E,EAAA,OACED,OAAAA,CAAO,KAAK,CAAA,IACZC,SAAAA,CAAS,MAAM,SAAS,CAAA,IACxBA,SAAAA,CAAS,KAAA,CAAM,WAAW,CAAA,IAC1B,eAAA,CAAgB,KAAA,EAAO,CAAC,MAAM,CAAC,CAAA;AAEnC;AAEO,SAAS,2BAAA,CACd,OACA,OAAA,GAAU,EAAA,EACV,YAAY,EAAA,EACZ,gBAAA,GAAgD,EAAC,EACrB;AAC5B,EAAA,MAAM,SAAqC,EAAC;AAC5C,EAAA,MAAM,GAAA,GAAM,CAAC,OAAA,EAAiB,IAAA,KAC5B,OAAO,IAAA,CAAK;AAAA,IACV,SAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA,EAAM,eAAA;AAAA,IACN,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH,EAAA,IACE,CAACD,QAAO,KAAK,CAAA,IACb,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,QAAQ,CAAA,IAC7B,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,KAAK,CAAA,IAC1B,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,EAC3B;AACA,IAAA,GAAA,CAAI,4DAA4D,CAAA;AAChE,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,WAAW,IAAI,GAAA;AAAA,IACnB,gBAAA,CAAiB,GAAA,CAAI,CAAC,OAAA,KAAY;AAAA,MAChC,OAAA,CAAQ,SAAA;AAAA,MACR,IAAI,IAAI,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAC,SAAA,KAAc,SAAA,CAAU,EAAE,CAAC;AAAA,KAC5D;AAAA,GACH;AACA,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAAY;AACxC,EAAA,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,EAAkB,KAAA,KAAkB;AAC1D,IAAA,MAAM,IAAA,GAAO,YAAY,KAAK,CAAA,CAAA;AAC9B,IAAA,IACE,CAACA,OAAAA,CAAO,OAAO,CAAA,IACf,CAACC,SAAAA,CAAS,OAAA,CAAQ,SAAS,CAAA,IAC3B,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,KACjC,CAAC;AAAA,MACC,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF,CAAE,QAAA,CAAS,OAAA,CAAQ,cAAwB,CAAA,EAC3C;AACA,MAAA,GAAA;AAAA,QACE,oEAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,eAAA,CAAgB,GAAA,CAAI,OAAA,CAAQ,SAAS,CAAA;AACvC,MAAA,GAAA,CAAI,6BAAA,EAA+B,CAAA,EAAG,IAAI,CAAA,UAAA,CAAY,CAAA;AACxD,IAAA,eAAA,CAAgB,GAAA,CAAI,QAAQ,SAAS,CAAA;AACrC,IAAA,IACE,OAAA,CAAQ,aAAA,KAAkB,MAAA,KACzB,CAAC,KAAA,CAAM,QAAQ,OAAA,CAAQ,aAAa,CAAA,IACnC,OAAA,CAAQ,aAAA,CAAc,IAAA;AAAA,MACpB,CAAC,YAAA,KACC,CAACD,OAAAA,CAAO,YAAY,CAAA,IACpB,CAACC,SAAAA,CAAS,YAAA,CAAa,SAAS,CAAA,IAChC,CAAC;AAAA,QACC,WAAA;AAAA,QACA,cAAA;AAAA,QACA,sBAAA;AAAA,QACA;AAAA,OACF,CAAE,QAAA,CAAS,YAAA,CAAa,IAAc,CAAA,IACtC,CAAC,eAAA,CAAgB,YAAA,EAAc,CAAC,SAAS,CAAC;AAAA,KAC9C,CAAA,EACF;AACA,MAAA,GAAA;AAAA,QACE,0FAAA;AAAA,QACA,GAAG,IAAI,CAAA,cAAA;AAAA,OACT;AAAA,IACF;AACA,IAAA,IACE,OAAA,CAAQ,YAAA,KAAiB,MAAA,KACxB,CAAC,KAAA,CAAM,QAAQ,OAAA,CAAQ,YAAY,CAAA,IAClC,OAAA,CAAQ,YAAA,CAAa,IAAA;AAAA,MACnB,CAAC,WAAA,KACC,CAACD,OAAAA,CAAO,WAAW,CAAA,IACnB,CAACC,SAAAA,CAAS,WAAA,CAAY,EAAE,CAAA,IACxB,CAACA,SAAAA,CAAS,YAAY,IAAI,CAAA,IAC1B,CAAC,eAAA,CAAgB,WAAA,CAAY,IAAI,CAAA,IACjC,CAAC,eAAA,CAAgB,WAAA,EAAa,CAAC,QAAQ,CAAC;AAAA,KAC5C,CAAA,EACF;AACA,MAAA,GAAA;AAAA,QACE,gGAAA;AAAA,QACA,GAAG,IAAI,CAAA,aAAA;AAAA,OACT;AAAA,IACF;AACA,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AACrC,IAAA,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,SAAA,EAAW,YAAY,CAAA;AAC5C,IAAA,OAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,EAAoB,cAAA,KAA2B;AACzE,MAAA,MAAM,aAAA,GAAgB,CAAA,EAAG,IAAI,CAAA,YAAA,EAAe,cAAc,CAAA,CAAA;AAC1D,MAAA,IACE,CAACD,OAAAA,CAAO,SAAS,KACjB,CAACC,SAAAA,CAAS,UAAU,EAAE,CAAA,IACtB,CAACA,SAAAA,CAAS,SAAA,CAAU,IAAI,CAAA,IACxB,CAAC,gBAAgB,SAAA,CAAU,IAAI,KAC/B,CAAC;AAAA,QACC,aAAA;AAAA,QACA,aAAA;AAAA,QACA,cAAA;AAAA,QACA,WAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF,CAAE,QAAA,CAAS,SAAA,CAAU,kBAA4B,CAAA,IACjD,CAAC,eAAA,CAAgB,SAAA,EAAW,CAAC,MAAM,CAAC,CAAA,EACpC;AACA,QAAA,GAAA;AAAA,UACE,uFAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAI,YAAA,CAAa,GAAA,CAAI,SAAA,CAAU,EAAE,CAAA;AAC/B,QAAA,GAAA;AAAA,UACE,gDAAA;AAAA,UACA,GAAG,aAAa,CAAA,GAAA;AAAA,SAClB;AACF,MAAA,YAAA,CAAa,GAAA,CAAI,UAAU,EAAE,CAAA;AAC7B,MAAA,IACE,SAAA,CAAU,eAAe,MAAA,IACzB,CAAC,CAAC,YAAA,EAAc,UAAA,EAAY,aAAA,EAAe,eAAe,CAAA,CAAE,QAAA;AAAA,QAC1D,SAAA,CAAU;AAAA,OACZ,EACA;AACA,QAAA,GAAA;AAAA,UACE,kFAAA;AAAA,UACA,GAAG,aAAa,CAAA,WAAA;AAAA,SAClB;AAAA,MACF;AACA,MAAA,IACE,UAAU,MAAA,KAAW,MAAA,KACpB,CAAC,KAAA,CAAM,OAAA,CAAQ,UAAU,MAAM,CAAA,IAC9B,SAAA,CAAU,MAAA,CAAO,KAAK,CAAC,MAAA,KAAW,CAAC,SAAA,CAAU,MAAM,CAAC,CAAA,CAAA,EACtD;AACA,QAAA,GAAA;AAAA,UACE,wDAAA;AAAA,UACA,GAAG,aAAa,CAAA,OAAA;AAAA,SAClB;AAAA,MACF;AACA,MAAA,IACE,UAAU,WAAA,KAAgB,MAAA,IAC1B,CAAC,gBAAA,CAAiB,SAAA,CAAU,WAAW,CAAA,EACvC;AACA,QAAA,GAAA;AAAA,UACE,4GAAA;AAAA,UACA,GAAG,aAAa,CAAA,YAAA;AAAA,SAClB;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAe,KAAA,KAAkB;AACpD,IAAA,MAAM,IAAA,GAAO,SAAS,KAAK,CAAA,CAAA;AAC3B,IAAA,IAAI,CAAC,mBAAA,CAAoB,IAAI,CAAA,EAAG;AAC9B,MAAA,GAAA,CAAI,uDAAuD,IAAI,CAAA;AAC/D,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAS,CAAA;AAC5B,MAAA,GAAA,CAAI,oCAAA,EAAsC,CAAA,EAAG,IAAI,CAAA,UAAA,CAAY,CAAA;AAC/D,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAS,CAAA;AAC1B,IAAA,IAAI,CAAC,SAAS,GAAA,CAAI,IAAA,CAAK,SAAS,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACxD,MAAA,GAAA;AAAA,QACE,sEAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;AACjC,EAAA,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAgB,KAAA,KAAkB;AACtD,IAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA,CAAA;AAC5B,IAAA,IACE,CAACD,QAAO,KAAK,CAAA,IACb,CAACC,SAAAA,CAAS,KAAA,CAAM,OAAO,CAAA,IACvB,CAACA,UAAS,KAAA,CAAM,OAAO,KACvB,CAAC,CAAC,cAAc,KAAA,EAAO,SAAA,EAAW,WAAA,EAAa,UAAU,CAAA,CAAE,QAAA;AAAA,MACzD,KAAA,CAAM;AAAA,KACR,IACA,CAAC,eAAA,CAAgB,KAAA,EAAO;AAAA,MACtB,WAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA,IACA,KAAA,CAAM,QAAA,KAAa,UAClB,CAAC,CAAC,SAAA,EAAW,QAAA,EAAU,MAAM,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,QAAkB,CAAA,EAClE;AACA,MAAA,GAAA;AAAA,QACE,mEAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA;AAC5B,MAAA,GAAA,CAAI,2BAAA,EAA6B,CAAA,EAAG,IAAI,CAAA,QAAA,CAAU,CAAA;AACpD,IAAA,QAAA,CAAS,GAAA,CAAI,MAAM,OAAO,CAAA;AAC1B,IAAA,IACE,KAAA,CAAM,cAAc,MAAA,IACpB,CAAC,SAAS,GAAA,CAAI,KAAA,CAAM,SAAmB,CAAA,EACvC;AACA,MAAA,GAAA;AAAA,QACE,yDAAA;AAAA,QACA,GAAG,IAAI,CAAA,UAAA;AAAA,OACT;AAAA,IACF;AACA,IAAA,IACE,KAAA,CAAM,IAAA,KAAS,MAAA,KACd,CAACD,OAAAA,CAAO,MAAM,IAAI,CAAA,IACjB,CAACC,SAAAA,CAAS,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,IAC3B,CAACA,SAAAA,CAAS,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,IAC7B,CAACA,SAAAA,CAAS,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,CAAA,EAC/B;AACA,MAAA,GAAA;AAAA,QACE,sDAAA;AAAA,QACA,GAAG,IAAI,CAAA,KAAA;AAAA,OACT;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,yBACd,MAAA,EAC0B;AAC1B,EAAA,MAAM,MAAA,GAAS,UAAU,MAAM,CAAA;AAC/B,EAAA,OAAO,2BAAA,CAA4B,MAAM,CAAA,CAAE,MAAA,KAAW,IACjD,MAAA,GACD,EAAE,QAAA,EAAU,IAAI,KAAA,EAAO,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAC5C;AAEA,SAAS,qBACP,MAAA,EACA,GAAA,EACA,SAAA,EACA,KAAA,EACA,SACA,SAAA,EAC4B;AAC5B,EAAA,MAAM,SAAqC,EAAC;AAC5C,EAAA,MAAM,GAAA,GAAM,CAAC,OAAA,EAAiB,IAAA,KAC5B,OAAO,IAAA,CAAK;AAAA,IACV,SAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA,EAAM,eAAA;AAAA,IACN,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH,EAAA,IAAI,CAACD,OAAAA,CAAO,MAAM,CAAA,IAAK,CAAC,MAAM,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAC,CAAA,EAAG;AAClD,IAAA,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,gBAAA,EAAmB,GAAG,WAAW,GAAG,CAAA;AAChD,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,OAAO,GAAG,CAAA;AACzB,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC9B,IAAA,IAAI,CAAC,UAAU,IAAI,CAAA;AACjB,MAAA,GAAA;AAAA,QACE,CAAA,QAAA,EAAW,GAAA,KAAQ,aAAA,GAAgB,YAAA,GAAe,SAAS,CAAA,QAAA,CAAA;AAAA,QAC3D,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,OACjB;AAAA,EACJ,CAAC,CAAA;AACD,EAAA,IAAI,OAAO,KAAA,CAAMA,OAAM,CAAA,IAAK,YAAA,CAAa,QAAQ,IAAI,CAAA;AACnD,IAAA,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,oBAAA,CAAA,EAAwB,GAAG,CAAA;AACzC,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,IACE,OAAO,gBAAA,KAAqB,MAAA,IAC5B,OAAO,MAAA,CAAO,qBAAqB,SAAA,EACnC;AACA,MAAA,GAAA;AAAA,QACE,iDAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,gBAAA,KAAqB,IAAA,IAAQ,MAAA,CAAO,SAAS,CAAA,EAAG;AACzD,MAAA,GAAA;AAAA,QACE,+DAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,gCAAA,CACd,KAAA,EACA,OAAA,GAAU,EAAA,EACV,YAAY,EAAA,EACgB;AAC5B,EAAA,OAAO,oBAAA;AAAA,IACL,KAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,6BAAA,CACd,KAAA,EACA,OAAA,GAAU,EAAA,EACV,YAAY,EAAA,EACgB;AAC5B,EAAA,OAAO,oBAAA;AAAA,IACL,KAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,2BAAA,CACd,KAAA,EACA,OAAA,GAAU,EAAA,EACV,YAAY,EAAA,EACgB;AAC5B,EAAA,OAAO,2BAAA;AAAA,IACL;AAAA,MACE,QAAA,EAAUA,OAAAA,CAAO,KAAK,CAAA,GAAI,MAAM,QAAA,GAAW,MAAA;AAAA,MAC3C,OAAO,EAAC;AAAA,MACR,QAAQ;AAAC,KACX;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAGO,SAAS,qBAAA,CACd,KAAA,EACA,OAAA,GAAU,EAAA,EACV,YAAY,EAAA,EACgB;AAC5B,EAAA,IAAI,CAACA,QAAO,KAAK,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,MAAM,CAAA;AAC/C,IAAA,OAAO;AAAA,MACL;AAAA,QACE,SAAA;AAAA,QACA,OAAA;AAAA,QACA,IAAA,EAAM,eAAA;AAAA,QACN,OAAA,EAAS,oCAAA;AAAA,QACT,IAAA,EAAM;AAAA;AACR,KACF;AACF,EAAA,MAAM,MAAM,IAAI,GAAA;AAAA,IACd,MAAM,MAAA,CAAO,OAAA;AAAA,MAAQ,CAAC,KAAA,KACpBA,OAAAA,CAAO,KAAK,CAAA,IAAKC,SAAAA,CAAS,KAAA,CAAM,SAAS,CAAA,GAAI,CAAC,KAAA,CAAM,SAAS,IAAI;AAAC;AACpE,GACF;AACA,EAAA,OAAO,2BAAA;AAAA,IACL;AAAA,MACE,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,GAAA,EAAK,CAAC,SAAA,MAAe;AAAA,QACxC,SAAA;AAAA,QACA,cAAA,EAAgB,QAAA;AAAA,QAChB,YAAY;AAAC,OACf,CAAE,CAAA;AAAA,MACF,OAAO,EAAC;AAAA,MACR,QAAQ,KAAA,CAAM;AAAA,KAChB;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,yBACd,MAAA,EAC0B;AAC1B,EAAA,MAAM,MAAA,GAAS,UAAU,MAAM,CAAA;AAC/B,EAAA,OAAO,2BAAA,CAA4B,MAAM,CAAA,CAAE,MAAA,KAAW,IACjD,MAAA,GACD,EAAE,QAAA,EAAU,EAAC,EAAE;AACrB;AAEO,SAAS,mBAAmB,MAAA,EAAqC;AACtE,EAAA,MAAM,MAAA,GAAS,UAAU,MAAM,CAAA;AAC/B,EAAA,OAAO,qBAAA,CAAsB,MAAM,CAAA,CAAE,MAAA,KAAW,IAC3C,MAAA,GACD,EAAE,MAAA,EAAQ,EAAC,EAAE;AACnB;AAEA,SAAS,eACP,OAAA,EACA,MAAA,EACA,OAAA,EACA,gBAAA,GAAgD,EAAC,EACrB;AAC5B,EAAA,IAAI,EAAE,OAAA,CAAQ,aAAA,IAAiB,IAAA,CAAA,SAAc,EAAC;AAC9C,EAAA,MAAM,SAAqC,EAAC;AAC5C,EAAA,MAAM,GAAA,GAAM,CAAC,IAAA,KACX,MAAA,CAAO,IAAA,CAAK;AAAA,IACV,WAAW,OAAA,CAAQ,EAAA;AAAA,IACnB,OAAA;AAAA,IACA,IAAA,EAAM,eAAA;AAAA,IACN,IAAA;AAAA,IACA,OAAA,EAAS,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,0CAAA;AAAA,GAC1B,CAAA;AACH,EAAA,MAAM,QAAQ,CAAC,IAAA,KAAkBD,QAAO,IAAI,CAAA,IAAK,UAAU,IAAI,CAAA;AAC/D,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,aAAA,IAAiB,OAAA,CAAQ,SAAS,WAAA,EAAa;AAClE,IAAA,MAAM,MAAM,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAC,CAAA;AAC3B,MAAA,MAAA,CAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAC,OAAO,KAAA,KAAU;AACpC,QAAA,IAAIA,OAAAA,CAAO,KAAK,CAAA,IAAK,CAAC,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA,EAAG,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,KAAA,CAAO,CAAA;AAAA,MACrE,CAAC,CAAA;AAAA,EACL,WAAW,OAAA,CAAQ,IAAA,KAAS,YAAA,IAAgB,OAAA,CAAQ,SAAS,YAAA,EAAc;AACzE,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA;AAC/B,MAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU;AACxC,QAAA,IAAI,CAACA,QAAO,KAAK,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA,EAAG;AACxD,QAAA,MAAM,SAAA,GAAYG,kCAAA;AAAA,UAChB;AAAA,SACF;AACA,QAAA,IAAI,CAAC,WAAW,MAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,EAAG,GAAA,CAAI,CAAA,SAAA,EAAY,KAAK,CAAA,OAAA,CAAS,CAAA;AAAA,MACrE,CAAC,CAAA;AAAA,EACL;AACA,EAAA,IAAI,QAAQ,IAAA,KAAS,YAAA,IAAgB,MAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AAChE,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,GAAI,MAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA,CAAO,WAAW,EAAC;AAAA,MACxD,GAAG;AAAA,KACL;AACA,IAAA,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AACpC,MAAA,IAAI,CAACH,OAAAA,CAAO,IAAI,CAAA,EAAG;AACnB,MAAA,MAAM,UAAU,QAAA,CAAS,IAAA;AAAA,QACvB,CAAC,KAAA,KAAUA,OAAAA,CAAO,KAAK,CAAA,IAAK,KAAA,CAAM,cAAc,IAAA,CAAK;AAAA,OACvD;AACA,MAAA,MAAM,SAAA,GACJ,WAAW,KAAA,CAAM,OAAA,CAAQ,QAAQ,UAAU,CAAA,GACvC,QAAQ,UAAA,CAAW,IAAA;AAAA,QACjB,CAAC,KAAA,KAAmBA,OAAAA,CAAO,KAAK,CAAA,IAAK,KAAA,CAAM,OAAO,IAAA,CAAK;AAAA,OACzD,GACA,MAAA;AACN,MAAA,IACE,CAACA,OAAAA,CAAO,SAAS,CAAA,IACjB,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,MAAM,CAAA,IAC/B,CAAC,SAAA,CAAU,MAAA,CAAO,KAAK,KAAK,CAAA;AAE5B,QAAA,GAAA,CAAI,CAAA,MAAA,EAAS,KAAK,CAAA,OAAA,CAAS,CAAA;AAAA,IAC/B,CAAC,CAAA;AAAA,EACH;AACA,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAU,OAAA,CAAQ,SAAS,YAAA,EAAc;AAC5D,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA;AAC7B,MAAA,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU;AACtC,QAAA,IACEA,OAAAA,CAAO,KAAK,CAAA,KACX,CAACA,OAAAA,CAAO,MAAM,IAAI,CAAA,IACjB,CAACC,SAAAA,CAAS,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,IAC3B,CAACA,SAAAA,CAAS,KAAA,CAAM,IAAA,CAAK,QAAQ,KAC7B,CAACA,SAAAA,CAAS,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,CAAA;AAE/B,UAAA,GAAA,CAAI,CAAA,OAAA,EAAU,KAAK,CAAA,KAAA,CAAO,CAAA;AAAA,MAC9B,CAAC,CAAA;AAAA,EACL;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,eACP,OAAA,EACA,MAAA,EACA,OAAA,EACA,gBAAA,GAAgD,EAAC,EACrB;AAC5B,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO;AAAA,MACL;AAAA,QACE,WAAW,OAAA,CAAQ,EAAA;AAAA,QACnB,OAAA;AAAA,QACA,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,EAAS,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,yBAAA;AAAA;AAC3B,KACF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GACJ,OAAA,CAAQ,IAAA,KAAS,QAAA,GACb,uBAAA,CAAwB,MAAA,EAAQ,OAAA,EAAS,OAAA,CAAQ,EAAE,CAAA,GACnD,OAAA,CAAQ,IAAA,KAAS,YAAA,GACf,2BAAA;AAAA,IACE,MAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA,CAAQ,EAAA;AAAA,IACR;AAAA,GACF,GACA,OAAA,CAAQ,IAAA,KAAS,YAAA,GACf,4BAA4B,MAAA,EAAQ,OAAA,EAAS,OAAA,CAAQ,EAAE,CAAA,GACvD,OAAA,CAAQ,IAAA,KAAS,MAAA,GACf,sBAAsB,MAAA,EAAQ,OAAA,EAAS,OAAA,CAAQ,EAAE,CAAA,GACjD,OAAA,CAAQ,IAAA,KAAS,aAAA,GACf,iCAAiC,MAAA,EAAQ,OAAA,EAAS,OAAA,CAAQ,EAAE,CAAA,GAC5D,6BAAA,CAA8B,MAAA,EAAQ,OAAA,EAAS,QAAQ,EAAE,CAAA;AACvE,EAAA,OAAO,KAAA,CAAM,MAAA,IAAU,CAACD,OAAAA,CAAO,MAAM,CAAA,GACjC,KAAA,GACA,cAAA,CAAe,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,gBAAgB,CAAA;AAC/D;AAEA,SAAS,cAAc,QAAA,EAA8C;AACnE,EAAA,OAAOA,OAAAA,CAAO,QAAA,EAAU,QAAQ,CAAA,IAC9B,OAAO,QAAA,CAAS,QAAA,CAAS,KAAA,KAAU,QAAA,GACjC,QAAA,CAAS,QAAA,CAAS,KAAA,GAClB,MAAA;AACN;AAEA,SAAS,mBAAmB,QAAA,EAA8C;AACxE,EAAA,OAAOC,UAAS,QAAA,EAAU,MAAM,KAAKA,SAAAA,CAAS,aAAA,CAAc,QAAQ,CAAC,CAAA;AACvE;AAEA,SAAS,gBAAA,CACP,SACA,MAAA,EACS;AACT,EAAA,MAAM,MAAA,GAAS,UAAU,MAAM,CAAA;AAC/B,EAAA,IAAI,CAACD,OAAAA,CAAO,MAAM,CAAA,EAAG,OAAO,KAAA;AAC5B,EAAA,IAAI,QAAQ,IAAA,KAAS,QAAA;AACnB,IAAA,OAAO,oBAAA,CAAqB,MAAM,CAAA,CAAE,QAAA,CAAS,IAAA;AAAA,MAAK,CAAC,OAAA,KACjD,UAAA,CAAW,IAAA,CAAK,CAAC,QAAQ,WAAA,CAAY,OAAA,CAAQ,GAAG,CAAC,CAAC;AAAA,KACpD;AACF,EAAA,IAAI,QAAQ,IAAA,KAAS,aAAA;AACnB,IAAA,OAAO,MAAM,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA,IAAK,MAAA,CAAO,YAAY,MAAA,GAAS,CAAA;AAC1E,EAAA,IAAI,QAAQ,IAAA,KAAS,WAAA;AACnB,IAAA,OACG,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,IAAK,OAAO,SAAA,CAAU,MAAA,GAAS,CAAA,IAC9D,MAAA,CAAO,gBAAA,KAAqB,IAAA;AAEhC,EAAA,IAAI,QAAQ,IAAA,KAAS,YAAA;AACnB,IAAA,OAAO,MAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA,IAAK,MAAA,CAAO,SAAS,MAAA,GAAS,CAAA;AACpE,EAAA,OACG,MAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,IAAK,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,IACrD,KAAA,CAAM,QAAQ,MAAA,CAAO,MAAM,CAAA,IAAK,MAAA,CAAO,OAAO,MAAA,GAAS,CAAA;AAE5D;AAEO,SAAS,oBAAA,CACd,YACA,SAAA,EACoB;AACpB,EAAA,MAAM,QAAA,uBAAe,GAAA,EAA8B;AACnD,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,UAAA,CAAW,QAAQ,CAAA,CAAE,IAAA;AAAA,IACxC,CAAC,CAAA,EAAG,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,IAAA,KAAS,YAAY,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,IAAA,KAAS,YAAY;AAAA,GAC5E;AACA,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,YAAA,IAAgB,OAAA,CAAQ,IAAA,KAAS,YAAA;AACpD,MAAA;AACF,IAAA,MAAM,KAAA,GAAQ,SAAA;AAAA,MACZ,UAAU,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAC,CAAA,EAAG;AAAA,KACvD;AACA,IAAA,IACE,CAACA,OAAAA,CAAO,KAAK,CAAA,IACb,2BAAA,CAA4B,EAAE,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,CAAA,CAAE,MAAA;AAE1D,MAAA;AACF,IAAA,KAAA,MAAW,WAAW,KAAA,CAAM,QAAA;AAC1B,MAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,SAAS,CAAA;AACjC,QAAA,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,SAAA,EAAW,OAAO,CAAA;AAAA,EAC7C;AACA,EAAA,OAAO,CAAC,GAAG,QAAA,CAAS,MAAA,EAAQ,CAAA;AAC9B;AAGO,SAAS,0BAAA,CACd,YACA,SAAA,EAC4B;AAC5B,EAAA,2BAAA,CAA4B,UAAU,CAAA;AACtC,EAAA,MAAM,gBAAA,GAAmB,oBAAA,CAAqB,UAAA,EAAY,SAAS,CAAA;AACnE,EAAA,MAAM,SAAqC,EAAC;AAC5C,EAAA,MAAM,GAAA,GAAM,CACV,SAAA,EACA,OAAA,EACA,IAAA,EACA,OAAA,KACG,MAAA,CAAO,IAAA,CAAK,EAAE,SAAA,EAAW,OAAA,EAAS,IAAA,EAAM,SAAS,CAAA;AACtD,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,QAAA,EAAU;AACzC,IAAA,MAAM,GAAA,GAAM,4BAA4B,OAAO,CAAA;AAC/C,IAAA,KAAA,MAAW,WAAW,GAAA,EAAK;AACzB,MAAA,MAAM,QAAA,GAAW,UAAU,OAAO,CAAA;AAClC,MAAA,IACE,QAAA,KAAa,MAAA,KACZ,CAACA,OAAAA,CAAO,QAAQ,CAAA,IACd,QAAA,CAAS,MAAA,KAAW,MAAA,IACnB,OAAO,QAAA,CAAS,MAAA,KAAW,QAAA,CAAA,EAC/B;AACA,QAAA,GAAA;AAAA,UACE,OAAA,CAAQ,EAAA;AAAA,UACR,OAAA;AAAA,UACA,kBAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,WAAA,IAAe,OAAA,CAAQ,SAAA,EAAW;AACrD,MAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,OAAA,CAAQ,EAAE,CAAA;AAC9C,MAAA,MAAM,QAAA,GAAW,UAAU,OAAO,CAAA;AAClC,MAAA,IAAI,UAAU,QAAA,KAAa,MAAA;AACzB,QAAA,GAAA;AAAA,UACE,OAAA,CAAQ,EAAA;AAAA,UACR,OAAA;AAAA,UACA,kBAAA;AAAA,UACA;AAAA,SACF;AAAA,IACJ;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,cAAA,EAAgB;AACnC,MAAA,KAAA,MAAW,WAAA,IAAe,OAAA,CAAQ,YAAA,IAAgB,EAAC,EAAG;AACpD,QAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,YAAY,EAAE,CAAA;AAC9D,QAAA,MAAM,QAAA,GAAW,UAAU,OAAO,CAAA;AAClC,QAAA,MAAM,UAAA,GAAa,mBAAmB,QAAQ,CAAA;AAC9C,QAAA,IAAI,WAAA,CAAY,YAAY,CAAC,UAAA;AAC3B,UAAA,GAAA;AAAA,YACE,OAAA,CAAQ,EAAA;AAAA,YACR,OAAA;AAAA,YACA,UAAA;AAAA,YACA,CAAA,EAAG,YAAY,KAAK,CAAA,aAAA;AAAA,WACtB;AACF,QAAA,IAAI,WAAA,CAAY,SAAS,QAAA,EAAU;AACjC,UAAA,IACE,QAAA,EAAU,QAAA,KAAa,MAAA,KACtB,CAACA,QAAO,QAAA,CAAS,QAAQ,CAAA,IACxB,OAAO,QAAA,CAAS,QAAA,CAAS,EAAA,KAAO,QAAA,IAChC,OAAO,QAAA,CAAS,QAAA,CAAS,KAAA,KAAU,QAAA,IACnC,CAAC,WAAA,CAAY,OAAA,EAAS,QAAA,CAAS,SAAS,QAAA,CAAS,KAAK,CAAA,IACtD,QAAA,CAAS,SAAS,EAAA,KAChB,kBAAA,CAAmB,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,CAAA,EAC9C;AACA,YAAA,GAAA;AAAA,cACE,OAAA,CAAQ,EAAA;AAAA,cACR,OAAA;AAAA,cACA,gBAAA;AAAA,cACA,CAAA,EAAG,YAAY,KAAK,CAAA,8BAAA;AAAA,aACtB;AAAA,UACF;AACA,UAAA,IAAIC,SAAAA,CAAS,UAAU,MAAM,CAAA;AAC3B,YAAA,GAAA;AAAA,cACE,OAAA,CAAQ,EAAA;AAAA,cACR,OAAA;AAAA,cACA,kBAAA;AAAA,cACA;AAAA,aACF;AAAA,QACJ,CAAA,MAAO;AACL,UAAA,IAAI,UAAU,QAAA,KAAa,MAAA;AACzB,YAAA,GAAA;AAAA,cACE,OAAA,CAAQ,EAAA;AAAA,cACR,OAAA;AAAA,cACA,kBAAA;AAAA,cACA;AAAA,aACF;AACF,UAAA,IACE,WAAA,CAAY,IAAA,KAAS,QAAA,IACrBA,SAAAA,CAAS,UAAU,MAAM,CAAA,IACzB,CAAC,WAAA,CAAY,OAAO,QAAA,CAAS,MAAA,CAAO,IAAA,EAAM,CAAC,CAAA,EAC3C;AACA,YAAA,GAAA;AAAA,cACE,OAAA,CAAQ,EAAA;AAAA,cACR,OAAA;AAAA,cACA,gBAAA;AAAA,cACA,CAAA,EAAG,YAAY,KAAK,CAAA,qCAAA;AAAA,aACtB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,WAAA,EAAa;AACvC,MAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAA;AACvD,MAAA,MAAM,QAAA,GAAW,UAAU,OAAO,CAAA;AAClC,MAAA,IAAI,UAAU,QAAA,KAAa,MAAA;AACzB,QAAA,GAAA;AAAA,UACE,OAAA,CAAQ,EAAA;AAAA,UACR,OAAA;AAAA,UACA,kBAAA;AAAA,UACA;AAAA,SACF;AACF,MAAA,IAAIA,SAAAA,CAAS,UAAU,MAAM,CAAA;AAC3B,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,GAAG,cAAA,CAAe,OAAA,EAAS,QAAA,CAAS,MAAA,EAAQ,SAAS,gBAAgB;AAAA,SACvE;AAAA,IACJ;AACA,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,MAAM,UAAA,GACJ,OAAA,CAAQ,IAAA,KAAS,WAAA,IAAe,OAAA,CAAQ,IAAA,KAAS,cAAA,GAC7C,GAAA,CAAI,IAAA,CAAK,CAAC,EAAA,KAAO,kBAAA,CAAmB,SAAA,CAAU,EAAE,CAAC,CAAC,CAAA,GACjD,OAAA,CAAQ,SAAA,IACP,kBAAA,CAAmB,SAAA,CAAU,mBAAA,CAAoB,OAAA,CAAQ,EAAE,CAAC,CAAC,CAAA,IAC/D,gBAAA;AAAA,QACE,OAAA;AAAA,QACA,UAAU,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAC,CAAA,EAAG;AAAA,OACvD;AACN,MAAA,IAAI,CAAC,UAAA;AACH,QAAA,GAAA;AAAA,UACE,OAAA,CAAQ,EAAA;AAAA,UACR,IAAI,CAAC,CAAA;AAAA,UACL,UAAA;AAAA,UACA,CAAA,EAAG,QAAQ,KAAK,CAAA,uCAAA;AAAA,SAClB;AAAA,IACJ;AAAA,EACF;AACA,EAAA,MAAM,aAAa,IAAI,GAAA;AAAA,IACrB,gBAAA,CAAiB,GAAA,CAAI,CAAC,OAAA,KAAY,QAAQ,SAAS;AAAA,GACrD;AACA,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,QAAA,EAAU;AACzC,IAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC7B,IAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAA;AACvD,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,SAAA,CAAU,OAAO,GAAG,MAAM,CAAA;AACnD,IAAA,IAAI,CAACD,QAAO,MAAM,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG;AACtD,IAAA,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU;AACtC,MAAA,IACEA,OAAAA,CAAO,KAAK,CAAA,IACZC,SAAAA,CAAS,KAAA,CAAM,SAAS,CAAA,IACxB,CAAC,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA;AAE/B,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,WAAW,OAAA,CAAQ,EAAA;AAAA,UACnB,OAAA;AAAA,UACA,IAAA,EAAM,eAAA;AAAA,UACN,IAAA,EAAM,UAAU,KAAK,CAAA,UAAA,CAAA;AAAA,UACrB,OAAA,EACE;AAAA,SACH,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,YAAA,CACP,SACA,MAAA,EACwB;AACxB,EAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAA;AACvD,EAAA,OAAO,qBAAqB,MAAM,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAY;AAChE,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,WAAW,OAAA,CAAQ,EAAA;AAAA,MACnB,OAAA;AAAA,MACA,SAAS,OAAA,CAAQ,EAAA;AAAA,MACjB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,MAAM,OAAA,CAAQ;AAAA,KAChB;AACA,IAAA,MAAM,eAAuC,EAAC;AAC9C,IAAA,IAAI,YAAY,OAAA,CAAQ,QAAQ,KAAK,WAAA,CAAY,OAAA,CAAQ,SAAS,CAAA,EAAG;AACnE,MAAA,YAAA,CAAa,IAAA,CAAK;AAAA,QAChB,GAAG,IAAA;AAAA,QACH,KAAA,EAAO,gBAAA;AAAA,QACP,OAAO,CAAA,EAAG,WAAA,CAAY,OAAA,CAAQ,QAAQ,IAAI,OAAA,CAAQ,QAAA,GAAW,GAAG,CAAA,CAAA,EAAI,YAAY,OAAA,CAAQ,SAAS,CAAA,GAAI,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAA;AAAA,QAC5H,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,KAAA,CAAM,SAAA,EAAW,sBAAsB,CAAA;AAAA,QAC7C,UAAA,EAAY;AAAA,UACV,GAAI,WAAA,CAAY,OAAA,CAAQ,QAAQ,CAAA,GAC5B;AAAA,YACE;AAAA,cACE,KAAA,EAAO,UAAA;AAAA,cACP,OAAO,OAAA,CAAQ,QAAA;AAAA,cACf,IAAA,EAAM,MAAA;AAAA,cACN,IAAA,EAAM,KAAA,CAAM,QAAA,EAAU,yBAAyB;AAAA;AACjD,cAEF,EAAC;AAAA,UACL,GAAI,WAAA,CAAY,OAAA,CAAQ,SAAS,CAAA,GAC7B;AAAA,YACE;AAAA,cACE,KAAA,EAAO,WAAA;AAAA,cACP,OAAO,OAAA,CAAQ,SAAA;AAAA,cACf,IAAA,EAAM,MAAA;AAAA,cACN,IAAA,EAAM,KAAA,CAAM,QAAA,EAAU,0BAA0B;AAAA;AAClD,cAEF;AAAC;AACP,OACD,CAAA;AAAA,IACH;AACA,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC/B,MAAA,IACE,WAAA,CAAY,KAAK,CAAA,KAChB,KAAA,CAAM,GAAA,KAAQ,MAAA,IAAU,KAAA,IAAS,EAAA,CAAA,KACjC,KAAA,CAAM,GAAA,KAAQ,kBAAA,IAAsB,KAAA,IAAS,GAAA,CAAA;AAE9C,QAAA,YAAA,CAAa,IAAA,CAAK;AAAA,UAChB,GAAG,IAAA;AAAA,UACH,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,KAAA;AAAA,UACA,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,IAAA,EAAM,KAAA,CAAM,KAAA,CAAM,IAAA,EAAM,MAAM,KAAK;AAAA,SACpC,CAAA;AAAA,IACL;AACA,IAAA,OAAO,YAAA;AAAA,EACT,CAAC,CAAA;AACH;AAEA,SAAS,YAAA,CACP,OAAA,EACA,MAAA,EACA,gBAAA,GAAgD,EAAC,EACzB;AACxB,EAAA,IAAI,QAAQ,IAAA,KAAS,QAAA,EAAU,OAAO,YAAA,CAAa,SAAS,MAAM,CAAA;AAClE,EAAA,IACE,CAACA,SAAAA,CAAS,MAAM,CAAA,IAChB,cAAA;AAAA,IACE,EAAE,GAAG,OAAA,EAAS,aAAA,EAAe,KAAA,EAAM;AAAA,IACnC,MAAA;AAAA,IACA,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAA;AAAA,IACvC;AAAA,IACA,MAAA,GAAS,CAAA;AAEX,IAAA,OAAO,EAAC;AACV,EAAA,MAAM,MAAA,GAAS,UAAU,MAAM,CAAA;AAC/B,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,WAAW,OAAA,CAAQ,EAAA;AAAA,IACnB,OAAA,EAAS,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,OAAO;AAAA,GAClD;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,aAAA,EAAe;AAClC,IAAA,OAAQ,MAAA,CAAO,WAAA,CAA6B,GAAA,CAAI,CAAC,UAAA,MAAgB;AAAA,MAC/D,GAAG,IAAA;AAAA,MACH,KAAA,EAAO,YAAA;AAAA,MACP,KAAA,EAAO;AAAA,QACL,UAAA,CAAW,IAAA;AAAA,QACX,UAAA,CAAW,GAAA;AAAA,QACX,CAAA,QAAA,EAAW,WAAW,MAAM,CAAA,CAAA;AAAA,QAC5B,UAAA,CAAW,IAAA;AAAA,QAAA,CACV,QAAQ,aAAA,IAAiB,IAAA,KAAS,CAAC,UAAA,CAAW,OAC3C,iBAAA,GACA;AAAA,OACN,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AAAA,MACZ,MAAM,UAAA,CAAW,IAAA;AAAA,MACjB,SAAS,UAAA,CAAW;AAAA,KACtB,CAAE,CAAA;AAAA,EACJ;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,WAAA,EAAa;AAChC,IAAA,IAAI,OAAO,gBAAA,KAAqB,IAAA;AAC9B,MAAA,OAAO;AAAA,QACL;AAAA,UACE,GAAG,IAAA;AAAA,UACH,KAAA,EAAO,WAAA;AAAA,UACP,KAAA,EAAO,0CAAA;AAAA;AAAA,UAEP,IAAA,EAAM;AAAA,YACJ,MAAA,EAAQ,wBAAA;AAAA,YACR,IAAA,EAAM,WAAA;AAAA,YACN,OAAA,EAAS;AAAA;AACX;AACF,OACF;AACF,IAAA,OAAQ,MAAA,CAAO,SAAA,CAAwB,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,MACvD,GAAG,IAAA;AAAA,MACH,KAAA,EAAO,OAAA,CAAQ,IAAA,KAAS,aAAA,GAAgB,aAAA,GAAgB,SAAA;AAAA,MACxD,KAAA,EAAO;AAAA,QACL,OAAA,CAAQ,QAAA;AAAA,QACR,OAAA,CAAQ,QAAA;AAAA,QACR,OAAA,CAAQ,QAAA;AAAA,QACR,OAAA,CAAQ,WAAW,UAAA,GAAa,MAAA;AAAA,QAChC,OAAA,CAAQ,IAAA;AAAA,QAAA,CACP,QAAQ,aAAA,IAAiB,IAAA,KAAS,CAAC,OAAA,CAAQ,OACxC,iBAAA,GACA;AAAA,OACN,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AAAA,MACZ,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,SAAS,OAAA,CAAQ;AAAA,KACnB,CAAE,CAAA;AAAA,EACJ;AACA,EAAA,IAAI,OAAA,CAAQ,SAAS,YAAA,EAAc;AACjC,IAAA,OAAQ,MAAA,CAAO,QAAA,CAAgC,OAAA,CAAQ,CAAC,OAAA,KAAY;AAClE,MAAA,MAAM,SAAA,GAAYE,mCAAiB,OAAO,CAAA;AAC1C,MAAA,IAAI,CAAC,SAAA,EAAW,OAAO,EAAC;AACxB,MAAA,OAAO;AAAA,QACL;AAAA,UACE,GAAG,IAAA;AAAA,UACH,KAAA,EAAO,WAAA;AAAA,UACP,KAAA,EAAO;AAAA,YACL,SAAA,CAAU,IAAA;AAAA,YACV,CAAA,QAAA,EAAW,QAAQ,cAAc,CAAA,CAAA;AAAA,YACjC,CAAA,cAAA,EAAiB,UAAU,kBAAkB,CAAA,CAAA;AAAA,YAC7C,SAAA,CAAU,IAAA;AAAA,YAAA,CACT,QAAQ,aAAA,IAAiB,IAAA,KAAS,CAAC,SAAA,CAAU,MAAA,EAAQ,SAClD,iBAAA,GACA;AAAA,WACN,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AAAA,UACZ,SAAS,OAAA,CAAQ,SAAA;AAAA,UACjB,IAAA,EACE,SAAA,CAAU,MAAA,EAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,OAAO,CAAA,IACjD,SAAA,CAAU,MAAA,GAAS,CAAC;AAAA;AACxB,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACA,EAAA,MAAM,UAAA,GACJ,OAAA,CAAQ,IAAA,KAAS,MAAA,GACb;AAAA,IACE,UAAU,EAAC;AAAA,IACX,OAAO,EAAC;AAAA,IACR,QAAQ,MAAA,CAAO;AAAA,GACjB,GACC,MAAA;AACP,EAAA,MAAM,eAAuC,EAAC;AAC9C,EAAA,KAAA,MAAW,IAAA,IAAQ,WAAW,KAAA,EAAO;AACnC,IAAA,MAAM,SAAA,GAAY,CAAC,GAAG,UAAA,CAAW,UAAU,GAAG,gBAAgB,CAAA,CAC3D,IAAA,CAAK,CAAC,OAAA,KAAY,QAAQ,SAAA,KAAc,IAAA,CAAK,SAAS,CAAA,EACrD,UAAA,CAAW,IAAA,CAAK,CAACC,UAAAA,KAAcA,UAAAA,CAAU,EAAA,KAAO,IAAA,CAAK,WAAW,CAAA;AACpE,IAAA,IAAI,SAAA;AACF,MAAA,YAAA,CAAa,IAAA,CAAK;AAAA,QAChB,GAAG,IAAA;AAAA,QACH,KAAA,EAAO,YAAA;AAAA,QACP,KAAA,EAAO;AAAA,UACL,SAAA,CAAU,IAAA;AAAA,UACV,CAAA,cAAA,EAAiB,UAAU,kBAAkB,CAAA,CAAA;AAAA,UAC7C,SAAA,CAAU,IAAA;AAAA,UACV,IAAA,CAAK,IAAA;AAAA,UAAA,CACJ,QAAQ,aAAA,IAAiB,IAAA,KAAS,CAAC,SAAA,CAAU,MAAA,EAAQ,SAClD,iBAAA,GACA;AAAA,SACN,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AAAA,QACZ,SAAS,IAAA,CAAK,SAAA;AAAA,QACd,IAAA,EACE,SAAA,CAAU,MAAA,EAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,OAAO,CAAA,IACjD,SAAA,CAAU,MAAA,GAAS,CAAC;AAAA,OACvB,CAAA;AAAA,EACL;AACA,EAAA,KAAA,MAAW,KAAA,IAAS,WAAW,MAAA,EAAQ;AACrC,IAAA,YAAA,CAAa,IAAA,CAAK;AAAA,MAChB,GAAG,IAAA;AAAA,MACH,KAAA,EAAO,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,MAAA,CAAA;AAAA,MACpB,KAAA,EAAO;AAAA,QACL,KAAA,CAAM,OAAA;AAAA,QACN,KAAA,CAAM,MAAA;AAAA,QACN,KAAA,CAAM,QAAA;AAAA,QACN,KAAA,CAAM,MAAA;AAAA,QACN,KAAA,CAAM,UAAA;AAAA,QACN,KAAA,CAAM,QAAA;AAAA,QACN,KAAA,CAAM,OAAA;AAAA,QACN,KAAA,CAAM,KAAA;AAAA,QAAA,CACL,QAAQ,aAAA,IAAiB,IAAA,KAAS,CAAC,KAAA,CAAM,OACtC,iBAAA,GACA;AAAA,OACN,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AAAA,MACZ,OAAA,EAAS,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,OAAA;AAAA,MAClC,IAAA,EAAM,MAAM,IAAA,GACR;AAAA,QACE,MAAA,EAAQ,MAAM,IAAA,CAAK,QAAA;AAAA,QACnB,IAAA,EAAM,MAAM,IAAA,CAAK,QAAA;AAAA,QACjB,SAAS,KAAA,CAAM;AAAA,OACjB,GACA;AAAA,KACL,CAAA;AAAA,EACH;AACA,EAAA,OAAO,YAAA;AACT;AAGO,SAAS,uBAAA,CACd,YACA,SAAA,EACwB;AACxB,EAAA,MAAM,MAAA,GAAS,0BAAA,CAA2B,UAAA,EAAY,SAAS,CAAA;AAC/D,EAAA,MAAM,gBAAA,GAAmB,oBAAA,CAAqB,UAAA,EAAY,SAAS,CAAA;AACnE,EAAA,MAAM,eAAuC,EAAC;AAC9C,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,QAAA,EAAU;AACzC,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,WAAA,IAAe,OAAA,CAAQ,SAAA,EAAW;AACrD,MAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,OAAA,CAAQ,EAAE,CAAA;AAC9C,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,OAAO,CAAA,EAAG,MAAA;AACnC,MAAA,IAAIH,UAAS,MAAM,CAAA;AACjB,QAAA,YAAA,CAAa,IAAA,CAAK;AAAA,UAChB,WAAW,OAAA,CAAQ,EAAA;AAAA,UACnB,OAAA;AAAA,UACA,KAAA,EACE,QAAQ,IAAA,KAAS,WAAA,GACb,QAAQ,KAAA,GACR,CAAA,EAAG,QAAQ,KAAK,CAAA,UAAA,CAAA;AAAA,UACtB,KAAA,EAAO;AAAA,SACR,CAAA;AAAA,IACL;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,cAAA,EAAgB;AACnC,MAAA,KAAA,MAAW,WAAA,IAAe,OAAA,CAAQ,YAAA,IAAgB,EAAC,EAAG;AACpD,QAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,YAAY,EAAE,CAAA;AAC9D,QAAA,MAAM,QAAA,GAAW,UAAU,OAAO,CAAA;AAClC,QAAA,MAAM,MACJ,WAAA,CAAY,IAAA,KAAS,WACjB,aAAA,CAAc,QAAQ,IACtB,QAAA,EAAU,MAAA;AAChB,QAAA,IAAI,CAACA,SAAAA,CAAS,GAAG,CAAA,EAAG;AACpB,QAAA,IACE,WAAA,CAAY,SAAS,QAAA,KACpB,CAAC,YAAY,OAAA,EAAS,QAAA,CAAS,GAAG,CAAA,IACjC,MAAA,CAAO,IAAA;AAAA,UACL,CAAC,KAAA,KACC,KAAA,CAAM,OAAA,KAAY,OAAA,IAAW,MAAM,IAAA,KAAS;AAAA,SAChD,CAAA;AAEF,UAAA;AACF,QAAA,MAAM,QAAQ,WAAA,CAAY,IAAA,KAAS,QAAA,GAAW,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA;AAC5D,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,WAAA,CAAY,KAAK,CAAA,EAAG;AACtD,QAAA,YAAA,CAAa,IAAA,CAAK;AAAA,UAChB,WAAW,OAAA,CAAQ,EAAA;AAAA,UACnB,OAAA;AAAA,UACA,OAAO,WAAA,CAAY,KAAA;AAAA,UACnB,KAAA;AAAA,UACA,MAAM,WAAA,CAAY,IAAA;AAAA,UAClB,MAAM,WAAA,CAAY;AAAA,SACnB,CAAA;AAAA,MACH;AAAA,IACF,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,WAAA,EAAa;AACvC,MAAA,YAAA,CAAa,IAAA;AAAA,QACX,GAAG,YAAA;AAAA,UACD,OAAA;AAAA,UACA,UAAU,mBAAA,CAAoB,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAC,CAAA,EAAG,MAAA;AAAA,UACrD;AAAA;AACF,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,UAAA,CAAW,KAAA;AAAA,IACX,GAAG,UAAA,CAAW,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC1C,MAAA,MAAM,SAAS,YAAA,CAAa,MAAA;AAAA,QAC1B,CAAC,WAAA,KAAgB,WAAA,CAAY,SAAA,KAAc,OAAA,CAAQ;AAAA,OACrD;AACA,MAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AACjC,MAAA,OAAO;AAAA,QACL,CAAA,EAAG,QAAQ,KAAK;AAAA,EAAK,MAAA,CAClB,GAAA,CAAI,CAAC,WAAA,KAAgB;AACpB,UAAA,MAAM,QAAA,GAAW;AAAA,YACf,QAAQ,IAAA,KAAS,QAAA,IACf,YAAY,OAAA,IACZ,CAAA,QAAA,EAAW,YAAY,OAAO,CAAA,CAAA;AAAA,YAChC,WAAA,CAAY,UAAA;AAAA,YACZ,WAAA,CAAY,QAAA;AAAA,YACZ,WAAA,CAAY;AAAA,WACd,CAAE,OAAO,OAAO,CAAA;AAChB,UAAA,MAAM,IAAA,GACJ,WAAA,CAAY,IAAA,KAAS,KAAA,GACjB,OAAA,GACA,WAAA,CAAY,IAAA,KAAS,QAAA,GACnB,MAAA,GACA,WAAA,CAAY,IAAA,KAAS,SAAA,GACnB,QACA,WAAA,CAAY,IAAA;AACtB,UAAA,OAAO,CAAA,EAAG,YAAY,KAAK,CAAA,EAAA,EAAK,YAAY,KAAK,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,IAAI,KAAK,EAAE,CAAA,EAAG,SAAS,MAAA,GAAS,CAAA,EAAA,EAAK,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAA;AAAA,QACjI,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OACf;AAAA,IACF,CAAC;AAAA,GACH,CAAE,KAAK,MAAM,CAAA;AAEb,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,UAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,OAAO,WAAW,eAAA,CAAgB;AAAA,IAChC,GAAG,QAAA;AAAA,IACH,GAAA,EAAK,mBAAmB,QAAQ;AAAA,GACjC,CAAA;AACH","file":"chunk-IXUIOR4K.cjs","sourcesContent":["/** Date-only clinical assertions require a real Gregorian calendar day, without timezone inference. */\nexport function isEncounterDate(value: unknown): value is string {\n if (typeof value !== 'string' || !/^\\d{4}-\\d{2}-\\d{2}$/.test(value))\n return false;\n const [year, month, day] = value.split('-').map(Number);\n if (year < 1 || month < 1 || month > 12 || day < 1) return false;\n const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n const days = [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n return day <= days[month - 1];\n}\n","import type { FieldDefinition, FormDefinition } from '@esheet/core';\nimport { isEncounterDate } from './date';\nimport type {\n EncounterObservationDefinition,\n EncounterNarrativeFinding,\n EncounterResponses,\n EncounterSectionDefinition,\n EncounterSectionKind,\n EncounterVisitDefinition,\n} from './types';\n\n/** Encode each identifier separately so punctuation cannot collide with delimiters. */\nexport function getEncounterFieldId(\n sectionId: string,\n observationId?: string\n): string {\n const prefix = `encounter:${encodeURIComponent(sectionId)}`;\n return observationId === undefined\n ? `${prefix}:narrative`\n : `${prefix}:observation:${encodeURIComponent(observationId)}`;\n}\n\nexport function getEncounterSectionFieldId(sectionId: string): string {\n return `encounter:${encodeURIComponent(sectionId)}:section`;\n}\n\nexport function getEncounterSectionFieldIds(\n section: EncounterSectionDefinition\n): string[] {\n if (section.kind === 'narrative') return [getEncounterFieldId(section.id)];\n if (section.kind !== 'observations') {\n return [\n ...(section.narrative ? [getEncounterFieldId(section.id)] : []),\n getEncounterFieldId(section.id, 'value'),\n ];\n }\n return [\n ...(section.narrative ? [getEncounterFieldId(section.id)] : []),\n ...(section.observations ?? []).map((observation) =>\n getEncounterFieldId(section.id, observation.id)\n ),\n ];\n}\n\nconst SECTION_KINDS: EncounterSectionKind[] = [\n 'narrative',\n 'observations',\n 'vitals',\n 'medications',\n 'allergies',\n 'conditions',\n 'plan',\n 'assessment',\n];\n\nfunction nonempty(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction optionalString(value: unknown): boolean {\n return value === undefined || typeof value === 'string';\n}\n\nfunction invalid(message: string): never {\n throw new Error(`Invalid encounter definition: ${message}`);\n}\n\nfunction validateFindings(\n findings: EncounterNarrativeFinding[] | undefined,\n location: string\n): void {\n if (findings === undefined) return;\n if (!Array.isArray(findings))\n invalid(`findings must be an array in ${location}`);\n const ids = new Set<string>();\n for (const finding of findings) {\n if (\n !finding ||\n typeof finding !== 'object' ||\n !nonempty(finding.id) ||\n !nonempty(finding.label) ||\n !nonempty(finding.text)\n )\n invalid(`findings require id, label and text in ${location}`);\n if (ids.has(finding.id))\n invalid(`duplicate finding id ${finding.id} in ${location}`);\n ids.add(finding.id);\n if (\n finding.code !== undefined &&\n (!finding.code ||\n typeof finding.code !== 'object' ||\n !nonempty(finding.code.system) ||\n !nonempty(finding.code.code) ||\n !optionalString(finding.code.display))\n )\n invalid(`invalid finding code in ${location}`);\n }\n}\n\n/** Reject ambiguous identifiers and invalid configuration before constructing an eSheet. */\nexport function validateEncounterDefinition(\n definition: EncounterVisitDefinition\n): void {\n if (!definition || typeof definition !== 'object')\n invalid('expected an object');\n if (!nonempty(definition.id) || !nonempty(definition.title)) {\n invalid('id and title must be nonempty strings');\n }\n if (\n definition.encounterDate !== undefined &&\n !isEncounterDate(definition.encounterDate)\n )\n invalid('encounterDate must be a valid YYYY-MM-DD date');\n if (!Array.isArray(definition.sections) || definition.sections.length === 0) {\n invalid('at least one section is required');\n }\n const sectionIds = new Set<string>();\n for (const section of definition.sections) {\n if (!section || typeof section !== 'object')\n invalid('expected a section object');\n if (!nonempty(section.id) || !nonempty(section.title)) {\n invalid('each section requires an id and title');\n }\n if (sectionIds.has(section.id))\n invalid(`duplicate section id ${section.id}`);\n sectionIds.add(section.id);\n if (!SECTION_KINDS.includes(section.kind))\n invalid(`unknown section kind ${section.kind}`);\n if (!optionalString(section.description))\n invalid(`invalid description in ${section.id}`);\n if (\n section.required !== undefined &&\n typeof section.required !== 'boolean'\n ) {\n invalid(`required must be boolean in ${section.id}`);\n }\n if (\n section.narrative !== undefined &&\n typeof section.narrative !== 'boolean'\n ) {\n invalid(`narrative must be boolean in ${section.id}`);\n }\n if (\n section.observations !== undefined &&\n !Array.isArray(section.observations)\n ) {\n invalid(`observations must be an array in ${section.id}`);\n }\n if (section.kind !== 'observations' && section.observations?.length) {\n invalid(\n `only observations sections accept individual observations (${section.id})`\n );\n }\n if (\n section.kind === 'observations' &&\n !section.narrative &&\n !section.observations?.length\n ) {\n invalid(`observations section ${section.id} has no fields`);\n }\n if (\n section.requireCoding !== undefined &&\n typeof section.requireCoding !== 'boolean'\n )\n invalid(`requireCoding must be boolean in ${section.id}`);\n validateFindings(section.findings, section.id);\n if (\n section.findings?.length &&\n section.kind !== 'narrative' &&\n !section.narrative\n )\n invalid(`section findings require a narrative in ${section.id}`);\n const observationIds = new Set<string>();\n for (const observation of section.observations ?? []) {\n if (\n !observation ||\n typeof observation !== 'object' ||\n !nonempty(observation.id) ||\n !nonempty(observation.label)\n ) {\n invalid(`observations in ${section.id} require an id and label`);\n }\n if (observationIds.has(observation.id))\n invalid(`duplicate observation id ${observation.id} in ${section.id}`);\n observationIds.add(observation.id);\n if (\n observation.type !== undefined &&\n !['text', 'number', 'choice'].includes(observation.type)\n ) {\n invalid(`unknown observation type in ${section.id}.${observation.id}`);\n }\n if (!optionalString(observation.unit))\n invalid(`invalid unit in ${section.id}.${observation.id}`);\n if (\n observation.required !== undefined &&\n typeof observation.required !== 'boolean'\n ) {\n invalid(`required must be boolean in ${section.id}.${observation.id}`);\n }\n if (\n observation.code !== undefined &&\n (!observation.code ||\n typeof observation.code !== 'object' ||\n !nonempty(observation.code.system) ||\n !nonempty(observation.code.code) ||\n !optionalString(observation.code.display))\n ) {\n invalid(`invalid code in ${section.id}.${observation.id}`);\n }\n if (\n observation.options !== undefined &&\n (!Array.isArray(observation.options) ||\n observation.options.some((option) => !nonempty(option)) ||\n new Set(observation.options).size !== observation.options.length)\n ) {\n invalid(\n `options must be distinct nonempty strings in ${section.id}.${observation.id}`\n );\n }\n validateFindings(observation.findings, `${section.id}.${observation.id}`);\n if (\n observation.findings?.length &&\n observation.type &&\n observation.type !== 'text'\n )\n invalid(\n `findings require a text observation in ${section.id}.${observation.id}`\n );\n if (observation.type === 'choice' && !observation.options?.length) {\n invalid(\n `choice observation ${section.id}.${observation.id} requires options`\n );\n }\n }\n }\n}\n\nfunction observationField(\n sectionId: string,\n observation: EncounterObservationDefinition\n): FieldDefinition {\n const base = {\n id: getEncounterFieldId(sectionId, observation.id),\n question: observation.label,\n required: observation.required,\n width: 'full' as const,\n _sourceData: { ...observation, encounterFindings: observation.findings },\n };\n if (observation.type === 'choice') {\n return {\n ...base,\n fieldType: 'dropdown',\n options: observation.options?.map((value) => ({\n id: encodeURIComponent(value),\n value,\n text: value,\n })),\n };\n }\n if (observation.type === 'number') {\n return {\n ...base,\n fieldType: 'text',\n inputType: 'number',\n unit: observation.unit,\n validators: [\n { type: 'number', message: 'Enter a finite nonnegative number.' },\n ],\n };\n }\n return {\n ...base,\n fieldType: 'encounterNarrative',\n unit: observation.unit,\n } as unknown as FieldDefinition;\n}\n\nconst CUSTOM_FIELD_TYPES = {\n vitals: 'encounterVitals',\n medications: 'encounterMedications',\n allergies: 'encounterAllergies',\n conditions: 'encounterConditions',\n plan: 'encounterPlan',\n assessment: 'encounterAssessment',\n} as const;\n\n/** All visit sections remain native eSheet sections with native FieldResponse values. */\nexport function createEncounterFormDefinition(\n definition: EncounterVisitDefinition\n): FormDefinition {\n validateEncounterDefinition(definition);\n return {\n id: definition.id,\n title: definition.title,\n pages: [\n {\n id: `${definition.id}:visit`,\n title: definition.title,\n fields: definition.sections.map((section) => {\n const fields: FieldDefinition[] = [];\n if (section.description) {\n fields.push({\n id: `${getEncounterSectionFieldId(section.id)}:description`,\n fieldType: 'display',\n content: section.description,\n width: 'full',\n });\n }\n if (section.kind === 'narrative' || section.narrative) {\n fields.push({\n id: getEncounterFieldId(section.id),\n fieldType: 'encounterNarrative',\n question:\n section.kind === 'narrative'\n ? section.title\n : `${section.title} narrative`,\n required:\n section.kind === 'narrative' ? section.required : undefined,\n width: 'full',\n _sourceData: {\n encounterHideLabel: true,\n encounterFindings: section.findings,\n },\n } as unknown as FieldDefinition);\n }\n if (section.kind === 'observations') {\n fields.push(\n ...(section.observations ?? []).map((observation) =>\n observationField(section.id, observation)\n )\n );\n } else if (section.kind !== 'narrative') {\n // eSheet deliberately keeps custom types outside its built-in TypeScript union.\n fields.push({\n id: getEncounterFieldId(section.id, 'value'),\n fieldType: CUSTOM_FIELD_TYPES[section.kind],\n question: section.title,\n required: section.required,\n _sourceData: {\n encounterRequireCoding: section.requireCoding ?? true,\n encounterDate: definition.encounterDate,\n },\n width: 'full',\n } as unknown as FieldDefinition);\n }\n return {\n id: getEncounterSectionFieldId(section.id),\n fieldType: 'section' as const,\n title: section.title,\n sectionCollapse: 'expanded' as const,\n width: 'full' as const,\n fields,\n };\n }),\n },\n ],\n };\n}\n\n/** Optional uncoded phrases; answers exist only after an explicit selection. */\nexport const DEFAULT_ENCOUNTER_VISIT_DEFINITION: EncounterVisitDefinition = {\n id: 'anonymous-encounter',\n title: 'Encounter visit',\n sections: [\n {\n id: 'hpi',\n title: 'History of present illness',\n kind: 'narrative',\n findings: [\n { id: 'no-fever', label: 'No fever', text: 'Denies fever.' },\n { id: 'no-trauma', label: 'No trauma', text: 'Denies recent trauma.' },\n {\n id: 'no-radiation',\n label: 'No radiation',\n text: 'Pain does not radiate.',\n },\n ],\n },\n {\n id: 'history',\n title: 'Patient history',\n kind: 'observations',\n narrative: true,\n findings: [\n {\n id: 'patient-source',\n label: 'Patient provided history',\n text: 'History provided by the patient.',\n },\n {\n id: 'records-reviewed',\n label: 'Records reviewed',\n text: 'History supplemented by available records.',\n },\n ],\n observations: [\n {\n id: 'medical',\n label: 'Medical history',\n findings: [\n {\n id: 'reviewed',\n label: 'History reviewed',\n text: 'Medical history reviewed.',\n },\n {\n id: 'no-additional-history',\n label: 'No additional history',\n text: 'No additional medical history reported.',\n },\n ],\n },\n {\n id: 'surgical',\n label: 'Surgical history',\n findings: [\n {\n id: 'no-surgeries',\n label: 'No prior surgery',\n text: 'No previous surgery reported.',\n },\n {\n id: 'reviewed',\n label: 'History reviewed',\n text: 'Surgical history reviewed.',\n },\n ],\n },\n {\n id: 'family',\n label: 'Family history',\n findings: [\n {\n id: 'unknown',\n label: 'History unknown',\n text: 'Family history unknown.',\n },\n {\n id: 'noncontributory',\n label: 'No pertinent history',\n text: 'No pertinent family history reported.',\n },\n ],\n },\n {\n id: 'social',\n label: 'Social history',\n findings: [\n {\n id: 'never-smoked',\n label: 'Never smoked',\n text: 'Never smoked.',\n },\n {\n id: 'no-alcohol',\n label: 'No alcohol use',\n text: 'Denies alcohol use.',\n },\n {\n id: 'no-recreational-drugs',\n label: 'No recreational drug use',\n text: 'Denies recreational drug use.',\n },\n ],\n },\n ],\n },\n {\n id: 'ros',\n title: 'Review of systems',\n kind: 'observations',\n narrative: true,\n findings: [\n {\n id: 'pertinent-hpi',\n label: 'Additional symptoms in HPI',\n text: 'Additional symptoms are documented in the history of present illness.',\n },\n {\n id: 'limited-review',\n label: 'Limited review',\n text: 'Review of systems limited by patient condition.',\n },\n ],\n observations: [\n {\n id: 'constitutional',\n label: 'Constitutional',\n findings: [\n {\n id: 'no-fever-chills',\n label: 'No fever or chills',\n text: 'Denies fever or chills.',\n },\n ],\n },\n {\n id: 'cardiovascular',\n label: 'Cardiovascular',\n findings: [\n {\n id: 'no-chest-pain',\n label: 'No chest pain',\n text: 'Denies chest pain.',\n },\n ],\n },\n {\n id: 'respiratory',\n label: 'Respiratory',\n findings: [\n {\n id: 'no-dyspnea',\n label: 'No dyspnea',\n text: 'Denies shortness of breath.',\n },\n { id: 'no-cough', label: 'No cough', text: 'Denies cough.' },\n ],\n },\n {\n id: 'musculoskeletal',\n label: 'Musculoskeletal',\n findings: [\n { id: 'back-pain', label: 'Back pain', text: 'Reports back pain.' },\n {\n id: 'no-joint-swelling',\n label: 'No joint swelling',\n text: 'Denies joint swelling.',\n },\n ],\n },\n {\n id: 'neurological',\n label: 'Neurological',\n findings: [\n {\n id: 'no-weakness',\n label: 'No weakness',\n text: 'Denies weakness.',\n },\n {\n id: 'no-numbness-tingling',\n label: 'No numbness / tingling',\n text: 'Denies numbness or tingling.',\n },\n {\n id: 'no-bowel-bladder-changes',\n label: 'No bowel / bladder changes',\n text: 'Denies bowel or bladder changes.',\n },\n ],\n },\n ],\n },\n {\n id: 'vitals',\n title: 'Vitals',\n kind: 'vitals',\n },\n {\n id: 'exam',\n title: 'Physical examination',\n kind: 'observations',\n narrative: true,\n findings: [\n {\n id: 'focused',\n label: 'Focused examination',\n text: 'Focused examination performed.',\n },\n {\n id: 'limited-by-pain',\n label: 'Limited by pain',\n text: 'Examination limited by pain.',\n },\n ],\n observations: [\n {\n id: 'general',\n label: 'General appearance',\n findings: [\n {\n id: 'no-distress',\n label: 'No acute distress',\n text: 'No acute distress.',\n },\n { id: 'alert', label: 'Alert', text: 'Alert and conversant.' },\n ],\n },\n {\n id: 'head-neck',\n label: 'Head and neck',\n findings: [\n {\n id: 'no-cervical-nodes',\n label: 'No cervical lymphadenopathy',\n text: 'No palpable cervical lymphadenopathy.',\n },\n {\n id: 'no-oral-lesions',\n label: 'No oral lesions',\n text: 'No visible oral lesions.',\n },\n ],\n },\n {\n id: 'cardiovascular',\n label: 'Cardiovascular',\n findings: [\n {\n id: 'regular',\n label: 'Regular rhythm',\n text: 'Regular rate and rhythm.',\n },\n ],\n },\n {\n id: 'respiratory',\n label: 'Respiratory',\n findings: [\n {\n id: 'clear',\n label: 'Clear lungs',\n text: 'Lungs clear to auscultation bilaterally.',\n },\n {\n id: 'nonlabored',\n label: 'Nonlabored',\n text: 'Breathing is nonlabored.',\n },\n ],\n },\n {\n id: 'abdomen',\n label: 'Abdomen',\n findings: [\n {\n id: 'soft',\n label: 'Soft / nontender',\n text: 'Abdomen soft and nontender.',\n },\n ],\n },\n {\n id: 'musculoskeletal',\n label: 'Musculoskeletal / back',\n findings: [\n {\n id: 'no-midline-tenderness',\n label: 'No midline tenderness',\n text: 'No midline spinal tenderness.',\n },\n {\n id: 'paraspinal-tenderness',\n label: 'Paraspinal tenderness',\n text: 'Paraspinal tenderness is present.',\n },\n {\n id: 'range-of-motion',\n label: 'Preserved range of motion',\n text: 'Spinal range of motion is preserved.',\n },\n ],\n },\n {\n id: 'neurological',\n label: 'Neurological',\n findings: [\n {\n id: 'symmetric-strength',\n label: 'Symmetric leg strength',\n text: 'Strength symmetric in both lower extremities.',\n },\n {\n id: 'light-touch',\n label: 'Intact light touch',\n text: 'Sensation intact to light touch in both lower extremities.',\n },\n {\n id: 'steady-gait',\n label: 'Steady gait',\n text: 'Gait is steady.',\n },\n ],\n },\n {\n id: 'skin',\n label: 'Skin',\n findings: [\n { id: 'warm-dry', label: 'Warm / dry', text: 'Skin warm and dry.' },\n ],\n },\n ],\n },\n {\n id: 'conditions',\n title: 'Conditions',\n kind: 'conditions',\n requireCoding: true,\n },\n {\n id: 'medications',\n title: 'Presenting medications',\n kind: 'medications',\n requireCoding: true,\n },\n {\n id: 'allergies',\n title: 'Allergies and intolerances',\n kind: 'allergies',\n requireCoding: true,\n },\n {\n id: 'assessment',\n title: 'Assessment and orders',\n kind: 'assessment',\n requireCoding: true,\n },\n {\n id: 'plan',\n title: 'Plan',\n kind: 'plan',\n narrative: true,\n requireCoding: true,\n findings: [\n {\n id: 'questions',\n label: 'Questions answered',\n text: 'Questions were answered.',\n },\n {\n id: 'understanding',\n label: 'Understanding confirmed',\n text: 'Patient verbalized understanding of the plan.',\n },\n ],\n },\n {\n id: 'follow-up',\n title: 'Follow-up and appointments',\n kind: 'observations',\n narrative: true,\n findings: [\n {\n id: 'arrangements-reviewed',\n label: 'Arrangements reviewed',\n text: 'Follow-up arrangements reviewed with the patient.',\n },\n {\n id: 'patient-to-schedule',\n label: 'Patient will schedule',\n text: 'Patient will contact the office to schedule follow-up.',\n },\n ],\n observations: [\n {\n id: 'interval',\n label: 'Return interval',\n findings: [\n { id: 'one-week', label: '1 week', text: '1 week' },\n { id: 'one-month', label: '1 month', text: '1 month' },\n { id: 'three-months', label: '3 months', text: '3 months' },\n ],\n },\n {\n id: 'appointment',\n label: 'Appointment details',\n findings: [\n {\n id: 'scheduled',\n label: 'Appointment scheduled',\n text: 'Appointment scheduled.',\n },\n {\n id: 'patient-to-schedule',\n label: 'Patient to schedule',\n text: 'Patient to schedule appointment.',\n },\n {\n id: 'scheduling-pending',\n label: 'Scheduling pending',\n text: 'Appointment scheduling pending.',\n },\n ],\n },\n ],\n },\n ],\n};\n\n/** Only the facts supplied for the anonymous example; no assumed exam or treatment. */\nexport const EXAMPLE_ENCOUNTER_VISIT_RESPONSES: EncounterResponses = {\n [getEncounterFieldId('hpi')]: {\n answer: '45-year-old male with pre-diabetes, back pain and hypertension.',\n },\n};\n","import type { FieldResponse, FormDefinition } from '@esheet/core';\nimport { fieldDisplay, render } from '@mieweb/templit';\nimport { markdownToHtml } from '@mieweb/templit/markdown';\nimport { isMap, isSeq, parseDocument } from 'yaml';\nimport {\n createEncounterFormDefinition,\n getEncounterFieldId,\n getEncounterSectionFieldIds,\n validateEncounterDefinition,\n} from './definition';\nimport type {\n EncounterObservation,\n EncounterResponses,\n EncounterVisitDefinition,\n EncounterVisitSnapshot,\n} from './types';\n\n/** Authored prose is a native answer; it is excluded from its own MDY response layer. */\nexport const ENCOUNTER_DOCUMENT_FIELD_ID = '__encounter_document__';\n\ntype MdySnapshot = Pick<\n EncounterVisitSnapshot,\n 'definition' | 'responses' | 'observations'\n>;\n\nexport interface EncounterMdyField {\n /** MDY/Kerebron-safe id, stable across ordering and definition changes. */\n id: string;\n /** Original eSheet field id; the canonical answer remains in response[fieldId]. */\n fieldId: string;\n sectionId: string;\n label: string;\n display: string;\n /** Derived capture state for report pruning; never stored in the MDY envelope. */\n empty?: boolean;\n}\n\nexport interface EncounterMdyDiagnostic {\n severity: 'error' | 'warning';\n code:\n | 'frontmatter'\n | 'form'\n | 'response'\n | 'definition'\n | 'dangling-link'\n | 'orphan'\n | 'template-syntax';\n message: string;\n fieldId?: string;\n}\n\nexport interface ParsedEncounterMdy {\n source: string;\n frontMatterSource: string;\n body: string;\n frontMatter: Record<string, unknown> | null;\n form?: FormDefinition;\n response?: EncounterResponses;\n definition?: EncounterVisitDefinition;\n diagnostics: EncounterMdyDiagnostic[];\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction hasValue(value: unknown): boolean {\n if (typeof value === 'string') return value.trim().length > 0;\n if (typeof value === 'number' || typeof value === 'boolean') return true;\n if (Array.isArray(value)) return value.some(hasValue);\n if (record(value)) return Object.values(value).some(hasValue);\n return false;\n}\n\n/** Selection identities and labels alone are not an explicitly selected value. */\nfunction hasSelectedValue(selected: unknown): boolean {\n if (Array.isArray(selected)) return selected.some(hasSelectedValue);\n if (!record(selected)) return false;\n if ('value' in selected) return hasValue(selected.value);\n return Object.values(selected).some(hasSelectedValue);\n}\n\nfunction hasNativeValue(\n response?: FieldResponse,\n parseAnswer = false\n): boolean {\n return (\n (response?.answer !== undefined &&\n hasValue(parseAnswer ? canonicalValue(response) : response.answer)) ||\n hasSelectedValue(response?.selected)\n );\n}\n\n/** Encode native ids without assuming their punctuation is valid in MDY. */\nfunction linkId(fieldId: string): string {\n return `visit_${Array.from(new TextEncoder().encode(fieldId), (byte) =>\n byte.toString(16).padStart(2, '0')\n ).join('')}`;\n}\n\nfunction unitDisplay(unit?: string): string | undefined {\n return unit === 'Cel'\n ? '°C'\n : unit === 'mm[Hg]'\n ? 'mmHg'\n : unit === '{score}'\n ? '/10'\n : unit;\n}\n\nfunction observationDisplay(observation: EncounterObservation): string {\n const unit = unitDisplay(observation.unit);\n return `${observation.value}${unit ? ` ${unit}` : ''}`;\n}\n\nfunction groupedDisplay(\n observations: EncounterObservation[],\n showReadingId: boolean\n): string {\n const groups = new Map<string, EncounterObservation[]>();\n for (const observation of observations) {\n const key = observation.groupId ?? '';\n const group = groups.get(key) ?? [];\n group.push(observation);\n groups.set(key, group);\n }\n return Array.from(groups, ([groupId, values]) => {\n const first = values[0];\n const metadata = [\n showReadingId ? groupId : undefined,\n first.recordedAt,\n first.position,\n first.site,\n ].filter(Boolean);\n const summary = values\n .map((value) => `${value.label}: ${observationDisplay(value)}`)\n .join('\\n');\n return metadata.length ? `${summary} (${metadata.join('; ')})` : summary;\n }).join('\\n\\n');\n}\n\n/** One link projection per native field, including empty memory aids. */\nexport function getEncounterMdyFields(\n snapshot: MdySnapshot\n): EncounterMdyField[] {\n return snapshot.definition.sections.flatMap((section) =>\n getEncounterSectionFieldIds(section).map((fieldId) => {\n const observations = snapshot.observations.filter(\n (observation) => observation.fieldId === fieldId\n );\n const observationDefinition = section.observations?.find(\n (observation) =>\n getEncounterFieldId(section.id, observation.id) === fieldId\n );\n const narrative = fieldId === getEncounterFieldId(section.id);\n const label = narrative\n ? section.kind === 'narrative'\n ? section.title\n : `${section.title} narrative`\n : (observationDefinition?.label ?? section.title);\n const structured = !narrative && section.kind !== 'observations';\n let display: string;\n if (structured) {\n display = groupedDisplay(observations, section.kind === 'vitals');\n } else if (observations.length) {\n display = observations.map(observationDisplay).join('; ');\n } else {\n // Do not invent a normal finding, numeric zero, or negative choice.\n display = fieldDisplay({ ...snapshot.responses[fieldId] });\n }\n return {\n id: linkId(fieldId),\n fieldId,\n sectionId: section.id,\n label,\n display: display.trim() ? display : '—',\n empty: structured\n ? observations.length === 0 || !display.trim()\n : !hasNativeValue(snapshot.responses[fieldId]),\n };\n })\n );\n}\n\nfunction markdownText(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/\\r?\\n/g, ' · ')\n .replace(/[\\\\[\\]`*_~<>]/g, '\\\\$&');\n}\n\nfunction fieldLink(field: EncounterMdyField): string {\n return `[${markdownDisplay(field.display)}](mdy:${field.id})`;\n}\n\n/** Blank lines/list markers cannot cross a CommonMark link label. Safe breaks can. */\nfunction markdownDisplay(value: string): string {\n return value.split(/\\r?\\n/).map(markdownText).join('<br>');\n}\n\nfunction initialBody(\n snapshot: MdySnapshot,\n fields: EncounterMdyField[]\n): string {\n return [\n `# ${markdownText(snapshot.definition.title)}`,\n ...snapshot.definition.sections.map((section) =>\n [\n `## ${markdownText(section.title)}`,\n fields\n .filter((field) => field.sectionId === section.id)\n .map((field) =>\n section.kind === 'narrative'\n ? fieldLink(field)\n : `- **${markdownText(field.label)}:** ${fieldLink(field)}`\n )\n .join('\\n'),\n ].join('\\n\\n')\n ),\n ].join('\\n\\n');\n}\n\ninterface LinkSpan {\n id: string;\n start: number;\n labelEnd: number;\n end: number;\n}\n\n/** Find inline field links while leaving code, images, and escaped text inert. */\nfunction fieldLinkSpans(body: string): LinkSpan[] {\n const links: LinkSpan[] = [];\n // Pair brackets once. Looking for a closing bracket separately for each\n // opening bracket makes malformed documents with many `[` quadratic.\n const closingBrackets = new Map<number, number>();\n const openingBrackets: number[] = [];\n for (let cursor = 0; cursor < body.length; cursor += 1) {\n if (body[cursor] === '\\\\') cursor += 1;\n else if (body[cursor] === '[') openingBrackets.push(cursor);\n else if (body[cursor] === ']') {\n const opening = openingBrackets.pop();\n if (opening !== undefined) closingBrackets.set(opening, cursor);\n }\n }\n // Inline code closes only on an entire run of the same length. Index those\n // runs once rather than searching every suffix when run lengths differ.\n const ticksByLength = new Map<number, number[]>();\n for (let cursor = 0; cursor < body.length; cursor += 1) {\n if (body[cursor] !== '`') continue;\n const start = cursor;\n while (body[cursor + 1] === '`') cursor += 1;\n const length = cursor - start + 1;\n const runs = ticksByLength.get(length) ?? [];\n runs.push(start);\n ticksByLength.set(length, runs);\n }\n const tickCursors = new Map<number, number>();\n let noMoreTagEnds = false;\n let index = 0;\n while (index < body.length) {\n const lineStart = index === 0 || body[index - 1] === '\\n';\n if (lineStart) {\n const rest = body.slice(index);\n const fence = /^ {0,3}(`{3,}|~{3,})[^\\n]*(?:\\n|$)/.exec(rest);\n if (fence) {\n const marker = fence[1][0];\n const close = new RegExp(\n `^ {0,3}${marker}{${fence[1].length},}[ \\\\t]*\\\\r?$`,\n 'm'\n ).exec(rest.slice(fence[0].length));\n index += close\n ? fence[0].length + close.index + close[0].length\n : rest.length;\n continue;\n }\n if (/^(?: {4}|\\t)/.test(rest)) {\n const end = body.indexOf('\\n', index);\n index = end < 0 ? body.length : end + 1;\n continue;\n }\n }\n if (body.startsWith('<!--', index)) {\n const end = body.indexOf('-->', index + 4);\n index = end < 0 ? body.length : end + 3;\n continue;\n }\n const htmlPrefix =\n !noMoreTagEnds && body[index] === '<'\n ? /^<(pre|code|script|style)\\b/i.exec(body.slice(index, index + 8))\n : null;\n if (htmlPrefix) {\n const tagEnd = body.indexOf('>', index + htmlPrefix[0].length);\n if (tagEnd < 0) noMoreTagEnds = true;\n else {\n const contentStart = tagEnd + 1;\n const end = new RegExp(`</${htmlPrefix[1]}\\\\s*>`, 'i').exec(\n body.slice(contentStart)\n );\n index = end ? contentStart + end.index + end[0].length : body.length;\n continue;\n }\n }\n if (body[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (body[index] === '`') {\n let ticksEnd = index + 1;\n while (body[ticksEnd] === '`') ticksEnd += 1;\n const length = ticksEnd - index;\n const runs = ticksByLength.get(length) ?? [];\n let cursor = tickCursors.get(length) ?? 0;\n while (cursor < runs.length && runs[cursor] < ticksEnd) cursor += 1;\n tickCursors.set(length, cursor);\n const closing = runs[cursor];\n index = closing === undefined ? ticksEnd : closing + length;\n continue;\n }\n if (body[index] !== '[' || body[index - 1] === '!') {\n index += 1;\n continue;\n }\n const labelEnd = closingBrackets.get(index);\n if (labelEnd === undefined) {\n index += 1;\n continue;\n }\n const closing = labelEnd + 1;\n const destination =\n /^\\([ \\t]*(?:<(?:mdy:|#)([a-z0-9_-]+)>|(?:mdy:|#)([a-z0-9_-]+))(?:[ \\t]+(?:\"[^\"\\n]*\"|'[^'\\n]*'))?[ \\t]*\\)/.exec(\n body.slice(closing)\n );\n if (destination) {\n const end = closing + destination[0].length;\n links.push({\n id: destination[1] ?? destination[2],\n start: index,\n labelEnd,\n end,\n });\n index = end;\n } else {\n index += 1;\n }\n }\n return links;\n}\n\n/** Update existing projections only: unlinked prose and removed links stay authored. */\nexport function refreshEncounterMdyLinks(\n body: string,\n fields: EncounterMdyField[]\n): string {\n const byId = new Map(fields.map((field) => [field.id, field]));\n let result = body;\n for (const link of fieldLinkSpans(body).reverse()) {\n const field = byId.get(link.id);\n if (!field) continue;\n result =\n result.slice(0, link.start + 1) +\n markdownDisplay(field.display) +\n result.slice(link.labelEnd);\n }\n return result;\n}\n\ninterface SplitSource {\n frontMatterSource: string;\n yamlSource: string;\n body: string;\n opening: string;\n closing: string;\n}\n\nfunction splitSource(source: string): SplitSource | undefined {\n const opening = /^\\uFEFF?---[ \\t]*\\r?\\n/.exec(source);\n if (!opening) return undefined;\n const remainder = source.slice(opening[0].length);\n const closing = /(^|\\r?\\n)---[ \\t]*(\\r?\\n|$)/.exec(remainder);\n if (!closing) return undefined;\n const yamlEnd = closing.index + closing[1].length;\n const end = opening[0].length + closing.index + closing[0].length;\n return {\n frontMatterSource: source.slice(0, end),\n yamlSource: remainder.slice(0, yamlEnd),\n body: source.slice(end),\n opening: opening[0],\n closing: closing[0].slice(closing[1].length),\n };\n}\n\nfunction fieldsFromFrontMatter(\n frontMatter: Record<string, unknown>\n): EncounterMdyField[] {\n return Object.entries(frontMatter).flatMap(([id, value]) =>\n /^[a-z0-9_-]+$/.test(id) &&\n record(value) &&\n typeof value.fieldId === 'string' &&\n typeof value.sectionId === 'string' &&\n typeof value.display === 'string'\n ? [\n {\n id,\n fieldId: value.fieldId,\n sectionId: value.sectionId,\n label:\n typeof value.label === 'string' ? value.label : value.fieldId,\n display: fieldDisplay(value),\n },\n ]\n : []\n );\n}\n\nfunction validNativeForm(value: unknown): value is FormDefinition {\n if (\n !record(value) ||\n typeof value.id !== 'string' ||\n !Array.isArray(value.pages)\n )\n return false;\n const ids = new Set<string>();\n const fieldsValid = (fields: unknown): boolean =>\n Array.isArray(fields) &&\n fields.every((field) => {\n if (\n !record(field) ||\n typeof field.id !== 'string' ||\n !field.id ||\n typeof field.fieldType !== 'string' ||\n ids.has(field.id)\n )\n return false;\n ids.add(field.id);\n return field.fields === undefined || fieldsValid(field.fields);\n });\n return value.pages.every(\n (page) =>\n record(page) && typeof page.id === 'string' && fieldsValid(page.fields)\n );\n}\n\nfunction validNativeResponses(value: unknown): value is EncounterResponses {\n return (\n record(value) &&\n Object.values(value).every(\n (response) =>\n record(response) &&\n (response.answer === undefined ||\n typeof response.answer === 'string') &&\n (response.selected === undefined ||\n record(response.selected) ||\n Array.isArray(response.selected))\n )\n );\n}\n\nfunction hasTemplateSyntax(body: string): boolean {\n for (const [opener, closer] of [\n ['{{', '}}'],\n ['{%', '%}'],\n ]) {\n // Any closing token after the first opener is enough. Searching once per\n // token avoids rescanning the suffix for every unmatched opening token.\n const start = body.indexOf(opener);\n if (start >= 0 && body.indexOf(closer, start + opener.length) >= 0)\n return true;\n }\n return false;\n}\n\n/** Parse safe YAML and native objects without dropping unknown metadata or provenance. */\nexport function parseEncounterMdy(source: string): ParsedEncounterMdy {\n const split = splitSource(source);\n const result: ParsedEncounterMdy = {\n source,\n frontMatterSource: split?.frontMatterSource ?? '',\n body: split?.body ?? source,\n frontMatter: null,\n diagnostics: [],\n };\n const error = (code: EncounterMdyDiagnostic['code'], message: string) =>\n result.diagnostics.push({ severity: 'error', code, message });\n if (!split) {\n error(\n 'frontmatter',\n 'An encounter MDY document requires YAML front matter.'\n );\n return result;\n }\n try {\n const document = parseDocument(split.yamlSource, { uniqueKeys: true });\n if (document.errors.length || document.warnings.length) {\n throw new Error('Front matter must contain valid safe YAML.');\n }\n const data: unknown = document.toJS({ maxAliasCount: 100 });\n if (!record(data)) throw new Error('Front matter must be a YAML mapping.');\n result.frontMatter = data;\n } catch (cause) {\n error(\n 'frontmatter',\n cause instanceof Error ? cause.message : 'Invalid YAML front matter.'\n );\n return result;\n }\n const data = result.frontMatter;\n if (validNativeForm(data.form)) result.form = data.form;\n else error('form', 'Front matter requires a native eSheet form definition.');\n if (validNativeResponses(data.response)) result.response = data.response;\n else error('response', 'Front matter requires a native eSheet response map.');\n if (data.encounterDefinition !== undefined) {\n try {\n validateEncounterDefinition(\n data.encounterDefinition as EncounterVisitDefinition\n );\n result.definition = data.encounterDefinition as EncounterVisitDefinition;\n } catch {\n error(\n 'definition',\n 'Front matter contains an invalid encounterDefinition.'\n );\n }\n }\n const fields = fieldsFromFrontMatter(data);\n const byId = new Map(fields.map((field) => [field.id, field]));\n const linked = new Set<string>();\n for (const link of fieldLinkSpans(result.body)) {\n if (!byId.has(link.id)) {\n // Ordinary section anchors are not encounter field links.\n if (\n link.id.startsWith('visit_') ||\n result.body.slice(link.labelEnd, link.end).includes('mdy:')\n )\n result.diagnostics.push({\n severity: 'error',\n code: 'dangling-link',\n message: `Field link ${link.id} has no indexed data.`,\n });\n } else linked.add(link.id);\n }\n for (const field of fields) {\n if (!linked.has(field.id) && field.display !== '—' && field.display.trim())\n result.diagnostics.push({\n severity: 'warning',\n code: 'orphan',\n message: `${field.label} is recorded without a narrative field link.`,\n fieldId: field.fieldId,\n });\n }\n if (hasTemplateSyntax(result.body))\n result.diagnostics.push({\n severity: 'warning',\n code: 'template-syntax',\n message:\n 'Template syntax belongs in .mdyt; document prose is displayed literally.',\n });\n return result;\n}\n\nexport function getEncounterDocumentBody(\n responses: EncounterResponses\n): string | undefined {\n return responses[ENCOUNTER_DOCUMENT_FIELD_ID]?.answer;\n}\n\nexport function updateEncounterDocumentBody(\n responses: EncounterResponses,\n body: string,\n options: { _ai?: boolean } = {}\n): EncounterResponses {\n return {\n ...responses,\n [ENCOUNTER_DOCUMENT_FIELD_ID]: {\n ...responses[ENCOUNTER_DOCUMENT_FIELD_ID],\n answer: body,\n ...options,\n },\n };\n}\n\n/** Carry the exact imported block alongside prose through the native response store. */\nexport function encounterDocumentResponse(source: string): FieldResponse {\n const parsed = parseEncounterMdy(source);\n return {\n answer: parsed.body,\n attributes: { mdyFrontMatterSource: parsed.frontMatterSource },\n };\n}\n\nfunction canonicalValue(response?: FieldResponse): unknown {\n if (response?.answer !== undefined) {\n try {\n return JSON.parse(response.answer) as unknown;\n } catch {\n return response.answer;\n }\n }\n return response?.selected ?? null;\n}\n\nconst FORM_PROPERTIES = new Set(['id', 'title', 'pages']);\nconst PAGE_PROPERTIES = new Set(['id', 'title', 'fields']);\nconst FIELD_PROPERTIES = new Set([\n 'id',\n 'fieldType',\n 'title',\n 'question',\n 'required',\n 'width',\n 'content',\n 'fields',\n 'sectionCollapse',\n 'options',\n 'inputType',\n 'unit',\n 'validators',\n '_sourceData',\n]);\nconst SOURCE_PROPERTIES = new Set([\n 'id',\n 'label',\n 'type',\n 'unit',\n 'code',\n 'options',\n 'required',\n 'encounterHideLabel',\n 'findings',\n 'encounterFindings',\n 'encounterRequireCoding',\n 'encounterDate',\n]);\n\nfunction mergeMetadata(\n previous: unknown,\n next: Record<string, unknown>,\n owned: Set<string>\n): Record<string, unknown> {\n const merged = { ...(record(previous) ? previous : {}), ...next };\n for (const property of owned) {\n if (!(property in next)) delete merged[property];\n }\n return merged;\n}\n\n/** Carry native extensions on matching identities; removed pages/fields stay removed. */\nfunction mergeNativeFormMetadata(\n previous: unknown,\n next: FormDefinition\n): FormDefinition {\n if (!record(previous) || previous.id !== next.id) return next;\n const mergeFields = (\n oldFields: unknown,\n newFields: unknown[]\n ): Record<string, unknown>[] => {\n const oldById = new Map(\n (Array.isArray(oldFields) ? oldFields : [])\n .filter(record)\n .map((field) => [field.id, field])\n );\n return newFields.filter(record).map((field) => {\n const oldField = oldById.get(field.id);\n const merged = mergeMetadata(oldField, field, FIELD_PROPERTIES);\n if (Array.isArray(field.fields))\n merged.fields = mergeFields(oldField?.fields, field.fields);\n if (record(field._sourceData))\n merged._sourceData = mergeMetadata(\n oldField?._sourceData,\n field._sourceData,\n SOURCE_PROPERTIES\n );\n return merged;\n });\n };\n const oldPages = new Map(\n (Array.isArray(previous.pages) ? previous.pages : [])\n .filter(record)\n .map((page) => [page.id, page])\n );\n const merged = mergeMetadata(\n previous,\n next as unknown as Record<string, unknown>,\n FORM_PROPERTIES\n );\n merged.pages = next.pages.map((page) => {\n const oldPage = oldPages.get(page.id);\n return {\n ...mergeMetadata(\n oldPage,\n page as unknown as Record<string, unknown>,\n PAGE_PROPERTIES\n ),\n fields: mergeFields(oldPage?.fields, page.fields ?? []),\n };\n });\n return merged as unknown as FormDefinition;\n}\n\n/** Synchronize changed YAML nodes while preserving comments, styles, and key order. */\nfunction setPreserving(\n document: ReturnType<typeof parseDocument>,\n path: (string | number)[],\n value: unknown\n): boolean {\n const node = document.getIn(path, true);\n const previous = document.getIn(path);\n if (JSON.stringify(previous) === JSON.stringify(value)) return false;\n if (record(value) && isMap(node)) {\n let changed = false;\n const keys = new Set(\n Object.keys(value).filter((key) => value[key] !== undefined)\n );\n for (const pair of [...node.items]) {\n const key = String(pair.key);\n if (!keys.has(key)) {\n document.deleteIn([...path, key]);\n changed = true;\n }\n }\n for (const key of keys) {\n changed = setPreserving(document, [...path, key], value[key]) || changed;\n }\n return changed;\n }\n if (Array.isArray(value) && isSeq(node)) {\n if (\n value.every((item) => record(item) && typeof item.id === 'string') &&\n node.items.every(\n (item) => isMap(item) && typeof item.get('id') === 'string'\n )\n ) {\n // Reuse retained YAML nodes when a section is removed or reordered, so\n // their comments, quoting and native extensions survive too.\n const byId = new Map(\n node.items.map((item) => [\n isMap(item) ? item.get('id') : undefined,\n item,\n ])\n );\n node.items = value.map((item) => {\n const id = (item as Record<string, unknown>).id;\n return byId.get(id) ?? document.createNode(item);\n });\n value.forEach((item, index) =>\n setPreserving(document, [...path, index], item)\n );\n return true;\n }\n if (node.items.length === value.length) {\n return value.reduce(\n (changed, item, index) =>\n setPreserving(document, [...path, index], item) || changed,\n false\n );\n }\n }\n document.setIn(path, value);\n return true;\n}\n\n/**\n * Assemble a portable, flattened .mdy. Canonical form/response are native\n * eSheet objects. Flat visit_* projections bridge the native colon-bearing\n * ids to Templit/Kerebron's MDY id grammar; they are never another answer store.\n */\nexport function createEncounterMdy(\n snapshot: MdySnapshot,\n body?: string,\n source?: string\n): string {\n const reserved = snapshot.responses[ENCOUNTER_DOCUMENT_FIELD_ID];\n const previousSource =\n source ?? reserved?.attributes?.mdyFrontMatterSource ?? '';\n const split = splitSource(previousSource);\n const fields = getEncounterMdyFields(snapshot);\n const authoredBody =\n body ?? reserved?.answer ?? split?.body ?? initialBody(snapshot, fields);\n let refreshedBody = refreshEncounterMdyLinks(authoredBody, fields);\n const responses = Object.fromEntries(\n Object.entries(snapshot.responses).filter(\n ([id]) => id !== ENCOUNTER_DOCUMENT_FIELD_ID\n )\n );\n const document = split\n ? parseDocument(split.yamlSource, { uniqueKeys: true })\n : parseDocument('{}\\n');\n if (\n document.errors.length ||\n document.warnings.length ||\n !isMap(document.contents)\n )\n throw new Error('Cannot update invalid MDY front matter.');\n if (!split) document.contents.flow = false;\n let changed = false;\n const existing: unknown = document.toJS({ maxAliasCount: 100 });\n const activeIds = new Set(fields.map((field) => field.id));\n const removedFields: EncounterMdyField[] = [];\n if (record(existing)) {\n for (const [id, value] of Object.entries(existing)) {\n if (\n !activeIds.has(id) &&\n record(value) &&\n typeof value.fieldId === 'string' &&\n id === linkId(value.fieldId)\n ) {\n document.delete(id);\n changed = true;\n removedFields.push({\n id,\n fieldId: value.fieldId,\n sectionId: typeof value.sectionId === 'string' ? value.sectionId : '',\n label: 'Field no longer configured',\n display: 'Field no longer configured',\n });\n }\n }\n }\n refreshedBody = refreshEncounterMdyLinks(refreshedBody, removedFields);\n const oldMdy = record(existing) && record(existing.mdy) ? existing.mdy : {};\n const metadata = {\n ...oldMdy,\n kind: 'document',\n schema: 'esheet',\n template: oldMdy.template ?? {\n name: snapshot.definition.title,\n version: '1.0.0',\n },\n };\n for (const [key, value] of Object.entries({\n mdy: metadata,\n form: mergeNativeFormMetadata(\n record(existing) ? existing.form : undefined,\n createEncounterFormDefinition(snapshot.definition)\n ),\n response: responses,\n encounterDefinition: snapshot.definition,\n })) {\n changed = setPreserving(document, [key], value) || changed;\n }\n for (const field of fields) {\n const oldField = record(existing) ? existing[field.id] : undefined;\n changed =\n setPreserving(document, [field.id], {\n ...(record(oldField) ? oldField : {}),\n fieldId: field.fieldId,\n sectionId: field.sectionId,\n label: field.label,\n value: canonicalValue(responses[field.fieldId]),\n display: field.display,\n }) || changed;\n }\n const newline = split?.opening.endsWith('\\r\\n') ? '\\r\\n' : '\\n';\n if (split && !changed) {\n const boundary =\n refreshedBody && !split.frontMatterSource.endsWith('\\n') ? newline : '';\n return `${split.frontMatterSource}${boundary}${refreshedBody}`;\n }\n const yaml = document.toString({ lineWidth: 0 }).replace(/\\n/g, newline);\n let closing = split?.closing || `---${newline}`;\n if (refreshedBody && !closing.endsWith('\\n')) closing += newline;\n return `${split?.opening ?? `---${newline}`}${yaml}${closing}${refreshedBody}`;\n}\n\n/**\n * Render an already flattened document through Templit's actual pipeline.\n * This identity engine deliberately preserves {{clinical prose}} literally;\n * .mdy is data and markdown, never a template. Hosts sanitize returned HTML.\n */\nexport async function renderEncounterMdy(source: string): Promise<{\n raw: string;\n html?: string;\n fields: EncounterMdyField[];\n diagnostics: EncounterMdyDiagnostic[];\n}> {\n let parsed = parseEncounterMdy(source);\n let fields = fieldsFromFrontMatter(parsed.frontMatter ?? {});\n if (parsed.definition && parsed.response) {\n // A portable document may have been edited outside this component. The\n // canonical response wins over cached visit_* values and display strings.\n // Import lazily because snapshot creation itself calls createEncounterMdy.\n const { createEncounterSnapshot } = await import('./model');\n const snapshot = createEncounterSnapshot(parsed.definition, {\n ...parsed.response,\n [ENCOUNTER_DOCUMENT_FIELD_ID]: encounterDocumentResponse(source),\n });\n parsed = parseEncounterMdy(snapshot.mdy);\n const canonical = new Map(\n getEncounterMdyFields(snapshot).map((field) => [field.fieldId, field])\n );\n fields = fieldsFromFrontMatter(parsed.frontMatter ?? {}).map((field) => ({\n ...field,\n display: canonical.get(field.fieldId)?.display ?? field.display,\n empty:\n canonical.get(field.fieldId)?.empty ??\n !hasNativeValue(parsed.response?.[field.fieldId], true),\n }));\n } else if (parsed.response) {\n const units = new Map<string, string>();\n const indexUnits = (nativeFields: unknown): void => {\n if (!Array.isArray(nativeFields)) return;\n for (const field of nativeFields) {\n if (!record(field)) continue;\n if (typeof field.id === 'string' && typeof field.unit === 'string')\n units.set(field.id, field.unit);\n indexUnits(field.fields);\n }\n };\n parsed.form?.pages.forEach((page) => indexUnits(page.fields));\n const response = parsed.response;\n fields = fields.map((field) => {\n const cached = parsed.frontMatter?.[field.id];\n const native = response[field.fieldId];\n const empty = !hasNativeValue(native, true);\n if (\n !native ||\n !record(cached) ||\n JSON.stringify(cached.value) === JSON.stringify(canonicalValue(native))\n )\n return { ...field, empty };\n const display = fieldDisplay({\n ...native,\n unit: units.get(field.fieldId),\n });\n parsed.diagnostics.push({\n severity: 'warning',\n code: 'response',\n fieldId: field.fieldId,\n message: `${field.label}'s cached projection differed from its canonical response and was refreshed.`,\n });\n return { ...field, display: display.trim() ? display : '—', empty };\n });\n }\n const body = refreshEncounterMdyLinks(parsed.body, fields);\n // Templit consumes one front-matter block before invoking the engine. Give\n // it the document envelope, so YAML-shaped authored prose is never mistaken\n // for a second data layer. The empty envelope also protects malformed/no-FM\n // source previews while their diagnostics remain visible to the host.\n const envelope = parsed.frontMatterSource || '---\\n{}\\n---\\n';\n const { raw, html } = await render(\n `${envelope}${body}`,\n {},\n {\n engine: { name: 'encounter-mdy-document', render: (content) => content },\n markdown: markdownToHtml,\n fieldLinks: false,\n }\n );\n return { raw, html, fields, diagnostics: parsed.diagnostics };\n}\n","import { currentAssertion, type ConditionConcern } from '../ProblemList';\nimport type { AssessmentItem } from '../Assessment';\nimport type { FieldResponse } from '@esheet/core';\nimport { DateTime } from 'luxon';\nimport { isEncounterDate } from './date';\nimport type { Medication } from '../MedicationList';\nimport type { Allergy } from '../AllergyList';\nimport {\n getEncounterFieldId,\n getEncounterSectionFieldIds,\n validateEncounterDefinition,\n} from './definition';\nimport { createEncounterMdy } from './mdy';\nimport type {\n EncounterAssessmentValue,\n EncounterConditionsValue,\n EncounterPlanValue,\n EncounterCode,\n EncounterObservation,\n EncounterResponses,\n EncounterSectionDefinition,\n EncounterValidationIssue,\n EncounterVitalInputDraft,\n EncounterVitalReading,\n EncounterVitalsValue,\n EncounterVisitDefinition,\n EncounterVisitSnapshot,\n} from './types';\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction nonempty(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction measurement(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value) && value >= 0;\n}\n\nfunction parseJson(answer: string | undefined): unknown {\n if (typeof answer !== 'string' || !answer.trim()) return undefined;\n try {\n return JSON.parse(answer) as unknown;\n } catch {\n return undefined;\n }\n}\n\ninterface VitalMeta {\n key: Exclude<\n keyof EncounterVitalReading,\n 'id' | 'recordedAt' | 'position' | 'site' | 'systolic' | 'diastolic'\n >;\n label: string;\n unit: string;\n code: string;\n}\n\n// Codes/units: https://hl7.org/fhir/R4/observation-vitalsigns.html\n// Pain score: https://loinc.org/72514-3 (UCUM {score}).\nconst VITALS: VitalMeta[] = [\n { key: 'pulse', label: 'Pulse', unit: '/min', code: '8867-4' },\n {\n key: 'respiratoryRate',\n label: 'Respiratory rate',\n unit: '/min',\n code: '9279-1',\n },\n { key: 'temperature', label: 'Temperature', unit: 'Cel', code: '8310-5' },\n {\n key: 'oxygenSaturation',\n label: 'Oxygen saturation',\n unit: '%',\n code: '2708-6',\n },\n { key: 'height', label: 'Height', unit: 'cm', code: '8302-2' },\n { key: 'weight', label: 'Weight', unit: 'kg', code: '29463-7' },\n { key: 'pain', label: 'Pain score', unit: '{score}', code: '72514-3' },\n];\nconst VITAL_KEYS = [\n 'systolic',\n 'diastolic',\n ...VITALS.map(({ key }) => key),\n] as const;\n\nfunction loinc(code: string, display: string): EncounterCode {\n return { system: 'http://loinc.org', code, display };\n}\n\n/** Safe UI decoder. Validation separately preserves and reports malformed original answers. */\nexport function parseEncounterVitals(answer?: string): EncounterVitalsValue {\n const parsed = parseJson(answer);\n if (!record(parsed) || !Array.isArray(parsed.readings))\n return { readings: [] };\n const readings = parsed.readings\n .filter(\n (reading): reading is Record<string, unknown> =>\n record(reading) && nonempty(reading.id)\n )\n .map((reading) => {\n const safe: EncounterVitalReading = { id: reading.id as string };\n for (const key of VITAL_KEYS) {\n if (typeof reading[key] === 'number' && Number.isFinite(reading[key]))\n safe[key] = reading[key];\n }\n for (const key of ['recordedAt', 'position', 'site'] as const) {\n if (typeof reading[key] === 'string') safe[key] = reading[key];\n }\n return safe;\n });\n const inputDrafts = Array.isArray(parsed.inputDrafts)\n ? parsed.inputDrafts.filter(\n (draft): draft is EncounterVitalInputDraft =>\n record(draft) &&\n nonempty(draft.readingId) &&\n nonempty(draft.text) &&\n VITAL_KEYS.includes(draft.key as EncounterVitalInputDraft['key'])\n )\n : undefined;\n // An unfinished edit supersedes any old measurement, including stale imported data.\n for (const draft of Array.isArray(parsed.inputDrafts)\n ? parsed.inputDrafts\n : []) {\n if (\n !record(draft) ||\n typeof draft.readingId !== 'string' ||\n !VITAL_KEYS.includes(draft.key as EncounterVitalInputDraft['key'])\n )\n continue;\n const reading = readings.find(({ id }) => id === draft.readingId);\n if (reading) delete reading[draft.key as EncounterVitalInputDraft['key']];\n }\n return inputDrafts ? { readings, inputDrafts } : { readings };\n}\n\n/** Measurement shape checks only; this does not infer diagnoses or normal findings. */\nexport function validateEncounterVitals(\n value: unknown,\n fieldId = '',\n sectionId = ''\n): EncounterValidationIssue[] {\n const issues: EncounterValidationIssue[] = [];\n const add = (\n message: string,\n path?: string,\n readingId?: string,\n code: EncounterValidationIssue['code'] = 'invalid-value'\n ) => {\n issues.push({ sectionId, fieldId, code, message, path, readingId });\n };\n if (!record(value) || !Array.isArray(value.readings)) {\n add('Vitals must contain a readings array.', 'readings');\n return issues;\n }\n for (const key of Object.keys(value)) {\n if (!['readings', 'inputDrafts'].includes(key))\n add(`Unknown vitals property ${key}.`, key);\n }\n const readings = value.readings;\n const ids = new Set<string>();\n readings.forEach((reading: unknown, index: number) => {\n const path = `readings.${index}`;\n if (!record(reading) || !nonempty(reading.id)) {\n add('Each vital reading requires a nonempty id.', `${path}.id`);\n return;\n }\n const id = reading.id;\n if (ids.has(id)) add('Vital reading ids must be unique.', `${path}.id`, id);\n ids.add(id);\n const allowedKeys = new Set<string>([\n 'id',\n 'recordedAt',\n 'position',\n 'site',\n ...VITAL_KEYS,\n ]);\n for (const key of Object.keys(reading)) {\n if (!allowedKeys.has(key))\n add(`Unknown vital property ${key}.`, `${path}.${key}`, id);\n }\n if (!VITAL_KEYS.some((key) => reading[key] !== undefined)) {\n add('Record at least one measurement in a vital reading.', path, id);\n }\n for (const key of VITAL_KEYS) {\n if (reading[key] !== undefined && !measurement(reading[key])) {\n add(\n `${key} must be a finite nonnegative number.`,\n `${path}.${key}`,\n id,\n 'invalid-number'\n );\n }\n }\n if (\n (reading.systolic !== undefined) !==\n (reading.diastolic !== undefined)\n ) {\n add(\n 'Record both systolic and diastolic blood pressure, or leave both blank.',\n path,\n id,\n 'incomplete-blood-pressure'\n );\n }\n if (\n measurement(reading.oxygenSaturation) &&\n reading.oxygenSaturation > 100\n ) {\n add(\n 'Oxygen saturation must be between 0 and 100 percent.',\n `${path}.oxygenSaturation`,\n id,\n 'invalid-number'\n );\n }\n if (measurement(reading.pain) && reading.pain > 10) {\n add(\n 'Pain score must be between 0 and 10.',\n `${path}.pain`,\n id,\n 'invalid-number'\n );\n }\n for (const key of ['recordedAt', 'position', 'site']) {\n if (reading[key] !== undefined && typeof reading[key] !== 'string') {\n add(`${key} must be a string.`, `${path}.${key}`, id);\n }\n }\n if (\n nonempty(reading.recordedAt) &&\n (!/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/.test(reading.recordedAt) ||\n !DateTime.fromISO(reading.recordedAt, { setZone: true }).isValid)\n ) {\n add(\n 'Recorded time must be a valid date and time.',\n `${path}.recordedAt`,\n id\n );\n }\n });\n if (value.inputDrafts !== undefined) {\n if (!Array.isArray(value.inputDrafts)) {\n add(\n 'Unfinished vital inputs must be an inputDrafts array.',\n 'inputDrafts'\n );\n } else {\n const draftKeys = new Set<string>();\n value.inputDrafts.forEach((draft: unknown, index: number) => {\n const path = `inputDrafts.${index}`;\n if (\n !record(draft) ||\n !nonempty(draft.readingId) ||\n !nonempty(draft.text) ||\n !VITAL_KEYS.includes(draft.key as EncounterVitalInputDraft['key'])\n ) {\n add(\n 'Each unfinished input requires a reading id, numeric measurement key and nonempty text.',\n path,\n record(draft) && typeof draft.readingId === 'string'\n ? draft.readingId\n : undefined\n );\n add(\n 'Finish or clear the malformed numeric input before saving.',\n path,\n record(draft) && typeof draft.readingId === 'string'\n ? draft.readingId\n : undefined,\n 'invalid-number'\n );\n return;\n }\n const readingId = draft.readingId;\n if (!ids.has(readingId))\n add(\n 'Unfinished input must reference an existing reading.',\n `${path}.readingId`,\n readingId\n );\n for (const key of Object.keys(draft)) {\n if (!['readingId', 'key', 'text'].includes(key))\n add(\n `Unknown unfinished input property ${key}.`,\n `${path}.${key}`,\n readingId\n );\n }\n const draftKey = JSON.stringify([readingId, draft.key]);\n if (draftKeys.has(draftKey))\n add(\n 'Each measurement can have only one unfinished input.',\n path,\n readingId\n );\n draftKeys.add(draftKey);\n const readingIndex = readings.findIndex(\n (reading: unknown) => record(reading) && reading.id === readingId\n );\n add(\n `Finish or clear the ${draft.key} input before saving.`,\n `readings.${readingIndex}.${draft.key}`,\n readingId,\n 'invalid-number'\n );\n });\n }\n }\n return issues;\n}\n\nfunction optionalStrings(\n value: Record<string, unknown>,\n keys: string[]\n): boolean {\n return keys.every(\n (key) => value[key] === undefined || typeof value[key] === 'string'\n );\n}\n\nfunction validCode(value: unknown): boolean {\n return (\n value === undefined ||\n (record(value) &&\n nonempty(value.system) &&\n nonempty(value.code) &&\n optionalStrings(value, ['display']))\n );\n}\n\n// Mirrors ProblemList's Uncertainty/FieldUncertainty shapes: rendering reads\n// `known`/`reason`/`confidence` straight off each field record, so a malformed\n// block must be caught here, not at render time.\nfunction validFieldUncertainty(value: unknown): boolean {\n return (\n record(value) &&\n typeof value.known === 'boolean' &&\n (value.reason === undefined ||\n ['asked-unknown', 'not-asked', 'masked', 'unavailable'].includes(\n value.reason as string\n )) &&\n (value.confidence === undefined ||\n ['low', 'medium', 'high'].includes(value.confidence as string)) &&\n optionalStrings(value, ['note'])\n );\n}\n\nfunction validUncertainty(value: unknown): boolean {\n if (!record(value)) return false;\n if (\n value.overall !== undefined &&\n !['confirmed', 'low', 'medium', 'high'].includes(value.overall as string)\n ) {\n return false;\n }\n if (value.fields === undefined) return true;\n if (!record(value.fields)) return false;\n return Object.entries(value.fields).every(\n ([field, fieldUncertainty]) =>\n ['coding', 'onset', 'severity', 'laterality', 'bodySite'].includes(\n field\n ) && validFieldUncertainty(fieldUncertainty)\n );\n}\n\nfunction validMedication(value: unknown): value is Medication {\n return (\n record(value) &&\n nonempty(value.id) &&\n nonempty(value.name) &&\n [\n 'unreconciled',\n 'taking',\n 'taking-noncompliant',\n 'not-taking',\n 'unknown',\n ].includes(value.status as string) &&\n optionalStrings(value, [\n 'sig',\n 'discontinuedDate',\n 'note',\n 'task',\n 'strength',\n 'doseForm',\n 'quantity',\n 'quantityUnit',\n 'daysSupply',\n 'route',\n 'frequency',\n 'refills',\n 'startDate',\n 'endDate',\n 'indication',\n 'pharmacyNotes',\n ]) &&\n (value.expired === undefined || typeof value.expired === 'boolean') &&\n (value.prn === undefined || typeof value.prn === 'boolean') &&\n (value.substitution === undefined ||\n ['0', '1'].includes(value.substitution as string)) &&\n validCode(value.code)\n );\n}\n\nfunction validAllergy(value: unknown): value is Allergy {\n return (\n record(value) &&\n nonempty(value.id) &&\n nonempty(value.allergen) &&\n optionalStrings(value, ['reaction', 'onsetDate', 'note']) &&\n (value.type === undefined ||\n ['drug', 'food', 'environmental', 'other'].includes(\n value.type as string\n )) &&\n (value.kind === undefined ||\n ['allergy', 'intolerance'].includes(value.kind as string)) &&\n (value.severity === undefined ||\n ['mild', 'moderate', 'severe'].includes(value.severity as string)) &&\n (value.inactive === undefined || typeof value.inactive === 'boolean') &&\n validCode(value.code)\n );\n}\n\nfunction duplicateIds(values: Record<string, unknown>[], key: string): boolean {\n return new Set(values.map((value) => value[key])).size !== values.length;\n}\n\n/** Shape guard shared with Plan's sibling-item projection: ids plus an optional string note. */\nexport function validAssessmentItem(value: unknown): value is AssessmentItem {\n return (\n record(value) &&\n nonempty(value.concernId) &&\n nonempty(value.assertionId) &&\n optionalStrings(value, ['note'])\n );\n}\n\nexport function validateEncounterAssessment(\n value: unknown,\n fieldId = '',\n sectionId = '',\n externalConcerns: readonly ConditionConcern[] = []\n): EncounterValidationIssue[] {\n const issues: EncounterValidationIssue[] = [];\n const add = (message: string, path?: string) =>\n issues.push({\n sectionId,\n fieldId,\n code: 'invalid-value' as const,\n message,\n path,\n });\n if (\n !record(value) ||\n !Array.isArray(value.concerns) ||\n !Array.isArray(value.items) ||\n !Array.isArray(value.orders)\n ) {\n add('Assessment must contain concerns, items and orders arrays.');\n return issues;\n }\n const concerns = new Map(\n externalConcerns.map((concern) => [\n concern.concernId,\n new Set(concern.assertions.map((assertion) => assertion.id)),\n ])\n );\n const localConcernIds = new Set<string>();\n value.concerns.forEach((concern: unknown, index: number) => {\n const path = `concerns.${index}`;\n if (\n !record(concern) ||\n !nonempty(concern.concernId) ||\n !Array.isArray(concern.assertions) ||\n ![\n 'active',\n 'recurrence',\n 'relapse',\n 'inactive',\n 'remission',\n 'resolved',\n ].includes(concern.clinicalStatus as string)\n ) {\n add(\n 'Each concern requires an id, clinical status and assertions array.',\n path\n );\n return;\n }\n if (localConcernIds.has(concern.concernId))\n add('Concern ids must be unique.', `${path}.concernId`);\n localConcernIds.add(concern.concernId);\n if (\n concern.relationships !== undefined &&\n (!Array.isArray(concern.relationships) ||\n concern.relationships.some(\n (relationship: unknown) =>\n !record(relationship) ||\n !nonempty(relationship.concernId) ||\n ![\n 'caused-by',\n 'evolved-from',\n 'differential-sibling',\n 'complication-of',\n ].includes(relationship.type as string) ||\n !optionalStrings(relationship, ['display'])\n ))\n ) {\n add(\n 'Concern relationships must be an array of records with a supported type and a concernId.',\n `${path}.relationships`\n );\n }\n if (\n concern.observations !== undefined &&\n (!Array.isArray(concern.observations) ||\n concern.observations.some(\n (observation: unknown) =>\n !record(observation) ||\n !nonempty(observation.id) ||\n !nonempty(observation.text) ||\n !isEncounterDate(observation.date) ||\n !optionalStrings(observation, ['author'])\n ))\n ) {\n add(\n 'Concern observations must be an array of records with an id, text and a valid YYYY-MM-DD date.',\n `${path}.observations`\n );\n }\n const assertionIds = new Set<string>();\n concerns.set(concern.concernId, assertionIds);\n concern.assertions.forEach((assertion: unknown, assertionIndex: number) => {\n const assertionPath = `${path}.assertions.${assertionIndex}`;\n if (\n !record(assertion) ||\n !nonempty(assertion.id) ||\n !nonempty(assertion.text) ||\n !isEncounterDate(assertion.date) ||\n ![\n 'unconfirmed',\n 'provisional',\n 'differential',\n 'confirmed',\n 'refuted',\n 'entered-in-error',\n ].includes(assertion.verificationStatus as string) ||\n !optionalStrings(assertion, ['note'])\n ) {\n add(\n 'Each assertion requires an id, text, a valid YYYY-MM-DD date and verification status.',\n assertionPath\n );\n return;\n }\n if (assertionIds.has(assertion.id))\n add(\n 'Assertion ids must be unique within a concern.',\n `${assertionPath}.id`\n );\n assertionIds.add(assertion.id);\n if (\n assertion.changeType !== undefined &&\n !['refinement', 'revision', 'progression', 'reattribution'].includes(\n assertion.changeType as string\n )\n ) {\n add(\n 'Assertion changeType must be refinement, revision, progression or reattribution.',\n `${assertionPath}.changeType`\n );\n }\n if (\n assertion.coding !== undefined &&\n (!Array.isArray(assertion.coding) ||\n assertion.coding.some((coding) => !validCode(coding)))\n ) {\n add(\n 'Assertion coding must contain system and code strings.',\n `${assertionPath}.coding`\n );\n }\n if (\n assertion.uncertainty !== undefined &&\n !validUncertainty(assertion.uncertainty)\n ) {\n add(\n 'Assertion uncertainty must use supported overall confidence and per-field known/reason/confidence records.',\n `${assertionPath}.uncertainty`\n );\n }\n });\n });\n const itemIds = new Set<string>();\n value.items.forEach((item: unknown, index: number) => {\n const path = `items.${index}`;\n if (!validAssessmentItem(item)) {\n add('Assessment items require concern and assertion ids.', path);\n return;\n }\n if (itemIds.has(item.concernId))\n add('Each concern may be assessed once.', `${path}.concernId`);\n itemIds.add(item.concernId);\n if (!concerns.get(item.concernId)?.has(item.assertionId)) {\n add(\n 'An assessment item must reference an existing concern and assertion.',\n path\n );\n }\n });\n const orderIds = new Set<string>();\n value.orders.forEach((order: unknown, index: number) => {\n const path = `orders.${index}`;\n if (\n !record(order) ||\n !nonempty(order.orderId) ||\n !nonempty(order.display) ||\n !['medication', 'lab', 'imaging', 'procedure', 'referral'].includes(\n order.type as string\n ) ||\n !optionalStrings(order, [\n 'concernId',\n 'detail',\n 'timing',\n 'indication',\n 'notes',\n 'bodySite',\n 'referTo',\n ]) ||\n (order.priority !== undefined &&\n !['routine', 'urgent', 'stat'].includes(order.priority as string))\n ) {\n add(\n 'Each order requires an id, display text and supported order type.',\n path\n );\n return;\n }\n if (orderIds.has(order.orderId))\n add('Order ids must be unique.', `${path}.orderId`);\n orderIds.add(order.orderId);\n if (\n order.concernId !== undefined &&\n !concerns.has(order.concernId as string)\n ) {\n add(\n 'An order indication must reference an existing concern.',\n `${path}.concernId`\n );\n }\n if (\n order.code !== undefined &&\n (!record(order.code) ||\n !nonempty(order.code.fullid) ||\n !nonempty(order.code.codetype) ||\n !nonempty(order.code.fullcode))\n ) {\n add(\n 'Order coding requires fullid, codetype and fullcode.',\n `${path}.code`\n );\n }\n });\n return issues;\n}\n\nexport function parseEncounterAssessment(\n answer?: string\n): EncounterAssessmentValue {\n const parsed = parseJson(answer);\n return validateEncounterAssessment(parsed).length === 0\n ? (parsed as EncounterAssessmentValue)\n : { concerns: [], items: [], orders: [] };\n}\n\nfunction validateClinicalList(\n parsed: unknown,\n key: 'medications' | 'allergies',\n validItem: (item: unknown) => boolean,\n title: string,\n fieldId: string,\n sectionId: string\n): EncounterValidationIssue[] {\n const issues: EncounterValidationIssue[] = [];\n const add = (message: string, path?: string) =>\n issues.push({\n sectionId,\n fieldId,\n code: 'invalid-value' as const,\n message,\n path,\n });\n if (!record(parsed) || !Array.isArray(parsed[key])) {\n add(`${title} must contain a ${key} array.`, key);\n return issues;\n }\n const values = parsed[key] as unknown[];\n values.forEach((item, index) => {\n if (!validItem(item))\n add(\n `Invalid ${key === 'medications' ? 'medication' : 'allergy'} record.`,\n `${key}.${index}`\n );\n });\n if (values.every(record) && duplicateIds(values, 'id'))\n add(`${title} ids must be unique.`, key);\n if (key === 'allergies') {\n if (\n parsed.noKnownAllergies !== undefined &&\n typeof parsed.noKnownAllergies !== 'boolean'\n ) {\n add(\n 'No-known-allergies must be an explicit boolean.',\n 'noKnownAllergies'\n );\n }\n if (parsed.noKnownAllergies === true && values.length > 0) {\n add(\n 'Recorded allergies conflict with the no-known-allergies flag.',\n 'noKnownAllergies'\n );\n }\n }\n return issues;\n}\n\nexport function validateEncounterMedicationValue(\n value: unknown,\n fieldId = '',\n sectionId = ''\n): EncounterValidationIssue[] {\n return validateClinicalList(\n value,\n 'medications',\n validMedication,\n 'Medications',\n fieldId,\n sectionId\n );\n}\n\nexport function validateEncounterAllergyValue(\n value: unknown,\n fieldId = '',\n sectionId = ''\n): EncounterValidationIssue[] {\n return validateClinicalList(\n value,\n 'allergies',\n validAllergy,\n 'Allergies',\n fieldId,\n sectionId\n );\n}\n\nexport function validateEncounterConditions(\n value: unknown,\n fieldId = '',\n sectionId = ''\n): EncounterValidationIssue[] {\n return validateEncounterAssessment(\n {\n concerns: record(value) ? value.concerns : undefined,\n items: [],\n orders: [],\n },\n fieldId,\n sectionId\n );\n}\n\n/** Order shape/codes are local; concern references are checked against the full visit. */\nexport function validateEncounterPlan(\n value: unknown,\n fieldId = '',\n sectionId = ''\n): EncounterValidationIssue[] {\n if (!record(value) || !Array.isArray(value.orders))\n return [\n {\n sectionId,\n fieldId,\n code: 'invalid-value',\n message: 'Plan must contain an orders array.',\n path: 'orders',\n },\n ];\n const ids = new Set(\n value.orders.flatMap((order) =>\n record(order) && nonempty(order.concernId) ? [order.concernId] : []\n )\n );\n return validateEncounterAssessment(\n {\n concerns: Array.from(ids, (concernId) => ({\n concernId,\n clinicalStatus: 'active',\n assertions: [],\n })),\n items: [],\n orders: value.orders,\n },\n fieldId,\n sectionId\n );\n}\n\nexport function parseEncounterConditions(\n answer?: string\n): EncounterConditionsValue {\n const parsed = parseJson(answer);\n return validateEncounterConditions(parsed).length === 0\n ? (parsed as EncounterConditionsValue)\n : { concerns: [] };\n}\n\nexport function parseEncounterPlan(answer?: string): EncounterPlanValue {\n const parsed = parseJson(answer);\n return validateEncounterPlan(parsed).length === 0\n ? (parsed as EncounterPlanValue)\n : { orders: [] };\n}\n\nfunction validateCoding(\n section: EncounterSectionDefinition,\n parsed: Record<string, unknown>,\n fieldId: string,\n externalConcerns: readonly ConditionConcern[] = []\n): EncounterValidationIssue[] {\n if (!(section.requireCoding ?? true)) return [];\n const issues: EncounterValidationIssue[] = [];\n const add = (path: string) =>\n issues.push({\n sectionId: section.id,\n fieldId,\n code: 'invalid-value' as const,\n path,\n message: `${section.title} entries require a selected clinical code.`,\n });\n const coded = (code: unknown) => record(code) && validCode(code);\n if (section.kind === 'medications' || section.kind === 'allergies') {\n const key = section.kind;\n if (Array.isArray(parsed[key]))\n parsed[key].forEach((entry, index) => {\n if (record(entry) && !coded(entry.code)) add(`${key}.${index}.code`);\n });\n } else if (section.kind === 'conditions' || section.kind === 'assessment') {\n if (Array.isArray(parsed.concerns))\n parsed.concerns.forEach((entry, index) => {\n if (!record(entry) || !Array.isArray(entry.assertions)) return;\n const assertion = currentAssertion(\n entry as unknown as ConditionConcern\n );\n if (!assertion?.coding?.some(coded)) add(`concerns.${index}.coding`);\n });\n }\n if (section.kind === 'assessment' && Array.isArray(parsed.items)) {\n const concerns = [\n ...(Array.isArray(parsed.concerns) ? parsed.concerns : []),\n ...externalConcerns,\n ];\n parsed.items.forEach((item, index) => {\n if (!record(item)) return;\n const concern = concerns.find(\n (entry) => record(entry) && entry.concernId === item.concernId\n );\n const assertion =\n concern && Array.isArray(concern.assertions)\n ? concern.assertions.find(\n (entry: unknown) => record(entry) && entry.id === item.assertionId\n )\n : undefined;\n if (\n !record(assertion) ||\n !Array.isArray(assertion.coding) ||\n !assertion.coding.some(coded)\n )\n add(`items.${index}.coding`);\n });\n }\n if (section.kind === 'plan' || section.kind === 'assessment') {\n if (Array.isArray(parsed.orders))\n parsed.orders.forEach((order, index) => {\n if (\n record(order) &&\n (!record(order.code) ||\n !nonempty(order.code.fullid) ||\n !nonempty(order.code.codetype) ||\n !nonempty(order.code.fullcode))\n )\n add(`orders.${index}.code`);\n });\n }\n return issues;\n}\n\nfunction validateCustom(\n section: EncounterSectionDefinition,\n answer: string,\n fieldId: string,\n externalConcerns: readonly ConditionConcern[] = []\n): EncounterValidationIssue[] {\n let parsed: unknown;\n try {\n parsed = JSON.parse(answer) as unknown;\n } catch {\n return [\n {\n sectionId: section.id,\n fieldId,\n code: 'invalid-json',\n message: `${section.title} contains malformed JSON.`,\n },\n ];\n }\n const shape =\n section.kind === 'vitals'\n ? validateEncounterVitals(parsed, fieldId, section.id)\n : section.kind === 'assessment'\n ? validateEncounterAssessment(\n parsed,\n fieldId,\n section.id,\n externalConcerns\n )\n : section.kind === 'conditions'\n ? validateEncounterConditions(parsed, fieldId, section.id)\n : section.kind === 'plan'\n ? validateEncounterPlan(parsed, fieldId, section.id)\n : section.kind === 'medications'\n ? validateEncounterMedicationValue(parsed, fieldId, section.id)\n : validateEncounterAllergyValue(parsed, fieldId, section.id);\n return shape.length || !record(parsed)\n ? shape\n : validateCoding(section, parsed, fieldId, externalConcerns);\n}\n\nfunction selectedValue(response?: FieldResponse): string | undefined {\n return record(response?.selected) &&\n typeof response.selected.value === 'string'\n ? response.selected.value\n : undefined;\n}\n\nfunction responseHasContent(response: FieldResponse | undefined): boolean {\n return nonempty(response?.answer) || nonempty(selectedValue(response));\n}\n\nfunction customHasContent(\n section: EncounterSectionDefinition,\n answer?: string\n): boolean {\n const parsed = parseJson(answer);\n if (!record(parsed)) return false;\n if (section.kind === 'vitals')\n return parseEncounterVitals(answer).readings.some((reading) =>\n VITAL_KEYS.some((key) => measurement(reading[key]))\n );\n if (section.kind === 'medications')\n return Array.isArray(parsed.medications) && parsed.medications.length > 0;\n if (section.kind === 'allergies')\n return (\n (Array.isArray(parsed.allergies) && parsed.allergies.length > 0) ||\n parsed.noKnownAllergies === true\n );\n if (section.kind === 'conditions')\n return Array.isArray(parsed.concerns) && parsed.concerns.length > 0;\n return (\n (Array.isArray(parsed.items) && parsed.items.length > 0) ||\n (Array.isArray(parsed.orders) && parsed.orders.length > 0)\n );\n}\n\nexport function getEncounterConcerns(\n definition: EncounterVisitDefinition,\n responses: EncounterResponses\n): ConditionConcern[] {\n const concerns = new Map<string, ConditionConcern>();\n const sections = [...definition.sections].sort(\n (a, b) => Number(b.kind === 'conditions') - Number(a.kind === 'conditions')\n );\n for (const section of sections) {\n if (section.kind !== 'conditions' && section.kind !== 'assessment')\n continue;\n const value = parseJson(\n responses[getEncounterFieldId(section.id, 'value')]?.answer\n );\n if (\n !record(value) ||\n validateEncounterConditions({ concerns: value.concerns }).length\n )\n continue;\n for (const concern of value.concerns as ConditionConcern[])\n if (!concerns.has(concern.concernId))\n concerns.set(concern.concernId, concern);\n }\n return [...concerns.values()];\n}\n\n/** Report required omissions and malformed values without changing recorded data. */\nexport function validateEncounterResponses(\n definition: EncounterVisitDefinition,\n responses: EncounterResponses\n): EncounterValidationIssue[] {\n validateEncounterDefinition(definition);\n const externalConcerns = getEncounterConcerns(definition, responses);\n const issues: EncounterValidationIssue[] = [];\n const add = (\n sectionId: string,\n fieldId: string,\n code: EncounterValidationIssue['code'],\n message: string\n ) => issues.push({ sectionId, fieldId, code, message });\n for (const section of definition.sections) {\n const ids = getEncounterSectionFieldIds(section);\n for (const fieldId of ids) {\n const response = responses[fieldId];\n if (\n response !== undefined &&\n (!record(response) ||\n (response.answer !== undefined &&\n typeof response.answer !== 'string'))\n ) {\n add(\n section.id,\n fieldId,\n 'invalid-response',\n 'An eSheet response must be an object with a string answer.'\n );\n }\n }\n if (section.kind === 'narrative' || section.narrative) {\n const fieldId = getEncounterFieldId(section.id);\n const response = responses[fieldId];\n if (response?.selected !== undefined)\n add(\n section.id,\n fieldId,\n 'invalid-response',\n 'Narrative fields store text in answer.'\n );\n }\n if (section.kind === 'observations') {\n for (const observation of section.observations ?? []) {\n const fieldId = getEncounterFieldId(section.id, observation.id);\n const response = responses[fieldId];\n const hasContent = responseHasContent(response);\n if (observation.required && !hasContent)\n add(\n section.id,\n fieldId,\n 'required',\n `${observation.label} is required.`\n );\n if (observation.type === 'choice') {\n if (\n response?.selected !== undefined &&\n (!record(response.selected) ||\n typeof response.selected.id !== 'string' ||\n typeof response.selected.value !== 'string' ||\n !observation.options?.includes(response.selected.value) ||\n response.selected.id !==\n encodeURIComponent(response.selected.value))\n ) {\n add(\n section.id,\n fieldId,\n 'invalid-choice',\n `${observation.label} must use a configured option.`\n );\n }\n if (nonempty(response?.answer))\n add(\n section.id,\n fieldId,\n 'invalid-response',\n 'Choice observations store the selected option in selected.'\n );\n } else {\n if (response?.selected !== undefined)\n add(\n section.id,\n fieldId,\n 'invalid-response',\n 'Text and numeric observations store their value in answer.'\n );\n if (\n observation.type === 'number' &&\n nonempty(response?.answer) &&\n !measurement(Number(response.answer.trim()))\n ) {\n add(\n section.id,\n fieldId,\n 'invalid-number',\n `${observation.label} must be a finite nonnegative number.`\n );\n }\n }\n }\n } else if (section.kind !== 'narrative') {\n const fieldId = getEncounterFieldId(section.id, 'value');\n const response = responses[fieldId];\n if (response?.selected !== undefined)\n add(\n section.id,\n fieldId,\n 'invalid-response',\n 'Structured sections store serialized JSON in answer.'\n );\n if (nonempty(response?.answer))\n issues.push(\n ...validateCustom(section, response.answer, fieldId, externalConcerns)\n );\n }\n if (section.required) {\n const hasContent =\n section.kind === 'narrative' || section.kind === 'observations'\n ? ids.some((id) => responseHasContent(responses[id]))\n : (section.narrative &&\n responseHasContent(responses[getEncounterFieldId(section.id)])) ||\n customHasContent(\n section,\n responses[getEncounterFieldId(section.id, 'value')]?.answer\n );\n if (!hasContent)\n add(\n section.id,\n ids[0],\n 'required',\n `${section.title} requires at least one recorded answer.`\n );\n }\n }\n const concernIds = new Set(\n externalConcerns.map((concern) => concern.concernId)\n );\n for (const section of definition.sections) {\n if (section.kind !== 'plan') continue;\n const fieldId = getEncounterFieldId(section.id, 'value');\n const parsed = parseJson(responses[fieldId]?.answer);\n if (!record(parsed) || !Array.isArray(parsed.orders)) continue;\n parsed.orders.forEach((order, index) => {\n if (\n record(order) &&\n nonempty(order.concernId) &&\n !concernIds.has(order.concernId)\n )\n issues.push({\n sectionId: section.id,\n fieldId,\n code: 'invalid-value',\n path: `orders.${index}.concernId`,\n message:\n 'A plan order must link to a condition recorded in this visit.',\n });\n });\n }\n return issues;\n}\n\nfunction exportVitals(\n section: EncounterSectionDefinition,\n answer?: string\n): EncounterObservation[] {\n const fieldId = getEncounterFieldId(section.id, 'value');\n return parseEncounterVitals(answer).readings.flatMap((reading) => {\n const base = {\n sectionId: section.id,\n fieldId,\n groupId: reading.id,\n recordedAt: reading.recordedAt,\n position: reading.position,\n site: reading.site,\n };\n const observations: EncounterObservation[] = [];\n if (measurement(reading.systolic) || measurement(reading.diastolic)) {\n observations.push({\n ...base,\n label: 'Blood pressure',\n value: `${measurement(reading.systolic) ? reading.systolic : '?'}/${measurement(reading.diastolic) ? reading.diastolic : '?'}`,\n unit: 'mmHg',\n code: loinc('85354-9', 'Blood pressure panel'),\n components: [\n ...(measurement(reading.systolic)\n ? [\n {\n label: 'Systolic',\n value: reading.systolic,\n unit: 'mmHg',\n code: loinc('8480-6', 'Systolic blood pressure'),\n },\n ]\n : []),\n ...(measurement(reading.diastolic)\n ? [\n {\n label: 'Diastolic',\n value: reading.diastolic,\n unit: 'mmHg',\n code: loinc('8462-4', 'Diastolic blood pressure'),\n },\n ]\n : []),\n ],\n });\n }\n for (const vital of VITALS) {\n const value = reading[vital.key];\n if (\n measurement(value) &&\n (vital.key !== 'pain' || value <= 10) &&\n (vital.key !== 'oxygenSaturation' || value <= 100)\n )\n observations.push({\n ...base,\n label: vital.label,\n value,\n unit: vital.unit,\n code: loinc(vital.code, vital.label),\n });\n }\n return observations;\n });\n}\n\nfunction exportCustom(\n section: EncounterSectionDefinition,\n answer?: string,\n externalConcerns: readonly ConditionConcern[] = []\n): EncounterObservation[] {\n if (section.kind === 'vitals') return exportVitals(section, answer);\n if (\n !nonempty(answer) ||\n validateCustom(\n { ...section, requireCoding: false },\n answer,\n getEncounterFieldId(section.id, 'value'),\n externalConcerns\n ).length > 0\n )\n return [];\n const parsed = parseJson(answer) as Record<string, unknown>;\n const base = {\n sectionId: section.id,\n fieldId: getEncounterFieldId(section.id, 'value'),\n };\n if (section.kind === 'medications') {\n return (parsed.medications as Medication[]).map((medication) => ({\n ...base,\n label: 'Medication',\n value: [\n medication.name,\n medication.sig,\n `Status: ${medication.status}`,\n medication.note,\n (section.requireCoding ?? true) && !medication.code\n ? 'Coding required'\n : undefined,\n ]\n .filter(Boolean)\n .join('; '),\n code: medication.code,\n groupId: medication.id,\n }));\n }\n if (section.kind === 'allergies') {\n if (parsed.noKnownAllergies === true)\n return [\n {\n ...base,\n label: 'Allergies',\n value: 'No known allergies (explicitly recorded)',\n // HL7 IPA NKA example: AllergyIntolerance/716186003 (explicit absence).\n code: {\n system: 'http://snomed.info/sct',\n code: '716186003',\n display: 'No known allergy',\n },\n },\n ];\n return (parsed.allergies as Allergy[]).map((allergy) => ({\n ...base,\n label: allergy.kind === 'intolerance' ? 'Intolerance' : 'Allergy',\n value: [\n allergy.allergen,\n allergy.reaction,\n allergy.severity,\n allergy.inactive ? 'inactive' : undefined,\n allergy.note,\n (section.requireCoding ?? true) && !allergy.code\n ? 'Coding required'\n : undefined,\n ]\n .filter(Boolean)\n .join('; '),\n code: allergy.code,\n groupId: allergy.id,\n }));\n }\n if (section.kind === 'conditions') {\n return (parsed.concerns as ConditionConcern[]).flatMap((concern) => {\n const assertion = currentAssertion(concern);\n if (!assertion) return [];\n return [\n {\n ...base,\n label: 'Condition',\n value: [\n assertion.text,\n `Status: ${concern.clinicalStatus}`,\n `Verification: ${assertion.verificationStatus}`,\n assertion.note,\n (section.requireCoding ?? true) && !assertion.coding?.length\n ? 'Coding required'\n : undefined,\n ]\n .filter(Boolean)\n .join('; '),\n groupId: concern.concernId,\n code:\n assertion.coding?.find((coding) => coding.primary) ??\n assertion.coding?.[0],\n },\n ];\n });\n }\n const assessment: EncounterAssessmentValue =\n section.kind === 'plan'\n ? {\n concerns: [],\n items: [],\n orders: parsed.orders as EncounterPlanValue['orders'],\n }\n : (parsed as unknown as EncounterAssessmentValue);\n const observations: EncounterObservation[] = [];\n for (const item of assessment.items) {\n const assertion = [...assessment.concerns, ...externalConcerns]\n .find((concern) => concern.concernId === item.concernId)\n ?.assertions.find((assertion) => assertion.id === item.assertionId);\n if (assertion)\n observations.push({\n ...base,\n label: 'Assessment',\n value: [\n assertion.text,\n `Verification: ${assertion.verificationStatus}`,\n assertion.note,\n item.note,\n (section.requireCoding ?? true) && !assertion.coding?.length\n ? 'Coding required'\n : undefined,\n ]\n .filter(Boolean)\n .join('; '),\n groupId: item.concernId,\n code:\n assertion.coding?.find((coding) => coding.primary) ??\n assertion.coding?.[0],\n });\n }\n for (const order of assessment.orders) {\n observations.push({\n ...base,\n label: `${order.type} order`,\n value: [\n order.display,\n order.detail,\n order.priority,\n order.timing,\n order.indication,\n order.bodySite,\n order.referTo,\n order.notes,\n (section.requireCoding ?? true) && !order.code\n ? 'Coding required'\n : undefined,\n ]\n .filter(Boolean)\n .join('; '),\n groupId: order.concernId ?? order.orderId,\n code: order.code\n ? {\n system: order.code.codetype,\n code: order.code.fullcode,\n display: order.display,\n }\n : undefined,\n });\n }\n return observations;\n}\n\n/** Export documented narrative and individual observations while retaining the full eSheet response. */\nexport function createEncounterSnapshot(\n definition: EncounterVisitDefinition,\n responses: EncounterResponses\n): EncounterVisitSnapshot {\n const errors = validateEncounterResponses(definition, responses);\n const externalConcerns = getEncounterConcerns(definition, responses);\n const observations: EncounterObservation[] = [];\n for (const section of definition.sections) {\n if (section.kind === 'narrative' || section.narrative) {\n const fieldId = getEncounterFieldId(section.id);\n const answer = responses[fieldId]?.answer;\n if (nonempty(answer))\n observations.push({\n sectionId: section.id,\n fieldId,\n label:\n section.kind === 'narrative'\n ? section.title\n : `${section.title} narrative`,\n value: answer,\n });\n }\n if (section.kind === 'observations') {\n for (const observation of section.observations ?? []) {\n const fieldId = getEncounterFieldId(section.id, observation.id);\n const response = responses[fieldId];\n const raw =\n observation.type === 'choice'\n ? selectedValue(response)\n : response?.answer;\n if (!nonempty(raw)) continue;\n if (\n observation.type === 'choice' &&\n (!observation.options?.includes(raw) ||\n errors.some(\n (issue) =>\n issue.fieldId === fieldId && issue.code === 'invalid-choice'\n ))\n )\n continue;\n const value = observation.type === 'number' ? Number(raw) : raw;\n if (typeof value === 'number' && !measurement(value)) continue;\n observations.push({\n sectionId: section.id,\n fieldId,\n label: observation.label,\n value,\n unit: observation.unit,\n code: observation.code,\n });\n }\n } else if (section.kind !== 'narrative') {\n observations.push(\n ...exportCustom(\n section,\n responses[getEncounterFieldId(section.id, 'value')]?.answer,\n externalConcerns\n )\n );\n }\n }\n const note = [\n definition.title,\n ...definition.sections.flatMap((section) => {\n const values = observations.filter(\n (observation) => observation.sectionId === section.id\n );\n if (values.length === 0) return [];\n return [\n `${section.title}\\n${values\n .map((observation) => {\n const metadata = [\n section.kind === 'vitals' &&\n observation.groupId &&\n `Reading ${observation.groupId}`,\n observation.recordedAt,\n observation.position,\n observation.site,\n ].filter(Boolean);\n const unit =\n observation.unit === 'Cel'\n ? '°C'\n : observation.unit === 'mm[Hg]'\n ? 'mmHg'\n : observation.unit === '{score}'\n ? '/10'\n : observation.unit;\n return `${observation.label}: ${observation.value}${unit ? ` ${unit}` : ''}${metadata.length ? ` (${metadata.join('; ')})` : ''}`;\n })\n .join('\\n')}`,\n ];\n }),\n ].join('\\n\\n');\n // Keep host snapshot transformations detached from the live eSheet store.\n const snapshot = {\n definition,\n responses,\n observations,\n note,\n errors,\n };\n return globalThis.structuredClone({\n ...snapshot,\n mdy: createEncounterMdy(snapshot),\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/components/EncounterVisit/date.ts","../src/components/EncounterVisit/definition.ts","../src/components/EncounterVisit/mdy.ts","../src/components/EncounterVisit/model.ts"],"names":["fieldDisplay","closing","parseDocument","data","merged","isMap","isSeq","yaml","createEncounterSnapshot","render","markdownToHtml","record","nonempty","DateTime","currentAssertion","assertion"],"mappings":"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","file":"chunk-M42FTWY2.cjs","sourcesContent":["/** Date-only clinical assertions require a real Gregorian calendar day, without timezone inference. */\nexport function isEncounterDate(value: unknown): value is string {\n if (typeof value !== 'string' || !/^\\d{4}-\\d{2}-\\d{2}$/.test(value))\n return false;\n const [year, month, day] = value.split('-').map(Number);\n if (year < 1 || month < 1 || month > 12 || day < 1) return false;\n const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n const days = [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n return day <= days[month - 1];\n}\n","import type { FieldDefinition, FormDefinition } from '@esheet/core';\nimport { isEncounterDate } from './date';\nimport type {\n EncounterObservationDefinition,\n EncounterNarrativeFinding,\n EncounterResponses,\n EncounterSectionDefinition,\n EncounterSectionKind,\n EncounterVisitDefinition,\n} from './types';\n\n/** Encode each identifier separately so punctuation cannot collide with delimiters. */\nexport function getEncounterFieldId(\n sectionId: string,\n observationId?: string\n): string {\n const prefix = `encounter:${encodeURIComponent(sectionId)}`;\n return observationId === undefined\n ? `${prefix}:narrative`\n : `${prefix}:observation:${encodeURIComponent(observationId)}`;\n}\n\nexport function getEncounterSectionFieldId(sectionId: string): string {\n return `encounter:${encodeURIComponent(sectionId)}:section`;\n}\n\nexport function getEncounterSectionFieldIds(\n section: EncounterSectionDefinition\n): string[] {\n if (section.kind === 'narrative') return [getEncounterFieldId(section.id)];\n if (section.kind !== 'observations') {\n return [\n ...(section.narrative ? [getEncounterFieldId(section.id)] : []),\n getEncounterFieldId(section.id, 'value'),\n ];\n }\n return [\n ...(section.narrative ? [getEncounterFieldId(section.id)] : []),\n ...(section.observations ?? []).map((observation) =>\n getEncounterFieldId(section.id, observation.id)\n ),\n ];\n}\n\nconst SECTION_KINDS: EncounterSectionKind[] = [\n 'narrative',\n 'observations',\n 'vitals',\n 'medications',\n 'allergies',\n 'conditions',\n 'plan',\n 'assessment',\n];\n\nfunction nonempty(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction optionalString(value: unknown): boolean {\n return value === undefined || typeof value === 'string';\n}\n\nfunction invalid(message: string): never {\n throw new Error(`Invalid encounter definition: ${message}`);\n}\n\nfunction validateFindings(\n findings: EncounterNarrativeFinding[] | undefined,\n location: string\n): void {\n if (findings === undefined) return;\n if (!Array.isArray(findings))\n invalid(`findings must be an array in ${location}`);\n const ids = new Set<string>();\n for (const finding of findings) {\n if (\n !finding ||\n typeof finding !== 'object' ||\n !nonempty(finding.id) ||\n !nonempty(finding.label) ||\n !nonempty(finding.text)\n )\n invalid(`findings require id, label and text in ${location}`);\n if (ids.has(finding.id))\n invalid(`duplicate finding id ${finding.id} in ${location}`);\n ids.add(finding.id);\n if (\n finding.code !== undefined &&\n (!finding.code ||\n typeof finding.code !== 'object' ||\n !nonempty(finding.code.system) ||\n !nonempty(finding.code.code) ||\n !optionalString(finding.code.display))\n )\n invalid(`invalid finding code in ${location}`);\n }\n}\n\n/** Reject ambiguous identifiers and invalid configuration before constructing an eSheet. */\nexport function validateEncounterDefinition(\n definition: EncounterVisitDefinition\n): void {\n if (!definition || typeof definition !== 'object')\n invalid('expected an object');\n if (!nonempty(definition.id) || !nonempty(definition.title)) {\n invalid('id and title must be nonempty strings');\n }\n if (\n definition.encounterDate !== undefined &&\n !isEncounterDate(definition.encounterDate)\n )\n invalid('encounterDate must be a valid YYYY-MM-DD date');\n if (!Array.isArray(definition.sections) || definition.sections.length === 0) {\n invalid('at least one section is required');\n }\n const sectionIds = new Set<string>();\n for (const section of definition.sections) {\n if (!section || typeof section !== 'object')\n invalid('expected a section object');\n if (!nonempty(section.id) || !nonempty(section.title)) {\n invalid('each section requires an id and title');\n }\n if (sectionIds.has(section.id))\n invalid(`duplicate section id ${section.id}`);\n sectionIds.add(section.id);\n if (!SECTION_KINDS.includes(section.kind))\n invalid(`unknown section kind ${section.kind}`);\n if (!optionalString(section.description))\n invalid(`invalid description in ${section.id}`);\n if (\n section.required !== undefined &&\n typeof section.required !== 'boolean'\n ) {\n invalid(`required must be boolean in ${section.id}`);\n }\n if (\n section.narrative !== undefined &&\n typeof section.narrative !== 'boolean'\n ) {\n invalid(`narrative must be boolean in ${section.id}`);\n }\n if (\n section.observations !== undefined &&\n !Array.isArray(section.observations)\n ) {\n invalid(`observations must be an array in ${section.id}`);\n }\n if (section.kind !== 'observations' && section.observations?.length) {\n invalid(\n `only observations sections accept individual observations (${section.id})`\n );\n }\n if (\n section.kind === 'observations' &&\n !section.narrative &&\n !section.observations?.length\n ) {\n invalid(`observations section ${section.id} has no fields`);\n }\n if (\n section.requireCoding !== undefined &&\n typeof section.requireCoding !== 'boolean'\n )\n invalid(`requireCoding must be boolean in ${section.id}`);\n validateFindings(section.findings, section.id);\n if (\n section.findings?.length &&\n section.kind !== 'narrative' &&\n !section.narrative\n )\n invalid(`section findings require a narrative in ${section.id}`);\n const observationIds = new Set<string>();\n for (const observation of section.observations ?? []) {\n if (\n !observation ||\n typeof observation !== 'object' ||\n !nonempty(observation.id) ||\n !nonempty(observation.label)\n ) {\n invalid(`observations in ${section.id} require an id and label`);\n }\n if (observationIds.has(observation.id))\n invalid(`duplicate observation id ${observation.id} in ${section.id}`);\n observationIds.add(observation.id);\n if (\n observation.type !== undefined &&\n !['text', 'number', 'choice'].includes(observation.type)\n ) {\n invalid(`unknown observation type in ${section.id}.${observation.id}`);\n }\n if (!optionalString(observation.unit))\n invalid(`invalid unit in ${section.id}.${observation.id}`);\n if (\n observation.required !== undefined &&\n typeof observation.required !== 'boolean'\n ) {\n invalid(`required must be boolean in ${section.id}.${observation.id}`);\n }\n if (\n observation.code !== undefined &&\n (!observation.code ||\n typeof observation.code !== 'object' ||\n !nonempty(observation.code.system) ||\n !nonempty(observation.code.code) ||\n !optionalString(observation.code.display))\n ) {\n invalid(`invalid code in ${section.id}.${observation.id}`);\n }\n if (\n observation.options !== undefined &&\n (!Array.isArray(observation.options) ||\n observation.options.some((option) => !nonempty(option)) ||\n new Set(observation.options).size !== observation.options.length)\n ) {\n invalid(\n `options must be distinct nonempty strings in ${section.id}.${observation.id}`\n );\n }\n validateFindings(observation.findings, `${section.id}.${observation.id}`);\n if (\n observation.findings?.length &&\n observation.type &&\n observation.type !== 'text'\n )\n invalid(\n `findings require a text observation in ${section.id}.${observation.id}`\n );\n if (observation.type === 'choice' && !observation.options?.length) {\n invalid(\n `choice observation ${section.id}.${observation.id} requires options`\n );\n }\n }\n }\n}\n\nfunction observationField(\n sectionId: string,\n observation: EncounterObservationDefinition\n): FieldDefinition {\n const base = {\n id: getEncounterFieldId(sectionId, observation.id),\n question: observation.label,\n required: observation.required,\n width: 'full' as const,\n _sourceData: { ...observation, encounterFindings: observation.findings },\n };\n if (observation.type === 'choice') {\n return {\n ...base,\n fieldType: 'dropdown',\n options: observation.options?.map((value) => ({\n id: encodeURIComponent(value),\n value,\n text: value,\n })),\n };\n }\n if (observation.type === 'number') {\n return {\n ...base,\n fieldType: 'text',\n inputType: 'number',\n unit: observation.unit,\n validators: [\n { type: 'number', message: 'Enter a finite nonnegative number.' },\n ],\n };\n }\n return {\n ...base,\n fieldType: 'encounterNarrative',\n unit: observation.unit,\n } as unknown as FieldDefinition;\n}\n\nconst CUSTOM_FIELD_TYPES = {\n vitals: 'encounterVitals',\n medications: 'encounterMedications',\n allergies: 'encounterAllergies',\n conditions: 'encounterConditions',\n plan: 'encounterPlan',\n assessment: 'encounterAssessment',\n} as const;\n\n/** All visit sections remain native eSheet sections with native FieldResponse values. */\nexport function createEncounterFormDefinition(\n definition: EncounterVisitDefinition\n): FormDefinition {\n validateEncounterDefinition(definition);\n return {\n id: definition.id,\n title: definition.title,\n pages: [\n {\n id: `${definition.id}:visit`,\n title: definition.title,\n fields: definition.sections.map((section) => {\n const fields: FieldDefinition[] = [];\n if (section.description) {\n fields.push({\n id: `${getEncounterSectionFieldId(section.id)}:description`,\n fieldType: 'display',\n content: section.description,\n width: 'full',\n });\n }\n if (section.kind === 'narrative' || section.narrative) {\n fields.push({\n id: getEncounterFieldId(section.id),\n fieldType: 'encounterNarrative',\n question:\n section.kind === 'narrative'\n ? section.title\n : `${section.title} narrative`,\n required:\n section.kind === 'narrative' ? section.required : undefined,\n width: 'full',\n _sourceData: {\n encounterHideLabel: true,\n encounterFindings: section.findings,\n },\n } as unknown as FieldDefinition);\n }\n if (section.kind === 'observations') {\n fields.push(\n ...(section.observations ?? []).map((observation) =>\n observationField(section.id, observation)\n )\n );\n } else if (section.kind !== 'narrative') {\n // eSheet deliberately keeps custom types outside its built-in TypeScript union.\n fields.push({\n id: getEncounterFieldId(section.id, 'value'),\n fieldType: CUSTOM_FIELD_TYPES[section.kind],\n question: section.title,\n required: section.required,\n _sourceData: {\n encounterRequireCoding: section.requireCoding ?? true,\n encounterDate: definition.encounterDate,\n },\n width: 'full',\n } as unknown as FieldDefinition);\n }\n return {\n id: getEncounterSectionFieldId(section.id),\n fieldType: 'section' as const,\n title: section.title,\n sectionCollapse: 'expanded' as const,\n width: 'full' as const,\n fields,\n };\n }),\n },\n ],\n };\n}\n\n/** Optional uncoded phrases; answers exist only after an explicit selection. */\nexport const DEFAULT_ENCOUNTER_VISIT_DEFINITION: EncounterVisitDefinition = {\n id: 'anonymous-encounter',\n title: 'Encounter visit',\n sections: [\n {\n id: 'hpi',\n title: 'History of present illness',\n kind: 'narrative',\n findings: [\n { id: 'no-fever', label: 'No fever', text: 'Denies fever.' },\n { id: 'no-trauma', label: 'No trauma', text: 'Denies recent trauma.' },\n {\n id: 'no-radiation',\n label: 'No radiation',\n text: 'Pain does not radiate.',\n },\n ],\n },\n {\n id: 'history',\n title: 'Patient history',\n kind: 'observations',\n narrative: true,\n findings: [\n {\n id: 'patient-source',\n label: 'Patient provided history',\n text: 'History provided by the patient.',\n },\n {\n id: 'records-reviewed',\n label: 'Records reviewed',\n text: 'History supplemented by available records.',\n },\n ],\n observations: [\n {\n id: 'medical',\n label: 'Medical history',\n findings: [\n {\n id: 'reviewed',\n label: 'History reviewed',\n text: 'Medical history reviewed.',\n },\n {\n id: 'no-additional-history',\n label: 'No additional history',\n text: 'No additional medical history reported.',\n },\n ],\n },\n {\n id: 'surgical',\n label: 'Surgical history',\n findings: [\n {\n id: 'no-surgeries',\n label: 'No prior surgery',\n text: 'No previous surgery reported.',\n },\n {\n id: 'reviewed',\n label: 'History reviewed',\n text: 'Surgical history reviewed.',\n },\n ],\n },\n {\n id: 'family',\n label: 'Family history',\n findings: [\n {\n id: 'unknown',\n label: 'History unknown',\n text: 'Family history unknown.',\n },\n {\n id: 'noncontributory',\n label: 'No pertinent history',\n text: 'No pertinent family history reported.',\n },\n ],\n },\n {\n id: 'social',\n label: 'Social history',\n findings: [\n {\n id: 'never-smoked',\n label: 'Never smoked',\n text: 'Never smoked.',\n },\n {\n id: 'no-alcohol',\n label: 'No alcohol use',\n text: 'Denies alcohol use.',\n },\n {\n id: 'no-recreational-drugs',\n label: 'No recreational drug use',\n text: 'Denies recreational drug use.',\n },\n ],\n },\n ],\n },\n {\n id: 'ros',\n title: 'Review of systems',\n kind: 'observations',\n narrative: true,\n findings: [\n {\n id: 'pertinent-hpi',\n label: 'Additional symptoms in HPI',\n text: 'Additional symptoms are documented in the history of present illness.',\n },\n {\n id: 'limited-review',\n label: 'Limited review',\n text: 'Review of systems limited by patient condition.',\n },\n ],\n observations: [\n {\n id: 'constitutional',\n label: 'Constitutional',\n findings: [\n {\n id: 'no-fever-chills',\n label: 'No fever or chills',\n text: 'Denies fever or chills.',\n },\n ],\n },\n {\n id: 'cardiovascular',\n label: 'Cardiovascular',\n findings: [\n {\n id: 'no-chest-pain',\n label: 'No chest pain',\n text: 'Denies chest pain.',\n },\n ],\n },\n {\n id: 'respiratory',\n label: 'Respiratory',\n findings: [\n {\n id: 'no-dyspnea',\n label: 'No dyspnea',\n text: 'Denies shortness of breath.',\n },\n { id: 'no-cough', label: 'No cough', text: 'Denies cough.' },\n ],\n },\n {\n id: 'musculoskeletal',\n label: 'Musculoskeletal',\n findings: [\n { id: 'back-pain', label: 'Back pain', text: 'Reports back pain.' },\n {\n id: 'no-joint-swelling',\n label: 'No joint swelling',\n text: 'Denies joint swelling.',\n },\n ],\n },\n {\n id: 'neurological',\n label: 'Neurological',\n findings: [\n {\n id: 'no-weakness',\n label: 'No weakness',\n text: 'Denies weakness.',\n },\n {\n id: 'no-numbness-tingling',\n label: 'No numbness / tingling',\n text: 'Denies numbness or tingling.',\n },\n {\n id: 'no-bowel-bladder-changes',\n label: 'No bowel / bladder changes',\n text: 'Denies bowel or bladder changes.',\n },\n ],\n },\n ],\n },\n {\n id: 'vitals',\n title: 'Vitals',\n kind: 'vitals',\n },\n {\n id: 'exam',\n title: 'Physical examination',\n kind: 'observations',\n narrative: true,\n findings: [\n {\n id: 'focused',\n label: 'Focused examination',\n text: 'Focused examination performed.',\n },\n {\n id: 'limited-by-pain',\n label: 'Limited by pain',\n text: 'Examination limited by pain.',\n },\n ],\n observations: [\n {\n id: 'general',\n label: 'General appearance',\n findings: [\n {\n id: 'no-distress',\n label: 'No acute distress',\n text: 'No acute distress.',\n },\n { id: 'alert', label: 'Alert', text: 'Alert and conversant.' },\n ],\n },\n {\n id: 'head-neck',\n label: 'Head and neck',\n findings: [\n {\n id: 'no-cervical-nodes',\n label: 'No cervical lymphadenopathy',\n text: 'No palpable cervical lymphadenopathy.',\n },\n {\n id: 'no-oral-lesions',\n label: 'No oral lesions',\n text: 'No visible oral lesions.',\n },\n ],\n },\n {\n id: 'cardiovascular',\n label: 'Cardiovascular',\n findings: [\n {\n id: 'regular',\n label: 'Regular rhythm',\n text: 'Regular rate and rhythm.',\n },\n ],\n },\n {\n id: 'respiratory',\n label: 'Respiratory',\n findings: [\n {\n id: 'clear',\n label: 'Clear lungs',\n text: 'Lungs clear to auscultation bilaterally.',\n },\n {\n id: 'nonlabored',\n label: 'Nonlabored',\n text: 'Breathing is nonlabored.',\n },\n ],\n },\n {\n id: 'abdomen',\n label: 'Abdomen',\n findings: [\n {\n id: 'soft',\n label: 'Soft / nontender',\n text: 'Abdomen soft and nontender.',\n },\n ],\n },\n {\n id: 'musculoskeletal',\n label: 'Musculoskeletal / back',\n findings: [\n {\n id: 'no-midline-tenderness',\n label: 'No midline tenderness',\n text: 'No midline spinal tenderness.',\n },\n {\n id: 'paraspinal-tenderness',\n label: 'Paraspinal tenderness',\n text: 'Paraspinal tenderness is present.',\n },\n {\n id: 'range-of-motion',\n label: 'Preserved range of motion',\n text: 'Spinal range of motion is preserved.',\n },\n ],\n },\n {\n id: 'neurological',\n label: 'Neurological',\n findings: [\n {\n id: 'symmetric-strength',\n label: 'Symmetric leg strength',\n text: 'Strength symmetric in both lower extremities.',\n },\n {\n id: 'light-touch',\n label: 'Intact light touch',\n text: 'Sensation intact to light touch in both lower extremities.',\n },\n {\n id: 'steady-gait',\n label: 'Steady gait',\n text: 'Gait is steady.',\n },\n ],\n },\n {\n id: 'skin',\n label: 'Skin',\n findings: [\n { id: 'warm-dry', label: 'Warm / dry', text: 'Skin warm and dry.' },\n ],\n },\n ],\n },\n {\n id: 'conditions',\n title: 'Conditions',\n kind: 'conditions',\n requireCoding: true,\n },\n {\n id: 'medications',\n title: 'Presenting medications',\n kind: 'medications',\n requireCoding: true,\n },\n {\n id: 'allergies',\n title: 'Allergies and intolerances',\n kind: 'allergies',\n requireCoding: true,\n },\n {\n id: 'assessment',\n title: 'Assessment and orders',\n kind: 'assessment',\n requireCoding: true,\n },\n {\n id: 'plan',\n title: 'Plan',\n kind: 'plan',\n narrative: true,\n requireCoding: true,\n findings: [\n {\n id: 'questions',\n label: 'Questions answered',\n text: 'Questions were answered.',\n },\n {\n id: 'understanding',\n label: 'Understanding confirmed',\n text: 'Patient verbalized understanding of the plan.',\n },\n ],\n },\n {\n id: 'follow-up',\n title: 'Follow-up and appointments',\n kind: 'observations',\n narrative: true,\n findings: [\n {\n id: 'arrangements-reviewed',\n label: 'Arrangements reviewed',\n text: 'Follow-up arrangements reviewed with the patient.',\n },\n {\n id: 'patient-to-schedule',\n label: 'Patient will schedule',\n text: 'Patient will contact the office to schedule follow-up.',\n },\n ],\n observations: [\n {\n id: 'interval',\n label: 'Return interval',\n findings: [\n { id: 'one-week', label: '1 week', text: '1 week' },\n { id: 'one-month', label: '1 month', text: '1 month' },\n { id: 'three-months', label: '3 months', text: '3 months' },\n ],\n },\n {\n id: 'appointment',\n label: 'Appointment details',\n findings: [\n {\n id: 'scheduled',\n label: 'Appointment scheduled',\n text: 'Appointment scheduled.',\n },\n {\n id: 'patient-to-schedule',\n label: 'Patient to schedule',\n text: 'Patient to schedule appointment.',\n },\n {\n id: 'scheduling-pending',\n label: 'Scheduling pending',\n text: 'Appointment scheduling pending.',\n },\n ],\n },\n ],\n },\n ],\n};\n\n/** Only the facts supplied for the anonymous example; no assumed exam or treatment. */\nexport const EXAMPLE_ENCOUNTER_VISIT_RESPONSES: EncounterResponses = {\n [getEncounterFieldId('hpi')]: {\n answer: '45-year-old male with pre-diabetes, back pain and hypertension.',\n },\n};\n","import type { FieldResponse, FormDefinition } from '@esheet/core';\nimport { fieldDisplay, render } from '@mieweb/templit';\nimport { markdownToHtml } from '@mieweb/templit/markdown';\nimport { isMap, isSeq, parseDocument } from 'yaml';\nimport {\n createEncounterFormDefinition,\n getEncounterFieldId,\n getEncounterSectionFieldIds,\n validateEncounterDefinition,\n} from './definition';\nimport type {\n EncounterObservation,\n EncounterResponses,\n EncounterVisitDefinition,\n EncounterVisitSnapshot,\n} from './types';\n\n/** Authored prose is a native answer; it is excluded from its own MDY response layer. */\nexport const ENCOUNTER_DOCUMENT_FIELD_ID = '__encounter_document__';\n\ntype MdySnapshot = Pick<\n EncounterVisitSnapshot,\n 'definition' | 'responses' | 'observations'\n>;\n\nexport interface EncounterMdyField {\n /** MDY/Kerebron-safe id, stable across ordering and definition changes. */\n id: string;\n /** Original eSheet field id; the canonical answer remains in response[fieldId]. */\n fieldId: string;\n sectionId: string;\n label: string;\n display: string;\n /** Derived capture state for report pruning; never stored in the MDY envelope. */\n empty?: boolean;\n}\n\nexport interface EncounterMdyDiagnostic {\n severity: 'error' | 'warning';\n code:\n | 'frontmatter'\n | 'form'\n | 'response'\n | 'definition'\n | 'dangling-link'\n | 'orphan'\n | 'template-syntax';\n message: string;\n fieldId?: string;\n}\n\nexport interface ParsedEncounterMdy {\n source: string;\n frontMatterSource: string;\n body: string;\n frontMatter: Record<string, unknown> | null;\n form?: FormDefinition;\n response?: EncounterResponses;\n definition?: EncounterVisitDefinition;\n diagnostics: EncounterMdyDiagnostic[];\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction hasValue(value: unknown): boolean {\n if (typeof value === 'string') return value.trim().length > 0;\n if (typeof value === 'number' || typeof value === 'boolean') return true;\n if (Array.isArray(value)) return value.some(hasValue);\n if (record(value)) return Object.values(value).some(hasValue);\n return false;\n}\n\n/** Selection identities and labels alone are not an explicitly selected value. */\nfunction hasSelectedValue(selected: unknown): boolean {\n if (Array.isArray(selected)) return selected.some(hasSelectedValue);\n if (!record(selected)) return false;\n if ('value' in selected) return hasValue(selected.value);\n return Object.values(selected).some(hasSelectedValue);\n}\n\nfunction hasNativeValue(\n response?: FieldResponse,\n parseAnswer = false\n): boolean {\n return (\n (response?.answer !== undefined &&\n hasValue(parseAnswer ? canonicalValue(response) : response.answer)) ||\n hasSelectedValue(response?.selected)\n );\n}\n\n/** Encode native ids without assuming their punctuation is valid in MDY. */\nfunction linkId(fieldId: string): string {\n return `visit_${Array.from(new TextEncoder().encode(fieldId), (byte) =>\n byte.toString(16).padStart(2, '0')\n ).join('')}`;\n}\n\nfunction unitDisplay(unit?: string): string | undefined {\n return unit === 'Cel'\n ? '°C'\n : unit === 'mm[Hg]'\n ? 'mmHg'\n : unit === '{score}'\n ? '/10'\n : unit;\n}\n\nfunction observationDisplay(observation: EncounterObservation): string {\n const unit = unitDisplay(observation.unit);\n return `${observation.value}${unit ? ` ${unit}` : ''}`;\n}\n\nfunction groupedDisplay(\n observations: EncounterObservation[],\n showReadingId: boolean\n): string {\n const groups = new Map<string, EncounterObservation[]>();\n for (const observation of observations) {\n const key = observation.groupId ?? '';\n const group = groups.get(key) ?? [];\n group.push(observation);\n groups.set(key, group);\n }\n return Array.from(groups, ([groupId, values]) => {\n const first = values[0];\n const metadata = [\n showReadingId ? groupId : undefined,\n first.recordedAt,\n first.position,\n first.site,\n ].filter(Boolean);\n const summary = values\n .map((value) => `${value.label}: ${observationDisplay(value)}`)\n .join('\\n');\n return metadata.length ? `${summary} (${metadata.join('; ')})` : summary;\n }).join('\\n\\n');\n}\n\n/** One link projection per native field, including empty memory aids. */\nexport function getEncounterMdyFields(\n snapshot: MdySnapshot\n): EncounterMdyField[] {\n return snapshot.definition.sections.flatMap((section) =>\n getEncounterSectionFieldIds(section).map((fieldId) => {\n const observations = snapshot.observations.filter(\n (observation) => observation.fieldId === fieldId\n );\n const observationDefinition = section.observations?.find(\n (observation) =>\n getEncounterFieldId(section.id, observation.id) === fieldId\n );\n const narrative = fieldId === getEncounterFieldId(section.id);\n const label = narrative\n ? section.kind === 'narrative'\n ? section.title\n : `${section.title} narrative`\n : (observationDefinition?.label ?? section.title);\n const structured = !narrative && section.kind !== 'observations';\n let display: string;\n if (structured) {\n display = groupedDisplay(observations, section.kind === 'vitals');\n } else if (observations.length) {\n display = observations.map(observationDisplay).join('; ');\n } else {\n // Do not invent a normal finding, numeric zero, or negative choice.\n display = fieldDisplay({ ...snapshot.responses[fieldId] });\n }\n return {\n id: linkId(fieldId),\n fieldId,\n sectionId: section.id,\n label,\n display: display.trim() ? display : '—',\n empty: structured\n ? observations.length === 0 || !display.trim()\n : !hasNativeValue(snapshot.responses[fieldId]),\n };\n })\n );\n}\n\nfunction markdownText(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/\\r?\\n/g, ' · ')\n .replace(/[\\\\[\\]`*_~<>]/g, '\\\\$&');\n}\n\nfunction fieldLink(field: EncounterMdyField): string {\n return `[${markdownDisplay(field.display)}](mdy:${field.id})`;\n}\n\n/** Blank lines/list markers cannot cross a CommonMark link label. Safe breaks can. */\nfunction markdownDisplay(value: string): string {\n return value.split(/\\r?\\n/).map(markdownText).join('<br>');\n}\n\nfunction initialBody(\n snapshot: MdySnapshot,\n fields: EncounterMdyField[]\n): string {\n return [\n `# ${markdownText(snapshot.definition.title)}`,\n ...snapshot.definition.sections.map((section) =>\n [\n `## ${markdownText(section.title)}`,\n fields\n .filter((field) => field.sectionId === section.id)\n .map((field) =>\n section.kind === 'narrative'\n ? fieldLink(field)\n : `- **${markdownText(field.label)}:** ${fieldLink(field)}`\n )\n .join('\\n'),\n ].join('\\n\\n')\n ),\n ].join('\\n\\n');\n}\n\ninterface LinkSpan {\n id: string;\n start: number;\n labelEnd: number;\n end: number;\n}\n\n/** Find inline field links while leaving code, images, and escaped text inert. */\nfunction fieldLinkSpans(body: string): LinkSpan[] {\n const links: LinkSpan[] = [];\n // Pair brackets once. Looking for a closing bracket separately for each\n // opening bracket makes malformed documents with many `[` quadratic.\n const closingBrackets = new Map<number, number>();\n const openingBrackets: number[] = [];\n for (let cursor = 0; cursor < body.length; cursor += 1) {\n if (body[cursor] === '\\\\') cursor += 1;\n else if (body[cursor] === '[') openingBrackets.push(cursor);\n else if (body[cursor] === ']') {\n const opening = openingBrackets.pop();\n if (opening !== undefined) closingBrackets.set(opening, cursor);\n }\n }\n // Inline code closes only on an entire run of the same length. Index those\n // runs once rather than searching every suffix when run lengths differ.\n const ticksByLength = new Map<number, number[]>();\n for (let cursor = 0; cursor < body.length; cursor += 1) {\n if (body[cursor] !== '`') continue;\n const start = cursor;\n while (body[cursor + 1] === '`') cursor += 1;\n const length = cursor - start + 1;\n const runs = ticksByLength.get(length) ?? [];\n runs.push(start);\n ticksByLength.set(length, runs);\n }\n const tickCursors = new Map<number, number>();\n let noMoreTagEnds = false;\n let index = 0;\n while (index < body.length) {\n const lineStart = index === 0 || body[index - 1] === '\\n';\n if (lineStart) {\n const rest = body.slice(index);\n const fence = /^ {0,3}(`{3,}|~{3,})[^\\n]*(?:\\n|$)/.exec(rest);\n if (fence) {\n const marker = fence[1][0];\n const close = new RegExp(\n `^ {0,3}${marker}{${fence[1].length},}[ \\\\t]*\\\\r?$`,\n 'm'\n ).exec(rest.slice(fence[0].length));\n index += close\n ? fence[0].length + close.index + close[0].length\n : rest.length;\n continue;\n }\n if (/^(?: {4}|\\t)/.test(rest)) {\n const end = body.indexOf('\\n', index);\n index = end < 0 ? body.length : end + 1;\n continue;\n }\n }\n if (body.startsWith('<!--', index)) {\n const end = body.indexOf('-->', index + 4);\n index = end < 0 ? body.length : end + 3;\n continue;\n }\n const htmlPrefix =\n !noMoreTagEnds && body[index] === '<'\n ? /^<(pre|code|script|style)\\b/i.exec(body.slice(index, index + 8))\n : null;\n if (htmlPrefix) {\n const tagEnd = body.indexOf('>', index + htmlPrefix[0].length);\n if (tagEnd < 0) noMoreTagEnds = true;\n else {\n const contentStart = tagEnd + 1;\n const end = new RegExp(`</${htmlPrefix[1]}\\\\s*>`, 'i').exec(\n body.slice(contentStart)\n );\n index = end ? contentStart + end.index + end[0].length : body.length;\n continue;\n }\n }\n if (body[index] === '\\\\') {\n index += 2;\n continue;\n }\n if (body[index] === '`') {\n let ticksEnd = index + 1;\n while (body[ticksEnd] === '`') ticksEnd += 1;\n const length = ticksEnd - index;\n const runs = ticksByLength.get(length) ?? [];\n let cursor = tickCursors.get(length) ?? 0;\n while (cursor < runs.length && runs[cursor] < ticksEnd) cursor += 1;\n tickCursors.set(length, cursor);\n const closing = runs[cursor];\n index = closing === undefined ? ticksEnd : closing + length;\n continue;\n }\n if (body[index] !== '[' || body[index - 1] === '!') {\n index += 1;\n continue;\n }\n const labelEnd = closingBrackets.get(index);\n if (labelEnd === undefined) {\n index += 1;\n continue;\n }\n const closing = labelEnd + 1;\n const destination =\n /^\\([ \\t]*(?:<(?:mdy:|#)([a-z0-9_-]+)>|(?:mdy:|#)([a-z0-9_-]+))(?:[ \\t]+(?:\"[^\"\\n]*\"|'[^'\\n]*'))?[ \\t]*\\)/.exec(\n body.slice(closing)\n );\n if (destination) {\n const end = closing + destination[0].length;\n links.push({\n id: destination[1] ?? destination[2],\n start: index,\n labelEnd,\n end,\n });\n index = end;\n } else {\n index += 1;\n }\n }\n return links;\n}\n\n/** Update existing projections only: unlinked prose and removed links stay authored. */\nexport function refreshEncounterMdyLinks(\n body: string,\n fields: EncounterMdyField[]\n): string {\n const byId = new Map(fields.map((field) => [field.id, field]));\n let result = body;\n for (const link of fieldLinkSpans(body).reverse()) {\n const field = byId.get(link.id);\n if (!field) continue;\n result =\n result.slice(0, link.start + 1) +\n markdownDisplay(field.display) +\n result.slice(link.labelEnd);\n }\n return result;\n}\n\ninterface SplitSource {\n frontMatterSource: string;\n yamlSource: string;\n body: string;\n opening: string;\n closing: string;\n}\n\nfunction splitSource(source: string): SplitSource | undefined {\n const opening = /^\\uFEFF?---[ \\t]*\\r?\\n/.exec(source);\n if (!opening) return undefined;\n const remainder = source.slice(opening[0].length);\n const closing = /(^|\\r?\\n)---[ \\t]*(\\r?\\n|$)/.exec(remainder);\n if (!closing) return undefined;\n const yamlEnd = closing.index + closing[1].length;\n const end = opening[0].length + closing.index + closing[0].length;\n return {\n frontMatterSource: source.slice(0, end),\n yamlSource: remainder.slice(0, yamlEnd),\n body: source.slice(end),\n opening: opening[0],\n closing: closing[0].slice(closing[1].length),\n };\n}\n\nfunction fieldsFromFrontMatter(\n frontMatter: Record<string, unknown>\n): EncounterMdyField[] {\n return Object.entries(frontMatter).flatMap(([id, value]) =>\n /^[a-z0-9_-]+$/.test(id) &&\n record(value) &&\n typeof value.fieldId === 'string' &&\n typeof value.sectionId === 'string' &&\n typeof value.display === 'string'\n ? [\n {\n id,\n fieldId: value.fieldId,\n sectionId: value.sectionId,\n label:\n typeof value.label === 'string' ? value.label : value.fieldId,\n display: fieldDisplay(value),\n },\n ]\n : []\n );\n}\n\nfunction validNativeForm(value: unknown): value is FormDefinition {\n if (\n !record(value) ||\n typeof value.id !== 'string' ||\n !Array.isArray(value.pages)\n )\n return false;\n const ids = new Set<string>();\n const fieldsValid = (fields: unknown): boolean =>\n Array.isArray(fields) &&\n fields.every((field) => {\n if (\n !record(field) ||\n typeof field.id !== 'string' ||\n !field.id ||\n typeof field.fieldType !== 'string' ||\n ids.has(field.id)\n )\n return false;\n ids.add(field.id);\n return field.fields === undefined || fieldsValid(field.fields);\n });\n return value.pages.every(\n (page) =>\n record(page) && typeof page.id === 'string' && fieldsValid(page.fields)\n );\n}\n\nfunction validNativeResponses(value: unknown): value is EncounterResponses {\n return (\n record(value) &&\n Object.values(value).every(\n (response) =>\n record(response) &&\n (response.answer === undefined ||\n typeof response.answer === 'string') &&\n (response.selected === undefined ||\n record(response.selected) ||\n Array.isArray(response.selected))\n )\n );\n}\n\nfunction hasTemplateSyntax(body: string): boolean {\n for (const [opener, closer] of [\n ['{{', '}}'],\n ['{%', '%}'],\n ]) {\n // Any closing token after the first opener is enough. Searching once per\n // token avoids rescanning the suffix for every unmatched opening token.\n const start = body.indexOf(opener);\n if (start >= 0 && body.indexOf(closer, start + opener.length) >= 0)\n return true;\n }\n return false;\n}\n\n/** Parse safe YAML and native objects without dropping unknown metadata or provenance. */\nexport function parseEncounterMdy(source: string): ParsedEncounterMdy {\n const split = splitSource(source);\n const result: ParsedEncounterMdy = {\n source,\n frontMatterSource: split?.frontMatterSource ?? '',\n body: split?.body ?? source,\n frontMatter: null,\n diagnostics: [],\n };\n const error = (code: EncounterMdyDiagnostic['code'], message: string) =>\n result.diagnostics.push({ severity: 'error', code, message });\n if (!split) {\n error(\n 'frontmatter',\n 'An encounter MDY document requires YAML front matter.'\n );\n return result;\n }\n try {\n const document = parseDocument(split.yamlSource, { uniqueKeys: true });\n if (document.errors.length || document.warnings.length) {\n throw new Error('Front matter must contain valid safe YAML.');\n }\n const data: unknown = document.toJS({ maxAliasCount: 100 });\n if (!record(data)) throw new Error('Front matter must be a YAML mapping.');\n result.frontMatter = data;\n } catch (cause) {\n error(\n 'frontmatter',\n cause instanceof Error ? cause.message : 'Invalid YAML front matter.'\n );\n return result;\n }\n const data = result.frontMatter;\n if (validNativeForm(data.form)) result.form = data.form;\n else error('form', 'Front matter requires a native eSheet form definition.');\n if (validNativeResponses(data.response)) result.response = data.response;\n else error('response', 'Front matter requires a native eSheet response map.');\n if (data.encounterDefinition !== undefined) {\n try {\n validateEncounterDefinition(\n data.encounterDefinition as EncounterVisitDefinition\n );\n result.definition = data.encounterDefinition as EncounterVisitDefinition;\n } catch {\n error(\n 'definition',\n 'Front matter contains an invalid encounterDefinition.'\n );\n }\n }\n const fields = fieldsFromFrontMatter(data);\n const byId = new Map(fields.map((field) => [field.id, field]));\n const linked = new Set<string>();\n for (const link of fieldLinkSpans(result.body)) {\n if (!byId.has(link.id)) {\n // Ordinary section anchors are not encounter field links.\n if (\n link.id.startsWith('visit_') ||\n result.body.slice(link.labelEnd, link.end).includes('mdy:')\n )\n result.diagnostics.push({\n severity: 'error',\n code: 'dangling-link',\n message: `Field link ${link.id} has no indexed data.`,\n });\n } else linked.add(link.id);\n }\n for (const field of fields) {\n if (!linked.has(field.id) && field.display !== '—' && field.display.trim())\n result.diagnostics.push({\n severity: 'warning',\n code: 'orphan',\n message: `${field.label} is recorded without a narrative field link.`,\n fieldId: field.fieldId,\n });\n }\n if (hasTemplateSyntax(result.body))\n result.diagnostics.push({\n severity: 'warning',\n code: 'template-syntax',\n message:\n 'Template syntax belongs in .mdyt; document prose is displayed literally.',\n });\n return result;\n}\n\nexport function getEncounterDocumentBody(\n responses: EncounterResponses\n): string | undefined {\n return responses[ENCOUNTER_DOCUMENT_FIELD_ID]?.answer;\n}\n\nexport function updateEncounterDocumentBody(\n responses: EncounterResponses,\n body: string,\n options: { _ai?: boolean } = {}\n): EncounterResponses {\n return {\n ...responses,\n [ENCOUNTER_DOCUMENT_FIELD_ID]: {\n ...responses[ENCOUNTER_DOCUMENT_FIELD_ID],\n answer: body,\n ...options,\n },\n };\n}\n\n/** Carry the exact imported block alongside prose through the native response store. */\nexport function encounterDocumentResponse(source: string): FieldResponse {\n const parsed = parseEncounterMdy(source);\n return {\n answer: parsed.body,\n attributes: { mdyFrontMatterSource: parsed.frontMatterSource },\n };\n}\n\nfunction canonicalValue(response?: FieldResponse): unknown {\n if (response?.answer !== undefined) {\n try {\n return JSON.parse(response.answer) as unknown;\n } catch {\n return response.answer;\n }\n }\n return response?.selected ?? null;\n}\n\nconst FORM_PROPERTIES = new Set(['id', 'title', 'pages']);\nconst PAGE_PROPERTIES = new Set(['id', 'title', 'fields']);\nconst FIELD_PROPERTIES = new Set([\n 'id',\n 'fieldType',\n 'title',\n 'question',\n 'required',\n 'width',\n 'content',\n 'fields',\n 'sectionCollapse',\n 'options',\n 'inputType',\n 'unit',\n 'validators',\n '_sourceData',\n]);\nconst SOURCE_PROPERTIES = new Set([\n 'id',\n 'label',\n 'type',\n 'unit',\n 'code',\n 'options',\n 'required',\n 'encounterHideLabel',\n 'findings',\n 'encounterFindings',\n 'encounterRequireCoding',\n 'encounterDate',\n]);\n\nfunction mergeMetadata(\n previous: unknown,\n next: Record<string, unknown>,\n owned: Set<string>\n): Record<string, unknown> {\n const merged = { ...(record(previous) ? previous : {}), ...next };\n for (const property of owned) {\n if (!(property in next)) delete merged[property];\n }\n return merged;\n}\n\n/** Carry native extensions on matching identities; removed pages/fields stay removed. */\nfunction mergeNativeFormMetadata(\n previous: unknown,\n next: FormDefinition\n): FormDefinition {\n if (!record(previous) || previous.id !== next.id) return next;\n const mergeFields = (\n oldFields: unknown,\n newFields: unknown[]\n ): Record<string, unknown>[] => {\n const oldById = new Map(\n (Array.isArray(oldFields) ? oldFields : [])\n .filter(record)\n .map((field) => [field.id, field])\n );\n return newFields.filter(record).map((field) => {\n const oldField = oldById.get(field.id);\n const merged = mergeMetadata(oldField, field, FIELD_PROPERTIES);\n if (Array.isArray(field.fields))\n merged.fields = mergeFields(oldField?.fields, field.fields);\n if (record(field._sourceData))\n merged._sourceData = mergeMetadata(\n oldField?._sourceData,\n field._sourceData,\n SOURCE_PROPERTIES\n );\n return merged;\n });\n };\n const oldPages = new Map(\n (Array.isArray(previous.pages) ? previous.pages : [])\n .filter(record)\n .map((page) => [page.id, page])\n );\n const merged = mergeMetadata(\n previous,\n next as unknown as Record<string, unknown>,\n FORM_PROPERTIES\n );\n merged.pages = next.pages.map((page) => {\n const oldPage = oldPages.get(page.id);\n return {\n ...mergeMetadata(\n oldPage,\n page as unknown as Record<string, unknown>,\n PAGE_PROPERTIES\n ),\n fields: mergeFields(oldPage?.fields, page.fields ?? []),\n };\n });\n return merged as unknown as FormDefinition;\n}\n\n/** Synchronize changed YAML nodes while preserving comments, styles, and key order. */\nfunction setPreserving(\n document: ReturnType<typeof parseDocument>,\n path: (string | number)[],\n value: unknown\n): boolean {\n const node = document.getIn(path, true);\n const previous = document.getIn(path);\n if (JSON.stringify(previous) === JSON.stringify(value)) return false;\n if (record(value) && isMap(node)) {\n let changed = false;\n const keys = new Set(\n Object.keys(value).filter((key) => value[key] !== undefined)\n );\n for (const pair of [...node.items]) {\n const key = String(pair.key);\n if (!keys.has(key)) {\n document.deleteIn([...path, key]);\n changed = true;\n }\n }\n for (const key of keys) {\n changed = setPreserving(document, [...path, key], value[key]) || changed;\n }\n return changed;\n }\n if (Array.isArray(value) && isSeq(node)) {\n if (\n value.every((item) => record(item) && typeof item.id === 'string') &&\n node.items.every(\n (item) => isMap(item) && typeof item.get('id') === 'string'\n )\n ) {\n // Reuse retained YAML nodes when a section is removed or reordered, so\n // their comments, quoting and native extensions survive too.\n const byId = new Map(\n node.items.map((item) => [\n isMap(item) ? item.get('id') : undefined,\n item,\n ])\n );\n node.items = value.map((item) => {\n const id = (item as Record<string, unknown>).id;\n return byId.get(id) ?? document.createNode(item);\n });\n value.forEach((item, index) =>\n setPreserving(document, [...path, index], item)\n );\n return true;\n }\n if (node.items.length === value.length) {\n return value.reduce(\n (changed, item, index) =>\n setPreserving(document, [...path, index], item) || changed,\n false\n );\n }\n }\n document.setIn(path, value);\n return true;\n}\n\n/**\n * Assemble a portable, flattened .mdy. Canonical form/response are native\n * eSheet objects. Flat visit_* projections bridge the native colon-bearing\n * ids to Templit/Kerebron's MDY id grammar; they are never another answer store.\n */\nexport function createEncounterMdy(\n snapshot: MdySnapshot,\n body?: string,\n source?: string\n): string {\n const reserved = snapshot.responses[ENCOUNTER_DOCUMENT_FIELD_ID];\n const previousSource =\n source ?? reserved?.attributes?.mdyFrontMatterSource ?? '';\n const split = splitSource(previousSource);\n const fields = getEncounterMdyFields(snapshot);\n const authoredBody =\n body ?? reserved?.answer ?? split?.body ?? initialBody(snapshot, fields);\n let refreshedBody = refreshEncounterMdyLinks(authoredBody, fields);\n const responses = Object.fromEntries(\n Object.entries(snapshot.responses).filter(\n ([id]) => id !== ENCOUNTER_DOCUMENT_FIELD_ID\n )\n );\n const document = split\n ? parseDocument(split.yamlSource, { uniqueKeys: true })\n : parseDocument('{}\\n');\n if (\n document.errors.length ||\n document.warnings.length ||\n !isMap(document.contents)\n )\n throw new Error('Cannot update invalid MDY front matter.');\n if (!split) document.contents.flow = false;\n let changed = false;\n const existing: unknown = document.toJS({ maxAliasCount: 100 });\n const activeIds = new Set(fields.map((field) => field.id));\n const removedFields: EncounterMdyField[] = [];\n if (record(existing)) {\n for (const [id, value] of Object.entries(existing)) {\n if (\n !activeIds.has(id) &&\n record(value) &&\n typeof value.fieldId === 'string' &&\n id === linkId(value.fieldId)\n ) {\n document.delete(id);\n changed = true;\n removedFields.push({\n id,\n fieldId: value.fieldId,\n sectionId: typeof value.sectionId === 'string' ? value.sectionId : '',\n label: 'Field no longer configured',\n display: 'Field no longer configured',\n });\n }\n }\n }\n refreshedBody = refreshEncounterMdyLinks(refreshedBody, removedFields);\n const oldMdy = record(existing) && record(existing.mdy) ? existing.mdy : {};\n const metadata = {\n ...oldMdy,\n kind: 'document',\n schema: 'esheet',\n template: oldMdy.template ?? {\n name: snapshot.definition.title,\n version: '1.0.0',\n },\n };\n for (const [key, value] of Object.entries({\n mdy: metadata,\n form: mergeNativeFormMetadata(\n record(existing) ? existing.form : undefined,\n createEncounterFormDefinition(snapshot.definition)\n ),\n response: responses,\n encounterDefinition: snapshot.definition,\n })) {\n changed = setPreserving(document, [key], value) || changed;\n }\n for (const field of fields) {\n const oldField = record(existing) ? existing[field.id] : undefined;\n changed =\n setPreserving(document, [field.id], {\n ...(record(oldField) ? oldField : {}),\n fieldId: field.fieldId,\n sectionId: field.sectionId,\n label: field.label,\n value: canonicalValue(responses[field.fieldId]),\n display: field.display,\n }) || changed;\n }\n const newline = split?.opening.endsWith('\\r\\n') ? '\\r\\n' : '\\n';\n if (split && !changed) {\n const boundary =\n refreshedBody && !split.frontMatterSource.endsWith('\\n') ? newline : '';\n return `${split.frontMatterSource}${boundary}${refreshedBody}`;\n }\n const yaml = document.toString({ lineWidth: 0 }).replace(/\\n/g, newline);\n let closing = split?.closing || `---${newline}`;\n if (refreshedBody && !closing.endsWith('\\n')) closing += newline;\n return `${split?.opening ?? `---${newline}`}${yaml}${closing}${refreshedBody}`;\n}\n\n/**\n * Render an already flattened document through Templit's actual pipeline.\n * This identity engine deliberately preserves {{clinical prose}} literally;\n * .mdy is data and markdown, never a template. Hosts sanitize returned HTML.\n */\nexport async function renderEncounterMdy(source: string): Promise<{\n raw: string;\n html?: string;\n fields: EncounterMdyField[];\n diagnostics: EncounterMdyDiagnostic[];\n}> {\n let parsed = parseEncounterMdy(source);\n let fields = fieldsFromFrontMatter(parsed.frontMatter ?? {});\n if (parsed.definition && parsed.response) {\n // A portable document may have been edited outside this component. The\n // canonical response wins over cached visit_* values and display strings.\n // Import lazily because snapshot creation itself calls createEncounterMdy.\n const { createEncounterSnapshot } = await import('./model');\n const snapshot = createEncounterSnapshot(parsed.definition, {\n ...parsed.response,\n [ENCOUNTER_DOCUMENT_FIELD_ID]: encounterDocumentResponse(source),\n });\n parsed = parseEncounterMdy(snapshot.mdy);\n const canonical = new Map(\n getEncounterMdyFields(snapshot).map((field) => [field.fieldId, field])\n );\n fields = fieldsFromFrontMatter(parsed.frontMatter ?? {}).map((field) => ({\n ...field,\n display: canonical.get(field.fieldId)?.display ?? field.display,\n empty:\n canonical.get(field.fieldId)?.empty ??\n !hasNativeValue(parsed.response?.[field.fieldId], true),\n }));\n } else if (parsed.response) {\n const units = new Map<string, string>();\n const indexUnits = (nativeFields: unknown): void => {\n if (!Array.isArray(nativeFields)) return;\n for (const field of nativeFields) {\n if (!record(field)) continue;\n if (typeof field.id === 'string' && typeof field.unit === 'string')\n units.set(field.id, field.unit);\n indexUnits(field.fields);\n }\n };\n parsed.form?.pages.forEach((page) => indexUnits(page.fields));\n const response = parsed.response;\n fields = fields.map((field) => {\n const cached = parsed.frontMatter?.[field.id];\n const native = response[field.fieldId];\n const empty = !hasNativeValue(native, true);\n if (\n !native ||\n !record(cached) ||\n JSON.stringify(cached.value) === JSON.stringify(canonicalValue(native))\n )\n return { ...field, empty };\n const display = fieldDisplay({\n ...native,\n unit: units.get(field.fieldId),\n });\n parsed.diagnostics.push({\n severity: 'warning',\n code: 'response',\n fieldId: field.fieldId,\n message: `${field.label}'s cached projection differed from its canonical response and was refreshed.`,\n });\n return { ...field, display: display.trim() ? display : '—', empty };\n });\n }\n const body = refreshEncounterMdyLinks(parsed.body, fields);\n // Templit consumes one front-matter block before invoking the engine. Give\n // it the document envelope, so YAML-shaped authored prose is never mistaken\n // for a second data layer. The empty envelope also protects malformed/no-FM\n // source previews while their diagnostics remain visible to the host.\n const envelope = parsed.frontMatterSource || '---\\n{}\\n---\\n';\n const { raw, html } = await render(\n `${envelope}${body}`,\n {},\n {\n engine: { name: 'encounter-mdy-document', render: (content) => content },\n markdown: markdownToHtml,\n fieldLinks: false,\n }\n );\n return { raw, html, fields, diagnostics: parsed.diagnostics };\n}\n","import { currentAssertion, type ConditionConcern } from '../ProblemList';\nimport type { AssessmentItem } from '../Assessment';\nimport type { FieldResponse } from '@esheet/core';\nimport { DateTime } from 'luxon';\nimport { isEncounterDate } from './date';\nimport type { Medication } from '../MedicationList';\nimport type { Allergy } from '../AllergyList';\nimport {\n getEncounterFieldId,\n getEncounterSectionFieldIds,\n validateEncounterDefinition,\n} from './definition';\nimport { createEncounterMdy } from './mdy';\nimport type {\n EncounterAssessmentValue,\n EncounterConditionsValue,\n EncounterPlanValue,\n EncounterCode,\n EncounterObservation,\n EncounterResponses,\n EncounterSectionDefinition,\n EncounterValidationIssue,\n EncounterVitalInputDraft,\n EncounterVitalReading,\n EncounterVitalsValue,\n EncounterVisitDefinition,\n EncounterVisitSnapshot,\n} from './types';\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction nonempty(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction measurement(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value) && value >= 0;\n}\n\nfunction parseJson(answer: string | undefined): unknown {\n if (typeof answer !== 'string' || !answer.trim()) return undefined;\n try {\n return JSON.parse(answer) as unknown;\n } catch {\n return undefined;\n }\n}\n\ninterface VitalMeta {\n key: Exclude<\n keyof EncounterVitalReading,\n 'id' | 'recordedAt' | 'position' | 'site' | 'systolic' | 'diastolic'\n >;\n label: string;\n unit: string;\n code: string;\n}\n\n// Codes/units: https://hl7.org/fhir/R4/observation-vitalsigns.html\n// Pain score: https://loinc.org/72514-3 (UCUM {score}).\nconst VITALS: VitalMeta[] = [\n { key: 'pulse', label: 'Pulse', unit: '/min', code: '8867-4' },\n {\n key: 'respiratoryRate',\n label: 'Respiratory rate',\n unit: '/min',\n code: '9279-1',\n },\n { key: 'temperature', label: 'Temperature', unit: 'Cel', code: '8310-5' },\n {\n key: 'oxygenSaturation',\n label: 'Oxygen saturation',\n unit: '%',\n code: '2708-6',\n },\n { key: 'height', label: 'Height', unit: 'cm', code: '8302-2' },\n { key: 'weight', label: 'Weight', unit: 'kg', code: '29463-7' },\n { key: 'pain', label: 'Pain score', unit: '{score}', code: '72514-3' },\n];\nconst VITAL_KEYS = [\n 'systolic',\n 'diastolic',\n ...VITALS.map(({ key }) => key),\n] as const;\n\nfunction loinc(code: string, display: string): EncounterCode {\n return { system: 'http://loinc.org', code, display };\n}\n\n/** Safe UI decoder. Validation separately preserves and reports malformed original answers. */\nexport function parseEncounterVitals(answer?: string): EncounterVitalsValue {\n const parsed = parseJson(answer);\n if (!record(parsed) || !Array.isArray(parsed.readings))\n return { readings: [] };\n const readings = parsed.readings\n .filter(\n (reading): reading is Record<string, unknown> =>\n record(reading) && nonempty(reading.id)\n )\n .map((reading) => {\n const safe: EncounterVitalReading = { id: reading.id as string };\n for (const key of VITAL_KEYS) {\n if (typeof reading[key] === 'number' && Number.isFinite(reading[key]))\n safe[key] = reading[key];\n }\n for (const key of ['recordedAt', 'position', 'site'] as const) {\n if (typeof reading[key] === 'string') safe[key] = reading[key];\n }\n return safe;\n });\n const inputDrafts = Array.isArray(parsed.inputDrafts)\n ? parsed.inputDrafts.filter(\n (draft): draft is EncounterVitalInputDraft =>\n record(draft) &&\n nonempty(draft.readingId) &&\n nonempty(draft.text) &&\n VITAL_KEYS.includes(draft.key as EncounterVitalInputDraft['key'])\n )\n : undefined;\n // An unfinished edit supersedes any old measurement, including stale imported data.\n for (const draft of Array.isArray(parsed.inputDrafts)\n ? parsed.inputDrafts\n : []) {\n if (\n !record(draft) ||\n typeof draft.readingId !== 'string' ||\n !VITAL_KEYS.includes(draft.key as EncounterVitalInputDraft['key'])\n )\n continue;\n const reading = readings.find(({ id }) => id === draft.readingId);\n if (reading) delete reading[draft.key as EncounterVitalInputDraft['key']];\n }\n return inputDrafts ? { readings, inputDrafts } : { readings };\n}\n\n/** Measurement shape checks only; this does not infer diagnoses or normal findings. */\nexport function validateEncounterVitals(\n value: unknown,\n fieldId = '',\n sectionId = ''\n): EncounterValidationIssue[] {\n const issues: EncounterValidationIssue[] = [];\n const add = (\n message: string,\n path?: string,\n readingId?: string,\n code: EncounterValidationIssue['code'] = 'invalid-value'\n ) => {\n issues.push({ sectionId, fieldId, code, message, path, readingId });\n };\n if (!record(value) || !Array.isArray(value.readings)) {\n add('Vitals must contain a readings array.', 'readings');\n return issues;\n }\n for (const key of Object.keys(value)) {\n if (!['readings', 'inputDrafts'].includes(key))\n add(`Unknown vitals property ${key}.`, key);\n }\n const readings = value.readings;\n const ids = new Set<string>();\n readings.forEach((reading: unknown, index: number) => {\n const path = `readings.${index}`;\n if (!record(reading) || !nonempty(reading.id)) {\n add('Each vital reading requires a nonempty id.', `${path}.id`);\n return;\n }\n const id = reading.id;\n if (ids.has(id)) add('Vital reading ids must be unique.', `${path}.id`, id);\n ids.add(id);\n const allowedKeys = new Set<string>([\n 'id',\n 'recordedAt',\n 'position',\n 'site',\n ...VITAL_KEYS,\n ]);\n for (const key of Object.keys(reading)) {\n if (!allowedKeys.has(key))\n add(`Unknown vital property ${key}.`, `${path}.${key}`, id);\n }\n if (!VITAL_KEYS.some((key) => reading[key] !== undefined)) {\n add('Record at least one measurement in a vital reading.', path, id);\n }\n for (const key of VITAL_KEYS) {\n if (reading[key] !== undefined && !measurement(reading[key])) {\n add(\n `${key} must be a finite nonnegative number.`,\n `${path}.${key}`,\n id,\n 'invalid-number'\n );\n }\n }\n if (\n (reading.systolic !== undefined) !==\n (reading.diastolic !== undefined)\n ) {\n add(\n 'Record both systolic and diastolic blood pressure, or leave both blank.',\n path,\n id,\n 'incomplete-blood-pressure'\n );\n }\n if (\n measurement(reading.oxygenSaturation) &&\n reading.oxygenSaturation > 100\n ) {\n add(\n 'Oxygen saturation must be between 0 and 100 percent.',\n `${path}.oxygenSaturation`,\n id,\n 'invalid-number'\n );\n }\n if (measurement(reading.pain) && reading.pain > 10) {\n add(\n 'Pain score must be between 0 and 10.',\n `${path}.pain`,\n id,\n 'invalid-number'\n );\n }\n for (const key of ['recordedAt', 'position', 'site']) {\n if (reading[key] !== undefined && typeof reading[key] !== 'string') {\n add(`${key} must be a string.`, `${path}.${key}`, id);\n }\n }\n if (\n nonempty(reading.recordedAt) &&\n (!/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/.test(reading.recordedAt) ||\n !DateTime.fromISO(reading.recordedAt, { setZone: true }).isValid)\n ) {\n add(\n 'Recorded time must be a valid date and time.',\n `${path}.recordedAt`,\n id\n );\n }\n });\n if (value.inputDrafts !== undefined) {\n if (!Array.isArray(value.inputDrafts)) {\n add(\n 'Unfinished vital inputs must be an inputDrafts array.',\n 'inputDrafts'\n );\n } else {\n const draftKeys = new Set<string>();\n value.inputDrafts.forEach((draft: unknown, index: number) => {\n const path = `inputDrafts.${index}`;\n if (\n !record(draft) ||\n !nonempty(draft.readingId) ||\n !nonempty(draft.text) ||\n !VITAL_KEYS.includes(draft.key as EncounterVitalInputDraft['key'])\n ) {\n add(\n 'Each unfinished input requires a reading id, numeric measurement key and nonempty text.',\n path,\n record(draft) && typeof draft.readingId === 'string'\n ? draft.readingId\n : undefined\n );\n add(\n 'Finish or clear the malformed numeric input before saving.',\n path,\n record(draft) && typeof draft.readingId === 'string'\n ? draft.readingId\n : undefined,\n 'invalid-number'\n );\n return;\n }\n const readingId = draft.readingId;\n if (!ids.has(readingId))\n add(\n 'Unfinished input must reference an existing reading.',\n `${path}.readingId`,\n readingId\n );\n for (const key of Object.keys(draft)) {\n if (!['readingId', 'key', 'text'].includes(key))\n add(\n `Unknown unfinished input property ${key}.`,\n `${path}.${key}`,\n readingId\n );\n }\n const draftKey = JSON.stringify([readingId, draft.key]);\n if (draftKeys.has(draftKey))\n add(\n 'Each measurement can have only one unfinished input.',\n path,\n readingId\n );\n draftKeys.add(draftKey);\n const readingIndex = readings.findIndex(\n (reading: unknown) => record(reading) && reading.id === readingId\n );\n add(\n `Finish or clear the ${draft.key} input before saving.`,\n `readings.${readingIndex}.${draft.key}`,\n readingId,\n 'invalid-number'\n );\n });\n }\n }\n return issues;\n}\n\nfunction optionalStrings(\n value: Record<string, unknown>,\n keys: string[]\n): boolean {\n return keys.every(\n (key) => value[key] === undefined || typeof value[key] === 'string'\n );\n}\n\nfunction validCode(value: unknown): boolean {\n return (\n value === undefined ||\n (record(value) &&\n nonempty(value.system) &&\n nonempty(value.code) &&\n optionalStrings(value, ['display']))\n );\n}\n\n// Mirrors ProblemList's Uncertainty/FieldUncertainty shapes: rendering reads\n// `known`/`reason`/`confidence` straight off each field record, so a malformed\n// block must be caught here, not at render time.\nfunction validFieldUncertainty(value: unknown): boolean {\n return (\n record(value) &&\n typeof value.known === 'boolean' &&\n (value.reason === undefined ||\n ['asked-unknown', 'not-asked', 'masked', 'unavailable'].includes(\n value.reason as string\n )) &&\n (value.confidence === undefined ||\n ['low', 'medium', 'high'].includes(value.confidence as string)) &&\n optionalStrings(value, ['note'])\n );\n}\n\nfunction validUncertainty(value: unknown): boolean {\n if (!record(value)) return false;\n if (\n value.overall !== undefined &&\n !['confirmed', 'low', 'medium', 'high'].includes(value.overall as string)\n ) {\n return false;\n }\n if (value.fields === undefined) return true;\n if (!record(value.fields)) return false;\n return Object.entries(value.fields).every(\n ([field, fieldUncertainty]) =>\n ['coding', 'onset', 'severity', 'laterality', 'bodySite'].includes(\n field\n ) && validFieldUncertainty(fieldUncertainty)\n );\n}\n\nfunction validMedication(value: unknown): value is Medication {\n return (\n record(value) &&\n nonempty(value.id) &&\n nonempty(value.name) &&\n [\n 'unreconciled',\n 'taking',\n 'taking-noncompliant',\n 'not-taking',\n 'unknown',\n ].includes(value.status as string) &&\n optionalStrings(value, [\n 'sig',\n 'discontinuedDate',\n 'note',\n 'task',\n 'strength',\n 'doseForm',\n 'quantity',\n 'quantityUnit',\n 'daysSupply',\n 'route',\n 'frequency',\n 'refills',\n 'startDate',\n 'endDate',\n 'indication',\n 'pharmacyNotes',\n ]) &&\n (value.expired === undefined || typeof value.expired === 'boolean') &&\n (value.prn === undefined || typeof value.prn === 'boolean') &&\n (value.substitution === undefined ||\n ['0', '1'].includes(value.substitution as string)) &&\n validCode(value.code)\n );\n}\n\nfunction validAllergy(value: unknown): value is Allergy {\n return (\n record(value) &&\n nonempty(value.id) &&\n nonempty(value.allergen) &&\n optionalStrings(value, ['reaction', 'onsetDate', 'note']) &&\n (value.type === undefined ||\n ['drug', 'food', 'environmental', 'other'].includes(\n value.type as string\n )) &&\n (value.kind === undefined ||\n ['allergy', 'intolerance'].includes(value.kind as string)) &&\n (value.severity === undefined ||\n ['mild', 'moderate', 'severe'].includes(value.severity as string)) &&\n (value.inactive === undefined || typeof value.inactive === 'boolean') &&\n validCode(value.code)\n );\n}\n\nfunction duplicateIds(values: Record<string, unknown>[], key: string): boolean {\n return new Set(values.map((value) => value[key])).size !== values.length;\n}\n\n/** Shape guard shared with Plan's sibling-item projection: ids plus an optional string note. */\nexport function validAssessmentItem(value: unknown): value is AssessmentItem {\n return (\n record(value) &&\n nonempty(value.concernId) &&\n nonempty(value.assertionId) &&\n optionalStrings(value, ['note'])\n );\n}\n\nexport function validateEncounterAssessment(\n value: unknown,\n fieldId = '',\n sectionId = '',\n externalConcerns: readonly ConditionConcern[] = []\n): EncounterValidationIssue[] {\n const issues: EncounterValidationIssue[] = [];\n const add = (message: string, path?: string) =>\n issues.push({\n sectionId,\n fieldId,\n code: 'invalid-value' as const,\n message,\n path,\n });\n if (\n !record(value) ||\n !Array.isArray(value.concerns) ||\n !Array.isArray(value.items) ||\n !Array.isArray(value.orders)\n ) {\n add('Assessment must contain concerns, items and orders arrays.');\n return issues;\n }\n const concerns = new Map(\n externalConcerns.map((concern) => [\n concern.concernId,\n new Set(concern.assertions.map((assertion) => assertion.id)),\n ])\n );\n const localConcernIds = new Set<string>();\n value.concerns.forEach((concern: unknown, index: number) => {\n const path = `concerns.${index}`;\n if (\n !record(concern) ||\n !nonempty(concern.concernId) ||\n !Array.isArray(concern.assertions) ||\n ![\n 'active',\n 'recurrence',\n 'relapse',\n 'inactive',\n 'remission',\n 'resolved',\n ].includes(concern.clinicalStatus as string)\n ) {\n add(\n 'Each concern requires an id, clinical status and assertions array.',\n path\n );\n return;\n }\n if (localConcernIds.has(concern.concernId))\n add('Concern ids must be unique.', `${path}.concernId`);\n localConcernIds.add(concern.concernId);\n if (\n concern.relationships !== undefined &&\n (!Array.isArray(concern.relationships) ||\n concern.relationships.some(\n (relationship: unknown) =>\n !record(relationship) ||\n !nonempty(relationship.concernId) ||\n ![\n 'caused-by',\n 'evolved-from',\n 'differential-sibling',\n 'complication-of',\n ].includes(relationship.type as string) ||\n !optionalStrings(relationship, ['display'])\n ))\n ) {\n add(\n 'Concern relationships must be an array of records with a supported type and a concernId.',\n `${path}.relationships`\n );\n }\n if (\n concern.observations !== undefined &&\n (!Array.isArray(concern.observations) ||\n concern.observations.some(\n (observation: unknown) =>\n !record(observation) ||\n !nonempty(observation.id) ||\n !nonempty(observation.text) ||\n !isEncounterDate(observation.date) ||\n !optionalStrings(observation, ['author'])\n ))\n ) {\n add(\n 'Concern observations must be an array of records with an id, text and a valid YYYY-MM-DD date.',\n `${path}.observations`\n );\n }\n const assertionIds = new Set<string>();\n concerns.set(concern.concernId, assertionIds);\n concern.assertions.forEach((assertion: unknown, assertionIndex: number) => {\n const assertionPath = `${path}.assertions.${assertionIndex}`;\n if (\n !record(assertion) ||\n !nonempty(assertion.id) ||\n !nonempty(assertion.text) ||\n !isEncounterDate(assertion.date) ||\n ![\n 'unconfirmed',\n 'provisional',\n 'differential',\n 'confirmed',\n 'refuted',\n 'entered-in-error',\n ].includes(assertion.verificationStatus as string) ||\n !optionalStrings(assertion, ['note'])\n ) {\n add(\n 'Each assertion requires an id, text, a valid YYYY-MM-DD date and verification status.',\n assertionPath\n );\n return;\n }\n if (assertionIds.has(assertion.id))\n add(\n 'Assertion ids must be unique within a concern.',\n `${assertionPath}.id`\n );\n assertionIds.add(assertion.id);\n if (\n assertion.changeType !== undefined &&\n !['refinement', 'revision', 'progression', 'reattribution'].includes(\n assertion.changeType as string\n )\n ) {\n add(\n 'Assertion changeType must be refinement, revision, progression or reattribution.',\n `${assertionPath}.changeType`\n );\n }\n if (\n assertion.coding !== undefined &&\n (!Array.isArray(assertion.coding) ||\n assertion.coding.some((coding) => !validCode(coding)))\n ) {\n add(\n 'Assertion coding must contain system and code strings.',\n `${assertionPath}.coding`\n );\n }\n if (\n assertion.uncertainty !== undefined &&\n !validUncertainty(assertion.uncertainty)\n ) {\n add(\n 'Assertion uncertainty must use supported overall confidence and per-field known/reason/confidence records.',\n `${assertionPath}.uncertainty`\n );\n }\n });\n });\n const itemIds = new Set<string>();\n value.items.forEach((item: unknown, index: number) => {\n const path = `items.${index}`;\n if (!validAssessmentItem(item)) {\n add('Assessment items require concern and assertion ids.', path);\n return;\n }\n if (itemIds.has(item.concernId))\n add('Each concern may be assessed once.', `${path}.concernId`);\n itemIds.add(item.concernId);\n if (!concerns.get(item.concernId)?.has(item.assertionId)) {\n add(\n 'An assessment item must reference an existing concern and assertion.',\n path\n );\n }\n });\n const orderIds = new Set<string>();\n value.orders.forEach((order: unknown, index: number) => {\n const path = `orders.${index}`;\n if (\n !record(order) ||\n !nonempty(order.orderId) ||\n !nonempty(order.display) ||\n !['medication', 'lab', 'imaging', 'procedure', 'referral'].includes(\n order.type as string\n ) ||\n !optionalStrings(order, [\n 'concernId',\n 'detail',\n 'timing',\n 'indication',\n 'notes',\n 'bodySite',\n 'referTo',\n ]) ||\n (order.priority !== undefined &&\n !['routine', 'urgent', 'stat'].includes(order.priority as string))\n ) {\n add(\n 'Each order requires an id, display text and supported order type.',\n path\n );\n return;\n }\n if (orderIds.has(order.orderId))\n add('Order ids must be unique.', `${path}.orderId`);\n orderIds.add(order.orderId);\n if (\n order.concernId !== undefined &&\n !concerns.has(order.concernId as string)\n ) {\n add(\n 'An order indication must reference an existing concern.',\n `${path}.concernId`\n );\n }\n if (\n order.code !== undefined &&\n (!record(order.code) ||\n !nonempty(order.code.fullid) ||\n !nonempty(order.code.codetype) ||\n !nonempty(order.code.fullcode))\n ) {\n add(\n 'Order coding requires fullid, codetype and fullcode.',\n `${path}.code`\n );\n }\n });\n return issues;\n}\n\nexport function parseEncounterAssessment(\n answer?: string\n): EncounterAssessmentValue {\n const parsed = parseJson(answer);\n return validateEncounterAssessment(parsed).length === 0\n ? (parsed as EncounterAssessmentValue)\n : { concerns: [], items: [], orders: [] };\n}\n\nfunction validateClinicalList(\n parsed: unknown,\n key: 'medications' | 'allergies',\n validItem: (item: unknown) => boolean,\n title: string,\n fieldId: string,\n sectionId: string\n): EncounterValidationIssue[] {\n const issues: EncounterValidationIssue[] = [];\n const add = (message: string, path?: string) =>\n issues.push({\n sectionId,\n fieldId,\n code: 'invalid-value' as const,\n message,\n path,\n });\n if (!record(parsed) || !Array.isArray(parsed[key])) {\n add(`${title} must contain a ${key} array.`, key);\n return issues;\n }\n const values = parsed[key] as unknown[];\n values.forEach((item, index) => {\n if (!validItem(item))\n add(\n `Invalid ${key === 'medications' ? 'medication' : 'allergy'} record.`,\n `${key}.${index}`\n );\n });\n if (values.every(record) && duplicateIds(values, 'id'))\n add(`${title} ids must be unique.`, key);\n if (key === 'allergies') {\n if (\n parsed.noKnownAllergies !== undefined &&\n typeof parsed.noKnownAllergies !== 'boolean'\n ) {\n add(\n 'No-known-allergies must be an explicit boolean.',\n 'noKnownAllergies'\n );\n }\n if (parsed.noKnownAllergies === true && values.length > 0) {\n add(\n 'Recorded allergies conflict with the no-known-allergies flag.',\n 'noKnownAllergies'\n );\n }\n }\n return issues;\n}\n\nexport function validateEncounterMedicationValue(\n value: unknown,\n fieldId = '',\n sectionId = ''\n): EncounterValidationIssue[] {\n return validateClinicalList(\n value,\n 'medications',\n validMedication,\n 'Medications',\n fieldId,\n sectionId\n );\n}\n\nexport function validateEncounterAllergyValue(\n value: unknown,\n fieldId = '',\n sectionId = ''\n): EncounterValidationIssue[] {\n return validateClinicalList(\n value,\n 'allergies',\n validAllergy,\n 'Allergies',\n fieldId,\n sectionId\n );\n}\n\nexport function validateEncounterConditions(\n value: unknown,\n fieldId = '',\n sectionId = ''\n): EncounterValidationIssue[] {\n return validateEncounterAssessment(\n {\n concerns: record(value) ? value.concerns : undefined,\n items: [],\n orders: [],\n },\n fieldId,\n sectionId\n );\n}\n\n/** Order shape/codes are local; concern references are checked against the full visit. */\nexport function validateEncounterPlan(\n value: unknown,\n fieldId = '',\n sectionId = ''\n): EncounterValidationIssue[] {\n if (!record(value) || !Array.isArray(value.orders))\n return [\n {\n sectionId,\n fieldId,\n code: 'invalid-value',\n message: 'Plan must contain an orders array.',\n path: 'orders',\n },\n ];\n const ids = new Set(\n value.orders.flatMap((order) =>\n record(order) && nonempty(order.concernId) ? [order.concernId] : []\n )\n );\n return validateEncounterAssessment(\n {\n concerns: Array.from(ids, (concernId) => ({\n concernId,\n clinicalStatus: 'active',\n assertions: [],\n })),\n items: [],\n orders: value.orders,\n },\n fieldId,\n sectionId\n );\n}\n\nexport function parseEncounterConditions(\n answer?: string\n): EncounterConditionsValue {\n const parsed = parseJson(answer);\n return validateEncounterConditions(parsed).length === 0\n ? (parsed as EncounterConditionsValue)\n : { concerns: [] };\n}\n\nexport function parseEncounterPlan(answer?: string): EncounterPlanValue {\n const parsed = parseJson(answer);\n return validateEncounterPlan(parsed).length === 0\n ? (parsed as EncounterPlanValue)\n : { orders: [] };\n}\n\nfunction validateCoding(\n section: EncounterSectionDefinition,\n parsed: Record<string, unknown>,\n fieldId: string,\n externalConcerns: readonly ConditionConcern[] = []\n): EncounterValidationIssue[] {\n if (!(section.requireCoding ?? true)) return [];\n const issues: EncounterValidationIssue[] = [];\n const add = (path: string) =>\n issues.push({\n sectionId: section.id,\n fieldId,\n code: 'invalid-value' as const,\n path,\n message: `${section.title} entries require a selected clinical code.`,\n });\n const coded = (code: unknown) => record(code) && validCode(code);\n if (section.kind === 'medications' || section.kind === 'allergies') {\n const key = section.kind;\n if (Array.isArray(parsed[key]))\n parsed[key].forEach((entry, index) => {\n if (record(entry) && !coded(entry.code)) add(`${key}.${index}.code`);\n });\n } else if (section.kind === 'conditions' || section.kind === 'assessment') {\n if (Array.isArray(parsed.concerns))\n parsed.concerns.forEach((entry, index) => {\n if (!record(entry) || !Array.isArray(entry.assertions)) return;\n const assertion = currentAssertion(\n entry as unknown as ConditionConcern\n );\n if (!assertion?.coding?.some(coded)) add(`concerns.${index}.coding`);\n });\n }\n if (section.kind === 'assessment' && Array.isArray(parsed.items)) {\n const concerns = [\n ...(Array.isArray(parsed.concerns) ? parsed.concerns : []),\n ...externalConcerns,\n ];\n parsed.items.forEach((item, index) => {\n if (!record(item)) return;\n const concern = concerns.find(\n (entry) => record(entry) && entry.concernId === item.concernId\n );\n const assertion =\n concern && Array.isArray(concern.assertions)\n ? concern.assertions.find(\n (entry: unknown) => record(entry) && entry.id === item.assertionId\n )\n : undefined;\n if (\n !record(assertion) ||\n !Array.isArray(assertion.coding) ||\n !assertion.coding.some(coded)\n )\n add(`items.${index}.coding`);\n });\n }\n if (section.kind === 'plan' || section.kind === 'assessment') {\n if (Array.isArray(parsed.orders))\n parsed.orders.forEach((order, index) => {\n if (\n record(order) &&\n (!record(order.code) ||\n !nonempty(order.code.fullid) ||\n !nonempty(order.code.codetype) ||\n !nonempty(order.code.fullcode))\n )\n add(`orders.${index}.code`);\n });\n }\n return issues;\n}\n\nfunction validateCustom(\n section: EncounterSectionDefinition,\n answer: string,\n fieldId: string,\n externalConcerns: readonly ConditionConcern[] = []\n): EncounterValidationIssue[] {\n let parsed: unknown;\n try {\n parsed = JSON.parse(answer) as unknown;\n } catch {\n return [\n {\n sectionId: section.id,\n fieldId,\n code: 'invalid-json',\n message: `${section.title} contains malformed JSON.`,\n },\n ];\n }\n const shape =\n section.kind === 'vitals'\n ? validateEncounterVitals(parsed, fieldId, section.id)\n : section.kind === 'assessment'\n ? validateEncounterAssessment(\n parsed,\n fieldId,\n section.id,\n externalConcerns\n )\n : section.kind === 'conditions'\n ? validateEncounterConditions(parsed, fieldId, section.id)\n : section.kind === 'plan'\n ? validateEncounterPlan(parsed, fieldId, section.id)\n : section.kind === 'medications'\n ? validateEncounterMedicationValue(parsed, fieldId, section.id)\n : validateEncounterAllergyValue(parsed, fieldId, section.id);\n return shape.length || !record(parsed)\n ? shape\n : validateCoding(section, parsed, fieldId, externalConcerns);\n}\n\nfunction selectedValue(response?: FieldResponse): string | undefined {\n return record(response?.selected) &&\n typeof response.selected.value === 'string'\n ? response.selected.value\n : undefined;\n}\n\nfunction responseHasContent(response: FieldResponse | undefined): boolean {\n return nonempty(response?.answer) || nonempty(selectedValue(response));\n}\n\nfunction customHasContent(\n section: EncounterSectionDefinition,\n answer?: string\n): boolean {\n const parsed = parseJson(answer);\n if (!record(parsed)) return false;\n if (section.kind === 'vitals')\n return parseEncounterVitals(answer).readings.some((reading) =>\n VITAL_KEYS.some((key) => measurement(reading[key]))\n );\n if (section.kind === 'medications')\n return Array.isArray(parsed.medications) && parsed.medications.length > 0;\n if (section.kind === 'allergies')\n return (\n (Array.isArray(parsed.allergies) && parsed.allergies.length > 0) ||\n parsed.noKnownAllergies === true\n );\n if (section.kind === 'conditions')\n return Array.isArray(parsed.concerns) && parsed.concerns.length > 0;\n return (\n (Array.isArray(parsed.items) && parsed.items.length > 0) ||\n (Array.isArray(parsed.orders) && parsed.orders.length > 0)\n );\n}\n\nexport function getEncounterConcerns(\n definition: EncounterVisitDefinition,\n responses: EncounterResponses\n): ConditionConcern[] {\n const concerns = new Map<string, ConditionConcern>();\n const sections = [...definition.sections].sort(\n (a, b) => Number(b.kind === 'conditions') - Number(a.kind === 'conditions')\n );\n for (const section of sections) {\n if (section.kind !== 'conditions' && section.kind !== 'assessment')\n continue;\n const value = parseJson(\n responses[getEncounterFieldId(section.id, 'value')]?.answer\n );\n if (\n !record(value) ||\n validateEncounterConditions({ concerns: value.concerns }).length\n )\n continue;\n for (const concern of value.concerns as ConditionConcern[])\n if (!concerns.has(concern.concernId))\n concerns.set(concern.concernId, concern);\n }\n return [...concerns.values()];\n}\n\n/** Report required omissions and malformed values without changing recorded data. */\nexport function validateEncounterResponses(\n definition: EncounterVisitDefinition,\n responses: EncounterResponses\n): EncounterValidationIssue[] {\n validateEncounterDefinition(definition);\n const externalConcerns = getEncounterConcerns(definition, responses);\n const issues: EncounterValidationIssue[] = [];\n const add = (\n sectionId: string,\n fieldId: string,\n code: EncounterValidationIssue['code'],\n message: string\n ) => issues.push({ sectionId, fieldId, code, message });\n for (const section of definition.sections) {\n const ids = getEncounterSectionFieldIds(section);\n for (const fieldId of ids) {\n const response = responses[fieldId];\n if (\n response !== undefined &&\n (!record(response) ||\n (response.answer !== undefined &&\n typeof response.answer !== 'string'))\n ) {\n add(\n section.id,\n fieldId,\n 'invalid-response',\n 'An eSheet response must be an object with a string answer.'\n );\n }\n }\n if (section.kind === 'narrative' || section.narrative) {\n const fieldId = getEncounterFieldId(section.id);\n const response = responses[fieldId];\n if (response?.selected !== undefined)\n add(\n section.id,\n fieldId,\n 'invalid-response',\n 'Narrative fields store text in answer.'\n );\n }\n if (section.kind === 'observations') {\n for (const observation of section.observations ?? []) {\n const fieldId = getEncounterFieldId(section.id, observation.id);\n const response = responses[fieldId];\n const hasContent = responseHasContent(response);\n if (observation.required && !hasContent)\n add(\n section.id,\n fieldId,\n 'required',\n `${observation.label} is required.`\n );\n if (observation.type === 'choice') {\n if (\n response?.selected !== undefined &&\n (!record(response.selected) ||\n typeof response.selected.id !== 'string' ||\n typeof response.selected.value !== 'string' ||\n !observation.options?.includes(response.selected.value) ||\n response.selected.id !==\n encodeURIComponent(response.selected.value))\n ) {\n add(\n section.id,\n fieldId,\n 'invalid-choice',\n `${observation.label} must use a configured option.`\n );\n }\n if (nonempty(response?.answer))\n add(\n section.id,\n fieldId,\n 'invalid-response',\n 'Choice observations store the selected option in selected.'\n );\n } else {\n if (response?.selected !== undefined)\n add(\n section.id,\n fieldId,\n 'invalid-response',\n 'Text and numeric observations store their value in answer.'\n );\n if (\n observation.type === 'number' &&\n nonempty(response?.answer) &&\n !measurement(Number(response.answer.trim()))\n ) {\n add(\n section.id,\n fieldId,\n 'invalid-number',\n `${observation.label} must be a finite nonnegative number.`\n );\n }\n }\n }\n } else if (section.kind !== 'narrative') {\n const fieldId = getEncounterFieldId(section.id, 'value');\n const response = responses[fieldId];\n if (response?.selected !== undefined)\n add(\n section.id,\n fieldId,\n 'invalid-response',\n 'Structured sections store serialized JSON in answer.'\n );\n if (nonempty(response?.answer))\n issues.push(\n ...validateCustom(section, response.answer, fieldId, externalConcerns)\n );\n }\n if (section.required) {\n const hasContent =\n section.kind === 'narrative' || section.kind === 'observations'\n ? ids.some((id) => responseHasContent(responses[id]))\n : (section.narrative &&\n responseHasContent(responses[getEncounterFieldId(section.id)])) ||\n customHasContent(\n section,\n responses[getEncounterFieldId(section.id, 'value')]?.answer\n );\n if (!hasContent)\n add(\n section.id,\n ids[0],\n 'required',\n `${section.title} requires at least one recorded answer.`\n );\n }\n }\n const concernIds = new Set(\n externalConcerns.map((concern) => concern.concernId)\n );\n for (const section of definition.sections) {\n if (section.kind !== 'plan') continue;\n const fieldId = getEncounterFieldId(section.id, 'value');\n const parsed = parseJson(responses[fieldId]?.answer);\n if (!record(parsed) || !Array.isArray(parsed.orders)) continue;\n parsed.orders.forEach((order, index) => {\n if (\n record(order) &&\n nonempty(order.concernId) &&\n !concernIds.has(order.concernId)\n )\n issues.push({\n sectionId: section.id,\n fieldId,\n code: 'invalid-value',\n path: `orders.${index}.concernId`,\n message:\n 'A plan order must link to a condition recorded in this visit.',\n });\n });\n }\n return issues;\n}\n\nfunction exportVitals(\n section: EncounterSectionDefinition,\n answer?: string\n): EncounterObservation[] {\n const fieldId = getEncounterFieldId(section.id, 'value');\n return parseEncounterVitals(answer).readings.flatMap((reading) => {\n const base = {\n sectionId: section.id,\n fieldId,\n groupId: reading.id,\n recordedAt: reading.recordedAt,\n position: reading.position,\n site: reading.site,\n };\n const observations: EncounterObservation[] = [];\n if (measurement(reading.systolic) || measurement(reading.diastolic)) {\n observations.push({\n ...base,\n label: 'Blood pressure',\n value: `${measurement(reading.systolic) ? reading.systolic : '?'}/${measurement(reading.diastolic) ? reading.diastolic : '?'}`,\n unit: 'mmHg',\n code: loinc('85354-9', 'Blood pressure panel'),\n components: [\n ...(measurement(reading.systolic)\n ? [\n {\n label: 'Systolic',\n value: reading.systolic,\n unit: 'mmHg',\n code: loinc('8480-6', 'Systolic blood pressure'),\n },\n ]\n : []),\n ...(measurement(reading.diastolic)\n ? [\n {\n label: 'Diastolic',\n value: reading.diastolic,\n unit: 'mmHg',\n code: loinc('8462-4', 'Diastolic blood pressure'),\n },\n ]\n : []),\n ],\n });\n }\n for (const vital of VITALS) {\n const value = reading[vital.key];\n if (\n measurement(value) &&\n (vital.key !== 'pain' || value <= 10) &&\n (vital.key !== 'oxygenSaturation' || value <= 100)\n )\n observations.push({\n ...base,\n label: vital.label,\n value,\n unit: vital.unit,\n code: loinc(vital.code, vital.label),\n });\n }\n return observations;\n });\n}\n\nfunction exportCustom(\n section: EncounterSectionDefinition,\n answer?: string,\n externalConcerns: readonly ConditionConcern[] = []\n): EncounterObservation[] {\n if (section.kind === 'vitals') return exportVitals(section, answer);\n if (\n !nonempty(answer) ||\n validateCustom(\n { ...section, requireCoding: false },\n answer,\n getEncounterFieldId(section.id, 'value'),\n externalConcerns\n ).length > 0\n )\n return [];\n const parsed = parseJson(answer) as Record<string, unknown>;\n const base = {\n sectionId: section.id,\n fieldId: getEncounterFieldId(section.id, 'value'),\n };\n if (section.kind === 'medications') {\n return (parsed.medications as Medication[]).map((medication) => ({\n ...base,\n label: 'Medication',\n value: [\n medication.name,\n medication.sig,\n `Status: ${medication.status}`,\n medication.note,\n (section.requireCoding ?? true) && !medication.code\n ? 'Coding required'\n : undefined,\n ]\n .filter(Boolean)\n .join('; '),\n code: medication.code,\n groupId: medication.id,\n }));\n }\n if (section.kind === 'allergies') {\n if (parsed.noKnownAllergies === true)\n return [\n {\n ...base,\n label: 'Allergies',\n value: 'No known allergies (explicitly recorded)',\n // HL7 IPA NKA example: AllergyIntolerance/716186003 (explicit absence).\n code: {\n system: 'http://snomed.info/sct',\n code: '716186003',\n display: 'No known allergy',\n },\n },\n ];\n return (parsed.allergies as Allergy[]).map((allergy) => ({\n ...base,\n label: allergy.kind === 'intolerance' ? 'Intolerance' : 'Allergy',\n value: [\n allergy.allergen,\n allergy.reaction,\n allergy.severity,\n allergy.inactive ? 'inactive' : undefined,\n allergy.note,\n (section.requireCoding ?? true) && !allergy.code\n ? 'Coding required'\n : undefined,\n ]\n .filter(Boolean)\n .join('; '),\n code: allergy.code,\n groupId: allergy.id,\n }));\n }\n if (section.kind === 'conditions') {\n return (parsed.concerns as ConditionConcern[]).flatMap((concern) => {\n const assertion = currentAssertion(concern);\n if (!assertion) return [];\n return [\n {\n ...base,\n label: 'Condition',\n value: [\n assertion.text,\n `Status: ${concern.clinicalStatus}`,\n `Verification: ${assertion.verificationStatus}`,\n assertion.note,\n (section.requireCoding ?? true) && !assertion.coding?.length\n ? 'Coding required'\n : undefined,\n ]\n .filter(Boolean)\n .join('; '),\n groupId: concern.concernId,\n code:\n assertion.coding?.find((coding) => coding.primary) ??\n assertion.coding?.[0],\n },\n ];\n });\n }\n const assessment: EncounterAssessmentValue =\n section.kind === 'plan'\n ? {\n concerns: [],\n items: [],\n orders: parsed.orders as EncounterPlanValue['orders'],\n }\n : (parsed as unknown as EncounterAssessmentValue);\n const observations: EncounterObservation[] = [];\n for (const item of assessment.items) {\n const assertion = [...assessment.concerns, ...externalConcerns]\n .find((concern) => concern.concernId === item.concernId)\n ?.assertions.find((assertion) => assertion.id === item.assertionId);\n if (assertion)\n observations.push({\n ...base,\n label: 'Assessment',\n value: [\n assertion.text,\n `Verification: ${assertion.verificationStatus}`,\n assertion.note,\n item.note,\n (section.requireCoding ?? true) && !assertion.coding?.length\n ? 'Coding required'\n : undefined,\n ]\n .filter(Boolean)\n .join('; '),\n groupId: item.concernId,\n code:\n assertion.coding?.find((coding) => coding.primary) ??\n assertion.coding?.[0],\n });\n }\n for (const order of assessment.orders) {\n observations.push({\n ...base,\n label: `${order.type} order`,\n value: [\n order.display,\n order.detail,\n order.priority,\n order.timing,\n order.indication,\n order.bodySite,\n order.referTo,\n order.notes,\n (section.requireCoding ?? true) && !order.code\n ? 'Coding required'\n : undefined,\n ]\n .filter(Boolean)\n .join('; '),\n groupId: order.concernId ?? order.orderId,\n code: order.code\n ? {\n system: order.code.codetype,\n code: order.code.fullcode,\n display: order.display,\n }\n : undefined,\n });\n }\n return observations;\n}\n\n/** Export documented narrative and individual observations while retaining the full eSheet response. */\nexport function createEncounterSnapshot(\n definition: EncounterVisitDefinition,\n responses: EncounterResponses\n): EncounterVisitSnapshot {\n const errors = validateEncounterResponses(definition, responses);\n const externalConcerns = getEncounterConcerns(definition, responses);\n const observations: EncounterObservation[] = [];\n for (const section of definition.sections) {\n if (section.kind === 'narrative' || section.narrative) {\n const fieldId = getEncounterFieldId(section.id);\n const answer = responses[fieldId]?.answer;\n if (nonempty(answer))\n observations.push({\n sectionId: section.id,\n fieldId,\n label:\n section.kind === 'narrative'\n ? section.title\n : `${section.title} narrative`,\n value: answer,\n });\n }\n if (section.kind === 'observations') {\n for (const observation of section.observations ?? []) {\n const fieldId = getEncounterFieldId(section.id, observation.id);\n const response = responses[fieldId];\n const raw =\n observation.type === 'choice'\n ? selectedValue(response)\n : response?.answer;\n if (!nonempty(raw)) continue;\n if (\n observation.type === 'choice' &&\n (!observation.options?.includes(raw) ||\n errors.some(\n (issue) =>\n issue.fieldId === fieldId && issue.code === 'invalid-choice'\n ))\n )\n continue;\n const value = observation.type === 'number' ? Number(raw) : raw;\n if (typeof value === 'number' && !measurement(value)) continue;\n observations.push({\n sectionId: section.id,\n fieldId,\n label: observation.label,\n value,\n unit: observation.unit,\n code: observation.code,\n });\n }\n } else if (section.kind !== 'narrative') {\n observations.push(\n ...exportCustom(\n section,\n responses[getEncounterFieldId(section.id, 'value')]?.answer,\n externalConcerns\n )\n );\n }\n }\n const note = [\n definition.title,\n ...definition.sections.flatMap((section) => {\n const values = observations.filter(\n (observation) => observation.sectionId === section.id\n );\n if (values.length === 0) return [];\n return [\n `${section.title}\\n${values\n .map((observation) => {\n const metadata = [\n section.kind === 'vitals' &&\n observation.groupId &&\n `Reading ${observation.groupId}`,\n observation.recordedAt,\n observation.position,\n observation.site,\n ].filter(Boolean);\n const unit =\n observation.unit === 'Cel'\n ? '°C'\n : observation.unit === 'mm[Hg]'\n ? 'mmHg'\n : observation.unit === '{score}'\n ? '/10'\n : observation.unit;\n return `${observation.label}: ${observation.value}${unit ? ` ${unit}` : ''}${metadata.length ? ` (${metadata.join('; ')})` : ''}`;\n })\n .join('\\n')}`,\n ];\n }),\n ].join('\\n\\n');\n // Keep host snapshot transformations detached from the live eSheet store.\n const snapshot = {\n definition,\n responses,\n observations,\n note,\n errors,\n };\n return globalThis.structuredClone({\n ...snapshot,\n mdy: createEncounterMdy(snapshot),\n });\n}\n"]}