@krainovsd/markdown-editor 0.0.4 → 0.1.1

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 (253) hide show
  1. package/lib/cjs/index-Byjf17iv.js +501 -0
  2. package/lib/cjs/index-Byjf17iv.js.map +1 -0
  3. package/lib/cjs/index-lPo-3QDL.js +1374 -0
  4. package/lib/cjs/index-lPo-3QDL.js.map +1 -0
  5. package/lib/cjs/index.js +14 -1
  6. package/lib/cjs/index.js.map +1 -1
  7. package/lib/esm/extensions/compartments/index.js +8 -0
  8. package/lib/esm/extensions/compartments/index.js.map +1 -0
  9. package/lib/esm/extensions/init-extensions.js +45 -0
  10. package/lib/esm/extensions/init-extensions.js.map +1 -0
  11. package/lib/esm/extensions/keymaps/init-key-map.js +91 -0
  12. package/lib/esm/extensions/keymaps/init-key-map.js.map +1 -0
  13. package/lib/esm/extensions/listeners/get-change-event.js +14 -0
  14. package/lib/esm/extensions/listeners/get-change-event.js.map +1 -0
  15. package/lib/esm/extensions/listeners/get-focus-event.js +16 -0
  16. package/lib/esm/extensions/listeners/get-focus-event.js.map +1 -0
  17. package/lib/esm/extensions/listeners/init-listeners.js +9 -0
  18. package/lib/esm/extensions/listeners/init-listeners.js.map +1 -0
  19. package/lib/esm/extensions/markdown/blockquote/blockquote-constants.js +6 -0
  20. package/lib/esm/extensions/markdown/blockquote/blockquote-constants.js.map +1 -0
  21. package/lib/esm/extensions/markdown/blockquote/blockquote-decoration.js +99 -0
  22. package/lib/esm/extensions/markdown/blockquote/blockquote-decoration.js.map +1 -0
  23. package/lib/esm/extensions/markdown/blockquote/blockquote-widget.js +25 -0
  24. package/lib/esm/extensions/markdown/blockquote/blockquote-widget.js.map +1 -0
  25. package/lib/esm/extensions/markdown/bold/bold-constants.js +5 -0
  26. package/lib/esm/extensions/markdown/bold/bold-constants.js.map +1 -0
  27. package/lib/esm/extensions/markdown/bold/bold-decoration.js +41 -0
  28. package/lib/esm/extensions/markdown/bold/bold-decoration.js.map +1 -0
  29. package/lib/esm/extensions/markdown/code/code-constants.js +6 -0
  30. package/lib/esm/extensions/markdown/code/code-constants.js.map +1 -0
  31. package/lib/esm/extensions/markdown/code/code-decoration.js +109 -0
  32. package/lib/esm/extensions/markdown/code/code-decoration.js.map +1 -0
  33. package/lib/esm/extensions/markdown/code/code-widget.js +83 -0
  34. package/lib/esm/extensions/markdown/code/code-widget.js.map +1 -0
  35. package/lib/esm/extensions/markdown/header/header-constants.js +6 -0
  36. package/lib/esm/extensions/markdown/header/header-constants.js.map +1 -0
  37. package/lib/esm/extensions/markdown/header/header-decoration.js +64 -0
  38. package/lib/esm/extensions/markdown/header/header-decoration.js.map +1 -0
  39. package/lib/esm/extensions/markdown/horizontal/horizontal-constants.js +4 -0
  40. package/lib/esm/extensions/markdown/horizontal/horizontal-constants.js.map +1 -0
  41. package/lib/esm/extensions/markdown/horizontal/horizontal-decoration.js +31 -0
  42. package/lib/esm/extensions/markdown/horizontal/horizontal-decoration.js.map +1 -0
  43. package/lib/esm/extensions/markdown/image/image-constants.js +8 -0
  44. package/lib/esm/extensions/markdown/image/image-constants.js.map +1 -0
  45. package/lib/esm/extensions/markdown/image/image-decoration.js +75 -0
  46. package/lib/esm/extensions/markdown/image/image-decoration.js.map +1 -0
  47. package/lib/esm/extensions/markdown/image/image-widget.js +184 -0
  48. package/lib/esm/extensions/markdown/image/image-widget.js.map +1 -0
  49. package/lib/esm/extensions/markdown/index.js +2 -0
  50. package/lib/esm/extensions/markdown/index.js.map +1 -0
  51. package/lib/esm/extensions/markdown/init-markdown.js +18 -0
  52. package/lib/esm/extensions/markdown/init-markdown.js.map +1 -0
  53. package/lib/esm/extensions/markdown/italic/italic-constants.js +5 -0
  54. package/lib/esm/extensions/markdown/italic/italic-constants.js.map +1 -0
  55. package/lib/esm/extensions/markdown/italic/italic-decoration.js +77 -0
  56. package/lib/esm/extensions/markdown/italic/italic-decoration.js.map +1 -0
  57. package/lib/esm/extensions/markdown/link/auto-link-decoration.js +24 -0
  58. package/lib/esm/extensions/markdown/link/auto-link-decoration.js.map +1 -0
  59. package/lib/esm/extensions/markdown/link/link-constants.js +10 -0
  60. package/lib/esm/extensions/markdown/link/link-constants.js.map +1 -0
  61. package/lib/esm/extensions/markdown/link/link-decoration.js +51 -0
  62. package/lib/esm/extensions/markdown/link/link-decoration.js.map +1 -0
  63. package/lib/esm/extensions/markdown/link/link-label-decoration.js +22 -0
  64. package/lib/esm/extensions/markdown/link/link-label-decoration.js.map +1 -0
  65. package/lib/esm/extensions/markdown/link/link-widget.js +144 -0
  66. package/lib/esm/extensions/markdown/link/link-widget.js.map +1 -0
  67. package/lib/esm/extensions/markdown/list/list-constants.js +7 -0
  68. package/lib/esm/extensions/markdown/list/list-constants.js.map +1 -0
  69. package/lib/esm/extensions/markdown/list/list-decoration.js +38 -0
  70. package/lib/esm/extensions/markdown/list/list-decoration.js.map +1 -0
  71. package/lib/esm/extensions/markdown/list/list-widget.js +33 -0
  72. package/lib/esm/extensions/markdown/list/list-widget.js.map +1 -0
  73. package/lib/esm/extensions/markdown/markdown-decoration.js +105 -0
  74. package/lib/esm/extensions/markdown/markdown-decoration.js.map +1 -0
  75. package/lib/esm/extensions/markdown/markdown-parser.js +6 -0
  76. package/lib/esm/extensions/markdown/markdown-parser.js.map +1 -0
  77. package/lib/esm/extensions/markdown/mention/mention-constants.js +6 -0
  78. package/lib/esm/extensions/markdown/mention/mention-constants.js.map +1 -0
  79. package/lib/esm/extensions/markdown/mention/mention-decoration.js +37 -0
  80. package/lib/esm/extensions/markdown/mention/mention-decoration.js.map +1 -0
  81. package/lib/esm/extensions/markdown/mention/mention-parser.js +25 -0
  82. package/lib/esm/extensions/markdown/mention/mention-parser.js.map +1 -0
  83. package/lib/esm/extensions/markdown/strike-through/strike-through-constants.js +4 -0
  84. package/lib/esm/extensions/markdown/strike-through/strike-through-constants.js.map +1 -0
  85. package/lib/esm/extensions/markdown/strike-through/strike-through-decoration.js +32 -0
  86. package/lib/esm/extensions/markdown/strike-through/strike-through-decoration.js.map +1 -0
  87. package/lib/esm/extensions/markdown/styles.module.scss.js +8 -0
  88. package/lib/esm/extensions/markdown/styles.module.scss.js.map +1 -0
  89. package/lib/esm/extensions/markdown/todo/todo-constants.js +6 -0
  90. package/lib/esm/extensions/markdown/todo/todo-constants.js.map +1 -0
  91. package/lib/esm/extensions/markdown/todo/todo-decoration.js +35 -0
  92. package/lib/esm/extensions/markdown/todo/todo-decoration.js.map +1 -0
  93. package/lib/esm/extensions/markdown/todo/todo-widget.js +51 -0
  94. package/lib/esm/extensions/markdown/todo/todo-widget.js.map +1 -0
  95. package/lib/esm/extensions/settings/init-settings.js +19 -0
  96. package/lib/esm/extensions/settings/init-settings.js.map +1 -0
  97. package/lib/esm/extensions/theme/init-theme.js +15 -0
  98. package/lib/esm/extensions/theme/init-theme.js.map +1 -0
  99. package/lib/esm/extensions/theme/theme-constants.js +17 -0
  100. package/lib/esm/extensions/theme/theme-constants.js.map +1 -0
  101. package/lib/esm/extensions/theme/themes/get-dark-theme.js +40 -0
  102. package/lib/esm/extensions/theme/themes/get-dark-theme.js.map +1 -0
  103. package/lib/esm/extensions/theme/themes/get-highlight-template.js +35 -0
  104. package/lib/esm/extensions/theme/themes/get-highlight-template.js.map +1 -0
  105. package/lib/esm/extensions/theme/themes/get-light-theme.js +40 -0
  106. package/lib/esm/extensions/theme/themes/get-light-theme.js.map +1 -0
  107. package/lib/esm/extensions/theme/themes/get-theme-template.js +69 -0
  108. package/lib/esm/extensions/theme/themes/get-theme-template.js.map +1 -0
  109. package/lib/esm/index.js +1 -1
  110. package/lib/esm/lib/utils/copy-to-clipboard.js +35 -0
  111. package/lib/esm/lib/utils/copy-to-clipboard.js.map +1 -0
  112. package/lib/esm/lib/utils/get-decoration.js +24 -0
  113. package/lib/esm/lib/utils/get-decoration.js.map +1 -0
  114. package/lib/esm/lib/utils/is-in-range.js +8 -0
  115. package/lib/esm/lib/utils/is-in-range.js.map +1 -0
  116. package/lib/esm/lib/utils/is-range-overlap.js +6 -0
  117. package/lib/esm/lib/utils/is-range-overlap.js.map +1 -0
  118. package/lib/esm/lib/utils/tick.js +22 -0
  119. package/lib/esm/lib/utils/tick.js.map +1 -0
  120. package/lib/esm/module/Editor/Editor.js +91 -0
  121. package/lib/esm/module/Editor/Editor.js.map +1 -0
  122. package/lib/esm/module/Editor/lib/init-editor-provider.js +32 -0
  123. package/lib/esm/module/Editor/lib/init-editor-provider.js.map +1 -0
  124. package/lib/esm/module/Editor/lib/init-editor-state.js +18 -0
  125. package/lib/esm/module/Editor/lib/init-editor-state.js.map +1 -0
  126. package/lib/esm/module/Editor/lib/init-editor.js +27 -0
  127. package/lib/esm/module/Editor/lib/init-editor.js.map +1 -0
  128. package/lib/esm/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js +29 -0
  129. package/lib/esm/node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js.map +1 -0
  130. package/lib/index.d.ts +137 -0
  131. package/package.json +37 -30
  132. package/lib/cjs/editor-qKPDa91b.js +0 -2
  133. package/lib/cjs/editor-qKPDa91b.js.map +0 -1
  134. package/lib/cjs/markdown_plugin-IXFRDWyN.js +0 -2
  135. package/lib/cjs/markdown_plugin-IXFRDWyN.js.map +0 -1
  136. package/lib/cjs/vendor_vim-BHa51_r7.js +0 -2
  137. package/lib/cjs/vendor_vim-BHa51_r7.js.map +0 -1
  138. package/lib/cjs/vendor_y.next-CVyX1ZQB.js +0 -2
  139. package/lib/cjs/vendor_y.next-CVyX1ZQB.js.map +0 -1
  140. package/lib/cjs/vendor_y.websocket-Dr9ojjFR.js +0 -2
  141. package/lib/cjs/vendor_y.websocket-Dr9ojjFR.js.map +0 -1
  142. package/lib/cjs/vendor_yjs-DXWp84x5.js +0 -2
  143. package/lib/cjs/vendor_yjs-DXWp84x5.js.map +0 -1
  144. package/lib/esm/editor-CLyV23xt.js +0 -2
  145. package/lib/esm/editor-CLyV23xt.js.map +0 -1
  146. package/lib/esm/markdown_plugin-DdBeaig8.js +0 -2
  147. package/lib/esm/markdown_plugin-DdBeaig8.js.map +0 -1
  148. package/lib/esm/vendor_vim-PF2jWG0J.js +0 -2
  149. package/lib/esm/vendor_vim-PF2jWG0J.js.map +0 -1
  150. package/lib/esm/vendor_y.next-B9hhKe5T.js +0 -2
  151. package/lib/esm/vendor_y.next-B9hhKe5T.js.map +0 -1
  152. package/lib/esm/vendor_y.websocket-gIpX3Cmo.js +0 -2
  153. package/lib/esm/vendor_y.websocket-gIpX3Cmo.js.map +0 -1
  154. package/lib/esm/vendor_yjs-otxZW90b.js +0 -2
  155. package/lib/esm/vendor_yjs-otxZW90b.js.map +0 -1
  156. package/tmp/app/helpers/common-test.d.ts +0 -1
  157. package/tmp/app/helpers/full-example.d.ts +0 -1
  158. package/tmp/app/helpers/index.d.ts +0 -5
  159. package/tmp/app/helpers/random-color.d.ts +0 -1
  160. package/tmp/app/helpers/random-string.d.ts +0 -1
  161. package/tmp/app/helpers/stress-test.d.ts +0 -1
  162. package/tmp/app/index.d.ts +0 -1
  163. package/tmp/extensions/compartments/index.d.ts +0 -4
  164. package/tmp/extensions/index.d.ts +0 -8
  165. package/tmp/extensions/init-extensions.d.ts +0 -14
  166. package/tmp/extensions/keymaps/bold-keymap.d.ts +0 -2
  167. package/tmp/extensions/keymaps/index.d.ts +0 -1
  168. package/tmp/extensions/keymaps/init-key-map.d.ts +0 -23
  169. package/tmp/extensions/keymaps/italic-key-map.d.ts +0 -2
  170. package/tmp/extensions/keymaps/line-through-key-map.d.ts +0 -2
  171. package/tmp/extensions/keymaps/underline-key-map.d.ts +0 -2
  172. package/tmp/extensions/listeners/get-change-event.d.ts +0 -6
  173. package/tmp/extensions/listeners/get-focus-event.d.ts +0 -8
  174. package/tmp/extensions/listeners/index.d.ts +0 -3
  175. package/tmp/extensions/listeners/init-listeners.d.ts +0 -4
  176. package/tmp/extensions/markdown/blockquote/blockquote-constants.d.ts +0 -3
  177. package/tmp/extensions/markdown/blockquote/blockquote-decoration.d.ts +0 -2
  178. package/tmp/extensions/markdown/blockquote/blockquote-widget.d.ts +0 -6
  179. package/tmp/extensions/markdown/blockquote/index.d.ts +0 -1
  180. package/tmp/extensions/markdown/bold/bold-constants.d.ts +0 -2
  181. package/tmp/extensions/markdown/bold/bold-decoration.d.ts +0 -2
  182. package/tmp/extensions/markdown/bold/index.d.ts +0 -1
  183. package/tmp/extensions/markdown/code/code-constants.d.ts +0 -3
  184. package/tmp/extensions/markdown/code/code-decoration.d.ts +0 -2
  185. package/tmp/extensions/markdown/code/code-widget.d.ts +0 -13
  186. package/tmp/extensions/markdown/code/index.d.ts +0 -1
  187. package/tmp/extensions/markdown/header/header-constants.d.ts +0 -3
  188. package/tmp/extensions/markdown/header/header-decoration.d.ts +0 -2
  189. package/tmp/extensions/markdown/header/index.d.ts +0 -1
  190. package/tmp/extensions/markdown/horizontal/horizontal-constants.d.ts +0 -1
  191. package/tmp/extensions/markdown/horizontal/horizontal-decoration.d.ts +0 -2
  192. package/tmp/extensions/markdown/horizontal/index.d.ts +0 -1
  193. package/tmp/extensions/markdown/image/image-constants.d.ts +0 -5
  194. package/tmp/extensions/markdown/image/image-decoration.d.ts +0 -2
  195. package/tmp/extensions/markdown/image/image-widget.d.ts +0 -14
  196. package/tmp/extensions/markdown/image/index.d.ts +0 -1
  197. package/tmp/extensions/markdown/index.d.ts +0 -2
  198. package/tmp/extensions/markdown/init-markdown.d.ts +0 -3
  199. package/tmp/extensions/markdown/italic/index.d.ts +0 -1
  200. package/tmp/extensions/markdown/italic/italic-constants.d.ts +0 -2
  201. package/tmp/extensions/markdown/italic/italic-decoration.d.ts +0 -2
  202. package/tmp/extensions/markdown/link/auto-link-decoration.d.ts +0 -2
  203. package/tmp/extensions/markdown/link/index.d.ts +0 -2
  204. package/tmp/extensions/markdown/link/link-constants.d.ts +0 -7
  205. package/tmp/extensions/markdown/link/link-decoration.d.ts +0 -2
  206. package/tmp/extensions/markdown/link/link-label-decoration.d.ts +0 -2
  207. package/tmp/extensions/markdown/link/link-widget.d.ts +0 -17
  208. package/tmp/extensions/markdown/list/index.d.ts +0 -1
  209. package/tmp/extensions/markdown/list/list-constants.d.ts +0 -4
  210. package/tmp/extensions/markdown/list/list-decoration.d.ts +0 -2
  211. package/tmp/extensions/markdown/list/list-widget.d.ts +0 -7
  212. package/tmp/extensions/markdown/markdown-decoration.d.ts +0 -5
  213. package/tmp/extensions/markdown/markdown-parser.d.ts +0 -2
  214. package/tmp/extensions/markdown/markdown-types.d.ts +0 -24
  215. package/tmp/extensions/markdown/mention/index.d.ts +0 -1
  216. package/tmp/extensions/markdown/mention/mention-constants.d.ts +0 -3
  217. package/tmp/extensions/markdown/mention/mention-decoration.d.ts +0 -2
  218. package/tmp/extensions/markdown/mention/mention-parser.d.ts +0 -2
  219. package/tmp/extensions/markdown/strike-through/index.d.ts +0 -1
  220. package/tmp/extensions/markdown/strike-through/strike-through-constants.d.ts +0 -1
  221. package/tmp/extensions/markdown/strike-through/strike-through-decoration.d.ts +0 -2
  222. package/tmp/extensions/markdown/todo/index.d.ts +0 -1
  223. package/tmp/extensions/markdown/todo/todo-constants.d.ts +0 -3
  224. package/tmp/extensions/markdown/todo/todo-decoration.d.ts +0 -2
  225. package/tmp/extensions/markdown/todo/todo-widget.d.ts +0 -11
  226. package/tmp/extensions/settings/index.d.ts +0 -1
  227. package/tmp/extensions/settings/init-settings.d.ts +0 -6
  228. package/tmp/extensions/theme/index.d.ts +0 -4
  229. package/tmp/extensions/theme/init-theme.d.ts +0 -3
  230. package/tmp/extensions/theme/theme-constants.d.ts +0 -14
  231. package/tmp/extensions/theme/theme-types.d.ts +0 -39
  232. package/tmp/extensions/theme/themes/get-dark-theme.d.ts +0 -2
  233. package/tmp/extensions/theme/themes/get-highlight-template.d.ts +0 -6
  234. package/tmp/extensions/theme/themes/get-light-theme.d.ts +0 -2
  235. package/tmp/extensions/theme/themes/get-theme-template.d.ts +0 -2
  236. package/tmp/extensions/theme/themes/index.d.ts +0 -2
  237. package/tmp/index.d.ts +0 -3
  238. package/tmp/lib/index.d.ts +0 -1
  239. package/tmp/lib/utils/copy-to-clipboard.d.ts +0 -1
  240. package/tmp/lib/utils/get-decoration.d.ts +0 -26
  241. package/tmp/lib/utils/index.d.ts +0 -6
  242. package/tmp/lib/utils/is-in-range.d.ts +0 -2
  243. package/tmp/lib/utils/is-range-overlap.d.ts +0 -1
  244. package/tmp/lib/utils/random-string.d.ts +0 -1
  245. package/tmp/lib/utils/tick.d.ts +0 -10
  246. package/tmp/module/Editor/Editor.d.ts +0 -18
  247. package/tmp/module/Editor/Editor.types.d.ts +0 -13
  248. package/tmp/module/Editor/index.d.ts +0 -3
  249. package/tmp/module/Editor/lib/index.d.ts +0 -1
  250. package/tmp/module/Editor/lib/init-editor-provider.d.ts +0 -9
  251. package/tmp/module/Editor/lib/init-editor-state.d.ts +0 -7
  252. package/tmp/module/Editor/lib/init-editor.d.ts +0 -7
  253. package/tmp/module/index.d.ts +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown_plugin-DdBeaig8.js","sources":["../../node_modules/.pnpm/@codemirror+autocomplete@6.18.3_@codemirror+language@6.10.6_@codemirror+state@6.5.0_@codemirr_griwlobvdzmk35u544drtqqpeq/node_modules/@codemirror/autocomplete/dist/index.js","../../node_modules/.pnpm/@lezer+markdown@1.3.2/node_modules/@lezer/markdown/dist/index.js","../../node_modules/.pnpm/@lezer+lr@1.4.2/node_modules/@lezer/lr/dist/index.js","../../node_modules/.pnpm/@lezer+html@1.3.10/node_modules/@lezer/html/dist/index.js","../../node_modules/.pnpm/@lezer+css@1.1.9/node_modules/@lezer/css/dist/index.js","../../node_modules/.pnpm/@codemirror+lang-css@6.3.1_@codemirror+view@6.35.3/node_modules/@codemirror/lang-css/dist/index.js","../../node_modules/.pnpm/@lezer+javascript@1.4.21/node_modules/@lezer/javascript/dist/index.js","../../node_modules/.pnpm/@codemirror+lang-javascript@6.2.2/node_modules/@codemirror/lang-javascript/dist/index.js","../../node_modules/.pnpm/@codemirror+lang-html@6.4.9/node_modules/@codemirror/lang-html/dist/index.js","../../node_modules/.pnpm/@codemirror+lang-markdown@6.3.1/node_modules/@codemirror/lang-markdown/dist/index.js","../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../src/lib/utils/copy-to-clipboard.ts","../../src/lib/utils/tick.ts","../../src/lib/utils/get-decoration.ts","../../src/lib/utils/is-range-overlap.ts","../../src/lib/utils/is-in-range.ts","../../node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js","../../src/extensions/markdown/blockquote/blockquote-constants.ts","../../src/extensions/markdown/blockquote/blockquote-widget.ts","../../src/extensions/markdown/blockquote/blockquote-decoration.ts","../../src/extensions/markdown/bold/bold-constants.ts","../../src/extensions/markdown/bold/bold-decoration.ts","../../src/extensions/markdown/code/code-constants.ts","../../src/extensions/markdown/code/code-widget.ts","../../src/extensions/markdown/code/code-decoration.ts","../../src/extensions/markdown/header/header-constants.ts","../../src/extensions/markdown/header/header-decoration.ts","../../src/extensions/markdown/horizontal/horizontal-decoration.ts","../../src/extensions/markdown/horizontal/horizontal-constants.ts","../../src/extensions/markdown/image/image-widget.ts","../../src/extensions/markdown/image/image-decoration.ts","../../src/extensions/markdown/image/image-constants.ts","../../src/extensions/markdown/italic/italic-constants.ts","../../src/extensions/markdown/italic/italic-decoration.ts","../../src/extensions/markdown/link/link-widget.ts","../../src/extensions/markdown/link/link-decoration.ts","../../src/extensions/markdown/link/link-constants.ts","../../src/extensions/markdown/link/link-label-decoration.ts","../../src/extensions/markdown/link/auto-link-decoration.ts","../../src/extensions/markdown/list/list-constants.ts","../../src/extensions/markdown/list/list-widget.ts","../../src/extensions/markdown/list/list-decoration.ts","../../src/extensions/markdown/mention/mention-constants.ts","../../src/extensions/markdown/mention/mention-decoration.ts","../../src/extensions/markdown/strike-through/strike-through-constants.ts","../../src/extensions/markdown/strike-through/strike-through-decoration.ts","../../src/extensions/markdown/todo/todo-constants.ts","../../src/extensions/markdown/todo/todo-widget.ts","../../src/extensions/markdown/todo/todo-decoration.ts","../../src/extensions/markdown/markdown-decoration.ts","../../src/extensions/markdown/markdown-parser.ts","../../src/extensions/markdown/mention/mention-parser.ts","../../src/extensions/markdown/init-markdown.ts"],"sourcesContent":["import { Annotation, StateEffect, EditorSelection, codePointAt, codePointSize, fromCodePoint, Facet, combineConfig, StateField, Prec, Text, Transaction, MapMode, RangeValue, RangeSet, CharCategory } from '@codemirror/state';\nimport { Direction, logException, showTooltip, EditorView, ViewPlugin, getTooltip, Decoration, WidgetType, keymap } from '@codemirror/view';\nimport { syntaxTree, indentUnit } from '@codemirror/language';\n\n/**\nAn instance of this is passed to completion source functions.\n*/\nclass CompletionContext {\n /**\n Create a new completion context. (Mostly useful for testing\n completion sources—in the editor, the extension will create\n these for you.)\n */\n constructor(\n /**\n The editor state that the completion happens in.\n */\n state, \n /**\n The position at which the completion is happening.\n */\n pos, \n /**\n Indicates whether completion was activated explicitly, or\n implicitly by typing. The usual way to respond to this is to\n only return completions when either there is part of a\n completable entity before the cursor, or `explicit` is true.\n */\n explicit, \n /**\n The editor view. May be undefined if the context was created\n in a situation where there is no such view available, such as\n in synchronous updates via\n [`CompletionResult.update`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.update)\n or when called by test code.\n */\n view) {\n this.state = state;\n this.pos = pos;\n this.explicit = explicit;\n this.view = view;\n /**\n @internal\n */\n this.abortListeners = [];\n /**\n @internal\n */\n this.abortOnDocChange = false;\n }\n /**\n Get the extent, content, and (if there is a token) type of the\n token before `this.pos`.\n */\n tokenBefore(types) {\n let token = syntaxTree(this.state).resolveInner(this.pos, -1);\n while (token && types.indexOf(token.name) < 0)\n token = token.parent;\n return token ? { from: token.from, to: this.pos,\n text: this.state.sliceDoc(token.from, this.pos),\n type: token.type } : null;\n }\n /**\n Get the match of the given expression directly before the\n cursor.\n */\n matchBefore(expr) {\n let line = this.state.doc.lineAt(this.pos);\n let start = Math.max(line.from, this.pos - 250);\n let str = line.text.slice(start - line.from, this.pos - line.from);\n let found = str.search(ensureAnchor(expr, false));\n return found < 0 ? null : { from: start + found, to: this.pos, text: str.slice(found) };\n }\n /**\n Yields true when the query has been aborted. Can be useful in\n asynchronous queries to avoid doing work that will be ignored.\n */\n get aborted() { return this.abortListeners == null; }\n /**\n Allows you to register abort handlers, which will be called when\n the query is\n [aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).\n \n By default, running queries will not be aborted for regular\n typing or backspacing, on the assumption that they are likely to\n return a result with a\n [`validFor`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.validFor) field that\n allows the result to be used after all. Passing `onDocChange:\n true` will cause this query to be aborted for any document\n change.\n */\n addEventListener(type, listener, options) {\n if (type == \"abort\" && this.abortListeners) {\n this.abortListeners.push(listener);\n if (options && options.onDocChange)\n this.abortOnDocChange = true;\n }\n }\n}\nfunction toSet(chars) {\n let flat = Object.keys(chars).join(\"\");\n let words = /\\w/.test(flat);\n if (words)\n flat = flat.replace(/\\w/g, \"\");\n return `[${words ? \"\\\\w\" : \"\"}${flat.replace(/[^\\w\\s]/g, \"\\\\$&\")}]`;\n}\nfunction prefixMatch(options) {\n let first = Object.create(null), rest = Object.create(null);\n for (let { label } of options) {\n first[label[0]] = true;\n for (let i = 1; i < label.length; i++)\n rest[label[i]] = true;\n }\n let source = toSet(first) + toSet(rest) + \"*$\";\n return [new RegExp(\"^\" + source), new RegExp(source)];\n}\n/**\nGiven a a fixed array of options, return an autocompleter that\ncompletes them.\n*/\nfunction completeFromList(list) {\n let options = list.map(o => typeof o == \"string\" ? { label: o } : o);\n let [validFor, match] = options.every(o => /^\\w+$/.test(o.label)) ? [/\\w*$/, /\\w+$/] : prefixMatch(options);\n return (context) => {\n let token = context.matchBefore(match);\n return token || context.explicit ? { from: token ? token.from : context.pos, options, validFor } : null;\n };\n}\n/**\nWrap the given completion source so that it will only fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifIn(nodes, source) {\n return (context) => {\n for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n if (nodes.indexOf(pos.name) > -1)\n return source(context);\n if (pos.type.isTop)\n break;\n }\n return null;\n };\n}\n/**\nWrap the given completion source so that it will not fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifNotIn(nodes, source) {\n return (context) => {\n for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n if (nodes.indexOf(pos.name) > -1)\n return null;\n if (pos.type.isTop)\n break;\n }\n return source(context);\n };\n}\nclass Option {\n constructor(completion, source, match, score) {\n this.completion = completion;\n this.source = source;\n this.match = match;\n this.score = score;\n }\n}\nfunction cur(state) { return state.selection.main.from; }\n// Make sure the given regexp has a $ at its end and, if `start` is\n// true, a ^ at its start.\nfunction ensureAnchor(expr, start) {\n var _a;\n let { source } = expr;\n let addStart = start && source[0] != \"^\", addEnd = source[source.length - 1] != \"$\";\n if (!addStart && !addEnd)\n return expr;\n return new RegExp(`${addStart ? \"^\" : \"\"}(?:${source})${addEnd ? \"$\" : \"\"}`, (_a = expr.flags) !== null && _a !== void 0 ? _a : (expr.ignoreCase ? \"i\" : \"\"));\n}\n/**\nThis annotation is added to transactions that are produced by\npicking a completion.\n*/\nconst pickedCompletion = /*@__PURE__*/Annotation.define();\n/**\nHelper function that returns a transaction spec which inserts a\ncompletion's text in the main selection range, and any other\nselection range that has the same text in front of it.\n*/\nfunction insertCompletionText(state, text, from, to) {\n let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;\n return Object.assign(Object.assign({}, state.changeByRange(range => {\n if (range != main && from != to &&\n state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))\n return { range };\n let lines = state.toText(text);\n return {\n changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: lines },\n range: EditorSelection.cursor(range.from + fromOff + lines.length)\n };\n })), { scrollIntoView: true, userEvent: \"input.complete\" });\n}\nconst SourceCache = /*@__PURE__*/new WeakMap();\nfunction asSource(source) {\n if (!Array.isArray(source))\n return source;\n let known = SourceCache.get(source);\n if (!known)\n SourceCache.set(source, known = completeFromList(source));\n return known;\n}\nconst startCompletionEffect = /*@__PURE__*/StateEffect.define();\nconst closeCompletionEffect = /*@__PURE__*/StateEffect.define();\n\n// A pattern matcher for fuzzy completion matching. Create an instance\n// once for a pattern, and then use that to match any number of\n// completions.\nclass FuzzyMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.chars = [];\n this.folded = [];\n // Buffers reused by calls to `match` to track matched character\n // positions.\n this.any = [];\n this.precise = [];\n this.byWord = [];\n this.score = 0;\n this.matched = [];\n for (let p = 0; p < pattern.length;) {\n let char = codePointAt(pattern, p), size = codePointSize(char);\n this.chars.push(char);\n let part = pattern.slice(p, p + size), upper = part.toUpperCase();\n this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));\n p += size;\n }\n this.astral = pattern.length != this.chars.length;\n }\n ret(score, matched) {\n this.score = score;\n this.matched = matched;\n return this;\n }\n // Matches a given word (completion) against the pattern (input).\n // Will return a boolean indicating whether there was a match and,\n // on success, set `this.score` to the score, `this.matched` to an\n // array of `from, to` pairs indicating the matched parts of `word`.\n //\n // The score is a number that is more negative the worse the match\n // is. See `Penalty` above.\n match(word) {\n if (this.pattern.length == 0)\n return this.ret(-100 /* Penalty.NotFull */, []);\n if (word.length < this.pattern.length)\n return null;\n let { chars, folded, any, precise, byWord } = this;\n // For single-character queries, only match when they occur right\n // at the start\n if (chars.length == 1) {\n let first = codePointAt(word, 0), firstSize = codePointSize(first);\n let score = firstSize == word.length ? 0 : -100 /* Penalty.NotFull */;\n if (first == chars[0]) ;\n else if (first == folded[0])\n score += -200 /* Penalty.CaseFold */;\n else\n return null;\n return this.ret(score, [0, firstSize]);\n }\n let direct = word.indexOf(this.pattern);\n if (direct == 0)\n return this.ret(word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */, [0, this.pattern.length]);\n let len = chars.length, anyTo = 0;\n if (direct < 0) {\n for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {\n let next = codePointAt(word, i);\n if (next == chars[anyTo] || next == folded[anyTo])\n any[anyTo++] = i;\n i += codePointSize(next);\n }\n // No match, exit immediately\n if (anyTo < len)\n return null;\n }\n // This tracks the extent of the precise (non-folded, not\n // necessarily adjacent) match\n let preciseTo = 0;\n // Tracks whether there is a match that hits only characters that\n // appear to be starting words. `byWordFolded` is set to true when\n // a case folded character is encountered in such a match\n let byWordTo = 0, byWordFolded = false;\n // If we've found a partial adjacent match, these track its state\n let adjacentTo = 0, adjacentStart = -1, adjacentEnd = -1;\n let hasLower = /[a-z]/.test(word), wordAdjacent = true;\n // Go over the option's text, scanning for the various kinds of matches\n for (let i = 0, e = Math.min(word.length, 200), prevType = 0 /* Tp.NonWord */; i < e && byWordTo < len;) {\n let next = codePointAt(word, i);\n if (direct < 0) {\n if (preciseTo < len && next == chars[preciseTo])\n precise[preciseTo++] = i;\n if (adjacentTo < len) {\n if (next == chars[adjacentTo] || next == folded[adjacentTo]) {\n if (adjacentTo == 0)\n adjacentStart = i;\n adjacentEnd = i + 1;\n adjacentTo++;\n }\n else {\n adjacentTo = 0;\n }\n }\n }\n let ch, type = next < 0xff\n ? (next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 /* Tp.Lower */ : next >= 65 && next <= 90 ? 1 /* Tp.Upper */ : 0 /* Tp.NonWord */)\n : ((ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 /* Tp.Upper */ : ch != ch.toUpperCase() ? 2 /* Tp.Lower */ : 0 /* Tp.NonWord */);\n if (!i || type == 1 /* Tp.Upper */ && hasLower || prevType == 0 /* Tp.NonWord */ && type != 0 /* Tp.NonWord */) {\n if (chars[byWordTo] == next || (folded[byWordTo] == next && (byWordFolded = true)))\n byWord[byWordTo++] = i;\n else if (byWord.length)\n wordAdjacent = false;\n }\n prevType = type;\n i += codePointSize(next);\n }\n if (byWordTo == len && byWord[0] == 0 && wordAdjacent)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0), byWord, word);\n if (adjacentTo == len && adjacentStart == 0)\n return this.ret(-200 /* Penalty.CaseFold */ - word.length + (adjacentEnd == word.length ? 0 : -100 /* Penalty.NotFull */), [0, adjacentEnd]);\n if (direct > -1)\n return this.ret(-700 /* Penalty.NotStart */ - word.length, [direct, direct + this.pattern.length]);\n if (adjacentTo == len)\n return this.ret(-200 /* Penalty.CaseFold */ + -700 /* Penalty.NotStart */ - word.length, [adjacentStart, adjacentEnd]);\n if (byWordTo == len)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0) + -700 /* Penalty.NotStart */ +\n (wordAdjacent ? 0 : -1100 /* Penalty.Gap */), byWord, word);\n return chars.length == 2 ? null\n : this.result((any[0] ? -700 /* Penalty.NotStart */ : 0) + -200 /* Penalty.CaseFold */ + -1100 /* Penalty.Gap */, any, word);\n }\n result(score, positions, word) {\n let result = [], i = 0;\n for (let pos of positions) {\n let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);\n if (i && result[i - 1] == pos)\n result[i - 1] = to;\n else {\n result[i++] = pos;\n result[i++] = to;\n }\n }\n return this.ret(score - word.length, result);\n }\n}\nclass StrictMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.matched = [];\n this.score = 0;\n this.folded = pattern.toLowerCase();\n }\n match(word) {\n if (word.length < this.pattern.length)\n return null;\n let start = word.slice(0, this.pattern.length);\n let match = start == this.pattern ? 0 : start.toLowerCase() == this.folded ? -200 /* Penalty.CaseFold */ : null;\n if (match == null)\n return null;\n this.matched = [0, start.length];\n this.score = match + (word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */);\n return this;\n }\n}\n\nconst completionConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n activateOnTyping: true,\n activateOnCompletion: () => false,\n activateOnTypingDelay: 100,\n selectOnOpen: true,\n override: null,\n closeOnBlur: true,\n maxRenderedOptions: 100,\n defaultKeymap: true,\n tooltipClass: () => \"\",\n optionClass: () => \"\",\n aboveCursor: false,\n icons: true,\n addToOptions: [],\n positionInfo: defaultPositionInfo,\n filterStrict: false,\n compareCompletions: (a, b) => a.label.localeCompare(b.label),\n interactionDelay: 75,\n updateSyncTime: 100\n }, {\n defaultKeymap: (a, b) => a && b,\n closeOnBlur: (a, b) => a && b,\n icons: (a, b) => a && b,\n tooltipClass: (a, b) => c => joinClass(a(c), b(c)),\n optionClass: (a, b) => c => joinClass(a(c), b(c)),\n addToOptions: (a, b) => a.concat(b),\n filterStrict: (a, b) => a || b,\n });\n }\n});\nfunction joinClass(a, b) {\n return a ? b ? a + \" \" + b : a : b;\n}\nfunction defaultPositionInfo(view, list, option, info, space, tooltip) {\n let rtl = view.textDirection == Direction.RTL, left = rtl, narrow = false;\n let side = \"top\", offset, maxWidth;\n let spaceLeft = list.left - space.left, spaceRight = space.right - list.right;\n let infoWidth = info.right - info.left, infoHeight = info.bottom - info.top;\n if (left && spaceLeft < Math.min(infoWidth, spaceRight))\n left = false;\n else if (!left && spaceRight < Math.min(infoWidth, spaceLeft))\n left = true;\n if (infoWidth <= (left ? spaceLeft : spaceRight)) {\n offset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;\n maxWidth = Math.min(400 /* Info.Width */, left ? spaceLeft : spaceRight);\n }\n else {\n narrow = true;\n maxWidth = Math.min(400 /* Info.Width */, (rtl ? list.right : space.right - list.left) - 30 /* Info.Margin */);\n let spaceBelow = space.bottom - list.bottom;\n if (spaceBelow >= infoHeight || spaceBelow > list.top) { // Below the completion\n offset = option.bottom - list.top;\n }\n else { // Above it\n side = \"bottom\";\n offset = list.bottom - option.top;\n }\n }\n let scaleY = (list.bottom - list.top) / tooltip.offsetHeight;\n let scaleX = (list.right - list.left) / tooltip.offsetWidth;\n return {\n style: `${side}: ${offset / scaleY}px; max-width: ${maxWidth / scaleX}px`,\n class: \"cm-completionInfo-\" + (narrow ? (rtl ? \"left-narrow\" : \"right-narrow\") : left ? \"left\" : \"right\")\n };\n}\n\nfunction optionContent(config) {\n let content = config.addToOptions.slice();\n if (config.icons)\n content.push({\n render(completion) {\n let icon = document.createElement(\"div\");\n icon.classList.add(\"cm-completionIcon\");\n if (completion.type)\n icon.classList.add(...completion.type.split(/\\s+/g).map(cls => \"cm-completionIcon-\" + cls));\n icon.setAttribute(\"aria-hidden\", \"true\");\n return icon;\n },\n position: 20\n });\n content.push({\n render(completion, _s, _v, match) {\n let labelElt = document.createElement(\"span\");\n labelElt.className = \"cm-completionLabel\";\n let label = completion.displayLabel || completion.label, off = 0;\n for (let j = 0; j < match.length;) {\n let from = match[j++], to = match[j++];\n if (from > off)\n labelElt.appendChild(document.createTextNode(label.slice(off, from)));\n let span = labelElt.appendChild(document.createElement(\"span\"));\n span.appendChild(document.createTextNode(label.slice(from, to)));\n span.className = \"cm-completionMatchedText\";\n off = to;\n }\n if (off < label.length)\n labelElt.appendChild(document.createTextNode(label.slice(off)));\n return labelElt;\n },\n position: 50\n }, {\n render(completion) {\n if (!completion.detail)\n return null;\n let detailElt = document.createElement(\"span\");\n detailElt.className = \"cm-completionDetail\";\n detailElt.textContent = completion.detail;\n return detailElt;\n },\n position: 80\n });\n return content.sort((a, b) => a.position - b.position).map(a => a.render);\n}\nfunction rangeAroundSelected(total, selected, max) {\n if (total <= max)\n return { from: 0, to: total };\n if (selected < 0)\n selected = 0;\n if (selected <= (total >> 1)) {\n let off = Math.floor(selected / max);\n return { from: off * max, to: (off + 1) * max };\n }\n let off = Math.floor((total - selected) / max);\n return { from: total - (off + 1) * max, to: total - off * max };\n}\nclass CompletionTooltip {\n constructor(view, stateField, applyCompletion) {\n this.view = view;\n this.stateField = stateField;\n this.applyCompletion = applyCompletion;\n this.info = null;\n this.infoDestroy = null;\n this.placeInfoReq = {\n read: () => this.measureInfo(),\n write: (pos) => this.placeInfo(pos),\n key: this\n };\n this.space = null;\n this.currentClass = \"\";\n let cState = view.state.field(stateField);\n let { options, selected } = cState.open;\n let config = view.state.facet(completionConfig);\n this.optionContent = optionContent(config);\n this.optionClass = config.optionClass;\n this.tooltipClass = config.tooltipClass;\n this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);\n this.dom = document.createElement(\"div\");\n this.dom.className = \"cm-tooltip-autocomplete\";\n this.updateTooltipClass(view.state);\n this.dom.addEventListener(\"mousedown\", (e) => {\n let { options } = view.state.field(stateField).open;\n for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {\n if (dom.nodeName == \"LI\" && (match = /-(\\d+)$/.exec(dom.id)) && +match[1] < options.length) {\n this.applyCompletion(view, options[+match[1]]);\n e.preventDefault();\n return;\n }\n }\n });\n this.dom.addEventListener(\"focusout\", (e) => {\n let state = view.state.field(this.stateField, false);\n if (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur &&\n e.relatedTarget != view.contentDOM)\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n });\n this.showOptions(options, cState.id);\n }\n mount() { this.updateSel(); }\n showOptions(options, id) {\n if (this.list)\n this.list.remove();\n this.list = this.dom.appendChild(this.createListBox(options, id, this.range));\n this.list.addEventListener(\"scroll\", () => {\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n });\n }\n update(update) {\n var _a;\n let cState = update.state.field(this.stateField);\n let prevState = update.startState.field(this.stateField);\n this.updateTooltipClass(update.state);\n if (cState != prevState) {\n let { options, selected, disabled } = cState.open;\n if (!prevState.open || prevState.open.options != options) {\n this.range = rangeAroundSelected(options.length, selected, update.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(options, cState.id);\n }\n this.updateSel();\n if (disabled != ((_a = prevState.open) === null || _a === void 0 ? void 0 : _a.disabled))\n this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\", !!disabled);\n }\n }\n updateTooltipClass(state) {\n let cls = this.tooltipClass(state);\n if (cls != this.currentClass) {\n for (let c of this.currentClass.split(\" \"))\n if (c)\n this.dom.classList.remove(c);\n for (let c of cls.split(\" \"))\n if (c)\n this.dom.classList.add(c);\n this.currentClass = cls;\n }\n }\n positioned(space) {\n this.space = space;\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSel() {\n let cState = this.view.state.field(this.stateField), open = cState.open;\n if (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {\n this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(open.options, cState.id);\n }\n if (this.updateSelectedOption(open.selected)) {\n this.destroyInfo();\n let { completion } = open.options[open.selected];\n let { info } = completion;\n if (!info)\n return;\n let infoResult = typeof info === \"string\" ? document.createTextNode(info) : info(completion);\n if (!infoResult)\n return;\n if (\"then\" in infoResult) {\n infoResult.then(obj => {\n if (obj && this.view.state.field(this.stateField, false) == cState)\n this.addInfoPane(obj, completion);\n }).catch(e => logException(this.view.state, e, \"completion info\"));\n }\n else {\n this.addInfoPane(infoResult, completion);\n }\n }\n }\n addInfoPane(content, completion) {\n this.destroyInfo();\n let wrap = this.info = document.createElement(\"div\");\n wrap.className = \"cm-tooltip cm-completionInfo\";\n if (content.nodeType != null) {\n wrap.appendChild(content);\n this.infoDestroy = null;\n }\n else {\n let { dom, destroy } = content;\n wrap.appendChild(dom);\n this.infoDestroy = destroy || null;\n }\n this.dom.appendChild(wrap);\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSelectedOption(selected) {\n let set = null;\n for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {\n if (opt.nodeName != \"LI\" || !opt.id) {\n i--; // A section header\n }\n else if (i == selected) {\n if (!opt.hasAttribute(\"aria-selected\")) {\n opt.setAttribute(\"aria-selected\", \"true\");\n set = opt;\n }\n }\n else {\n if (opt.hasAttribute(\"aria-selected\"))\n opt.removeAttribute(\"aria-selected\");\n }\n }\n if (set)\n scrollIntoView(this.list, set);\n return set;\n }\n measureInfo() {\n let sel = this.dom.querySelector(\"[aria-selected]\");\n if (!sel || !this.info)\n return null;\n let listRect = this.dom.getBoundingClientRect();\n let infoRect = this.info.getBoundingClientRect();\n let selRect = sel.getBoundingClientRect();\n let space = this.space;\n if (!space) {\n let win = this.dom.ownerDocument.defaultView || window;\n space = { left: 0, top: 0, right: win.innerWidth, bottom: win.innerHeight };\n }\n if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||\n selRect.bottom < Math.max(space.top, listRect.top) + 10)\n return null;\n return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);\n }\n placeInfo(pos) {\n if (this.info) {\n if (pos) {\n if (pos.style)\n this.info.style.cssText = pos.style;\n this.info.className = \"cm-tooltip cm-completionInfo \" + (pos.class || \"\");\n }\n else {\n this.info.style.cssText = \"top: -1e6px\";\n }\n }\n }\n createListBox(options, id, range) {\n const ul = document.createElement(\"ul\");\n ul.id = id;\n ul.setAttribute(\"role\", \"listbox\");\n ul.setAttribute(\"aria-expanded\", \"true\");\n ul.setAttribute(\"aria-label\", this.view.state.phrase(\"Completions\"));\n let curSection = null;\n for (let i = range.from; i < range.to; i++) {\n let { completion, match } = options[i], { section } = completion;\n if (section) {\n let name = typeof section == \"string\" ? section : section.name;\n if (name != curSection && (i > range.from || range.from == 0)) {\n curSection = name;\n if (typeof section != \"string\" && section.header) {\n ul.appendChild(section.header(section));\n }\n else {\n let header = ul.appendChild(document.createElement(\"completion-section\"));\n header.textContent = name;\n }\n }\n }\n const li = ul.appendChild(document.createElement(\"li\"));\n li.id = id + \"-\" + i;\n li.setAttribute(\"role\", \"option\");\n let cls = this.optionClass(completion);\n if (cls)\n li.className = cls;\n for (let source of this.optionContent) {\n let node = source(completion, this.view.state, this.view, match);\n if (node)\n li.appendChild(node);\n }\n }\n if (range.from)\n ul.classList.add(\"cm-completionListIncompleteTop\");\n if (range.to < options.length)\n ul.classList.add(\"cm-completionListIncompleteBottom\");\n return ul;\n }\n destroyInfo() {\n if (this.info) {\n if (this.infoDestroy)\n this.infoDestroy();\n this.info.remove();\n this.info = null;\n }\n }\n destroy() {\n this.destroyInfo();\n }\n}\nfunction completionTooltip(stateField, applyCompletion) {\n return (view) => new CompletionTooltip(view, stateField, applyCompletion);\n}\nfunction scrollIntoView(container, element) {\n let parent = container.getBoundingClientRect();\n let self = element.getBoundingClientRect();\n let scaleY = parent.height / container.offsetHeight;\n if (self.top < parent.top)\n container.scrollTop -= (parent.top - self.top) / scaleY;\n else if (self.bottom > parent.bottom)\n container.scrollTop += (self.bottom - parent.bottom) / scaleY;\n}\n\n// Used to pick a preferred option when two options with the same\n// label occur in the result.\nfunction score(option) {\n return (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) +\n (option.type ? 1 : 0);\n}\nfunction sortOptions(active, state) {\n let options = [];\n let sections = null;\n let addOption = (option) => {\n options.push(option);\n let { section } = option.completion;\n if (section) {\n if (!sections)\n sections = [];\n let name = typeof section == \"string\" ? section : section.name;\n if (!sections.some(s => s.name == name))\n sections.push(typeof section == \"string\" ? { name } : section);\n }\n };\n let conf = state.facet(completionConfig);\n for (let a of active)\n if (a.hasResult()) {\n let getMatch = a.result.getMatch;\n if (a.result.filter === false) {\n for (let option of a.result.options) {\n addOption(new Option(option, a.source, getMatch ? getMatch(option) : [], 1e9 - options.length));\n }\n }\n else {\n let pattern = state.sliceDoc(a.from, a.to), match;\n let matcher = conf.filterStrict ? new StrictMatcher(pattern) : new FuzzyMatcher(pattern);\n for (let option of a.result.options)\n if (match = matcher.match(option.label)) {\n let matched = !option.displayLabel ? match.matched : getMatch ? getMatch(option, match.matched) : [];\n addOption(new Option(option, a.source, matched, match.score + (option.boost || 0)));\n }\n }\n }\n if (sections) {\n let sectionOrder = Object.create(null), pos = 0;\n let cmp = (a, b) => { var _a, _b; return ((_a = a.rank) !== null && _a !== void 0 ? _a : 1e9) - ((_b = b.rank) !== null && _b !== void 0 ? _b : 1e9) || (a.name < b.name ? -1 : 1); };\n for (let s of sections.sort(cmp)) {\n pos -= 1e5;\n sectionOrder[s.name] = pos;\n }\n for (let option of options) {\n let { section } = option.completion;\n if (section)\n option.score += sectionOrder[typeof section == \"string\" ? section : section.name];\n }\n }\n let result = [], prev = null;\n let compare = conf.compareCompletions;\n for (let opt of options.sort((a, b) => (b.score - a.score) || compare(a.completion, b.completion))) {\n let cur = opt.completion;\n if (!prev || prev.label != cur.label || prev.detail != cur.detail ||\n (prev.type != null && cur.type != null && prev.type != cur.type) ||\n prev.apply != cur.apply || prev.boost != cur.boost)\n result.push(opt);\n else if (score(opt.completion) > score(prev))\n result[result.length - 1] = opt;\n prev = opt.completion;\n }\n return result;\n}\nclass CompletionDialog {\n constructor(options, attrs, tooltip, timestamp, selected, disabled) {\n this.options = options;\n this.attrs = attrs;\n this.tooltip = tooltip;\n this.timestamp = timestamp;\n this.selected = selected;\n this.disabled = disabled;\n }\n setSelected(selected, id) {\n return selected == this.selected || selected >= this.options.length ? this\n : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);\n }\n static build(active, state, id, prev, conf, didSetActive) {\n if (prev && !didSetActive && active.some(s => s.isPending))\n return prev.setDisabled();\n let options = sortOptions(active, state);\n if (!options.length)\n return prev && active.some(a => a.isPending) ? prev.setDisabled() : null;\n let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;\n if (prev && prev.selected != selected && prev.selected != -1) {\n let selectedValue = prev.options[prev.selected].completion;\n for (let i = 0; i < options.length; i++)\n if (options[i].completion == selectedValue) {\n selected = i;\n break;\n }\n }\n return new CompletionDialog(options, makeAttrs(id, selected), {\n pos: active.reduce((a, b) => b.hasResult() ? Math.min(a, b.from) : a, 1e8),\n create: createTooltip,\n above: conf.aboveCursor,\n }, prev ? prev.timestamp : Date.now(), selected, false);\n }\n map(changes) {\n return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled);\n }\n setDisabled() {\n return new CompletionDialog(this.options, this.attrs, this.tooltip, this.timestamp, this.selected, true);\n }\n}\nclass CompletionState {\n constructor(active, id, open) {\n this.active = active;\n this.id = id;\n this.open = open;\n }\n static start() {\n return new CompletionState(none, \"cm-ac-\" + Math.floor(Math.random() * 2e6).toString(36), null);\n }\n update(tr) {\n let { state } = tr, conf = state.facet(completionConfig);\n let sources = conf.override ||\n state.languageDataAt(\"autocomplete\", cur(state)).map(asSource);\n let active = sources.map(source => {\n let value = this.active.find(s => s.source == source) ||\n new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n return value.update(tr, conf);\n });\n if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))\n active = this.active;\n let open = this.open, didSet = tr.effects.some(e => e.is(setActiveEffect));\n if (open && tr.docChanged)\n open = open.map(tr.changes);\n if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||\n !sameResults(active, this.active) || didSet)\n open = CompletionDialog.build(active, state, this.id, open, conf, didSet);\n else if (open && open.disabled && !active.some(a => a.isPending))\n open = null;\n if (!open && active.every(a => !a.isPending) && active.some(a => a.hasResult()))\n active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);\n for (let effect of tr.effects)\n if (effect.is(setSelectedEffect))\n open = open && open.setSelected(effect.value, this.id);\n return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);\n }\n get tooltip() { return this.open ? this.open.tooltip : null; }\n get attrs() { return this.open ? this.open.attrs : this.active.length ? baseAttrs : noAttrs; }\n}\nfunction sameResults(a, b) {\n if (a == b)\n return true;\n for (let iA = 0, iB = 0;;) {\n while (iA < a.length && !a[iA].hasResult())\n iA++;\n while (iB < b.length && !b[iB].hasResult())\n iB++;\n let endA = iA == a.length, endB = iB == b.length;\n if (endA || endB)\n return endA == endB;\n if (a[iA++].result != b[iB++].result)\n return false;\n }\n}\nconst baseAttrs = {\n \"aria-autocomplete\": \"list\"\n};\nconst noAttrs = {};\nfunction makeAttrs(id, selected) {\n let result = {\n \"aria-autocomplete\": \"list\",\n \"aria-haspopup\": \"listbox\",\n \"aria-controls\": id\n };\n if (selected > -1)\n result[\"aria-activedescendant\"] = id + \"-\" + selected;\n return result;\n}\nconst none = [];\nfunction getUpdateType(tr, conf) {\n if (tr.isUserEvent(\"input.complete\")) {\n let completion = tr.annotation(pickedCompletion);\n if (completion && conf.activateOnCompletion(completion))\n return 4 /* UpdateType.Activate */ | 8 /* UpdateType.Reset */;\n }\n let typing = tr.isUserEvent(\"input.type\");\n return typing && conf.activateOnTyping ? 4 /* UpdateType.Activate */ | 1 /* UpdateType.Typing */\n : typing ? 1 /* UpdateType.Typing */\n : tr.isUserEvent(\"delete.backward\") ? 2 /* UpdateType.Backspacing */\n : tr.selection ? 8 /* UpdateType.Reset */\n : tr.docChanged ? 16 /* UpdateType.ResetIfTouching */ : 0 /* UpdateType.None */;\n}\nclass ActiveSource {\n constructor(source, state, explicit = false) {\n this.source = source;\n this.state = state;\n this.explicit = explicit;\n }\n hasResult() { return false; }\n get isPending() { return this.state == 1 /* State.Pending */; }\n update(tr, conf) {\n let type = getUpdateType(tr, conf), value = this;\n if ((type & 8 /* UpdateType.Reset */) || (type & 16 /* UpdateType.ResetIfTouching */) && this.touches(tr))\n value = new ActiveSource(value.source, 0 /* State.Inactive */);\n if ((type & 4 /* UpdateType.Activate */) && value.state == 0 /* State.Inactive */)\n value = new ActiveSource(this.source, 1 /* State.Pending */);\n value = value.updateFor(tr, type);\n for (let effect of tr.effects) {\n if (effect.is(startCompletionEffect))\n value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value);\n else if (effect.is(closeCompletionEffect))\n value = new ActiveSource(value.source, 0 /* State.Inactive */);\n else if (effect.is(setActiveEffect))\n for (let active of effect.value)\n if (active.source == value.source)\n value = active;\n }\n return value;\n }\n updateFor(tr, type) { return this.map(tr.changes); }\n map(changes) { return this; }\n touches(tr) {\n return tr.changes.touchesRange(cur(tr.state));\n }\n}\nclass ActiveResult extends ActiveSource {\n constructor(source, explicit, limit, result, from, to) {\n super(source, 3 /* State.Result */, explicit);\n this.limit = limit;\n this.result = result;\n this.from = from;\n this.to = to;\n }\n hasResult() { return true; }\n updateFor(tr, type) {\n var _a;\n if (!(type & 3 /* UpdateType.SimpleInteraction */))\n return this.map(tr.changes);\n let result = this.result;\n if (result.map && !tr.changes.empty)\n result = result.map(result, tr.changes);\n let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);\n let pos = cur(tr.state);\n if (pos > to || !result ||\n (type & 2 /* UpdateType.Backspacing */) && (cur(tr.startState) == this.from || pos < this.limit))\n return new ActiveSource(this.source, type & 4 /* UpdateType.Activate */ ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n let limit = tr.changes.mapPos(this.limit);\n if (checkValid(result.validFor, tr.state, from, to))\n return new ActiveResult(this.source, this.explicit, limit, result, from, to);\n if (result.update &&\n (result = result.update(result, from, to, new CompletionContext(tr.state, pos, false))))\n return new ActiveResult(this.source, this.explicit, limit, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));\n return new ActiveSource(this.source, 1 /* State.Pending */, this.explicit);\n }\n map(mapping) {\n if (mapping.empty)\n return this;\n let result = this.result.map ? this.result.map(this.result, mapping) : this.result;\n if (!result)\n return new ActiveSource(this.source, 0 /* State.Inactive */);\n return new ActiveResult(this.source, this.explicit, mapping.mapPos(this.limit), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));\n }\n touches(tr) {\n return tr.changes.touchesRange(this.from, this.to);\n }\n}\nfunction checkValid(validFor, state, from, to) {\n if (!validFor)\n return false;\n let text = state.sliceDoc(from, to);\n return typeof validFor == \"function\" ? validFor(text, from, to, state) : ensureAnchor(validFor, true).test(text);\n}\nconst setActiveEffect = /*@__PURE__*/StateEffect.define({\n map(sources, mapping) { return sources.map(s => s.map(mapping)); }\n});\nconst setSelectedEffect = /*@__PURE__*/StateEffect.define();\nconst completionState = /*@__PURE__*/StateField.define({\n create() { return CompletionState.start(); },\n update(value, tr) { return value.update(tr); },\n provide: f => [\n showTooltip.from(f, val => val.tooltip),\n EditorView.contentAttributes.from(f, state => state.attrs)\n ]\n});\nfunction applyCompletion(view, option) {\n const apply = option.completion.apply || option.completion.label;\n let result = view.state.field(completionState).active.find(a => a.source == option.source);\n if (!(result instanceof ActiveResult))\n return false;\n if (typeof apply == \"string\")\n view.dispatch(Object.assign(Object.assign({}, insertCompletionText(view.state, apply, result.from, result.to)), { annotations: pickedCompletion.of(option.completion) }));\n else\n apply(view, option.completion, result.from, result.to);\n return true;\n}\nconst createTooltip = /*@__PURE__*/completionTooltip(completionState, applyCompletion);\n\n/**\nReturns a command that moves the completion selection forward or\nbackward by the given amount.\n*/\nfunction moveCompletionSelection(forward, by = \"option\") {\n return (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.open || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n let step = 1, tooltip;\n if (by == \"page\" && (tooltip = getTooltip(view, cState.open.tooltip)))\n step = Math.max(2, Math.floor(tooltip.dom.offsetHeight /\n tooltip.dom.querySelector(\"li\").offsetHeight) - 1);\n let { length } = cState.open.options;\n let selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;\n if (selected < 0)\n selected = by == \"page\" ? 0 : length - 1;\n else if (selected >= length)\n selected = by == \"page\" ? length - 1 : 0;\n view.dispatch({ effects: setSelectedEffect.of(selected) });\n return true;\n };\n}\n/**\nAccept the current completion.\n*/\nconst acceptCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n return applyCompletion(view, cState.open.options[cState.open.selected]);\n};\n/**\nExplicitly start autocompletion.\n*/\nconst startCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState)\n return false;\n view.dispatch({ effects: startCompletionEffect.of(true) });\n return true;\n};\n/**\nClose the currently active completion.\n*/\nconst closeCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.active.some(a => a.state != 0 /* State.Inactive */))\n return false;\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n return true;\n};\nclass RunningQuery {\n constructor(active, context) {\n this.active = active;\n this.context = context;\n this.time = Date.now();\n this.updates = [];\n // Note that 'undefined' means 'not done yet', whereas 'null' means\n // 'query returned null'.\n this.done = undefined;\n }\n}\nconst MaxUpdateCount = 50, MinAbortTime = 1000;\nconst completionPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.debounceUpdate = -1;\n this.running = [];\n this.debounceAccept = -1;\n this.pendingStart = false;\n this.composing = 0 /* CompositionState.None */;\n for (let active of view.state.field(completionState).active)\n if (active.isPending)\n this.startQuery(active);\n }\n update(update) {\n let cState = update.state.field(completionState);\n let conf = update.state.facet(completionConfig);\n if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)\n return;\n let doesReset = update.transactions.some(tr => {\n let type = getUpdateType(tr, conf);\n return (type & 8 /* UpdateType.Reset */) || (tr.selection || tr.docChanged) && !(type & 3 /* UpdateType.SimpleInteraction */);\n });\n for (let i = 0; i < this.running.length; i++) {\n let query = this.running[i];\n if (doesReset ||\n query.context.abortOnDocChange && update.docChanged ||\n query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {\n for (let handler of query.context.abortListeners) {\n try {\n handler();\n }\n catch (e) {\n logException(this.view.state, e);\n }\n }\n query.context.abortListeners = null;\n this.running.splice(i--, 1);\n }\n else {\n query.updates.push(...update.transactions);\n }\n }\n if (this.debounceUpdate > -1)\n clearTimeout(this.debounceUpdate);\n if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))\n this.pendingStart = true;\n let delay = this.pendingStart ? 50 : conf.activateOnTypingDelay;\n this.debounceUpdate = cState.active.some(a => a.isPending && !this.running.some(q => q.active.source == a.source))\n ? setTimeout(() => this.startUpdate(), delay) : -1;\n if (this.composing != 0 /* CompositionState.None */)\n for (let tr of update.transactions) {\n if (tr.isUserEvent(\"input.type\"))\n this.composing = 2 /* CompositionState.Changed */;\n else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)\n this.composing = 3 /* CompositionState.ChangedAndMoved */;\n }\n }\n startUpdate() {\n this.debounceUpdate = -1;\n this.pendingStart = false;\n let { state } = this.view, cState = state.field(completionState);\n for (let active of cState.active) {\n if (active.isPending && !this.running.some(r => r.active.source == active.source))\n this.startQuery(active);\n }\n if (this.running.length && cState.open && cState.open.disabled)\n this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n }\n startQuery(active) {\n let { state } = this.view, pos = cur(state);\n let context = new CompletionContext(state, pos, active.explicit, this.view);\n let pending = new RunningQuery(active, context);\n this.running.push(pending);\n Promise.resolve(active.source(context)).then(result => {\n if (!pending.context.aborted) {\n pending.done = result || null;\n this.scheduleAccept();\n }\n }, err => {\n this.view.dispatch({ effects: closeCompletionEffect.of(null) });\n logException(this.view.state, err);\n });\n }\n scheduleAccept() {\n if (this.running.every(q => q.done !== undefined))\n this.accept();\n else if (this.debounceAccept < 0)\n this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n }\n // For each finished query in this.running, try to create a result\n // or, if appropriate, restart the query.\n accept() {\n var _a;\n if (this.debounceAccept > -1)\n clearTimeout(this.debounceAccept);\n this.debounceAccept = -1;\n let updated = [];\n let conf = this.view.state.facet(completionConfig), cState = this.view.state.field(completionState);\n for (let i = 0; i < this.running.length; i++) {\n let query = this.running[i];\n if (query.done === undefined)\n continue;\n this.running.splice(i--, 1);\n if (query.done) {\n let pos = cur(query.updates.length ? query.updates[0].startState : this.view.state);\n let limit = Math.min(pos, query.done.from + (query.active.explicit ? 0 : 1));\n let active = new ActiveResult(query.active.source, query.active.explicit, limit, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : pos);\n // Replay the transactions that happened since the start of\n // the request and see if that preserves the result\n for (let tr of query.updates)\n active = active.update(tr, conf);\n if (active.hasResult()) {\n updated.push(active);\n continue;\n }\n }\n let current = cState.active.find(a => a.source == query.active.source);\n if (current && current.isPending) {\n if (query.done == null) {\n // Explicitly failed. Should clear the pending status if it\n // hasn't been re-set in the meantime.\n let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);\n for (let tr of query.updates)\n active = active.update(tr, conf);\n if (!active.isPending)\n updated.push(active);\n }\n else {\n // Cleared by subsequent transactions. Restart.\n this.startQuery(current);\n }\n }\n }\n if (updated.length || cState.open && cState.open.disabled)\n this.view.dispatch({ effects: setActiveEffect.of(updated) });\n }\n}, {\n eventHandlers: {\n blur(event) {\n let state = this.view.state.field(completionState, false);\n if (state && state.tooltip && this.view.state.facet(completionConfig).closeOnBlur) {\n let dialog = state.open && getTooltip(this.view, state.open.tooltip);\n if (!dialog || !dialog.dom.contains(event.relatedTarget))\n setTimeout(() => this.view.dispatch({ effects: closeCompletionEffect.of(null) }), 10);\n }\n },\n compositionstart() {\n this.composing = 1 /* CompositionState.Started */;\n },\n compositionend() {\n if (this.composing == 3 /* CompositionState.ChangedAndMoved */) {\n // Safari fires compositionend events synchronously, possibly\n // from inside an update, so dispatch asynchronously to avoid reentrancy\n setTimeout(() => this.view.dispatch({ effects: startCompletionEffect.of(false) }), 20);\n }\n this.composing = 0 /* CompositionState.None */;\n }\n }\n});\nconst windows = typeof navigator == \"object\" && /*@__PURE__*//Win/.test(navigator.platform);\nconst commitCharacters = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.domEventHandlers({\n keydown(event, view) {\n let field = view.state.field(completionState, false);\n if (!field || !field.open || field.open.disabled || field.open.selected < 0 ||\n event.key.length > 1 || event.ctrlKey && !(windows && event.altKey) || event.metaKey)\n return false;\n let option = field.open.options[field.open.selected];\n let result = field.active.find(a => a.source == option.source);\n let commitChars = option.completion.commitCharacters || result.result.commitCharacters;\n if (commitChars && commitChars.indexOf(event.key) > -1)\n applyCompletion(view, option);\n return false;\n }\n}));\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-tooltip.cm-tooltip-autocomplete\": {\n \"& > ul\": {\n fontFamily: \"monospace\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden auto\",\n maxWidth_fallback: \"700px\",\n maxWidth: \"min(700px, 95vw)\",\n minWidth: \"250px\",\n maxHeight: \"10em\",\n height: \"100%\",\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n \"& > li, & > completion-section\": {\n padding: \"1px 3px\",\n lineHeight: 1.2\n },\n \"& > li\": {\n overflowX: \"hidden\",\n textOverflow: \"ellipsis\",\n cursor: \"pointer\"\n },\n \"& > completion-section\": {\n display: \"list-item\",\n borderBottom: \"1px solid silver\",\n paddingLeft: \"0.5em\",\n opacity: 0.7\n }\n }\n },\n \"&light .cm-tooltip-autocomplete ul li[aria-selected]\": {\n background: \"#17c\",\n color: \"white\",\n },\n \"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n background: \"#777\",\n },\n \"&dark .cm-tooltip-autocomplete ul li[aria-selected]\": {\n background: \"#347\",\n color: \"white\",\n },\n \"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n background: \"#444\",\n },\n \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n content: '\"···\"',\n opacity: 0.5,\n display: \"block\",\n textAlign: \"center\"\n },\n \".cm-tooltip.cm-completionInfo\": {\n position: \"absolute\",\n padding: \"3px 9px\",\n width: \"max-content\",\n maxWidth: `${400 /* Info.Width */}px`,\n boxSizing: \"border-box\",\n whiteSpace: \"pre-line\"\n },\n \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${30 /* Info.Margin */}px` },\n \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${30 /* Info.Margin */}px` },\n \"&light .cm-snippetField\": { backgroundColor: \"#00000022\" },\n \"&dark .cm-snippetField\": { backgroundColor: \"#ffffff22\" },\n \".cm-snippetFieldPosition\": {\n verticalAlign: \"text-top\",\n width: 0,\n height: \"1.15em\",\n display: \"inline-block\",\n margin: \"0 -0.7px -.7em\",\n borderLeft: \"1.4px dotted #888\"\n },\n \".cm-completionMatchedText\": {\n textDecoration: \"underline\"\n },\n \".cm-completionDetail\": {\n marginLeft: \"0.5em\",\n fontStyle: \"italic\"\n },\n \".cm-completionIcon\": {\n fontSize: \"90%\",\n width: \".8em\",\n display: \"inline-block\",\n textAlign: \"center\",\n paddingRight: \".6em\",\n opacity: \"0.6\",\n boxSizing: \"content-box\"\n },\n \".cm-completionIcon-function, .cm-completionIcon-method\": {\n \"&:after\": { content: \"'ƒ'\" }\n },\n \".cm-completionIcon-class\": {\n \"&:after\": { content: \"'○'\" }\n },\n \".cm-completionIcon-interface\": {\n \"&:after\": { content: \"'◌'\" }\n },\n \".cm-completionIcon-variable\": {\n \"&:after\": { content: \"'𝑥'\" }\n },\n \".cm-completionIcon-constant\": {\n \"&:after\": { content: \"'𝐶'\" }\n },\n \".cm-completionIcon-type\": {\n \"&:after\": { content: \"'𝑡'\" }\n },\n \".cm-completionIcon-enum\": {\n \"&:after\": { content: \"'∪'\" }\n },\n \".cm-completionIcon-property\": {\n \"&:after\": { content: \"'□'\" }\n },\n \".cm-completionIcon-keyword\": {\n \"&:after\": { content: \"'🔑\\uFE0E'\" } // Disable emoji rendering\n },\n \".cm-completionIcon-namespace\": {\n \"&:after\": { content: \"'▢'\" }\n },\n \".cm-completionIcon-text\": {\n \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n }\n});\n\nclass FieldPos {\n constructor(field, line, from, to) {\n this.field = field;\n this.line = line;\n this.from = from;\n this.to = to;\n }\n}\nclass FieldRange {\n constructor(field, from, to) {\n this.field = field;\n this.from = from;\n this.to = to;\n }\n map(changes) {\n let from = changes.mapPos(this.from, -1, MapMode.TrackDel);\n let to = changes.mapPos(this.to, 1, MapMode.TrackDel);\n return from == null || to == null ? null : new FieldRange(this.field, from, to);\n }\n}\nclass Snippet {\n constructor(lines, fieldPositions) {\n this.lines = lines;\n this.fieldPositions = fieldPositions;\n }\n instantiate(state, pos) {\n let text = [], lineStart = [pos];\n let lineObj = state.doc.lineAt(pos), baseIndent = /^\\s*/.exec(lineObj.text)[0];\n for (let line of this.lines) {\n if (text.length) {\n let indent = baseIndent, tabs = /^\\t*/.exec(line)[0].length;\n for (let i = 0; i < tabs; i++)\n indent += state.facet(indentUnit);\n lineStart.push(pos + indent.length - tabs);\n line = indent + line.slice(tabs);\n }\n text.push(line);\n pos += line.length + 1;\n }\n let ranges = this.fieldPositions.map(pos => new FieldRange(pos.field, lineStart[pos.line] + pos.from, lineStart[pos.line] + pos.to));\n return { text, ranges };\n }\n static parse(template) {\n let fields = [];\n let lines = [], positions = [], m;\n for (let line of template.split(/\\r\\n?|\\n/)) {\n while (m = /[#$]\\{(?:(\\d+)(?::([^}]*))?|((?:\\\\[{}]|[^}])*))\\}/.exec(line)) {\n let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || \"\", found = -1;\n let name = rawName.replace(/\\\\[{}]/g, m => m[1]);\n for (let i = 0; i < fields.length; i++) {\n if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)\n found = i;\n }\n if (found < 0) {\n let i = 0;\n while (i < fields.length && (seq == null || (fields[i].seq != null && fields[i].seq < seq)))\n i++;\n fields.splice(i, 0, { seq, name });\n found = i;\n for (let pos of positions)\n if (pos.field >= found)\n pos.field++;\n }\n positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));\n line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);\n }\n line = line.replace(/\\\\([{}])/g, (_, brace, index) => {\n for (let pos of positions)\n if (pos.line == lines.length && pos.from > index) {\n pos.from--;\n pos.to--;\n }\n return brace;\n });\n lines.push(line);\n }\n return new Snippet(lines, positions);\n }\n}\nlet fieldMarker = /*@__PURE__*/Decoration.widget({ widget: /*@__PURE__*/new class extends WidgetType {\n toDOM() {\n let span = document.createElement(\"span\");\n span.className = \"cm-snippetFieldPosition\";\n return span;\n }\n ignoreEvent() { return false; }\n } });\nlet fieldRange = /*@__PURE__*/Decoration.mark({ class: \"cm-snippetField\" });\nclass ActiveSnippet {\n constructor(ranges, active) {\n this.ranges = ranges;\n this.active = active;\n this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)));\n }\n map(changes) {\n let ranges = [];\n for (let r of this.ranges) {\n let mapped = r.map(changes);\n if (!mapped)\n return null;\n ranges.push(mapped);\n }\n return new ActiveSnippet(ranges, this.active);\n }\n selectionInsideField(sel) {\n return sel.ranges.every(range => this.ranges.some(r => r.field == this.active && r.from <= range.from && r.to >= range.to));\n }\n}\nconst setActive = /*@__PURE__*/StateEffect.define({\n map(value, changes) { return value && value.map(changes); }\n});\nconst moveToField = /*@__PURE__*/StateEffect.define();\nconst snippetState = /*@__PURE__*/StateField.define({\n create() { return null; },\n update(value, tr) {\n for (let effect of tr.effects) {\n if (effect.is(setActive))\n return effect.value;\n if (effect.is(moveToField) && value)\n return new ActiveSnippet(value.ranges, effect.value);\n }\n if (value && tr.docChanged)\n value = value.map(tr.changes);\n if (value && tr.selection && !value.selectionInsideField(tr.selection))\n value = null;\n return value;\n },\n provide: f => EditorView.decorations.from(f, val => val ? val.deco : Decoration.none)\n});\nfunction fieldSelection(ranges, field) {\n return EditorSelection.create(ranges.filter(r => r.field == field).map(r => EditorSelection.range(r.from, r.to)));\n}\n/**\nConvert a snippet template to a function that can\n[apply](https://codemirror.net/6/docs/ref/#autocomplete.Completion.apply) it. Snippets are written\nusing syntax like this:\n\n \"for (let ${index} = 0; ${index} < ${end}; ${index}++) {\\n\\t${}\\n}\"\n\nEach `${}` placeholder (you may also use `#{}`) indicates a field\nthat the user can fill in. Its name, if any, will be the default\ncontent for the field.\n\nWhen the snippet is activated by calling the returned function,\nthe code is inserted at the given position. Newlines in the\ntemplate are indented by the indentation of the start line, plus\none [indent unit](https://codemirror.net/6/docs/ref/#language.indentUnit) per tab character after\nthe newline.\n\nOn activation, (all instances of) the first field are selected.\nThe user can move between fields with Tab and Shift-Tab as long as\nthe fields are active. Moving to the last field or moving the\ncursor out of the current field deactivates the fields.\n\nThe order of fields defaults to textual order, but you can add\nnumbers to placeholders (`${1}` or `${1:defaultText}`) to provide\na custom order.\n\nTo include a literal `{` or `}` in your template, put a backslash\nin front of it. This will be removed and the brace will not be\ninterpreted as indicating a placeholder.\n*/\nfunction snippet(template) {\n let snippet = Snippet.parse(template);\n return (editor, completion, from, to) => {\n let { text, ranges } = snippet.instantiate(editor.state, from);\n let spec = {\n changes: { from, to, insert: Text.of(text) },\n scrollIntoView: true,\n annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of(\"input.complete\")] : undefined\n };\n if (ranges.length)\n spec.selection = fieldSelection(ranges, 0);\n if (ranges.some(r => r.field > 0)) {\n let active = new ActiveSnippet(ranges, 0);\n let effects = spec.effects = [setActive.of(active)];\n if (editor.state.field(snippetState, false) === undefined)\n effects.push(StateEffect.appendConfig.of([snippetState, addSnippetKeymap, snippetPointerHandler, baseTheme]));\n }\n editor.dispatch(editor.state.update(spec));\n };\n}\nfunction moveField(dir) {\n return ({ state, dispatch }) => {\n let active = state.field(snippetState, false);\n if (!active || dir < 0 && active.active == 0)\n return false;\n let next = active.active + dir, last = dir > 0 && !active.ranges.some(r => r.field == next + dir);\n dispatch(state.update({\n selection: fieldSelection(active.ranges, next),\n effects: setActive.of(last ? null : new ActiveSnippet(active.ranges, next)),\n scrollIntoView: true\n }));\n return true;\n };\n}\n/**\nA command that clears the active snippet, if any.\n*/\nconst clearSnippet = ({ state, dispatch }) => {\n let active = state.field(snippetState, false);\n if (!active)\n return false;\n dispatch(state.update({ effects: setActive.of(null) }));\n return true;\n};\n/**\nMove to the next snippet field, if available.\n*/\nconst nextSnippetField = /*@__PURE__*/moveField(1);\n/**\nMove to the previous snippet field, if available.\n*/\nconst prevSnippetField = /*@__PURE__*/moveField(-1);\n/**\nCheck if there is an active snippet with a next field for\n`nextSnippetField` to move to.\n*/\nfunction hasNextSnippetField(state) {\n let active = state.field(snippetState, false);\n return !!(active && active.ranges.some(r => r.field == active.active + 1));\n}\n/**\nReturns true if there is an active snippet and a previous field\nfor `prevSnippetField` to move to.\n*/\nfunction hasPrevSnippetField(state) {\n let active = state.field(snippetState, false);\n return !!(active && active.active > 0);\n}\nconst defaultSnippetKeymap = [\n { key: \"Tab\", run: nextSnippetField, shift: prevSnippetField },\n { key: \"Escape\", run: clearSnippet }\n];\n/**\nA facet that can be used to configure the key bindings used by\nsnippets. The default binds Tab to\n[`nextSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.nextSnippetField), Shift-Tab to\n[`prevSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.prevSnippetField), and Escape\nto [`clearSnippet`](https://codemirror.net/6/docs/ref/#autocomplete.clearSnippet).\n*/\nconst snippetKeymap = /*@__PURE__*/Facet.define({\n combine(maps) { return maps.length ? maps[0] : defaultSnippetKeymap; }\n});\nconst addSnippetKeymap = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.compute([snippetKeymap], state => state.facet(snippetKeymap)));\n/**\nCreate a completion from a snippet. Returns an object with the\nproperties from `completion`, plus an `apply` function that\napplies the snippet.\n*/\nfunction snippetCompletion(template, completion) {\n return Object.assign(Object.assign({}, completion), { apply: snippet(template) });\n}\nconst snippetPointerHandler = /*@__PURE__*/EditorView.domEventHandlers({\n mousedown(event, view) {\n let active = view.state.field(snippetState, false), pos;\n if (!active || (pos = view.posAtCoords({ x: event.clientX, y: event.clientY })) == null)\n return false;\n let match = active.ranges.find(r => r.from <= pos && r.to >= pos);\n if (!match || match.field == active.active)\n return false;\n view.dispatch({\n selection: fieldSelection(active.ranges, match.field),\n effects: setActive.of(active.ranges.some(r => r.field > match.field)\n ? new ActiveSnippet(active.ranges, match.field) : null),\n scrollIntoView: true\n });\n return true;\n }\n});\n\nfunction wordRE(wordChars) {\n let escaped = wordChars.replace(/[\\]\\-\\\\]/g, \"\\\\$&\");\n try {\n return new RegExp(`[\\\\p{Alphabetic}\\\\p{Number}_${escaped}]+`, \"ug\");\n }\n catch (_a) {\n return new RegExp(`[\\w${escaped}]`, \"g\");\n }\n}\nfunction mapRE(re, f) {\n return new RegExp(f(re.source), re.unicode ? \"u\" : \"\");\n}\nconst wordCaches = /*@__PURE__*/Object.create(null);\nfunction wordCache(wordChars) {\n return wordCaches[wordChars] || (wordCaches[wordChars] = new WeakMap);\n}\nfunction storeWords(doc, wordRE, result, seen, ignoreAt) {\n for (let lines = doc.iterLines(), pos = 0; !lines.next().done;) {\n let { value } = lines, m;\n wordRE.lastIndex = 0;\n while (m = wordRE.exec(value)) {\n if (!seen[m[0]] && pos + m.index != ignoreAt) {\n result.push({ type: \"text\", label: m[0] });\n seen[m[0]] = true;\n if (result.length >= 2000 /* C.MaxList */)\n return;\n }\n }\n pos += value.length + 1;\n }\n}\nfunction collectWords(doc, cache, wordRE, to, ignoreAt) {\n let big = doc.length >= 1000 /* C.MinCacheLen */;\n let cached = big && cache.get(doc);\n if (cached)\n return cached;\n let result = [], seen = Object.create(null);\n if (doc.children) {\n let pos = 0;\n for (let ch of doc.children) {\n if (ch.length >= 1000 /* C.MinCacheLen */) {\n for (let c of collectWords(ch, cache, wordRE, to - pos, ignoreAt - pos)) {\n if (!seen[c.label]) {\n seen[c.label] = true;\n result.push(c);\n }\n }\n }\n else {\n storeWords(ch, wordRE, result, seen, ignoreAt - pos);\n }\n pos += ch.length + 1;\n }\n }\n else {\n storeWords(doc, wordRE, result, seen, ignoreAt);\n }\n if (big && result.length < 2000 /* C.MaxList */)\n cache.set(doc, result);\n return result;\n}\n/**\nA completion source that will scan the document for words (using a\n[character categorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer)), and\nreturn those as completions.\n*/\nconst completeAnyWord = context => {\n let wordChars = context.state.languageDataAt(\"wordChars\", context.pos).join(\"\");\n let re = wordRE(wordChars);\n let token = context.matchBefore(mapRE(re, s => s + \"$\"));\n if (!token && !context.explicit)\n return null;\n let from = token ? token.from : context.pos;\n let options = collectWords(context.state.doc, wordCache(wordChars), re, 50000 /* C.Range */, from);\n return { from, options, validFor: mapRE(re, s => \"^\" + s) };\n};\n\nconst defaults = {\n brackets: [\"(\", \"[\", \"{\", \"'\", '\"'],\n before: \")]}:;>\",\n stringPrefixes: []\n};\nconst closeBracketEffect = /*@__PURE__*/StateEffect.define({\n map(value, mapping) {\n let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);\n return mapped == null ? undefined : mapped;\n }\n});\nconst closedBracket = /*@__PURE__*/new class extends RangeValue {\n};\nclosedBracket.startSide = 1;\nclosedBracket.endSide = -1;\nconst bracketState = /*@__PURE__*/StateField.define({\n create() { return RangeSet.empty; },\n update(value, tr) {\n value = value.map(tr.changes);\n if (tr.selection) {\n let line = tr.state.doc.lineAt(tr.selection.main.head);\n value = value.update({ filter: from => from >= line.from && from <= line.to });\n }\n for (let effect of tr.effects)\n if (effect.is(closeBracketEffect))\n value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] });\n return value;\n }\n});\n/**\nExtension to enable bracket-closing behavior. When a closeable\nbracket is typed, its closing bracket is immediately inserted\nafter the cursor. When closing a bracket directly in front of a\nclosing bracket inserted by the extension, the cursor moves over\nthat bracket.\n*/\nfunction closeBrackets() {\n return [inputHandler, bracketState];\n}\nconst definedClosing = \"()[]{}<>\";\nfunction closing(ch) {\n for (let i = 0; i < definedClosing.length; i += 2)\n if (definedClosing.charCodeAt(i) == ch)\n return definedClosing.charAt(i + 1);\n return fromCodePoint(ch < 128 ? ch : ch + 1);\n}\nfunction config(state, pos) {\n return state.languageDataAt(\"closeBrackets\", pos)[0] || defaults;\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\nconst inputHandler = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, insert) => {\n if ((android ? view.composing : view.compositionStarted) || view.state.readOnly)\n return false;\n let sel = view.state.selection.main;\n if (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 ||\n from != sel.from || to != sel.to)\n return false;\n let tr = insertBracket(view.state, insert);\n if (!tr)\n return false;\n view.dispatch(tr);\n return true;\n});\n/**\nCommand that implements deleting a pair of matching brackets when\nthe cursor is between them.\n*/\nconst deleteBracketPair = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty) {\n let before = prevChar(state.doc, range.head);\n for (let token of tokens) {\n if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0)))\n return { changes: { from: range.head - token.length, to: range.head + token.length },\n range: EditorSelection.cursor(range.head - token.length) };\n }\n }\n return { range: dont = range };\n });\n if (!dont)\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete.backward\" }));\n return !dont;\n};\n/**\nClose-brackets related key bindings. Binds Backspace to\n[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).\n*/\nconst closeBracketsKeymap = [\n { key: \"Backspace\", run: deleteBracketPair }\n];\n/**\nImplements the extension's behavior on text insertion. If the\ngiven string counts as a bracket in the language around the\nselection, and replacing the selection with it requires custom\nbehavior (inserting a closing version or skipping past a\npreviously-closed bracket), this function returns a transaction\nrepresenting that custom behavior. (You only need this if you want\nto programmatically insert brackets—the\n[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will\ntake care of running this for user input.)\n*/\nfunction insertBracket(state, bracket) {\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n for (let tok of tokens) {\n let closed = closing(codePointAt(tok, 0));\n if (bracket == tok)\n return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf)\n : handleOpen(state, tok, closed, conf.before || defaults.before);\n if (bracket == closed && closedBracketAt(state, state.selection.main.from))\n return handleClose(state, tok, closed);\n }\n return null;\n}\nfunction closedBracketAt(state, pos) {\n let found = false;\n state.field(bracketState).between(0, state.doc.length, from => {\n if (from == pos)\n found = true;\n });\n return found;\n}\nfunction nextChar(doc, pos) {\n let next = doc.sliceString(pos, pos + 2);\n return next.slice(0, codePointSize(codePointAt(next, 0)));\n}\nfunction prevChar(doc, pos) {\n let prev = doc.sliceString(pos - 2, pos);\n return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);\n}\nfunction handleOpen(state, open, close, closeBefore) {\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: open, from: range.from }, { insert: close, from: range.to }],\n effects: closeBracketEffect.of(range.to + open.length),\n range: EditorSelection.range(range.anchor + open.length, range.head + open.length) };\n let next = nextChar(state.doc, range.head);\n if (!next || /\\s/.test(next) || closeBefore.indexOf(next) > -1)\n return { changes: { insert: open + close, from: range.head },\n effects: closeBracketEffect.of(range.head + open.length),\n range: EditorSelection.cursor(range.head + open.length) };\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction handleClose(state, _open, close) {\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty && nextChar(state.doc, range.head) == close)\n return { changes: { from: range.head, to: range.head + close.length, insert: close },\n range: EditorSelection.cursor(range.head + close.length) };\n return dont = { range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\n// Handles cases where the open and close token are the same, and\n// possibly triple quotes (as in `\"\"\"abc\"\"\"`-style quoting).\nfunction handleSame(state, token, allowTriple, config) {\n let stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: token, from: range.from }, { insert: token, from: range.to }],\n effects: closeBracketEffect.of(range.to + token.length),\n range: EditorSelection.range(range.anchor + token.length, range.head + token.length) };\n let pos = range.head, next = nextChar(state.doc, pos), start;\n if (next == token) {\n if (nodeStart(state, pos)) {\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (closedBracketAt(state, pos)) {\n let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token;\n let content = isTriple ? token + token + token : token;\n return { changes: { from: pos, to: pos + content.length, insert: content },\n range: EditorSelection.cursor(pos + content.length) };\n }\n }\n else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token &&\n (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 &&\n nodeStart(state, start)) {\n return { changes: { insert: token + token + token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (state.charCategorizer(pos)(next) != CharCategory.Word) {\n if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes))\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction nodeStart(state, pos) {\n let tree = syntaxTree(state).resolveInner(pos + 1);\n return tree.parent && tree.from == pos;\n}\nfunction probablyInString(state, pos, quoteToken, prefixes) {\n let node = syntaxTree(state).resolveInner(pos, -1);\n let maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);\n for (let i = 0; i < 5; i++) {\n let start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));\n let quotePos = start.indexOf(quoteToken);\n if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {\n let first = node.firstChild;\n while (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {\n if (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken)\n return false;\n first = first.firstChild;\n }\n return true;\n }\n let parent = node.to == pos && node.parent;\n if (!parent)\n break;\n node = parent;\n }\n return false;\n}\nfunction canStartStringAt(state, pos, prefixes) {\n let charCat = state.charCategorizer(pos);\n if (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word)\n return pos;\n for (let prefix of prefixes) {\n let start = pos - prefix.length;\n if (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word)\n return start;\n }\n return -1;\n}\n\n/**\nReturns an extension that enables autocompletion.\n*/\nfunction autocompletion(config = {}) {\n return [\n commitCharacters,\n completionState,\n completionConfig.of(config),\n completionPlugin,\n completionKeymapExt,\n baseTheme\n ];\n}\n/**\nBasic keybindings for autocompletion.\n\n - Ctrl-Space (and Alt-\\` on macOS): [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)\n - Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)\n - ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`\n - ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)\n*/\nconst completionKeymap = [\n { key: \"Ctrl-Space\", run: startCompletion },\n { mac: \"Alt-`\", run: startCompletion },\n { key: \"Escape\", run: closeCompletion },\n { key: \"ArrowDown\", run: /*@__PURE__*/moveCompletionSelection(true) },\n { key: \"ArrowUp\", run: /*@__PURE__*/moveCompletionSelection(false) },\n { key: \"PageDown\", run: /*@__PURE__*/moveCompletionSelection(true, \"page\") },\n { key: \"PageUp\", run: /*@__PURE__*/moveCompletionSelection(false, \"page\") },\n { key: \"Enter\", run: acceptCompletion }\n];\nconst completionKeymapExt = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.computeN([completionConfig], state => state.facet(completionConfig).defaultKeymap ? [completionKeymap] : []));\n/**\nGet the current completion status. When completions are available,\nthis will return `\"active\"`. When completions are pending (in the\nprocess of being queried), this returns `\"pending\"`. Otherwise, it\nreturns `null`.\n*/\nfunction completionStatus(state) {\n let cState = state.field(completionState, false);\n return cState && cState.active.some(a => a.isPending) ? \"pending\"\n : cState && cState.active.some(a => a.state != 0 /* State.Inactive */) ? \"active\" : null;\n}\nconst completionArrayCache = /*@__PURE__*/new WeakMap;\n/**\nReturns the available completions as an array.\n*/\nfunction currentCompletions(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n if (!open || open.disabled)\n return [];\n let completions = completionArrayCache.get(open.options);\n if (!completions)\n completionArrayCache.set(open.options, completions = open.options.map(o => o.completion));\n return completions;\n}\n/**\nReturn the currently selected completion, if any.\n*/\nfunction selectedCompletion(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n return open && !open.disabled && open.selected >= 0 ? open.options[open.selected].completion : null;\n}\n/**\nReturns the currently selected position in the active completion\nlist, or null if no completions are active.\n*/\nfunction selectedCompletionIndex(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n return open && !open.disabled && open.selected >= 0 ? open.selected : null;\n}\n/**\nCreate an effect that can be attached to a transaction to change\nthe currently selected completion.\n*/\nfunction setSelectedCompletion(index) {\n return setSelectedEffect.of(index);\n}\n\nexport { CompletionContext, acceptCompletion, autocompletion, clearSnippet, closeBrackets, closeBracketsKeymap, closeCompletion, completeAnyWord, completeFromList, completionKeymap, completionStatus, currentCompletions, deleteBracketPair, hasNextSnippetField, hasPrevSnippetField, ifIn, ifNotIn, insertBracket, insertCompletionText, moveCompletionSelection, nextSnippetField, pickedCompletion, prevSnippetField, selectedCompletion, selectedCompletionIndex, setSelectedCompletion, snippet, snippetCompletion, snippetKeymap, startCompletion };\n","import { NodeType, NodeProp, NodeSet, Tree, Parser, parseMixed } from '@lezer/common';\nimport { styleTags, tags, Tag } from '@lezer/highlight';\n\nclass CompositeBlock {\n static create(type, value, from, parentHash, end) {\n let hash = (parentHash + (parentHash << 8) + type + (value << 4)) | 0;\n return new CompositeBlock(type, value, from, hash, end, [], []);\n }\n constructor(type, \n // Used for indentation in list items, markup character in lists\n value, from, hash, end, children, positions) {\n this.type = type;\n this.value = value;\n this.from = from;\n this.hash = hash;\n this.end = end;\n this.children = children;\n this.positions = positions;\n this.hashProp = [[NodeProp.contextHash, hash]];\n }\n addChild(child, pos) {\n if (child.prop(NodeProp.contextHash) != this.hash)\n child = new Tree(child.type, child.children, child.positions, child.length, this.hashProp);\n this.children.push(child);\n this.positions.push(pos);\n }\n toTree(nodeSet, end = this.end) {\n let last = this.children.length - 1;\n if (last >= 0)\n end = Math.max(end, this.positions[last] + this.children[last].length + this.from);\n return new Tree(nodeSet.types[this.type], this.children, this.positions, end - this.from).balance({\n makeTree: (children, positions, length) => new Tree(NodeType.none, children, positions, length, this.hashProp)\n });\n }\n}\nvar Type;\n(function (Type) {\n Type[Type[\"Document\"] = 1] = \"Document\";\n Type[Type[\"CodeBlock\"] = 2] = \"CodeBlock\";\n Type[Type[\"FencedCode\"] = 3] = \"FencedCode\";\n Type[Type[\"Blockquote\"] = 4] = \"Blockquote\";\n Type[Type[\"HorizontalRule\"] = 5] = \"HorizontalRule\";\n Type[Type[\"BulletList\"] = 6] = \"BulletList\";\n Type[Type[\"OrderedList\"] = 7] = \"OrderedList\";\n Type[Type[\"ListItem\"] = 8] = \"ListItem\";\n Type[Type[\"ATXHeading1\"] = 9] = \"ATXHeading1\";\n Type[Type[\"ATXHeading2\"] = 10] = \"ATXHeading2\";\n Type[Type[\"ATXHeading3\"] = 11] = \"ATXHeading3\";\n Type[Type[\"ATXHeading4\"] = 12] = \"ATXHeading4\";\n Type[Type[\"ATXHeading5\"] = 13] = \"ATXHeading5\";\n Type[Type[\"ATXHeading6\"] = 14] = \"ATXHeading6\";\n Type[Type[\"SetextHeading1\"] = 15] = \"SetextHeading1\";\n Type[Type[\"SetextHeading2\"] = 16] = \"SetextHeading2\";\n Type[Type[\"HTMLBlock\"] = 17] = \"HTMLBlock\";\n Type[Type[\"LinkReference\"] = 18] = \"LinkReference\";\n Type[Type[\"Paragraph\"] = 19] = \"Paragraph\";\n Type[Type[\"CommentBlock\"] = 20] = \"CommentBlock\";\n Type[Type[\"ProcessingInstructionBlock\"] = 21] = \"ProcessingInstructionBlock\";\n // Inline\n Type[Type[\"Escape\"] = 22] = \"Escape\";\n Type[Type[\"Entity\"] = 23] = \"Entity\";\n Type[Type[\"HardBreak\"] = 24] = \"HardBreak\";\n Type[Type[\"Emphasis\"] = 25] = \"Emphasis\";\n Type[Type[\"StrongEmphasis\"] = 26] = \"StrongEmphasis\";\n Type[Type[\"Link\"] = 27] = \"Link\";\n Type[Type[\"Image\"] = 28] = \"Image\";\n Type[Type[\"InlineCode\"] = 29] = \"InlineCode\";\n Type[Type[\"HTMLTag\"] = 30] = \"HTMLTag\";\n Type[Type[\"Comment\"] = 31] = \"Comment\";\n Type[Type[\"ProcessingInstruction\"] = 32] = \"ProcessingInstruction\";\n Type[Type[\"Autolink\"] = 33] = \"Autolink\";\n // Smaller tokens\n Type[Type[\"HeaderMark\"] = 34] = \"HeaderMark\";\n Type[Type[\"QuoteMark\"] = 35] = \"QuoteMark\";\n Type[Type[\"ListMark\"] = 36] = \"ListMark\";\n Type[Type[\"LinkMark\"] = 37] = \"LinkMark\";\n Type[Type[\"EmphasisMark\"] = 38] = \"EmphasisMark\";\n Type[Type[\"CodeMark\"] = 39] = \"CodeMark\";\n Type[Type[\"CodeText\"] = 40] = \"CodeText\";\n Type[Type[\"CodeInfo\"] = 41] = \"CodeInfo\";\n Type[Type[\"LinkTitle\"] = 42] = \"LinkTitle\";\n Type[Type[\"LinkLabel\"] = 43] = \"LinkLabel\";\n Type[Type[\"URL\"] = 44] = \"URL\";\n})(Type || (Type = {}));\n/// Data structure used to accumulate a block's content during [leaf\n/// block parsing](#BlockParser.leaf).\nclass LeafBlock {\n /// @internal\n constructor(\n /// The start position of the block.\n start, \n /// The block's text content.\n content) {\n this.start = start;\n this.content = content;\n /// @internal\n this.marks = [];\n /// The block parsers active for this block.\n this.parsers = [];\n }\n}\n/// Data structure used during block-level per-line parsing.\nclass Line {\n constructor() {\n /// The line's full text.\n this.text = \"\";\n /// The base indent provided by the composite contexts (that have\n /// been handled so far).\n this.baseIndent = 0;\n /// The string position corresponding to the base indent.\n this.basePos = 0;\n /// The number of contexts handled @internal\n this.depth = 0;\n /// Any markers (i.e. block quote markers) parsed for the contexts. @internal\n this.markers = [];\n /// The position of the next non-whitespace character beyond any\n /// list, blockquote, or other composite block markers.\n this.pos = 0;\n /// The column of the next non-whitespace character.\n this.indent = 0;\n /// The character code of the character after `pos`.\n this.next = -1;\n }\n /// @internal\n forward() {\n if (this.basePos > this.pos)\n this.forwardInner();\n }\n /// @internal\n forwardInner() {\n let newPos = this.skipSpace(this.basePos);\n this.indent = this.countIndent(newPos, this.pos, this.indent);\n this.pos = newPos;\n this.next = newPos == this.text.length ? -1 : this.text.charCodeAt(newPos);\n }\n /// Skip whitespace after the given position, return the position of\n /// the next non-space character or the end of the line if there's\n /// only space after `from`.\n skipSpace(from) { return skipSpace(this.text, from); }\n /// @internal\n reset(text) {\n this.text = text;\n this.baseIndent = this.basePos = this.pos = this.indent = 0;\n this.forwardInner();\n this.depth = 1;\n while (this.markers.length)\n this.markers.pop();\n }\n /// Move the line's base position forward to the given position.\n /// This should only be called by composite [block\n /// parsers](#BlockParser.parse) or [markup skipping\n /// functions](#NodeSpec.composite).\n moveBase(to) {\n this.basePos = to;\n this.baseIndent = this.countIndent(to, this.pos, this.indent);\n }\n /// Move the line's base position forward to the given _column_.\n moveBaseColumn(indent) {\n this.baseIndent = indent;\n this.basePos = this.findColumn(indent);\n }\n /// Store a composite-block-level marker. Should be called from\n /// [markup skipping functions](#NodeSpec.composite) when they\n /// consume any non-whitespace characters.\n addMarker(elt) {\n this.markers.push(elt);\n }\n /// Find the column position at `to`, optionally starting at a given\n /// position and column.\n countIndent(to, from = 0, indent = 0) {\n for (let i = from; i < to; i++)\n indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;\n return indent;\n }\n /// Find the position corresponding to the given column.\n findColumn(goal) {\n let i = 0;\n for (let indent = 0; i < this.text.length && indent < goal; i++)\n indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;\n return i;\n }\n /// @internal\n scrub() {\n if (!this.baseIndent)\n return this.text;\n let result = \"\";\n for (let i = 0; i < this.basePos; i++)\n result += \" \";\n return result + this.text.slice(this.basePos);\n }\n}\nfunction skipForList(bl, cx, line) {\n if (line.pos == line.text.length ||\n (bl != cx.block && line.indent >= cx.stack[line.depth + 1].value + line.baseIndent))\n return true;\n if (line.indent >= line.baseIndent + 4)\n return false;\n let size = (bl.type == Type.OrderedList ? isOrderedList : isBulletList)(line, cx, false);\n return size > 0 &&\n (bl.type != Type.BulletList || isHorizontalRule(line, cx, false) < 0) &&\n line.text.charCodeAt(line.pos + size - 1) == bl.value;\n}\nconst DefaultSkipMarkup = {\n [Type.Blockquote](bl, cx, line) {\n if (line.next != 62 /* '>' */)\n return false;\n line.markers.push(elt(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1));\n line.moveBase(line.pos + (space(line.text.charCodeAt(line.pos + 1)) ? 2 : 1));\n bl.end = cx.lineStart + line.text.length;\n return true;\n },\n [Type.ListItem](bl, _cx, line) {\n if (line.indent < line.baseIndent + bl.value && line.next > -1)\n return false;\n line.moveBaseColumn(line.baseIndent + bl.value);\n return true;\n },\n [Type.OrderedList]: skipForList,\n [Type.BulletList]: skipForList,\n [Type.Document]() { return true; }\n};\nfunction space(ch) { return ch == 32 || ch == 9 || ch == 10 || ch == 13; }\nfunction skipSpace(line, i = 0) {\n while (i < line.length && space(line.charCodeAt(i)))\n i++;\n return i;\n}\nfunction skipSpaceBack(line, i, to) {\n while (i > to && space(line.charCodeAt(i - 1)))\n i--;\n return i;\n}\nfunction isFencedCode(line) {\n if (line.next != 96 && line.next != 126 /* '`~' */)\n return -1;\n let pos = line.pos + 1;\n while (pos < line.text.length && line.text.charCodeAt(pos) == line.next)\n pos++;\n if (pos < line.pos + 3)\n return -1;\n if (line.next == 96)\n for (let i = pos; i < line.text.length; i++)\n if (line.text.charCodeAt(i) == 96)\n return -1;\n return pos;\n}\nfunction isBlockquote(line) {\n return line.next != 62 /* '>' */ ? -1 : line.text.charCodeAt(line.pos + 1) == 32 ? 2 : 1;\n}\nfunction isHorizontalRule(line, cx, breaking) {\n if (line.next != 42 && line.next != 45 && line.next != 95 /* '_-*' */)\n return -1;\n let count = 1;\n for (let pos = line.pos + 1; pos < line.text.length; pos++) {\n let ch = line.text.charCodeAt(pos);\n if (ch == line.next)\n count++;\n else if (!space(ch))\n return -1;\n }\n // Setext headers take precedence\n if (breaking && line.next == 45 && isSetextUnderline(line) > -1 && line.depth == cx.stack.length &&\n cx.parser.leafBlockParsers.indexOf(DefaultLeafBlocks.SetextHeading) > -1)\n return -1;\n return count < 3 ? -1 : 1;\n}\nfunction inList(cx, type) {\n for (let i = cx.stack.length - 1; i >= 0; i--)\n if (cx.stack[i].type == type)\n return true;\n return false;\n}\nfunction isBulletList(line, cx, breaking) {\n return (line.next == 45 || line.next == 43 || line.next == 42 /* '-+*' */) &&\n (line.pos == line.text.length - 1 || space(line.text.charCodeAt(line.pos + 1))) &&\n (!breaking || inList(cx, Type.BulletList) || line.skipSpace(line.pos + 2) < line.text.length) ? 1 : -1;\n}\nfunction isOrderedList(line, cx, breaking) {\n let pos = line.pos, next = line.next;\n for (;;) {\n if (next >= 48 && next <= 57 /* '0-9' */)\n pos++;\n else\n break;\n if (pos == line.text.length)\n return -1;\n next = line.text.charCodeAt(pos);\n }\n if (pos == line.pos || pos > line.pos + 9 ||\n (next != 46 && next != 41 /* '.)' */) ||\n (pos < line.text.length - 1 && !space(line.text.charCodeAt(pos + 1))) ||\n breaking && !inList(cx, Type.OrderedList) &&\n (line.skipSpace(pos + 1) == line.text.length || pos > line.pos + 1 || line.next != 49 /* '1' */))\n return -1;\n return pos + 1 - line.pos;\n}\nfunction isAtxHeading(line) {\n if (line.next != 35 /* '#' */)\n return -1;\n let pos = line.pos + 1;\n while (pos < line.text.length && line.text.charCodeAt(pos) == 35)\n pos++;\n if (pos < line.text.length && line.text.charCodeAt(pos) != 32)\n return -1;\n let size = pos - line.pos;\n return size > 6 ? -1 : size;\n}\nfunction isSetextUnderline(line) {\n if (line.next != 45 && line.next != 61 /* '-=' */ || line.indent >= line.baseIndent + 4)\n return -1;\n let pos = line.pos + 1;\n while (pos < line.text.length && line.text.charCodeAt(pos) == line.next)\n pos++;\n let end = pos;\n while (pos < line.text.length && space(line.text.charCodeAt(pos)))\n pos++;\n return pos == line.text.length ? end : -1;\n}\nconst EmptyLine = /^[ \\t]*$/, CommentEnd = /-->/, ProcessingEnd = /\\?>/;\nconst HTMLBlockStyle = [\n [/^<(?:script|pre|style)(?:\\s|>|$)/i, /<\\/(?:script|pre|style)>/i],\n [/^\\s*<!--/, CommentEnd],\n [/^\\s*<\\?/, ProcessingEnd],\n [/^\\s*<![A-Z]/, />/],\n [/^\\s*<!\\[CDATA\\[/, /\\]\\]>/],\n [/^\\s*<\\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\\s|\\/?>|$)/i, EmptyLine],\n [/^\\s*(?:<\\/[a-z][\\w-]*\\s*>|<[a-z][\\w-]*(\\s+[a-z:_][\\w-.]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*>)\\s*$/i, EmptyLine]\n];\nfunction isHTMLBlock(line, _cx, breaking) {\n if (line.next != 60 /* '<' */)\n return -1;\n let rest = line.text.slice(line.pos);\n for (let i = 0, e = HTMLBlockStyle.length - (breaking ? 1 : 0); i < e; i++)\n if (HTMLBlockStyle[i][0].test(rest))\n return i;\n return -1;\n}\nfunction getListIndent(line, pos) {\n let indentAfter = line.countIndent(pos, line.pos, line.indent);\n let indented = line.countIndent(line.skipSpace(pos), pos, indentAfter);\n return indented >= indentAfter + 5 ? indentAfter + 1 : indented;\n}\nfunction addCodeText(marks, from, to) {\n let last = marks.length - 1;\n if (last >= 0 && marks[last].to == from && marks[last].type == Type.CodeText)\n marks[last].to = to;\n else\n marks.push(elt(Type.CodeText, from, to));\n}\n// Rules for parsing blocks. A return value of false means the rule\n// doesn't apply here, true means it does. When true is returned and\n// `p.line` has been updated, the rule is assumed to have consumed a\n// leaf block. Otherwise, it is assumed to have opened a context.\nconst DefaultBlockParsers = {\n LinkReference: undefined,\n IndentedCode(cx, line) {\n let base = line.baseIndent + 4;\n if (line.indent < base)\n return false;\n let start = line.findColumn(base);\n let from = cx.lineStart + start, to = cx.lineStart + line.text.length;\n let marks = [], pendingMarks = [];\n addCodeText(marks, from, to);\n while (cx.nextLine() && line.depth >= cx.stack.length) {\n if (line.pos == line.text.length) { // Empty\n addCodeText(pendingMarks, cx.lineStart - 1, cx.lineStart);\n for (let m of line.markers)\n pendingMarks.push(m);\n }\n else if (line.indent < base) {\n break;\n }\n else {\n if (pendingMarks.length) {\n for (let m of pendingMarks) {\n if (m.type == Type.CodeText)\n addCodeText(marks, m.from, m.to);\n else\n marks.push(m);\n }\n pendingMarks = [];\n }\n addCodeText(marks, cx.lineStart - 1, cx.lineStart);\n for (let m of line.markers)\n marks.push(m);\n to = cx.lineStart + line.text.length;\n let codeStart = cx.lineStart + line.findColumn(line.baseIndent + 4);\n if (codeStart < to)\n addCodeText(marks, codeStart, to);\n }\n }\n if (pendingMarks.length) {\n pendingMarks = pendingMarks.filter(m => m.type != Type.CodeText);\n if (pendingMarks.length)\n line.markers = pendingMarks.concat(line.markers);\n }\n cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.CodeBlock, to - from), from);\n return true;\n },\n FencedCode(cx, line) {\n let fenceEnd = isFencedCode(line);\n if (fenceEnd < 0)\n return false;\n let from = cx.lineStart + line.pos, ch = line.next, len = fenceEnd - line.pos;\n let infoFrom = line.skipSpace(fenceEnd), infoTo = skipSpaceBack(line.text, line.text.length, infoFrom);\n let marks = [elt(Type.CodeMark, from, from + len)];\n if (infoFrom < infoTo)\n marks.push(elt(Type.CodeInfo, cx.lineStart + infoFrom, cx.lineStart + infoTo));\n for (let first = true; cx.nextLine() && line.depth >= cx.stack.length; first = false) {\n let i = line.pos;\n if (line.indent - line.baseIndent < 4)\n while (i < line.text.length && line.text.charCodeAt(i) == ch)\n i++;\n if (i - line.pos >= len && line.skipSpace(i) == line.text.length) {\n for (let m of line.markers)\n marks.push(m);\n marks.push(elt(Type.CodeMark, cx.lineStart + line.pos, cx.lineStart + i));\n cx.nextLine();\n break;\n }\n else {\n if (!first)\n addCodeText(marks, cx.lineStart - 1, cx.lineStart);\n for (let m of line.markers)\n marks.push(m);\n let textStart = cx.lineStart + line.basePos, textEnd = cx.lineStart + line.text.length;\n if (textStart < textEnd)\n addCodeText(marks, textStart, textEnd);\n }\n }\n cx.addNode(cx.buffer.writeElements(marks, -from)\n .finish(Type.FencedCode, cx.prevLineEnd() - from), from);\n return true;\n },\n Blockquote(cx, line) {\n let size = isBlockquote(line);\n if (size < 0)\n return false;\n cx.startContext(Type.Blockquote, line.pos);\n cx.addNode(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1);\n line.moveBase(line.pos + size);\n return null;\n },\n HorizontalRule(cx, line) {\n if (isHorizontalRule(line, cx, false) < 0)\n return false;\n let from = cx.lineStart + line.pos;\n cx.nextLine();\n cx.addNode(Type.HorizontalRule, from);\n return true;\n },\n BulletList(cx, line) {\n let size = isBulletList(line, cx, false);\n if (size < 0)\n return false;\n if (cx.block.type != Type.BulletList)\n cx.startContext(Type.BulletList, line.basePos, line.next);\n let newBase = getListIndent(line, line.pos + 1);\n cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);\n cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);\n line.moveBaseColumn(newBase);\n return null;\n },\n OrderedList(cx, line) {\n let size = isOrderedList(line, cx, false);\n if (size < 0)\n return false;\n if (cx.block.type != Type.OrderedList)\n cx.startContext(Type.OrderedList, line.basePos, line.text.charCodeAt(line.pos + size - 1));\n let newBase = getListIndent(line, line.pos + size);\n cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);\n cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);\n line.moveBaseColumn(newBase);\n return null;\n },\n ATXHeading(cx, line) {\n let size = isAtxHeading(line);\n if (size < 0)\n return false;\n let off = line.pos, from = cx.lineStart + off;\n let endOfSpace = skipSpaceBack(line.text, line.text.length, off), after = endOfSpace;\n while (after > off && line.text.charCodeAt(after - 1) == line.next)\n after--;\n if (after == endOfSpace || after == off || !space(line.text.charCodeAt(after - 1)))\n after = line.text.length;\n let buf = cx.buffer\n .write(Type.HeaderMark, 0, size)\n .writeElements(cx.parser.parseInline(line.text.slice(off + size + 1, after), from + size + 1), -from);\n if (after < line.text.length)\n buf.write(Type.HeaderMark, after - off, endOfSpace - off);\n let node = buf.finish(Type.ATXHeading1 - 1 + size, line.text.length - off);\n cx.nextLine();\n cx.addNode(node, from);\n return true;\n },\n HTMLBlock(cx, line) {\n let type = isHTMLBlock(line, cx, false);\n if (type < 0)\n return false;\n let from = cx.lineStart + line.pos, end = HTMLBlockStyle[type][1];\n let marks = [], trailing = end != EmptyLine;\n while (!end.test(line.text) && cx.nextLine()) {\n if (line.depth < cx.stack.length) {\n trailing = false;\n break;\n }\n for (let m of line.markers)\n marks.push(m);\n }\n if (trailing)\n cx.nextLine();\n let nodeType = end == CommentEnd ? Type.CommentBlock : end == ProcessingEnd ? Type.ProcessingInstructionBlock : Type.HTMLBlock;\n let to = cx.prevLineEnd();\n cx.addNode(cx.buffer.writeElements(marks, -from).finish(nodeType, to - from), from);\n return true;\n },\n SetextHeading: undefined // Specifies relative precedence for block-continue function\n};\n// This implements a state machine that incrementally parses link references. At each\n// next line, it looks ahead to see if the line continues the reference or not. If it\n// doesn't and a valid link is available ending before that line, it finishes that.\n// Similarly, on `finish` (when the leaf is terminated by external circumstances), it\n// creates a link reference if there's a valid reference up to the current point.\nclass LinkReferenceParser {\n constructor(leaf) {\n this.stage = 0 /* RefStage.Start */;\n this.elts = [];\n this.pos = 0;\n this.start = leaf.start;\n this.advance(leaf.content);\n }\n nextLine(cx, line, leaf) {\n if (this.stage == -1 /* RefStage.Failed */)\n return false;\n let content = leaf.content + \"\\n\" + line.scrub();\n let finish = this.advance(content);\n if (finish > -1 && finish < content.length)\n return this.complete(cx, leaf, finish);\n return false;\n }\n finish(cx, leaf) {\n if ((this.stage == 2 /* RefStage.Link */ || this.stage == 3 /* RefStage.Title */) && skipSpace(leaf.content, this.pos) == leaf.content.length)\n return this.complete(cx, leaf, leaf.content.length);\n return false;\n }\n complete(cx, leaf, len) {\n cx.addLeafElement(leaf, elt(Type.LinkReference, this.start, this.start + len, this.elts));\n return true;\n }\n nextStage(elt) {\n if (elt) {\n this.pos = elt.to - this.start;\n this.elts.push(elt);\n this.stage++;\n return true;\n }\n if (elt === false)\n this.stage = -1 /* RefStage.Failed */;\n return false;\n }\n advance(content) {\n for (;;) {\n if (this.stage == -1 /* RefStage.Failed */) {\n return -1;\n }\n else if (this.stage == 0 /* RefStage.Start */) {\n if (!this.nextStage(parseLinkLabel(content, this.pos, this.start, true)))\n return -1;\n if (content.charCodeAt(this.pos) != 58 /* ':' */)\n return this.stage = -1 /* RefStage.Failed */;\n this.elts.push(elt(Type.LinkMark, this.pos + this.start, this.pos + this.start + 1));\n this.pos++;\n }\n else if (this.stage == 1 /* RefStage.Label */) {\n if (!this.nextStage(parseURL(content, skipSpace(content, this.pos), this.start)))\n return -1;\n }\n else if (this.stage == 2 /* RefStage.Link */) {\n let skip = skipSpace(content, this.pos), end = 0;\n if (skip > this.pos) {\n let title = parseLinkTitle(content, skip, this.start);\n if (title) {\n let titleEnd = lineEnd(content, title.to - this.start);\n if (titleEnd > 0) {\n this.nextStage(title);\n end = titleEnd;\n }\n }\n }\n if (!end)\n end = lineEnd(content, this.pos);\n return end > 0 && end < content.length ? end : -1;\n }\n else { // RefStage.Title\n return lineEnd(content, this.pos);\n }\n }\n }\n}\nfunction lineEnd(text, pos) {\n for (; pos < text.length; pos++) {\n let next = text.charCodeAt(pos);\n if (next == 10)\n break;\n if (!space(next))\n return -1;\n }\n return pos;\n}\nclass SetextHeadingParser {\n nextLine(cx, line, leaf) {\n let underline = line.depth < cx.stack.length ? -1 : isSetextUnderline(line);\n let next = line.next;\n if (underline < 0)\n return false;\n let underlineMark = elt(Type.HeaderMark, cx.lineStart + line.pos, cx.lineStart + underline);\n cx.nextLine();\n cx.addLeafElement(leaf, elt(next == 61 ? Type.SetextHeading1 : Type.SetextHeading2, leaf.start, cx.prevLineEnd(), [\n ...cx.parser.parseInline(leaf.content, leaf.start),\n underlineMark\n ]));\n return true;\n }\n finish() {\n return false;\n }\n}\nconst DefaultLeafBlocks = {\n LinkReference(_, leaf) { return leaf.content.charCodeAt(0) == 91 /* '[' */ ? new LinkReferenceParser(leaf) : null; },\n SetextHeading() { return new SetextHeadingParser; }\n};\nconst DefaultEndLeaf = [\n (_, line) => isAtxHeading(line) >= 0,\n (_, line) => isFencedCode(line) >= 0,\n (_, line) => isBlockquote(line) >= 0,\n (p, line) => isBulletList(line, p, true) >= 0,\n (p, line) => isOrderedList(line, p, true) >= 0,\n (p, line) => isHorizontalRule(line, p, true) >= 0,\n (p, line) => isHTMLBlock(line, p, true) >= 0\n];\nconst scanLineResult = { text: \"\", end: 0 };\n/// Block-level parsing functions get access to this context object.\nclass BlockContext {\n /// @internal\n constructor(\n /// The parser configuration used.\n parser, \n /// @internal\n input, fragments, \n /// @internal\n ranges) {\n this.parser = parser;\n this.input = input;\n this.ranges = ranges;\n this.line = new Line();\n this.atEnd = false;\n /// For reused nodes on gaps, we can't directly put the original\n /// node into the tree, since that may be bigger than its parent.\n /// When this happens, we create a dummy tree that is replaced by\n /// the proper node in `injectGaps` @internal\n this.reusePlaceholders = new Map;\n this.stoppedAt = null;\n /// The range index that absoluteLineStart points into @internal\n this.rangeI = 0;\n this.to = ranges[ranges.length - 1].to;\n this.lineStart = this.absoluteLineStart = this.absoluteLineEnd = ranges[0].from;\n this.block = CompositeBlock.create(Type.Document, 0, this.lineStart, 0, 0);\n this.stack = [this.block];\n this.fragments = fragments.length ? new FragmentCursor(fragments, input) : null;\n this.readLine();\n }\n get parsedPos() {\n return this.absoluteLineStart;\n }\n advance() {\n if (this.stoppedAt != null && this.absoluteLineStart > this.stoppedAt)\n return this.finish();\n let { line } = this;\n for (;;) {\n for (let markI = 0;;) {\n let next = line.depth < this.stack.length ? this.stack[this.stack.length - 1] : null;\n while (markI < line.markers.length && (!next || line.markers[markI].from < next.end)) {\n let mark = line.markers[markI++];\n this.addNode(mark.type, mark.from, mark.to);\n }\n if (!next)\n break;\n this.finishContext();\n }\n if (line.pos < line.text.length)\n break;\n // Empty line\n if (!this.nextLine())\n return this.finish();\n }\n if (this.fragments && this.reuseFragment(line.basePos))\n return null;\n start: for (;;) {\n for (let type of this.parser.blockParsers)\n if (type) {\n let result = type(this, line);\n if (result != false) {\n if (result == true)\n return null;\n line.forward();\n continue start;\n }\n }\n break;\n }\n let leaf = new LeafBlock(this.lineStart + line.pos, line.text.slice(line.pos));\n for (let parse of this.parser.leafBlockParsers)\n if (parse) {\n let parser = parse(this, leaf);\n if (parser)\n leaf.parsers.push(parser);\n }\n lines: while (this.nextLine()) {\n if (line.pos == line.text.length)\n break;\n if (line.indent < line.baseIndent + 4) {\n for (let stop of this.parser.endLeafBlock)\n if (stop(this, line, leaf))\n break lines;\n }\n for (let parser of leaf.parsers)\n if (parser.nextLine(this, line, leaf))\n return null;\n leaf.content += \"\\n\" + line.scrub();\n for (let m of line.markers)\n leaf.marks.push(m);\n }\n this.finishLeaf(leaf);\n return null;\n }\n stopAt(pos) {\n if (this.stoppedAt != null && this.stoppedAt < pos)\n throw new RangeError(\"Can't move stoppedAt forward\");\n this.stoppedAt = pos;\n }\n reuseFragment(start) {\n if (!this.fragments.moveTo(this.absoluteLineStart + start, this.absoluteLineStart) ||\n !this.fragments.matches(this.block.hash))\n return false;\n let taken = this.fragments.takeNodes(this);\n if (!taken)\n return false;\n this.absoluteLineStart += taken;\n this.lineStart = toRelative(this.absoluteLineStart, this.ranges);\n this.moveRangeI();\n if (this.absoluteLineStart < this.to) {\n this.lineStart++;\n this.absoluteLineStart++;\n this.readLine();\n }\n else {\n this.atEnd = true;\n this.readLine();\n }\n return true;\n }\n /// The number of parent blocks surrounding the current block.\n get depth() {\n return this.stack.length;\n }\n /// Get the type of the parent block at the given depth. When no\n /// depth is passed, return the type of the innermost parent.\n parentType(depth = this.depth - 1) {\n return this.parser.nodeSet.types[this.stack[depth].type];\n }\n /// Move to the next input line. This should only be called by\n /// (non-composite) [block parsers](#BlockParser.parse) that consume\n /// the line directly, or leaf block parser\n /// [`nextLine`](#LeafBlockParser.nextLine) methods when they\n /// consume the current line (and return true).\n nextLine() {\n this.lineStart += this.line.text.length;\n if (this.absoluteLineEnd >= this.to) {\n this.absoluteLineStart = this.absoluteLineEnd;\n this.atEnd = true;\n this.readLine();\n return false;\n }\n else {\n this.lineStart++;\n this.absoluteLineStart = this.absoluteLineEnd + 1;\n this.moveRangeI();\n this.readLine();\n return true;\n }\n }\n moveRangeI() {\n while (this.rangeI < this.ranges.length - 1 && this.absoluteLineStart >= this.ranges[this.rangeI].to) {\n this.rangeI++;\n this.absoluteLineStart = Math.max(this.absoluteLineStart, this.ranges[this.rangeI].from);\n }\n }\n /// @internal\n scanLine(start) {\n let r = scanLineResult;\n r.end = start;\n if (start >= this.to) {\n r.text = \"\";\n }\n else {\n r.text = this.lineChunkAt(start);\n r.end += r.text.length;\n if (this.ranges.length > 1) {\n let textOffset = this.absoluteLineStart, rangeI = this.rangeI;\n while (this.ranges[rangeI].to < r.end) {\n rangeI++;\n let nextFrom = this.ranges[rangeI].from;\n let after = this.lineChunkAt(nextFrom);\n r.end = nextFrom + after.length;\n r.text = r.text.slice(0, this.ranges[rangeI - 1].to - textOffset) + after;\n textOffset = r.end - r.text.length;\n }\n }\n }\n return r;\n }\n /// @internal\n readLine() {\n let { line } = this, { text, end } = this.scanLine(this.absoluteLineStart);\n this.absoluteLineEnd = end;\n line.reset(text);\n for (; line.depth < this.stack.length; line.depth++) {\n let cx = this.stack[line.depth], handler = this.parser.skipContextMarkup[cx.type];\n if (!handler)\n throw new Error(\"Unhandled block context \" + Type[cx.type]);\n if (!handler(cx, this, line))\n break;\n line.forward();\n }\n }\n lineChunkAt(pos) {\n let next = this.input.chunk(pos), text;\n if (!this.input.lineChunks) {\n let eol = next.indexOf(\"\\n\");\n text = eol < 0 ? next : next.slice(0, eol);\n }\n else {\n text = next == \"\\n\" ? \"\" : next;\n }\n return pos + text.length > this.to ? text.slice(0, this.to - pos) : text;\n }\n /// The end position of the previous line.\n prevLineEnd() { return this.atEnd ? this.lineStart : this.lineStart - 1; }\n /// @internal\n startContext(type, start, value = 0) {\n this.block = CompositeBlock.create(type, value, this.lineStart + start, this.block.hash, this.lineStart + this.line.text.length);\n this.stack.push(this.block);\n }\n /// Start a composite block. Should only be called from [block\n /// parser functions](#BlockParser.parse) that return null.\n startComposite(type, start, value = 0) {\n this.startContext(this.parser.getNodeType(type), start, value);\n }\n /// @internal\n addNode(block, from, to) {\n if (typeof block == \"number\")\n block = new Tree(this.parser.nodeSet.types[block], none, none, (to !== null && to !== void 0 ? to : this.prevLineEnd()) - from);\n this.block.addChild(block, from - this.block.from);\n }\n /// Add a block element. Can be called by [block\n /// parsers](#BlockParser.parse).\n addElement(elt) {\n this.block.addChild(elt.toTree(this.parser.nodeSet), elt.from - this.block.from);\n }\n /// Add a block element from a [leaf parser](#LeafBlockParser). This\n /// makes sure any extra composite block markup (such as blockquote\n /// markers) inside the block are also added to the syntax tree.\n addLeafElement(leaf, elt) {\n this.addNode(this.buffer\n .writeElements(injectMarks(elt.children, leaf.marks), -elt.from)\n .finish(elt.type, elt.to - elt.from), elt.from);\n }\n /// @internal\n finishContext() {\n let cx = this.stack.pop();\n let top = this.stack[this.stack.length - 1];\n top.addChild(cx.toTree(this.parser.nodeSet), cx.from - top.from);\n this.block = top;\n }\n finish() {\n while (this.stack.length > 1)\n this.finishContext();\n return this.addGaps(this.block.toTree(this.parser.nodeSet, this.lineStart));\n }\n addGaps(tree) {\n return this.ranges.length > 1 ?\n injectGaps(this.ranges, 0, tree.topNode, this.ranges[0].from, this.reusePlaceholders) : tree;\n }\n /// @internal\n finishLeaf(leaf) {\n for (let parser of leaf.parsers)\n if (parser.finish(this, leaf))\n return;\n let inline = injectMarks(this.parser.parseInline(leaf.content, leaf.start), leaf.marks);\n this.addNode(this.buffer\n .writeElements(inline, -leaf.start)\n .finish(Type.Paragraph, leaf.content.length), leaf.start);\n }\n elt(type, from, to, children) {\n if (typeof type == \"string\")\n return elt(this.parser.getNodeType(type), from, to, children);\n return new TreeElement(type, from);\n }\n /// @internal\n get buffer() { return new Buffer(this.parser.nodeSet); }\n}\nfunction injectGaps(ranges, rangeI, tree, offset, dummies) {\n let rangeEnd = ranges[rangeI].to;\n let children = [], positions = [], start = tree.from + offset;\n function movePastNext(upto, inclusive) {\n while (inclusive ? upto >= rangeEnd : upto > rangeEnd) {\n let size = ranges[rangeI + 1].from - rangeEnd;\n offset += size;\n upto += size;\n rangeI++;\n rangeEnd = ranges[rangeI].to;\n }\n }\n for (let ch = tree.firstChild; ch; ch = ch.nextSibling) {\n movePastNext(ch.from + offset, true);\n let from = ch.from + offset, node, reuse = dummies.get(ch.tree);\n if (reuse) {\n node = reuse;\n }\n else if (ch.to + offset > rangeEnd) {\n node = injectGaps(ranges, rangeI, ch, offset, dummies);\n movePastNext(ch.to + offset, false);\n }\n else {\n node = ch.toTree();\n }\n children.push(node);\n positions.push(from - start);\n }\n movePastNext(tree.to + offset, false);\n return new Tree(tree.type, children, positions, tree.to + offset - start, tree.tree ? tree.tree.propValues : undefined);\n}\n/// A Markdown parser configuration.\nclass MarkdownParser extends Parser {\n /// @internal\n constructor(\n /// The parser's syntax [node\n /// types](https://lezer.codemirror.net/docs/ref/#common.NodeSet).\n nodeSet, \n /// @internal\n blockParsers, \n /// @internal\n leafBlockParsers, \n /// @internal\n blockNames, \n /// @internal\n endLeafBlock, \n /// @internal\n skipContextMarkup, \n /// @internal\n inlineParsers, \n /// @internal\n inlineNames, \n /// @internal\n wrappers) {\n super();\n this.nodeSet = nodeSet;\n this.blockParsers = blockParsers;\n this.leafBlockParsers = leafBlockParsers;\n this.blockNames = blockNames;\n this.endLeafBlock = endLeafBlock;\n this.skipContextMarkup = skipContextMarkup;\n this.inlineParsers = inlineParsers;\n this.inlineNames = inlineNames;\n this.wrappers = wrappers;\n /// @internal\n this.nodeTypes = Object.create(null);\n for (let t of nodeSet.types)\n this.nodeTypes[t.name] = t.id;\n }\n createParse(input, fragments, ranges) {\n let parse = new BlockContext(this, input, fragments, ranges);\n for (let w of this.wrappers)\n parse = w(parse, input, fragments, ranges);\n return parse;\n }\n /// Reconfigure the parser.\n configure(spec) {\n let config = resolveConfig(spec);\n if (!config)\n return this;\n let { nodeSet, skipContextMarkup } = this;\n let blockParsers = this.blockParsers.slice(), leafBlockParsers = this.leafBlockParsers.slice(), blockNames = this.blockNames.slice(), inlineParsers = this.inlineParsers.slice(), inlineNames = this.inlineNames.slice(), endLeafBlock = this.endLeafBlock.slice(), wrappers = this.wrappers;\n if (nonEmpty(config.defineNodes)) {\n skipContextMarkup = Object.assign({}, skipContextMarkup);\n let nodeTypes = nodeSet.types.slice(), styles;\n for (let s of config.defineNodes) {\n let { name, block, composite, style } = typeof s == \"string\" ? { name: s } : s;\n if (nodeTypes.some(t => t.name == name))\n continue;\n if (composite)\n skipContextMarkup[nodeTypes.length] =\n (bl, cx, line) => composite(cx, line, bl.value);\n let id = nodeTypes.length;\n let group = composite ? [\"Block\", \"BlockContext\"] : !block ? undefined\n : id >= Type.ATXHeading1 && id <= Type.SetextHeading2 ? [\"Block\", \"LeafBlock\", \"Heading\"] : [\"Block\", \"LeafBlock\"];\n nodeTypes.push(NodeType.define({\n id,\n name,\n props: group && [[NodeProp.group, group]]\n }));\n if (style) {\n if (!styles)\n styles = {};\n if (Array.isArray(style) || style instanceof Tag)\n styles[name] = style;\n else\n Object.assign(styles, style);\n }\n }\n nodeSet = new NodeSet(nodeTypes);\n if (styles)\n nodeSet = nodeSet.extend(styleTags(styles));\n }\n if (nonEmpty(config.props))\n nodeSet = nodeSet.extend(...config.props);\n if (nonEmpty(config.remove)) {\n for (let rm of config.remove) {\n let block = this.blockNames.indexOf(rm), inline = this.inlineNames.indexOf(rm);\n if (block > -1)\n blockParsers[block] = leafBlockParsers[block] = undefined;\n if (inline > -1)\n inlineParsers[inline] = undefined;\n }\n }\n if (nonEmpty(config.parseBlock)) {\n for (let spec of config.parseBlock) {\n let found = blockNames.indexOf(spec.name);\n if (found > -1) {\n blockParsers[found] = spec.parse;\n leafBlockParsers[found] = spec.leaf;\n }\n else {\n let pos = spec.before ? findName(blockNames, spec.before)\n : spec.after ? findName(blockNames, spec.after) + 1 : blockNames.length - 1;\n blockParsers.splice(pos, 0, spec.parse);\n leafBlockParsers.splice(pos, 0, spec.leaf);\n blockNames.splice(pos, 0, spec.name);\n }\n if (spec.endLeaf)\n endLeafBlock.push(spec.endLeaf);\n }\n }\n if (nonEmpty(config.parseInline)) {\n for (let spec of config.parseInline) {\n let found = inlineNames.indexOf(spec.name);\n if (found > -1) {\n inlineParsers[found] = spec.parse;\n }\n else {\n let pos = spec.before ? findName(inlineNames, spec.before)\n : spec.after ? findName(inlineNames, spec.after) + 1 : inlineNames.length - 1;\n inlineParsers.splice(pos, 0, spec.parse);\n inlineNames.splice(pos, 0, spec.name);\n }\n }\n }\n if (config.wrap)\n wrappers = wrappers.concat(config.wrap);\n return new MarkdownParser(nodeSet, blockParsers, leafBlockParsers, blockNames, endLeafBlock, skipContextMarkup, inlineParsers, inlineNames, wrappers);\n }\n /// @internal\n getNodeType(name) {\n let found = this.nodeTypes[name];\n if (found == null)\n throw new RangeError(`Unknown node type '${name}'`);\n return found;\n }\n /// Parse the given piece of inline text at the given offset,\n /// returning an array of [`Element`](#Element) objects representing\n /// the inline content.\n parseInline(text, offset) {\n let cx = new InlineContext(this, text, offset);\n outer: for (let pos = offset; pos < cx.end;) {\n let next = cx.char(pos);\n for (let token of this.inlineParsers)\n if (token) {\n let result = token(cx, next, pos);\n if (result >= 0) {\n pos = result;\n continue outer;\n }\n }\n pos++;\n }\n return cx.resolveMarkers(0);\n }\n}\nfunction nonEmpty(a) {\n return a != null && a.length > 0;\n}\nfunction resolveConfig(spec) {\n if (!Array.isArray(spec))\n return spec;\n if (spec.length == 0)\n return null;\n let conf = resolveConfig(spec[0]);\n if (spec.length == 1)\n return conf;\n let rest = resolveConfig(spec.slice(1));\n if (!rest || !conf)\n return conf || rest;\n let conc = (a, b) => (a || none).concat(b || none);\n let wrapA = conf.wrap, wrapB = rest.wrap;\n return {\n props: conc(conf.props, rest.props),\n defineNodes: conc(conf.defineNodes, rest.defineNodes),\n parseBlock: conc(conf.parseBlock, rest.parseBlock),\n parseInline: conc(conf.parseInline, rest.parseInline),\n remove: conc(conf.remove, rest.remove),\n wrap: !wrapA ? wrapB : !wrapB ? wrapA :\n (inner, input, fragments, ranges) => wrapA(wrapB(inner, input, fragments, ranges), input, fragments, ranges)\n };\n}\nfunction findName(names, name) {\n let found = names.indexOf(name);\n if (found < 0)\n throw new RangeError(`Position specified relative to unknown parser ${name}`);\n return found;\n}\nlet nodeTypes = [NodeType.none];\nfor (let i = 1, name; name = Type[i]; i++) {\n nodeTypes[i] = NodeType.define({\n id: i,\n name,\n props: i >= Type.Escape ? [] : [[NodeProp.group, i in DefaultSkipMarkup ? [\"Block\", \"BlockContext\"] : [\"Block\", \"LeafBlock\"]]],\n top: name == \"Document\"\n });\n}\nconst none = [];\nclass Buffer {\n constructor(nodeSet) {\n this.nodeSet = nodeSet;\n this.content = [];\n this.nodes = [];\n }\n write(type, from, to, children = 0) {\n this.content.push(type, from, to, 4 + children * 4);\n return this;\n }\n writeElements(elts, offset = 0) {\n for (let e of elts)\n e.writeTo(this, offset);\n return this;\n }\n finish(type, length) {\n return Tree.build({\n buffer: this.content,\n nodeSet: this.nodeSet,\n reused: this.nodes,\n topID: type,\n length\n });\n }\n}\n/// Elements are used to compose syntax nodes during parsing.\nclass Element {\n /// @internal\n constructor(\n /// The node's\n /// [id](https://lezer.codemirror.net/docs/ref/#common.NodeType.id).\n type, \n /// The start of the node, as an offset from the start of the document.\n from, \n /// The end of the node.\n to, \n /// The node's child nodes @internal\n children = none) {\n this.type = type;\n this.from = from;\n this.to = to;\n this.children = children;\n }\n /// @internal\n writeTo(buf, offset) {\n let startOff = buf.content.length;\n buf.writeElements(this.children, offset);\n buf.content.push(this.type, this.from + offset, this.to + offset, buf.content.length + 4 - startOff);\n }\n /// @internal\n toTree(nodeSet) {\n return new Buffer(nodeSet).writeElements(this.children, -this.from).finish(this.type, this.to - this.from);\n }\n}\nclass TreeElement {\n constructor(tree, from) {\n this.tree = tree;\n this.from = from;\n }\n get to() { return this.from + this.tree.length; }\n get type() { return this.tree.type.id; }\n get children() { return none; }\n writeTo(buf, offset) {\n buf.nodes.push(this.tree);\n buf.content.push(buf.nodes.length - 1, this.from + offset, this.to + offset, -1);\n }\n toTree() { return this.tree; }\n}\nfunction elt(type, from, to, children) {\n return new Element(type, from, to, children);\n}\nconst EmphasisUnderscore = { resolve: \"Emphasis\", mark: \"EmphasisMark\" };\nconst EmphasisAsterisk = { resolve: \"Emphasis\", mark: \"EmphasisMark\" };\nconst LinkStart = {}, ImageStart = {};\nclass InlineDelimiter {\n constructor(type, from, to, side) {\n this.type = type;\n this.from = from;\n this.to = to;\n this.side = side;\n }\n}\nconst Escapable = \"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\";\nlet Punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\u2010-\\u2027]/;\ntry {\n Punctuation = new RegExp(\"[\\\\p{S}|\\\\p{P}]\", \"u\");\n}\ncatch (_) { }\nconst DefaultInline = {\n Escape(cx, next, start) {\n if (next != 92 /* '\\\\' */ || start == cx.end - 1)\n return -1;\n let escaped = cx.char(start + 1);\n for (let i = 0; i < Escapable.length; i++)\n if (Escapable.charCodeAt(i) == escaped)\n return cx.append(elt(Type.Escape, start, start + 2));\n return -1;\n },\n Entity(cx, next, start) {\n if (next != 38 /* '&' */)\n return -1;\n let m = /^(?:#\\d+|#x[a-f\\d]+|\\w+);/i.exec(cx.slice(start + 1, start + 31));\n return m ? cx.append(elt(Type.Entity, start, start + 1 + m[0].length)) : -1;\n },\n InlineCode(cx, next, start) {\n if (next != 96 /* '`' */ || start && cx.char(start - 1) == 96)\n return -1;\n let pos = start + 1;\n while (pos < cx.end && cx.char(pos) == 96)\n pos++;\n let size = pos - start, curSize = 0;\n for (; pos < cx.end; pos++) {\n if (cx.char(pos) == 96) {\n curSize++;\n if (curSize == size && cx.char(pos + 1) != 96)\n return cx.append(elt(Type.InlineCode, start, pos + 1, [\n elt(Type.CodeMark, start, start + size),\n elt(Type.CodeMark, pos + 1 - size, pos + 1)\n ]));\n }\n else {\n curSize = 0;\n }\n }\n return -1;\n },\n HTMLTag(cx, next, start) {\n if (next != 60 /* '<' */ || start == cx.end - 1)\n return -1;\n let after = cx.slice(start + 1, cx.end);\n let url = /^(?:[a-z][-\\w+.]+:[^\\s>]+|[a-z\\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?(?:\\.[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?)*)>/i.exec(after);\n if (url) {\n return cx.append(elt(Type.Autolink, start, start + 1 + url[0].length, [\n elt(Type.LinkMark, start, start + 1),\n // url[0] includes the closing bracket, so exclude it from this slice\n elt(Type.URL, start + 1, start + url[0].length),\n elt(Type.LinkMark, start + url[0].length, start + 1 + url[0].length)\n ]));\n }\n let comment = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(after);\n if (comment)\n return cx.append(elt(Type.Comment, start, start + 1 + comment[0].length));\n let procInst = /^\\?[^]*?\\?>/.exec(after);\n if (procInst)\n return cx.append(elt(Type.ProcessingInstruction, start, start + 1 + procInst[0].length));\n let m = /^(?:![A-Z][^]*?>|!\\[CDATA\\[[^]*?\\]\\]>|\\/\\s*[a-zA-Z][\\w-]*\\s*>|\\s*[a-zA-Z][\\w-]*(\\s+[a-zA-Z:_][\\w-.:]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*(\\/\\s*)?>)/.exec(after);\n if (!m)\n return -1;\n return cx.append(elt(Type.HTMLTag, start, start + 1 + m[0].length));\n },\n Emphasis(cx, next, start) {\n if (next != 95 && next != 42)\n return -1;\n let pos = start + 1;\n while (cx.char(pos) == next)\n pos++;\n let before = cx.slice(start - 1, start), after = cx.slice(pos, pos + 1);\n let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after);\n let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after);\n let leftFlanking = !sAfter && (!pAfter || sBefore || pBefore);\n let rightFlanking = !sBefore && (!pBefore || sAfter || pAfter);\n let canOpen = leftFlanking && (next == 42 || !rightFlanking || pBefore);\n let canClose = rightFlanking && (next == 42 || !leftFlanking || pAfter);\n return cx.append(new InlineDelimiter(next == 95 ? EmphasisUnderscore : EmphasisAsterisk, start, pos, (canOpen ? 1 /* Mark.Open */ : 0 /* Mark.None */) | (canClose ? 2 /* Mark.Close */ : 0 /* Mark.None */)));\n },\n HardBreak(cx, next, start) {\n if (next == 92 /* '\\\\' */ && cx.char(start + 1) == 10 /* '\\n' */)\n return cx.append(elt(Type.HardBreak, start, start + 2));\n if (next == 32) {\n let pos = start + 1;\n while (cx.char(pos) == 32)\n pos++;\n if (cx.char(pos) == 10 && pos >= start + 2)\n return cx.append(elt(Type.HardBreak, start, pos + 1));\n }\n return -1;\n },\n Link(cx, next, start) {\n return next == 91 /* '[' */ ? cx.append(new InlineDelimiter(LinkStart, start, start + 1, 1 /* Mark.Open */)) : -1;\n },\n Image(cx, next, start) {\n return next == 33 /* '!' */ && cx.char(start + 1) == 91 /* '[' */\n ? cx.append(new InlineDelimiter(ImageStart, start, start + 2, 1 /* Mark.Open */)) : -1;\n },\n LinkEnd(cx, next, start) {\n if (next != 93 /* ']' */)\n return -1;\n // Scanning back to the next link/image start marker\n for (let i = cx.parts.length - 1; i >= 0; i--) {\n let part = cx.parts[i];\n if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart)) {\n // If this one has been set invalid (because it would produce\n // a nested link) or there's no valid link here ignore both.\n if (!part.side || cx.skipSpace(part.to) == start && !/[(\\[]/.test(cx.slice(start + 1, start + 2))) {\n cx.parts[i] = null;\n return -1;\n }\n // Finish the content and replace the entire range in\n // this.parts with the link/image node.\n let content = cx.takeContent(i);\n let link = cx.parts[i] = finishLink(cx, content, part.type == LinkStart ? Type.Link : Type.Image, part.from, start + 1);\n // Set any open-link markers before this link to invalid.\n if (part.type == LinkStart)\n for (let j = 0; j < i; j++) {\n let p = cx.parts[j];\n if (p instanceof InlineDelimiter && p.type == LinkStart)\n p.side = 0 /* Mark.None */;\n }\n return link.to;\n }\n }\n return -1;\n }\n};\nfunction finishLink(cx, content, type, start, startPos) {\n let { text } = cx, next = cx.char(startPos), endPos = startPos;\n content.unshift(elt(Type.LinkMark, start, start + (type == Type.Image ? 2 : 1)));\n content.push(elt(Type.LinkMark, startPos - 1, startPos));\n if (next == 40 /* '(' */) {\n let pos = cx.skipSpace(startPos + 1);\n let dest = parseURL(text, pos - cx.offset, cx.offset), title;\n if (dest) {\n pos = cx.skipSpace(dest.to);\n // The destination and title must be separated by whitespace\n if (pos != dest.to) {\n title = parseLinkTitle(text, pos - cx.offset, cx.offset);\n if (title)\n pos = cx.skipSpace(title.to);\n }\n }\n if (cx.char(pos) == 41 /* ')' */) {\n content.push(elt(Type.LinkMark, startPos, startPos + 1));\n endPos = pos + 1;\n if (dest)\n content.push(dest);\n if (title)\n content.push(title);\n content.push(elt(Type.LinkMark, pos, endPos));\n }\n }\n else if (next == 91 /* '[' */) {\n let label = parseLinkLabel(text, startPos - cx.offset, cx.offset, false);\n if (label) {\n content.push(label);\n endPos = label.to;\n }\n }\n return elt(type, start, endPos, content);\n}\n// These return `null` when falling off the end of the input, `false`\n// when parsing fails otherwise (for use in the incremental link\n// reference parser).\nfunction parseURL(text, start, offset) {\n let next = text.charCodeAt(start);\n if (next == 60 /* '<' */) {\n for (let pos = start + 1; pos < text.length; pos++) {\n let ch = text.charCodeAt(pos);\n if (ch == 62 /* '>' */)\n return elt(Type.URL, start + offset, pos + 1 + offset);\n if (ch == 60 || ch == 10 /* '<\\n' */)\n return false;\n }\n return null;\n }\n else {\n let depth = 0, pos = start;\n for (let escaped = false; pos < text.length; pos++) {\n let ch = text.charCodeAt(pos);\n if (space(ch)) {\n break;\n }\n else if (escaped) {\n escaped = false;\n }\n else if (ch == 40 /* '(' */) {\n depth++;\n }\n else if (ch == 41 /* ')' */) {\n if (!depth)\n break;\n depth--;\n }\n else if (ch == 92 /* '\\\\' */) {\n escaped = true;\n }\n }\n return pos > start ? elt(Type.URL, start + offset, pos + offset) : pos == text.length ? null : false;\n }\n}\nfunction parseLinkTitle(text, start, offset) {\n let next = text.charCodeAt(start);\n if (next != 39 && next != 34 && next != 40 /* '\"\\'(' */)\n return false;\n let end = next == 40 ? 41 : next;\n for (let pos = start + 1, escaped = false; pos < text.length; pos++) {\n let ch = text.charCodeAt(pos);\n if (escaped)\n escaped = false;\n else if (ch == end)\n return elt(Type.LinkTitle, start + offset, pos + 1 + offset);\n else if (ch == 92 /* '\\\\' */)\n escaped = true;\n }\n return null;\n}\nfunction parseLinkLabel(text, start, offset, requireNonWS) {\n for (let escaped = false, pos = start + 1, end = Math.min(text.length, pos + 999); pos < end; pos++) {\n let ch = text.charCodeAt(pos);\n if (escaped)\n escaped = false;\n else if (ch == 93 /* ']' */)\n return requireNonWS ? false : elt(Type.LinkLabel, start + offset, pos + 1 + offset);\n else {\n if (requireNonWS && !space(ch))\n requireNonWS = false;\n if (ch == 91 /* '[' */)\n return false;\n else if (ch == 92 /* '\\\\' */)\n escaped = true;\n }\n }\n return null;\n}\n/// Inline parsing functions get access to this context, and use it to\n/// read the content and emit syntax nodes.\nclass InlineContext {\n /// @internal\n constructor(\n /// The parser that is being used.\n parser, \n /// The text of this inline section.\n text, \n /// The starting offset of the section in the document.\n offset) {\n this.parser = parser;\n this.text = text;\n this.offset = offset;\n /// @internal\n this.parts = [];\n }\n /// Get the character code at the given (document-relative)\n /// position.\n char(pos) { return pos >= this.end ? -1 : this.text.charCodeAt(pos - this.offset); }\n /// The position of the end of this inline section.\n get end() { return this.offset + this.text.length; }\n /// Get a substring of this inline section. Again uses\n /// document-relative positions.\n slice(from, to) { return this.text.slice(from - this.offset, to - this.offset); }\n /// @internal\n append(elt) {\n this.parts.push(elt);\n return elt.to;\n }\n /// Add a [delimiter](#DelimiterType) at this given position. `open`\n /// and `close` indicate whether this delimiter is opening, closing,\n /// or both. Returns the end of the delimiter, for convenient\n /// returning from [parse functions](#InlineParser.parse).\n addDelimiter(type, from, to, open, close) {\n return this.append(new InlineDelimiter(type, from, to, (open ? 1 /* Mark.Open */ : 0 /* Mark.None */) | (close ? 2 /* Mark.Close */ : 0 /* Mark.None */)));\n }\n /// Returns true when there is an unmatched link or image opening\n /// token before the current position.\n get hasOpenLink() {\n for (let i = this.parts.length - 1; i >= 0; i--) {\n let part = this.parts[i];\n if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart))\n return true;\n }\n return false;\n }\n /// Add an inline element. Returns the end of the element.\n addElement(elt) {\n return this.append(elt);\n }\n /// Resolve markers between this.parts.length and from, wrapping matched markers in the\n /// appropriate node and updating the content of this.parts. @internal\n resolveMarkers(from) {\n // Scan forward, looking for closing tokens\n for (let i = from; i < this.parts.length; i++) {\n let close = this.parts[i];\n if (!(close instanceof InlineDelimiter && close.type.resolve && (close.side & 2 /* Mark.Close */)))\n continue;\n let emp = close.type == EmphasisUnderscore || close.type == EmphasisAsterisk;\n let closeSize = close.to - close.from;\n let open, j = i - 1;\n // Continue scanning for a matching opening token\n for (; j >= from; j--) {\n let part = this.parts[j];\n if (part instanceof InlineDelimiter && (part.side & 1 /* Mark.Open */) && part.type == close.type &&\n // Ignore emphasis delimiters where the character count doesn't match\n !(emp && ((close.side & 1 /* Mark.Open */) || (part.side & 2 /* Mark.Close */)) &&\n (part.to - part.from + closeSize) % 3 == 0 && ((part.to - part.from) % 3 || closeSize % 3))) {\n open = part;\n break;\n }\n }\n if (!open)\n continue;\n let type = close.type.resolve, content = [];\n let start = open.from, end = close.to;\n // Emphasis marker effect depends on the character count. Size consumed is minimum of the two\n // markers.\n if (emp) {\n let size = Math.min(2, open.to - open.from, closeSize);\n start = open.to - size;\n end = close.from + size;\n type = size == 1 ? \"Emphasis\" : \"StrongEmphasis\";\n }\n // Move the covered region into content, optionally adding marker nodes\n if (open.type.mark)\n content.push(this.elt(open.type.mark, start, open.to));\n for (let k = j + 1; k < i; k++) {\n if (this.parts[k] instanceof Element)\n content.push(this.parts[k]);\n this.parts[k] = null;\n }\n if (close.type.mark)\n content.push(this.elt(close.type.mark, close.from, end));\n let element = this.elt(type, start, end, content);\n // If there are leftover emphasis marker characters, shrink the close/open markers. Otherwise, clear them.\n this.parts[j] = emp && open.from != start ? new InlineDelimiter(open.type, open.from, start, open.side) : null;\n let keep = this.parts[i] = emp && close.to != end ? new InlineDelimiter(close.type, end, close.to, close.side) : null;\n // Insert the new element in this.parts\n if (keep)\n this.parts.splice(i, 0, element);\n else\n this.parts[i] = element;\n }\n // Collect the elements remaining in this.parts into an array.\n let result = [];\n for (let i = from; i < this.parts.length; i++) {\n let part = this.parts[i];\n if (part instanceof Element)\n result.push(part);\n }\n return result;\n }\n /// Find an opening delimiter of the given type. Returns `null` if\n /// no delimiter is found, or an index that can be passed to\n /// [`takeContent`](#InlineContext.takeContent) otherwise.\n findOpeningDelimiter(type) {\n for (let i = this.parts.length - 1; i >= 0; i--) {\n let part = this.parts[i];\n if (part instanceof InlineDelimiter && part.type == type)\n return i;\n }\n return null;\n }\n /// Remove all inline elements and delimiters starting from the\n /// given index (which you should get from\n /// [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter),\n /// resolve delimiters inside of them, and return them as an array\n /// of elements.\n takeContent(startIndex) {\n let content = this.resolveMarkers(startIndex);\n this.parts.length = startIndex;\n return content;\n }\n /// Skip space after the given (document) position, returning either\n /// the position of the next non-space character or the end of the\n /// section.\n skipSpace(from) { return skipSpace(this.text, from - this.offset) + this.offset; }\n elt(type, from, to, children) {\n if (typeof type == \"string\")\n return elt(this.parser.getNodeType(type), from, to, children);\n return new TreeElement(type, from);\n }\n}\nfunction injectMarks(elements, marks) {\n if (!marks.length)\n return elements;\n if (!elements.length)\n return marks;\n let elts = elements.slice(), eI = 0;\n for (let mark of marks) {\n while (eI < elts.length && elts[eI].to < mark.to)\n eI++;\n if (eI < elts.length && elts[eI].from < mark.from) {\n let e = elts[eI];\n if (e instanceof Element)\n elts[eI] = new Element(e.type, e.from, e.to, injectMarks(e.children, [mark]));\n }\n else {\n elts.splice(eI++, 0, mark);\n }\n }\n return elts;\n}\n// These are blocks that can span blank lines, and should thus only be\n// reused if their next sibling is also being reused.\nconst NotLast = [Type.CodeBlock, Type.ListItem, Type.OrderedList, Type.BulletList];\nclass FragmentCursor {\n constructor(fragments, input) {\n this.fragments = fragments;\n this.input = input;\n // Index into fragment array\n this.i = 0;\n // Active fragment\n this.fragment = null;\n this.fragmentEnd = -1;\n // Cursor into the current fragment, if any. When `moveTo` returns\n // true, this points at the first block after `pos`.\n this.cursor = null;\n if (fragments.length)\n this.fragment = fragments[this.i++];\n }\n nextFragment() {\n this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null;\n this.cursor = null;\n this.fragmentEnd = -1;\n }\n moveTo(pos, lineStart) {\n while (this.fragment && this.fragment.to <= pos)\n this.nextFragment();\n if (!this.fragment || this.fragment.from > (pos ? pos - 1 : 0))\n return false;\n if (this.fragmentEnd < 0) {\n let end = this.fragment.to;\n while (end > 0 && this.input.read(end - 1, end) != \"\\n\")\n end--;\n this.fragmentEnd = end ? end - 1 : 0;\n }\n let c = this.cursor;\n if (!c) {\n c = this.cursor = this.fragment.tree.cursor();\n c.firstChild();\n }\n let rPos = pos + this.fragment.offset;\n while (c.to <= rPos)\n if (!c.parent())\n return false;\n for (;;) {\n if (c.from >= rPos)\n return this.fragment.from <= lineStart;\n if (!c.childAfter(rPos))\n return false;\n }\n }\n matches(hash) {\n let tree = this.cursor.tree;\n return tree && tree.prop(NodeProp.contextHash) == hash;\n }\n takeNodes(cx) {\n let cur = this.cursor, off = this.fragment.offset, fragEnd = this.fragmentEnd - (this.fragment.openEnd ? 1 : 0);\n let start = cx.absoluteLineStart, end = start, blockI = cx.block.children.length;\n let prevEnd = end, prevI = blockI;\n for (;;) {\n if (cur.to - off > fragEnd) {\n if (cur.type.isAnonymous && cur.firstChild())\n continue;\n break;\n }\n let pos = toRelative(cur.from - off, cx.ranges);\n if (cur.to - off <= cx.ranges[cx.rangeI].to) { // Fits in current range\n cx.addNode(cur.tree, pos);\n }\n else {\n let dummy = new Tree(cx.parser.nodeSet.types[Type.Paragraph], [], [], 0, cx.block.hashProp);\n cx.reusePlaceholders.set(dummy, cur.tree);\n cx.addNode(dummy, pos);\n }\n // Taken content must always end in a block, because incremental\n // parsing happens on block boundaries. Never stop directly\n // after an indented code block, since those can continue after\n // any number of blank lines.\n if (cur.type.is(\"Block\")) {\n if (NotLast.indexOf(cur.type.id) < 0) {\n end = cur.to - off;\n blockI = cx.block.children.length;\n }\n else {\n end = prevEnd;\n blockI = prevI;\n prevEnd = cur.to - off;\n prevI = cx.block.children.length;\n }\n }\n if (!cur.nextSibling())\n break;\n }\n while (cx.block.children.length > blockI) {\n cx.block.children.pop();\n cx.block.positions.pop();\n }\n return end - start;\n }\n}\n// Convert an input-stream-relative position to a\n// Markdown-doc-relative position by subtracting the size of all input\n// gaps before `abs`.\nfunction toRelative(abs, ranges) {\n let pos = abs;\n for (let i = 1; i < ranges.length; i++) {\n let gapFrom = ranges[i - 1].to, gapTo = ranges[i].from;\n if (gapFrom < abs)\n pos -= gapTo - gapFrom;\n }\n return pos;\n}\nconst markdownHighlighting = styleTags({\n \"Blockquote/...\": tags.quote,\n HorizontalRule: tags.contentSeparator,\n \"ATXHeading1/... SetextHeading1/...\": tags.heading1,\n \"ATXHeading2/... SetextHeading2/...\": tags.heading2,\n \"ATXHeading3/...\": tags.heading3,\n \"ATXHeading4/...\": tags.heading4,\n \"ATXHeading5/...\": tags.heading5,\n \"ATXHeading6/...\": tags.heading6,\n \"Comment CommentBlock\": tags.comment,\n Escape: tags.escape,\n Entity: tags.character,\n \"Emphasis/...\": tags.emphasis,\n \"StrongEmphasis/...\": tags.strong,\n \"Link/... Image/...\": tags.link,\n \"OrderedList/... BulletList/...\": tags.list,\n \"BlockQuote/...\": tags.quote,\n \"InlineCode CodeText\": tags.monospace,\n \"URL Autolink\": tags.url,\n \"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark\": tags.processingInstruction,\n \"CodeInfo LinkLabel\": tags.labelName,\n LinkTitle: tags.string,\n Paragraph: tags.content\n});\n/// The default CommonMark parser.\nconst parser = new MarkdownParser(new NodeSet(nodeTypes).extend(markdownHighlighting), Object.keys(DefaultBlockParsers).map(n => DefaultBlockParsers[n]), Object.keys(DefaultBlockParsers).map(n => DefaultLeafBlocks[n]), Object.keys(DefaultBlockParsers), DefaultEndLeaf, DefaultSkipMarkup, Object.keys(DefaultInline).map(n => DefaultInline[n]), Object.keys(DefaultInline), []);\n\nfunction leftOverSpace(node, from, to) {\n let ranges = [];\n for (let n = node.firstChild, pos = from;; n = n.nextSibling) {\n let nextPos = n ? n.from : to;\n if (nextPos > pos)\n ranges.push({ from: pos, to: nextPos });\n if (!n)\n break;\n pos = n.to;\n }\n return ranges;\n}\n/// Create a Markdown extension to enable nested parsing on code\n/// blocks and/or embedded HTML.\nfunction parseCode(config) {\n let { codeParser, htmlParser } = config;\n let wrap = parseMixed((node, input) => {\n let id = node.type.id;\n if (codeParser && (id == Type.CodeBlock || id == Type.FencedCode)) {\n let info = \"\";\n if (id == Type.FencedCode) {\n let infoNode = node.node.getChild(Type.CodeInfo);\n if (infoNode)\n info = input.read(infoNode.from, infoNode.to);\n }\n let parser = codeParser(info);\n if (parser)\n return { parser, overlay: node => node.type.id == Type.CodeText };\n }\n else if (htmlParser && (id == Type.HTMLBlock || id == Type.HTMLTag)) {\n return { parser: htmlParser, overlay: leftOverSpace(node.node, node.from, node.to) };\n }\n return null;\n });\n return { wrap };\n}\n\nconst StrikethroughDelim = { resolve: \"Strikethrough\", mark: \"StrikethroughMark\" };\n/// An extension that implements\n/// [GFM-style](https://github.github.com/gfm/#strikethrough-extension-)\n/// Strikethrough syntax using `~~` delimiters.\nconst Strikethrough = {\n defineNodes: [{\n name: \"Strikethrough\",\n style: { \"Strikethrough/...\": tags.strikethrough }\n }, {\n name: \"StrikethroughMark\",\n style: tags.processingInstruction\n }],\n parseInline: [{\n name: \"Strikethrough\",\n parse(cx, next, pos) {\n if (next != 126 /* '~' */ || cx.char(pos + 1) != 126 || cx.char(pos + 2) == 126)\n return -1;\n let before = cx.slice(pos - 1, pos), after = cx.slice(pos + 2, pos + 3);\n let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after);\n let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after);\n return cx.addDelimiter(StrikethroughDelim, pos, pos + 2, !sAfter && (!pAfter || sBefore || pBefore), !sBefore && (!pBefore || sAfter || pAfter));\n },\n after: \"Emphasis\"\n }]\n};\nfunction parseRow(cx, line, startI = 0, elts, offset = 0) {\n let count = 0, first = true, cellStart = -1, cellEnd = -1, esc = false;\n let parseCell = () => {\n elts.push(cx.elt(\"TableCell\", offset + cellStart, offset + cellEnd, cx.parser.parseInline(line.slice(cellStart, cellEnd), offset + cellStart)));\n };\n for (let i = startI; i < line.length; i++) {\n let next = line.charCodeAt(i);\n if (next == 124 /* '|' */ && !esc) {\n if (!first || cellStart > -1)\n count++;\n first = false;\n if (elts) {\n if (cellStart > -1)\n parseCell();\n elts.push(cx.elt(\"TableDelimiter\", i + offset, i + offset + 1));\n }\n cellStart = cellEnd = -1;\n }\n else if (esc || next != 32 && next != 9) {\n if (cellStart < 0)\n cellStart = i;\n cellEnd = i + 1;\n }\n esc = !esc && next == 92;\n }\n if (cellStart > -1) {\n count++;\n if (elts)\n parseCell();\n }\n return count;\n}\nfunction hasPipe(str, start) {\n for (let i = start; i < str.length; i++) {\n let next = str.charCodeAt(i);\n if (next == 124 /* '|' */)\n return true;\n if (next == 92 /* '\\\\' */)\n i++;\n }\n return false;\n}\nconst delimiterLine = /^\\|?(\\s*:?-+:?\\s*\\|)+(\\s*:?-+:?\\s*)?$/;\nclass TableParser {\n constructor() {\n // Null means we haven't seen the second line yet, false means this\n // isn't a table, and an array means this is a table and we've\n // parsed the given rows so far.\n this.rows = null;\n }\n nextLine(cx, line, leaf) {\n if (this.rows == null) { // Second line\n this.rows = false;\n let lineText;\n if ((line.next == 45 || line.next == 58 || line.next == 124 /* '-:|' */) &&\n delimiterLine.test(lineText = line.text.slice(line.pos))) {\n let firstRow = [], firstCount = parseRow(cx, leaf.content, 0, firstRow, leaf.start);\n if (firstCount == parseRow(cx, lineText, line.pos))\n this.rows = [cx.elt(\"TableHeader\", leaf.start, leaf.start + leaf.content.length, firstRow),\n cx.elt(\"TableDelimiter\", cx.lineStart + line.pos, cx.lineStart + line.text.length)];\n }\n }\n else if (this.rows) { // Line after the second\n let content = [];\n parseRow(cx, line.text, line.pos, content, cx.lineStart);\n this.rows.push(cx.elt(\"TableRow\", cx.lineStart + line.pos, cx.lineStart + line.text.length, content));\n }\n return false;\n }\n finish(cx, leaf) {\n if (!this.rows)\n return false;\n cx.addLeafElement(leaf, cx.elt(\"Table\", leaf.start, leaf.start + leaf.content.length, this.rows));\n return true;\n }\n}\n/// This extension provides\n/// [GFM-style](https://github.github.com/gfm/#tables-extension-)\n/// tables, using syntax like this:\n///\n/// ```\n/// | head 1 | head 2 |\n/// | --- | --- |\n/// | cell 1 | cell 2 |\n/// ```\nconst Table = {\n defineNodes: [\n { name: \"Table\", block: true },\n { name: \"TableHeader\", style: { \"TableHeader/...\": tags.heading } },\n \"TableRow\",\n { name: \"TableCell\", style: tags.content },\n { name: \"TableDelimiter\", style: tags.processingInstruction },\n ],\n parseBlock: [{\n name: \"Table\",\n leaf(_, leaf) { return hasPipe(leaf.content, 0) ? new TableParser : null; },\n endLeaf(cx, line, leaf) {\n if (leaf.parsers.some(p => p instanceof TableParser) || !hasPipe(line.text, line.basePos))\n return false;\n let next = cx.scanLine(cx.absoluteLineEnd + 1).text;\n return delimiterLine.test(next) && parseRow(cx, line.text, line.basePos) == parseRow(cx, next, line.basePos);\n },\n before: \"SetextHeading\"\n }]\n};\nclass TaskParser {\n nextLine() { return false; }\n finish(cx, leaf) {\n cx.addLeafElement(leaf, cx.elt(\"Task\", leaf.start, leaf.start + leaf.content.length, [\n cx.elt(\"TaskMarker\", leaf.start, leaf.start + 3),\n ...cx.parser.parseInline(leaf.content.slice(3), leaf.start + 3)\n ]));\n return true;\n }\n}\n/// Extension providing\n/// [GFM-style](https://github.github.com/gfm/#task-list-items-extension-)\n/// task list items, where list items can be prefixed with `[ ]` or\n/// `[x]` to add a checkbox.\nconst TaskList = {\n defineNodes: [\n { name: \"Task\", block: true, style: tags.list },\n { name: \"TaskMarker\", style: tags.atom }\n ],\n parseBlock: [{\n name: \"TaskList\",\n leaf(cx, leaf) {\n return /^\\[[ xX]\\][ \\t]/.test(leaf.content) && cx.parentType().name == \"ListItem\" ? new TaskParser : null;\n },\n after: \"SetextHeading\"\n }]\n};\nconst autolinkRE = /(www\\.)|(https?:\\/\\/)|([\\w.+-]{,100}@)|(mailto:|xmpp:)/gy;\nconst urlRE = /[\\w-]+(\\.[\\w-]+)+(\\/[^\\s<]*)?/gy;\nconst lastTwoDomainWords = /[\\w-]+\\.[\\w-]+($|\\/)/;\nconst emailRE = /[\\w.+-]+@[\\w-]+(\\.[\\w.-]+)+/gy;\nconst xmppResourceRE = /\\/[a-zA-Z\\d@.]+/gy;\nfunction count(str, from, to, ch) {\n let result = 0;\n for (let i = from; i < to; i++)\n if (str[i] == ch)\n result++;\n return result;\n}\nfunction autolinkURLEnd(text, from) {\n urlRE.lastIndex = from;\n let m = urlRE.exec(text);\n if (!m || lastTwoDomainWords.exec(m[0])[0].indexOf(\"_\") > -1)\n return -1;\n let end = from + m[0].length;\n for (;;) {\n let last = text[end - 1], m;\n if (/[?!.,:*_~]/.test(last) ||\n last == \")\" && count(text, from, end, \")\") > count(text, from, end, \"(\"))\n end--;\n else if (last == \";\" && (m = /&(?:#\\d+|#x[a-f\\d]+|\\w+);$/.exec(text.slice(from, end))))\n end = from + m.index;\n else\n break;\n }\n return end;\n}\nfunction autolinkEmailEnd(text, from) {\n emailRE.lastIndex = from;\n let m = emailRE.exec(text);\n if (!m)\n return -1;\n let last = m[0][m[0].length - 1];\n return last == \"_\" || last == \"-\" ? -1 : from + m[0].length - (last == \".\" ? 1 : 0);\n}\n/// Extension that implements autolinking for\n/// `www.`/`http://`/`https://`/`mailto:`/`xmpp:` URLs and email\n/// addresses.\nconst Autolink = {\n parseInline: [{\n name: \"Autolink\",\n parse(cx, next, absPos) {\n let pos = absPos - cx.offset;\n if (pos && /\\w/.test(cx.text[pos - 1]))\n return -1;\n autolinkRE.lastIndex = pos;\n let m = autolinkRE.exec(cx.text), end = -1;\n if (!m)\n return -1;\n if (m[1] || m[2]) { // www., http://\n end = autolinkURLEnd(cx.text, pos + m[0].length);\n if (end > -1 && cx.hasOpenLink) {\n let noBracket = /([^\\[\\]]|\\[[^\\]]*\\])*/.exec(cx.text.slice(pos, end));\n end = pos + noBracket[0].length;\n }\n }\n else if (m[3]) { // email address\n end = autolinkEmailEnd(cx.text, pos);\n }\n else { // mailto:/xmpp:\n end = autolinkEmailEnd(cx.text, pos + m[0].length);\n if (end > -1 && m[0] == \"xmpp:\") {\n xmppResourceRE.lastIndex = end;\n m = xmppResourceRE.exec(cx.text);\n if (m)\n end = m.index + m[0].length;\n }\n }\n if (end < 0)\n return -1;\n cx.addElement(cx.elt(\"URL\", absPos, end + cx.offset));\n return end + cx.offset;\n }\n }]\n};\n/// Extension bundle containing [`Table`](#Table),\n/// [`TaskList`](#TaskList), [`Strikethrough`](#Strikethrough), and\n/// [`Autolink`](#Autolink).\nconst GFM = [Table, TaskList, Strikethrough, Autolink];\nfunction parseSubSuper(ch, node, mark) {\n return (cx, next, pos) => {\n if (next != ch || cx.char(pos + 1) == ch)\n return -1;\n let elts = [cx.elt(mark, pos, pos + 1)];\n for (let i = pos + 1; i < cx.end; i++) {\n let next = cx.char(i);\n if (next == ch)\n return cx.addElement(cx.elt(node, pos, i + 1, elts.concat(cx.elt(mark, i, i + 1))));\n if (next == 92 /* '\\\\' */)\n elts.push(cx.elt(\"Escape\", i, i++ + 2));\n if (space(next))\n break;\n }\n return -1;\n };\n}\n/// Extension providing\n/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\n/// superscript using `^` markers.\nconst Superscript = {\n defineNodes: [\n { name: \"Superscript\", style: tags.special(tags.content) },\n { name: \"SuperscriptMark\", style: tags.processingInstruction }\n ],\n parseInline: [{\n name: \"Superscript\",\n parse: parseSubSuper(94 /* '^' */, \"Superscript\", \"SuperscriptMark\")\n }]\n};\n/// Extension providing\n/// [Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\n/// subscript using `~` markers.\nconst Subscript = {\n defineNodes: [\n { name: \"Subscript\", style: tags.special(tags.content) },\n { name: \"SubscriptMark\", style: tags.processingInstruction }\n ],\n parseInline: [{\n name: \"Subscript\",\n parse: parseSubSuper(126 /* '~' */, \"Subscript\", \"SubscriptMark\")\n }]\n};\n/// Extension that parses two colons with only letters, underscores,\n/// and numbers between them as `Emoji` nodes.\nconst Emoji = {\n defineNodes: [{ name: \"Emoji\", style: tags.character }],\n parseInline: [{\n name: \"Emoji\",\n parse(cx, next, pos) {\n let match;\n if (next != 58 /* ':' */ || !(match = /^[a-zA-Z_0-9]+:/.exec(cx.slice(pos + 1, cx.end))))\n return -1;\n return cx.addElement(cx.elt(\"Emoji\", pos, pos + 1 + match[0].length));\n }\n }]\n};\n\nexport { Autolink, BlockContext, Element, Emoji, GFM, InlineContext, LeafBlock, Line, MarkdownParser, Strikethrough, Subscript, Superscript, Table, TaskList, parseCode, parser };\n","import { Parser, NodeProp, NodeSet, NodeType, DefaultBufferLength, Tree, IterMode } from '@lezer/common';\n\n/**\nA parse stack. These are used internally by the parser to track\nparsing progress. They also provide some properties and methods\nthat external code such as a tokenizer can use to get information\nabout the parse state.\n*/\nclass Stack {\n /**\n @internal\n */\n constructor(\n /**\n The parse that this stack is part of @internal\n */\n p, \n /**\n Holds state, input pos, buffer index triplets for all but the\n top state @internal\n */\n stack, \n /**\n The current parse state @internal\n */\n state, \n // The position at which the next reduce should take place. This\n // can be less than `this.pos` when skipped expressions have been\n // added to the stack (which should be moved outside of the next\n // reduction)\n /**\n @internal\n */\n reducePos, \n /**\n The input position up to which this stack has parsed.\n */\n pos, \n /**\n The dynamic score of the stack, including dynamic precedence\n and error-recovery penalties\n @internal\n */\n score, \n // The output buffer. Holds (type, start, end, size) quads\n // representing nodes created by the parser, where `size` is\n // amount of buffer array entries covered by this node.\n /**\n @internal\n */\n buffer, \n // The base offset of the buffer. When stacks are split, the split\n // instance shared the buffer history with its parent up to\n // `bufferBase`, which is the absolute offset (including the\n // offset of previous splits) into the buffer at which this stack\n // starts writing.\n /**\n @internal\n */\n bufferBase, \n /**\n @internal\n */\n curContext, \n /**\n @internal\n */\n lookAhead = 0, \n // A parent stack from which this was split off, if any. This is\n // set up so that it always points to a stack that has some\n // additional buffer content, never to a stack with an equal\n // `bufferBase`.\n /**\n @internal\n */\n parent) {\n this.p = p;\n this.stack = stack;\n this.state = state;\n this.reducePos = reducePos;\n this.pos = pos;\n this.score = score;\n this.buffer = buffer;\n this.bufferBase = bufferBase;\n this.curContext = curContext;\n this.lookAhead = lookAhead;\n this.parent = parent;\n }\n /**\n @internal\n */\n toString() {\n return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? \"!\" + this.score : \"\"}`;\n }\n // Start an empty stack\n /**\n @internal\n */\n static start(p, state, pos = 0) {\n let cx = p.parser.context;\n return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);\n }\n /**\n The stack's current [context](#lr.ContextTracker) value, if\n any. Its type will depend on the context tracker's type\n parameter, or it will be `null` if there is no context\n tracker.\n */\n get context() { return this.curContext ? this.curContext.context : null; }\n // Push a state onto the stack, tracking its start position as well\n // as the buffer base at that point.\n /**\n @internal\n */\n pushState(state, start) {\n this.stack.push(this.state, start, this.bufferBase + this.buffer.length);\n this.state = state;\n }\n // Apply a reduce action\n /**\n @internal\n */\n reduce(action) {\n var _a;\n let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;\n let { parser } = this.p;\n let lookaheadRecord = this.reducePos < this.pos - 25 /* Lookahead.Margin */;\n if (lookaheadRecord)\n this.setLookAhead(this.pos);\n let dPrec = parser.dynamicPrecedence(type);\n if (dPrec)\n this.score += dPrec;\n if (depth == 0) {\n this.pushState(parser.getGoto(this.state, type, true), this.reducePos);\n // Zero-depth reductions are a special case—they add stuff to\n // the stack without popping anything off.\n if (type < parser.minRepeatTerm)\n this.storeNode(type, this.reducePos, this.reducePos, lookaheadRecord ? 8 : 4, true);\n this.reduceContext(type, this.reducePos);\n return;\n }\n // Find the base index into `this.stack`, content after which will\n // be dropped. Note that with `StayFlag` reductions we need to\n // consume two extra frames (the dummy parent node for the skipped\n // expression and the state that we'll be staying in, which should\n // be moved to `this.state`).\n let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0);\n let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start;\n // This is a kludge to try and detect overly deep left-associative\n // trees, which will not increase the parse stack depth and thus\n // won't be caught by the regular stack-depth limit check.\n if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {\n if (start == this.p.lastBigReductionStart) {\n this.p.bigReductionCount++;\n this.p.lastBigReductionSize = size;\n }\n else if (this.p.lastBigReductionSize < size) {\n this.p.bigReductionCount = 1;\n this.p.lastBigReductionStart = start;\n this.p.lastBigReductionSize = size;\n }\n }\n let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase;\n // Store normal terms or `R -> R R` repeat reductions\n if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) {\n let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos;\n this.storeNode(type, start, pos, count + 4, true);\n }\n if (action & 262144 /* Action.StayFlag */) {\n this.state = this.stack[base];\n }\n else {\n let baseStateID = this.stack[base - 3];\n this.state = parser.getGoto(baseStateID, type, true);\n }\n while (this.stack.length > base)\n this.stack.pop();\n this.reduceContext(type, start);\n }\n // Shift a value into the buffer\n /**\n @internal\n */\n storeNode(term, start, end, size = 4, mustSink = false) {\n if (term == 0 /* Term.Err */ &&\n (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {\n // Try to omit/merge adjacent error nodes\n let cur = this, top = this.buffer.length;\n if (top == 0 && cur.parent) {\n top = cur.bufferBase - cur.parent.bufferBase;\n cur = cur.parent;\n }\n if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) {\n if (start == end)\n return;\n if (cur.buffer[top - 2] >= start) {\n cur.buffer[top - 2] = end;\n return;\n }\n }\n }\n if (!mustSink || this.pos == end) { // Simple case, just append\n this.buffer.push(term, start, end, size);\n }\n else { // There may be skipped nodes that have to be moved forward\n let index = this.buffer.length;\n if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */) {\n let mustMove = false;\n for (let scan = index; scan > 0 && this.buffer[scan - 2] > end; scan -= 4) {\n if (this.buffer[scan - 1] >= 0) {\n mustMove = true;\n break;\n }\n }\n if (mustMove)\n while (index > 0 && this.buffer[index - 2] > end) {\n // Move this record forward\n this.buffer[index] = this.buffer[index - 4];\n this.buffer[index + 1] = this.buffer[index - 3];\n this.buffer[index + 2] = this.buffer[index - 2];\n this.buffer[index + 3] = this.buffer[index - 1];\n index -= 4;\n if (size > 4)\n size -= 4;\n }\n }\n this.buffer[index] = term;\n this.buffer[index + 1] = start;\n this.buffer[index + 2] = end;\n this.buffer[index + 3] = size;\n }\n }\n // Apply a shift action\n /**\n @internal\n */\n shift(action, type, start, end) {\n if (action & 131072 /* Action.GotoFlag */) {\n this.pushState(action & 65535 /* Action.ValueMask */, this.pos);\n }\n else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift\n let nextState = action, { parser } = this.p;\n if (end > this.pos || type <= parser.maxNode) {\n this.pos = end;\n if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */))\n this.reducePos = end;\n }\n this.pushState(nextState, start);\n this.shiftContext(type, start);\n if (type <= parser.maxNode)\n this.buffer.push(type, start, end, 4);\n }\n else { // Shift-and-stay, which means this is a skipped token\n this.pos = end;\n this.shiftContext(type, start);\n if (type <= this.p.parser.maxNode)\n this.buffer.push(type, start, end, 4);\n }\n }\n // Apply an action\n /**\n @internal\n */\n apply(action, next, nextStart, nextEnd) {\n if (action & 65536 /* Action.ReduceFlag */)\n this.reduce(action);\n else\n this.shift(action, next, nextStart, nextEnd);\n }\n // Add a prebuilt (reused) node into the buffer.\n /**\n @internal\n */\n useNode(value, next) {\n let index = this.p.reused.length - 1;\n if (index < 0 || this.p.reused[index] != value) {\n this.p.reused.push(value);\n index++;\n }\n let start = this.pos;\n this.reducePos = this.pos = start + value.length;\n this.pushState(next, start);\n this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);\n if (this.curContext)\n this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));\n }\n // Split the stack. Due to the buffer sharing and the fact\n // that `this.stack` tends to stay quite shallow, this isn't very\n // expensive.\n /**\n @internal\n */\n split() {\n let parent = this;\n let off = parent.buffer.length;\n // Because the top of the buffer (after this.pos) may be mutated\n // to reorder reductions and skipped tokens, and shared buffers\n // should be immutable, this copies any outstanding skipped tokens\n // to the new buffer, and puts the base pointer before them.\n while (off > 0 && parent.buffer[off - 2] > parent.reducePos)\n off -= 4;\n let buffer = parent.buffer.slice(off), base = parent.bufferBase + off;\n // Make sure parent points to an actual parent with content, if there is such a parent.\n while (parent && base == parent.bufferBase)\n parent = parent.parent;\n return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);\n }\n // Try to recover from an error by 'deleting' (ignoring) one token.\n /**\n @internal\n */\n recoverByDelete(next, nextEnd) {\n let isNode = next <= this.p.parser.maxNode;\n if (isNode)\n this.storeNode(next, this.pos, nextEnd, 4);\n this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4);\n this.pos = this.reducePos = nextEnd;\n this.score -= 190 /* Recover.Delete */;\n }\n /**\n Check if the given term would be able to be shifted (optionally\n after some reductions) on this stack. This can be useful for\n external tokenizers that want to make sure they only provide a\n given token when it applies.\n */\n canShift(term) {\n for (let sim = new SimulatedStack(this);;) {\n let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term);\n if (action == 0)\n return false;\n if ((action & 65536 /* Action.ReduceFlag */) == 0)\n return true;\n sim.reduce(action);\n }\n }\n // Apply up to Recover.MaxNext recovery actions that conceptually\n // inserts some missing token or rule.\n /**\n @internal\n */\n recoverByInsert(next) {\n if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */)\n return [];\n let nextStates = this.p.parser.nextStates(this.state);\n if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) {\n let best = [];\n for (let i = 0, s; i < nextStates.length; i += 2) {\n if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next))\n best.push(nextStates[i], s);\n }\n if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */)\n for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) {\n let s = nextStates[i + 1];\n if (!best.some((v, i) => (i & 1) && v == s))\n best.push(nextStates[i], s);\n }\n nextStates = best;\n }\n let result = [];\n for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) {\n let s = nextStates[i + 1];\n if (s == this.state)\n continue;\n let stack = this.split();\n stack.pushState(s, this.pos);\n stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true);\n stack.shiftContext(nextStates[i], this.pos);\n stack.reducePos = this.pos;\n stack.score -= 200 /* Recover.Insert */;\n result.push(stack);\n }\n return result;\n }\n // Force a reduce, if possible. Return false if that can't\n // be done.\n /**\n @internal\n */\n forceReduce() {\n let { parser } = this.p;\n let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */);\n if ((reduce & 65536 /* Action.ReduceFlag */) == 0)\n return false;\n if (!parser.validAction(this.state, reduce)) {\n let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */;\n let target = this.stack.length - depth * 3;\n if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) {\n let backup = this.findForcedReduction();\n if (backup == null)\n return false;\n reduce = backup;\n }\n this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n this.score -= 100 /* Recover.Reduce */;\n }\n this.reducePos = this.pos;\n this.reduce(reduce);\n return true;\n }\n /**\n Try to scan through the automaton to find some kind of reduction\n that can be applied. Used when the regular ForcedReduce field\n isn't a valid action. @internal\n */\n findForcedReduction() {\n let { parser } = this.p, seen = [];\n let explore = (state, depth) => {\n if (seen.includes(state))\n return;\n seen.push(state);\n return parser.allActions(state, (action) => {\n if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ;\n else if (action & 65536 /* Action.ReduceFlag */) {\n let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth;\n if (rDepth > 1) {\n let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3;\n if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0)\n return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term;\n }\n }\n else {\n let found = explore(action, depth + 1);\n if (found != null)\n return found;\n }\n });\n };\n return explore(this.state, 0);\n }\n /**\n @internal\n */\n forceAll() {\n while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) {\n if (!this.forceReduce()) {\n this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n break;\n }\n }\n return this;\n }\n /**\n Check whether this state has no further actions (assumed to be a direct descendant of the\n top state, since any other states must be able to continue\n somehow). @internal\n */\n get deadEnd() {\n if (this.stack.length != 3)\n return false;\n let { parser } = this.p;\n return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ &&\n !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */);\n }\n /**\n Restart the stack (put it back in its start state). Only safe\n when this.stack.length == 3 (state is directly below the top\n state). @internal\n */\n restart() {\n this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n this.state = this.stack[0];\n this.stack.length = 0;\n }\n /**\n @internal\n */\n sameState(other) {\n if (this.state != other.state || this.stack.length != other.stack.length)\n return false;\n for (let i = 0; i < this.stack.length; i += 3)\n if (this.stack[i] != other.stack[i])\n return false;\n return true;\n }\n /**\n Get the parser used by this stack.\n */\n get parser() { return this.p.parser; }\n /**\n Test whether a given dialect (by numeric ID, as exported from\n the terms file) is enabled.\n */\n dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; }\n shiftContext(term, start) {\n if (this.curContext)\n this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));\n }\n reduceContext(term, start) {\n if (this.curContext)\n this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));\n }\n /**\n @internal\n */\n emitContext() {\n let last = this.buffer.length - 1;\n if (last < 0 || this.buffer[last] != -3)\n this.buffer.push(this.curContext.hash, this.pos, this.pos, -3);\n }\n /**\n @internal\n */\n emitLookAhead() {\n let last = this.buffer.length - 1;\n if (last < 0 || this.buffer[last] != -4)\n this.buffer.push(this.lookAhead, this.pos, this.pos, -4);\n }\n updateContext(context) {\n if (context != this.curContext.context) {\n let newCx = new StackContext(this.curContext.tracker, context);\n if (newCx.hash != this.curContext.hash)\n this.emitContext();\n this.curContext = newCx;\n }\n }\n /**\n @internal\n */\n setLookAhead(lookAhead) {\n if (lookAhead > this.lookAhead) {\n this.emitLookAhead();\n this.lookAhead = lookAhead;\n }\n }\n /**\n @internal\n */\n close() {\n if (this.curContext && this.curContext.tracker.strict)\n this.emitContext();\n if (this.lookAhead > 0)\n this.emitLookAhead();\n }\n}\nclass StackContext {\n constructor(tracker, context) {\n this.tracker = tracker;\n this.context = context;\n this.hash = tracker.strict ? tracker.hash(context) : 0;\n }\n}\n// Used to cheaply run some reductions to scan ahead without mutating\n// an entire stack\nclass SimulatedStack {\n constructor(start) {\n this.start = start;\n this.state = start.state;\n this.stack = start.stack;\n this.base = this.stack.length;\n }\n reduce(action) {\n let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */;\n if (depth == 0) {\n if (this.stack == this.start.stack)\n this.stack = this.stack.slice();\n this.stack.push(this.state, 0, 0);\n this.base += 3;\n }\n else {\n this.base -= (depth - 1) * 3;\n }\n let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);\n this.state = goto;\n }\n}\n// This is given to `Tree.build` to build a buffer, and encapsulates\n// the parent-stack-walking necessary to read the nodes.\nclass StackBufferCursor {\n constructor(stack, pos, index) {\n this.stack = stack;\n this.pos = pos;\n this.index = index;\n this.buffer = stack.buffer;\n if (this.index == 0)\n this.maybeNext();\n }\n static create(stack, pos = stack.bufferBase + stack.buffer.length) {\n return new StackBufferCursor(stack, pos, pos - stack.bufferBase);\n }\n maybeNext() {\n let next = this.stack.parent;\n if (next != null) {\n this.index = this.stack.bufferBase - next.bufferBase;\n this.stack = next;\n this.buffer = next.buffer;\n }\n }\n get id() { return this.buffer[this.index - 4]; }\n get start() { return this.buffer[this.index - 3]; }\n get end() { return this.buffer[this.index - 2]; }\n get size() { return this.buffer[this.index - 1]; }\n next() {\n this.index -= 4;\n this.pos -= 4;\n if (this.index == 0)\n this.maybeNext();\n }\n fork() {\n return new StackBufferCursor(this.stack, this.pos, this.index);\n }\n}\n\n// See lezer-generator/src/encode.ts for comments about the encoding\n// used here\nfunction decodeArray(input, Type = Uint16Array) {\n if (typeof input != \"string\")\n return input;\n let array = null;\n for (let pos = 0, out = 0; pos < input.length;) {\n let value = 0;\n for (;;) {\n let next = input.charCodeAt(pos++), stop = false;\n if (next == 126 /* Encode.BigValCode */) {\n value = 65535 /* Encode.BigVal */;\n break;\n }\n if (next >= 92 /* Encode.Gap2 */)\n next--;\n if (next >= 34 /* Encode.Gap1 */)\n next--;\n let digit = next - 32 /* Encode.Start */;\n if (digit >= 46 /* Encode.Base */) {\n digit -= 46 /* Encode.Base */;\n stop = true;\n }\n value += digit;\n if (stop)\n break;\n value *= 46 /* Encode.Base */;\n }\n if (array)\n array[out++] = value;\n else\n array = new Type(value);\n }\n return array;\n}\n\nclass CachedToken {\n constructor() {\n this.start = -1;\n this.value = -1;\n this.end = -1;\n this.extended = -1;\n this.lookAhead = 0;\n this.mask = 0;\n this.context = 0;\n }\n}\nconst nullToken = new CachedToken;\n/**\n[Tokenizers](#lr.ExternalTokenizer) interact with the input\nthrough this interface. It presents the input as a stream of\ncharacters, tracking lookahead and hiding the complexity of\n[ranges](#common.Parser.parse^ranges) from tokenizer code.\n*/\nclass InputStream {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n input, \n /**\n @internal\n */\n ranges) {\n this.input = input;\n this.ranges = ranges;\n /**\n @internal\n */\n this.chunk = \"\";\n /**\n @internal\n */\n this.chunkOff = 0;\n /**\n Backup chunk\n */\n this.chunk2 = \"\";\n this.chunk2Pos = 0;\n /**\n The character code of the next code unit in the input, or -1\n when the stream is at the end of the input.\n */\n this.next = -1;\n /**\n @internal\n */\n this.token = nullToken;\n this.rangeIndex = 0;\n this.pos = this.chunkPos = ranges[0].from;\n this.range = ranges[0];\n this.end = ranges[ranges.length - 1].to;\n this.readNext();\n }\n /**\n @internal\n */\n resolveOffset(offset, assoc) {\n let range = this.range, index = this.rangeIndex;\n let pos = this.pos + offset;\n while (pos < range.from) {\n if (!index)\n return null;\n let next = this.ranges[--index];\n pos -= range.from - next.to;\n range = next;\n }\n while (assoc < 0 ? pos > range.to : pos >= range.to) {\n if (index == this.ranges.length - 1)\n return null;\n let next = this.ranges[++index];\n pos += next.from - range.to;\n range = next;\n }\n return pos;\n }\n /**\n @internal\n */\n clipPos(pos) {\n if (pos >= this.range.from && pos < this.range.to)\n return pos;\n for (let range of this.ranges)\n if (range.to > pos)\n return Math.max(pos, range.from);\n return this.end;\n }\n /**\n Look at a code unit near the stream position. `.peek(0)` equals\n `.next`, `.peek(-1)` gives you the previous character, and so\n on.\n \n Note that looking around during tokenizing creates dependencies\n on potentially far-away content, which may reduce the\n effectiveness incremental parsing—when looking forward—or even\n cause invalid reparses when looking backward more than 25 code\n units, since the library does not track lookbehind.\n */\n peek(offset) {\n let idx = this.chunkOff + offset, pos, result;\n if (idx >= 0 && idx < this.chunk.length) {\n pos = this.pos + offset;\n result = this.chunk.charCodeAt(idx);\n }\n else {\n let resolved = this.resolveOffset(offset, 1);\n if (resolved == null)\n return -1;\n pos = resolved;\n if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {\n result = this.chunk2.charCodeAt(pos - this.chunk2Pos);\n }\n else {\n let i = this.rangeIndex, range = this.range;\n while (range.to <= pos)\n range = this.ranges[++i];\n this.chunk2 = this.input.chunk(this.chunk2Pos = pos);\n if (pos + this.chunk2.length > range.to)\n this.chunk2 = this.chunk2.slice(0, range.to - pos);\n result = this.chunk2.charCodeAt(0);\n }\n }\n if (pos >= this.token.lookAhead)\n this.token.lookAhead = pos + 1;\n return result;\n }\n /**\n Accept a token. By default, the end of the token is set to the\n current stream position, but you can pass an offset (relative to\n the stream position) to change that.\n */\n acceptToken(token, endOffset = 0) {\n let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;\n if (end == null || end < this.token.start)\n throw new RangeError(\"Token end out of bounds\");\n this.token.value = token;\n this.token.end = end;\n }\n /**\n Accept a token ending at a specific given position.\n */\n acceptTokenTo(token, endPos) {\n this.token.value = token;\n this.token.end = endPos;\n }\n getChunk() {\n if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {\n let { chunk, chunkPos } = this;\n this.chunk = this.chunk2;\n this.chunkPos = this.chunk2Pos;\n this.chunk2 = chunk;\n this.chunk2Pos = chunkPos;\n this.chunkOff = this.pos - this.chunkPos;\n }\n else {\n this.chunk2 = this.chunk;\n this.chunk2Pos = this.chunkPos;\n let nextChunk = this.input.chunk(this.pos);\n let end = this.pos + nextChunk.length;\n this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;\n this.chunkPos = this.pos;\n this.chunkOff = 0;\n }\n }\n readNext() {\n if (this.chunkOff >= this.chunk.length) {\n this.getChunk();\n if (this.chunkOff == this.chunk.length)\n return this.next = -1;\n }\n return this.next = this.chunk.charCodeAt(this.chunkOff);\n }\n /**\n Move the stream forward N (defaults to 1) code units. Returns\n the new value of [`next`](#lr.InputStream.next).\n */\n advance(n = 1) {\n this.chunkOff += n;\n while (this.pos + n >= this.range.to) {\n if (this.rangeIndex == this.ranges.length - 1)\n return this.setDone();\n n -= this.range.to - this.pos;\n this.range = this.ranges[++this.rangeIndex];\n this.pos = this.range.from;\n }\n this.pos += n;\n if (this.pos >= this.token.lookAhead)\n this.token.lookAhead = this.pos + 1;\n return this.readNext();\n }\n setDone() {\n this.pos = this.chunkPos = this.end;\n this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];\n this.chunk = \"\";\n return this.next = -1;\n }\n /**\n @internal\n */\n reset(pos, token) {\n if (token) {\n this.token = token;\n token.start = pos;\n token.lookAhead = pos + 1;\n token.value = token.extended = -1;\n }\n else {\n this.token = nullToken;\n }\n if (this.pos != pos) {\n this.pos = pos;\n if (pos == this.end) {\n this.setDone();\n return this;\n }\n while (pos < this.range.from)\n this.range = this.ranges[--this.rangeIndex];\n while (pos >= this.range.to)\n this.range = this.ranges[++this.rangeIndex];\n if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {\n this.chunkOff = pos - this.chunkPos;\n }\n else {\n this.chunk = \"\";\n this.chunkOff = 0;\n }\n this.readNext();\n }\n return this;\n }\n /**\n @internal\n */\n read(from, to) {\n if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length)\n return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);\n if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length)\n return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);\n if (from >= this.range.from && to <= this.range.to)\n return this.input.read(from, to);\n let result = \"\";\n for (let r of this.ranges) {\n if (r.from >= to)\n break;\n if (r.to > from)\n result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));\n }\n return result;\n }\n}\n/**\n@internal\n*/\nclass TokenGroup {\n constructor(data, id) {\n this.data = data;\n this.id = id;\n }\n token(input, stack) {\n let { parser } = stack.p;\n readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);\n }\n}\nTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n@hide\n*/\nclass LocalTokenGroup {\n constructor(data, precTable, elseToken) {\n this.precTable = precTable;\n this.elseToken = elseToken;\n this.data = typeof data == \"string\" ? decodeArray(data) : data;\n }\n token(input, stack) {\n let start = input.pos, skipped = 0;\n for (;;) {\n let atEof = input.next < 0, nextPos = input.resolveOffset(1, 1);\n readToken(this.data, input, stack, 0, this.data, this.precTable);\n if (input.token.value > -1)\n break;\n if (this.elseToken == null)\n return;\n if (!atEof)\n skipped++;\n if (nextPos == null)\n break;\n input.reset(nextPos, input.token);\n }\n if (skipped) {\n input.reset(start, input.token);\n input.acceptToken(this.elseToken, skipped);\n }\n }\n}\nLocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/**\n`@external tokens` declarations in the grammar should resolve to\nan instance of this class.\n*/\nclass ExternalTokenizer {\n /**\n Create a tokenizer. The first argument is the function that,\n given an input stream, scans for the types of tokens it\n recognizes at the stream's position, and calls\n [`acceptToken`](#lr.InputStream.acceptToken) when it finds\n one.\n */\n constructor(\n /**\n @internal\n */\n token, options = {}) {\n this.token = token;\n this.contextual = !!options.contextual;\n this.fallback = !!options.fallback;\n this.extend = !!options.extend;\n }\n}\n// Tokenizer data is stored a big uint16 array containing, for each\n// state:\n//\n// - A group bitmask, indicating what token groups are reachable from\n// this state, so that paths that can only lead to tokens not in\n// any of the current groups can be cut off early.\n//\n// - The position of the end of the state's sequence of accepting\n// tokens\n//\n// - The number of outgoing edges for the state\n//\n// - The accepting tokens, as (token id, group mask) pairs\n//\n// - The outgoing edges, as (start character, end character, state\n// index) triples, with end character being exclusive\n//\n// This function interprets that data, running through a stream as\n// long as new states with the a matching group mask can be reached,\n// and updating `input.token` when it matches a token.\nfunction readToken(data, input, stack, group, precTable, precOffset) {\n let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser;\n scan: for (;;) {\n if ((groupMask & data[state]) == 0)\n break;\n let accEnd = data[state + 1];\n // Check whether this state can lead to a token in the current group\n // Accept tokens in this state, possibly overwriting\n // lower-precedence / shorter tokens\n for (let i = state + 3; i < accEnd; i += 2)\n if ((data[i + 1] & groupMask) > 0) {\n let term = data[i];\n if (dialect.allows(term) &&\n (input.token.value == -1 || input.token.value == term ||\n overrides(term, input.token.value, precTable, precOffset))) {\n input.acceptToken(term);\n break;\n }\n }\n let next = input.next, low = 0, high = data[state + 2];\n // Special case for EOF\n if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) {\n state = data[accEnd + high * 3 - 1];\n continue scan;\n }\n // Do a binary search on the state's edges\n for (; low < high;) {\n let mid = (low + high) >> 1;\n let index = accEnd + mid + (mid << 1);\n let from = data[index], to = data[index + 1] || 0x10000;\n if (next < from)\n high = mid;\n else if (next >= to)\n low = mid + 1;\n else {\n state = data[index + 2];\n input.advance();\n continue scan;\n }\n }\n break;\n }\n}\nfunction findOffset(data, start, term) {\n for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++)\n if (next == term)\n return i - start;\n return -1;\n}\nfunction overrides(token, prev, tableData, tableOffset) {\n let iPrev = findOffset(tableData, tableOffset, prev);\n return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;\n}\n\n// Environment variable used to control console output\nconst verbose = typeof process != \"undefined\" && process.env && /\\bparse\\b/.test(process.env.LOG);\nlet stackIDs = null;\nfunction cutAt(tree, pos, side) {\n let cursor = tree.cursor(IterMode.IncludeAnonymous);\n cursor.moveTo(pos);\n for (;;) {\n if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))\n for (;;) {\n if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)\n return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Lookahead.Margin */))\n : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Lookahead.Margin */));\n if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())\n break;\n if (!cursor.parent())\n return side < 0 ? 0 : tree.length;\n }\n }\n}\nclass FragmentCursor {\n constructor(fragments, nodeSet) {\n this.fragments = fragments;\n this.nodeSet = nodeSet;\n this.i = 0;\n this.fragment = null;\n this.safeFrom = -1;\n this.safeTo = -1;\n this.trees = [];\n this.start = [];\n this.index = [];\n this.nextFragment();\n }\n nextFragment() {\n let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];\n if (fr) {\n this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;\n this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;\n while (this.trees.length) {\n this.trees.pop();\n this.start.pop();\n this.index.pop();\n }\n this.trees.push(fr.tree);\n this.start.push(-fr.offset);\n this.index.push(0);\n this.nextStart = this.safeFrom;\n }\n else {\n this.nextStart = 1e9;\n }\n }\n // `pos` must be >= any previously given `pos` for this cursor\n nodeAt(pos) {\n if (pos < this.nextStart)\n return null;\n while (this.fragment && this.safeTo <= pos)\n this.nextFragment();\n if (!this.fragment)\n return null;\n for (;;) {\n let last = this.trees.length - 1;\n if (last < 0) { // End of tree\n this.nextFragment();\n return null;\n }\n let top = this.trees[last], index = this.index[last];\n if (index == top.children.length) {\n this.trees.pop();\n this.start.pop();\n this.index.pop();\n continue;\n }\n let next = top.children[index];\n let start = this.start[last] + top.positions[index];\n if (start > pos) {\n this.nextStart = start;\n return null;\n }\n if (next instanceof Tree) {\n if (start == pos) {\n if (start < this.safeFrom)\n return null;\n let end = start + next.length;\n if (end <= this.safeTo) {\n let lookAhead = next.prop(NodeProp.lookAhead);\n if (!lookAhead || end + lookAhead < this.fragment.to)\n return next;\n }\n }\n this.index[last]++;\n if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node\n this.trees.push(next);\n this.start.push(start);\n this.index.push(0);\n }\n }\n else {\n this.index[last]++;\n this.nextStart = start + next.length;\n }\n }\n }\n}\nclass TokenCache {\n constructor(parser, stream) {\n this.stream = stream;\n this.tokens = [];\n this.mainToken = null;\n this.actions = [];\n this.tokens = parser.tokenizers.map(_ => new CachedToken);\n }\n getActions(stack) {\n let actionIndex = 0;\n let main = null;\n let { parser } = stack.p, { tokenizers } = parser;\n let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */);\n let context = stack.curContext ? stack.curContext.hash : 0;\n let lookAhead = 0;\n for (let i = 0; i < tokenizers.length; i++) {\n if (((1 << i) & mask) == 0)\n continue;\n let tokenizer = tokenizers[i], token = this.tokens[i];\n if (main && !tokenizer.fallback)\n continue;\n if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {\n this.updateCachedToken(token, tokenizer, stack);\n token.mask = mask;\n token.context = context;\n }\n if (token.lookAhead > token.end + 25 /* Lookahead.Margin */)\n lookAhead = Math.max(token.lookAhead, lookAhead);\n if (token.value != 0 /* Term.Err */) {\n let startIndex = actionIndex;\n if (token.extended > -1)\n actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);\n actionIndex = this.addActions(stack, token.value, token.end, actionIndex);\n if (!tokenizer.extend) {\n main = token;\n if (actionIndex > startIndex)\n break;\n }\n }\n }\n while (this.actions.length > actionIndex)\n this.actions.pop();\n if (lookAhead)\n stack.setLookAhead(lookAhead);\n if (!main && stack.pos == this.stream.end) {\n main = new CachedToken;\n main.value = stack.p.parser.eofTerm;\n main.start = main.end = stack.pos;\n actionIndex = this.addActions(stack, main.value, main.end, actionIndex);\n }\n this.mainToken = main;\n return this.actions;\n }\n getMainToken(stack) {\n if (this.mainToken)\n return this.mainToken;\n let main = new CachedToken, { pos, p } = stack;\n main.start = pos;\n main.end = Math.min(pos + 1, p.stream.end);\n main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */;\n return main;\n }\n updateCachedToken(token, tokenizer, stack) {\n let start = this.stream.clipPos(stack.pos);\n tokenizer.token(this.stream.reset(start, token), stack);\n if (token.value > -1) {\n let { parser } = stack.p;\n for (let i = 0; i < parser.specialized.length; i++)\n if (parser.specialized[i] == token.value) {\n let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);\n if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {\n if ((result & 1) == 0 /* Specialize.Specialize */)\n token.value = result >> 1;\n else\n token.extended = result >> 1;\n break;\n }\n }\n }\n else {\n token.value = 0 /* Term.Err */;\n token.end = this.stream.clipPos(start + 1);\n }\n }\n putAction(action, token, end, index) {\n // Don't add duplicate actions\n for (let i = 0; i < index; i += 3)\n if (this.actions[i] == action)\n return index;\n this.actions[index++] = action;\n this.actions[index++] = token;\n this.actions[index++] = end;\n return index;\n }\n addActions(stack, token, end, index) {\n let { state } = stack, { parser } = stack.p, { data } = parser;\n for (let set = 0; set < 2; set++) {\n for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) {\n if (data[i] == 65535 /* Seq.End */) {\n if (data[i + 1] == 1 /* Seq.Next */) {\n i = pair(data, i + 2);\n }\n else {\n if (index == 0 && data[i + 1] == 2 /* Seq.Other */)\n index = this.putAction(pair(data, i + 2), token, end, index);\n break;\n }\n }\n if (data[i] == token)\n index = this.putAction(pair(data, i + 1), token, end, index);\n }\n }\n return index;\n }\n}\nclass Parse {\n constructor(parser, input, fragments, ranges) {\n this.parser = parser;\n this.input = input;\n this.ranges = ranges;\n this.recovering = 0;\n this.nextStackID = 0x2654; // ♔, ♕, ♖, ♗, ♘, ♙, ♠, ♡, ♢, ♣, ♤, ♥, ♦, ♧\n this.minStackPos = 0;\n this.reused = [];\n this.stoppedAt = null;\n this.lastBigReductionStart = -1;\n this.lastBigReductionSize = 0;\n this.bigReductionCount = 0;\n this.stream = new InputStream(input, ranges);\n this.tokens = new TokenCache(parser, this.stream);\n this.topTerm = parser.top[1];\n let { from } = ranges[0];\n this.stacks = [Stack.start(this, parser.top[0], from)];\n this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4\n ? new FragmentCursor(fragments, parser.nodeSet) : null;\n }\n get parsedPos() {\n return this.minStackPos;\n }\n // Move the parser forward. This will process all parse stacks at\n // `this.pos` and try to advance them to a further position. If no\n // stack for such a position is found, it'll start error-recovery.\n //\n // When the parse is finished, this will return a syntax tree. When\n // not, it returns `null`.\n advance() {\n let stacks = this.stacks, pos = this.minStackPos;\n // This will hold stacks beyond `pos`.\n let newStacks = this.stacks = [];\n let stopped, stoppedTokens;\n // If a large amount of reductions happened with the same start\n // position, force the stack out of that production in order to\n // avoid creating a tree too deep to recurse through.\n // (This is an ugly kludge, because unfortunately there is no\n // straightforward, cheap way to check for this happening, due to\n // the history of reductions only being available in an\n // expensive-to-access format in the stack buffers.)\n if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) {\n let [s] = stacks;\n while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { }\n this.bigReductionCount = this.lastBigReductionSize = 0;\n }\n // Keep advancing any stacks at `pos` until they either move\n // forward or can't be advanced. Gather stacks that can't be\n // advanced further in `stopped`.\n for (let i = 0; i < stacks.length; i++) {\n let stack = stacks[i];\n for (;;) {\n this.tokens.mainToken = null;\n if (stack.pos > pos) {\n newStacks.push(stack);\n }\n else if (this.advanceStack(stack, newStacks, stacks)) {\n continue;\n }\n else {\n if (!stopped) {\n stopped = [];\n stoppedTokens = [];\n }\n stopped.push(stack);\n let tok = this.tokens.getMainToken(stack);\n stoppedTokens.push(tok.value, tok.end);\n }\n break;\n }\n }\n if (!newStacks.length) {\n let finished = stopped && findFinished(stopped);\n if (finished) {\n if (verbose)\n console.log(\"Finish with \" + this.stackID(finished));\n return this.stackToTree(finished);\n }\n if (this.parser.strict) {\n if (verbose && stopped)\n console.log(\"Stuck with token \" + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : \"none\"));\n throw new SyntaxError(\"No parse at \" + pos);\n }\n if (!this.recovering)\n this.recovering = 5 /* Rec.Distance */;\n }\n if (this.recovering && stopped) {\n let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0]\n : this.runRecovery(stopped, stoppedTokens, newStacks);\n if (finished) {\n if (verbose)\n console.log(\"Force-finish \" + this.stackID(finished));\n return this.stackToTree(finished.forceAll());\n }\n }\n if (this.recovering) {\n let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */;\n if (newStacks.length > maxRemaining) {\n newStacks.sort((a, b) => b.score - a.score);\n while (newStacks.length > maxRemaining)\n newStacks.pop();\n }\n if (newStacks.some(s => s.reducePos > pos))\n this.recovering--;\n }\n else if (newStacks.length > 1) {\n // Prune stacks that are in the same state, or that have been\n // running without splitting for a while, to avoid getting stuck\n // with multiple successful stacks running endlessly on.\n outer: for (let i = 0; i < newStacks.length - 1; i++) {\n let stack = newStacks[i];\n for (let j = i + 1; j < newStacks.length; j++) {\n let other = newStacks[j];\n if (stack.sameState(other) ||\n stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) {\n if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) {\n newStacks.splice(j--, 1);\n }\n else {\n newStacks.splice(i--, 1);\n continue outer;\n }\n }\n }\n }\n if (newStacks.length > 12 /* Rec.MaxStackCount */)\n newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */);\n }\n this.minStackPos = newStacks[0].pos;\n for (let i = 1; i < newStacks.length; i++)\n if (newStacks[i].pos < this.minStackPos)\n this.minStackPos = newStacks[i].pos;\n return null;\n }\n stopAt(pos) {\n if (this.stoppedAt != null && this.stoppedAt < pos)\n throw new RangeError(\"Can't move stoppedAt forward\");\n this.stoppedAt = pos;\n }\n // Returns an updated version of the given stack, or null if the\n // stack can't advance normally. When `split` and `stacks` are\n // given, stacks split off by ambiguous operations will be pushed to\n // `split`, or added to `stacks` if they move `pos` forward.\n advanceStack(stack, stacks, split) {\n let start = stack.pos, { parser } = this;\n let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n if (this.stoppedAt != null && start > this.stoppedAt)\n return stack.forceReduce() ? stack : null;\n if (this.fragments) {\n let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0;\n for (let cached = this.fragments.nodeAt(start); cached;) {\n let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;\n if (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) {\n stack.useNode(cached, match);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);\n return true;\n }\n if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0)\n break;\n let inner = cached.children[0];\n if (inner instanceof Tree && cached.positions[0] == 0)\n cached = inner;\n else\n break;\n }\n }\n let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */);\n if (defaultReduce > 0) {\n stack.reduce(defaultReduce);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`);\n return true;\n }\n if (stack.stack.length >= 8400 /* Rec.CutDepth */) {\n while (stack.stack.length > 6000 /* Rec.CutTo */ && stack.forceReduce()) { }\n }\n let actions = this.tokens.getActions(stack);\n for (let i = 0; i < actions.length;) {\n let action = actions[i++], term = actions[i++], end = actions[i++];\n let last = i == actions.length || !split;\n let localStack = last ? stack : stack.split();\n let main = this.tokens.mainToken;\n localStack.apply(action, term, main ? main.start : localStack.pos, end);\n if (verbose)\n console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? \"shift\"\n : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? \"\" : \", split\"})`);\n if (last)\n return true;\n else if (localStack.pos > start)\n stacks.push(localStack);\n else\n split.push(localStack);\n }\n return false;\n }\n // Advance a given stack forward as far as it will go. Returns the\n // (possibly updated) stack if it got stuck, or null if it moved\n // forward and was given to `pushStackDedup`.\n advanceFully(stack, newStacks) {\n let pos = stack.pos;\n for (;;) {\n if (!this.advanceStack(stack, null, null))\n return false;\n if (stack.pos > pos) {\n pushStackDedup(stack, newStacks);\n return true;\n }\n }\n }\n runRecovery(stacks, tokens, newStacks) {\n let finished = null, restarted = false;\n for (let i = 0; i < stacks.length; i++) {\n let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1];\n let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n if (stack.deadEnd) {\n if (restarted)\n continue;\n restarted = true;\n stack.restart();\n if (verbose)\n console.log(base + this.stackID(stack) + \" (restarted)\");\n let done = this.advanceFully(stack, newStacks);\n if (done)\n continue;\n }\n let force = stack.split(), forceBase = base;\n for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) {\n if (verbose)\n console.log(forceBase + this.stackID(force) + \" (via force-reduce)\");\n let done = this.advanceFully(force, newStacks);\n if (done)\n break;\n if (verbose)\n forceBase = this.stackID(force) + \" -> \";\n }\n for (let insert of stack.recoverByInsert(token)) {\n if (verbose)\n console.log(base + this.stackID(insert) + \" (via recover-insert)\");\n this.advanceFully(insert, newStacks);\n }\n if (this.stream.end > stack.pos) {\n if (tokenEnd == stack.pos) {\n tokenEnd++;\n token = 0 /* Term.Err */;\n }\n stack.recoverByDelete(token, tokenEnd);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);\n pushStackDedup(stack, newStacks);\n }\n else if (!finished || finished.score < stack.score) {\n finished = stack;\n }\n }\n return finished;\n }\n // Convert the stack's buffer to a syntax tree.\n stackToTree(stack) {\n stack.close();\n return Tree.build({ buffer: StackBufferCursor.create(stack),\n nodeSet: this.parser.nodeSet,\n topID: this.topTerm,\n maxBufferLength: this.parser.bufferLength,\n reused: this.reused,\n start: this.ranges[0].from,\n length: stack.pos - this.ranges[0].from,\n minRepeatType: this.parser.minRepeatTerm });\n }\n stackID(stack) {\n let id = (stackIDs || (stackIDs = new WeakMap)).get(stack);\n if (!id)\n stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));\n return id + stack;\n }\n}\nfunction pushStackDedup(stack, newStacks) {\n for (let i = 0; i < newStacks.length; i++) {\n let other = newStacks[i];\n if (other.pos == stack.pos && other.sameState(stack)) {\n if (newStacks[i].score < stack.score)\n newStacks[i] = stack;\n return;\n }\n }\n newStacks.push(stack);\n}\nclass Dialect {\n constructor(source, flags, disabled) {\n this.source = source;\n this.flags = flags;\n this.disabled = disabled;\n }\n allows(term) { return !this.disabled || this.disabled[term] == 0; }\n}\nconst id = x => x;\n/**\nContext trackers are used to track stateful context (such as\nindentation in the Python grammar, or parent elements in the XML\ngrammar) needed by external tokenizers. You declare them in a\ngrammar file as `@context exportName from \"module\"`.\n\nContext values should be immutable, and can be updated (replaced)\non shift or reduce actions.\n\nThe export used in a `@context` declaration should be of this\ntype.\n*/\nclass ContextTracker {\n /**\n Define a context tracker.\n */\n constructor(spec) {\n this.start = spec.start;\n this.shift = spec.shift || id;\n this.reduce = spec.reduce || id;\n this.reuse = spec.reuse || id;\n this.hash = spec.hash || (() => 0);\n this.strict = spec.strict !== false;\n }\n}\n/**\nHolds the parse tables for a given grammar, as generated by\n`lezer-generator`, and provides [methods](#common.Parser) to parse\ncontent with.\n*/\nclass LRParser extends Parser {\n /**\n @internal\n */\n constructor(spec) {\n super();\n /**\n @internal\n */\n this.wrappers = [];\n if (spec.version != 14 /* File.Version */)\n throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`);\n let nodeNames = spec.nodeNames.split(\" \");\n this.minRepeatTerm = nodeNames.length;\n for (let i = 0; i < spec.repeatNodeCount; i++)\n nodeNames.push(\"\");\n let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);\n let nodeProps = [];\n for (let i = 0; i < nodeNames.length; i++)\n nodeProps.push([]);\n function setProp(nodeID, prop, value) {\n nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);\n }\n if (spec.nodeProps)\n for (let propSpec of spec.nodeProps) {\n let prop = propSpec[0];\n if (typeof prop == \"string\")\n prop = NodeProp[prop];\n for (let i = 1; i < propSpec.length;) {\n let next = propSpec[i++];\n if (next >= 0) {\n setProp(next, prop, propSpec[i++]);\n }\n else {\n let value = propSpec[i + -next];\n for (let j = -next; j > 0; j--)\n setProp(propSpec[i++], prop, value);\n i++;\n }\n }\n }\n this.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({\n name: i >= this.minRepeatTerm ? undefined : name,\n id: i,\n props: nodeProps[i],\n top: topTerms.indexOf(i) > -1,\n error: i == 0,\n skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1\n })));\n if (spec.propSources)\n this.nodeSet = this.nodeSet.extend(...spec.propSources);\n this.strict = false;\n this.bufferLength = DefaultBufferLength;\n let tokenArray = decodeArray(spec.tokenData);\n this.context = spec.context;\n this.specializerSpecs = spec.specialized || [];\n this.specialized = new Uint16Array(this.specializerSpecs.length);\n for (let i = 0; i < this.specializerSpecs.length; i++)\n this.specialized[i] = this.specializerSpecs[i].term;\n this.specializers = this.specializerSpecs.map(getSpecializer);\n this.states = decodeArray(spec.states, Uint32Array);\n this.data = decodeArray(spec.stateData);\n this.goto = decodeArray(spec.goto);\n this.maxTerm = spec.maxTerm;\n this.tokenizers = spec.tokenizers.map(value => typeof value == \"number\" ? new TokenGroup(tokenArray, value) : value);\n this.topRules = spec.topRules;\n this.dialects = spec.dialects || {};\n this.dynamicPrecedences = spec.dynamicPrecedences || null;\n this.tokenPrecTable = spec.tokenPrec;\n this.termNames = spec.termNames || null;\n this.maxNode = this.nodeSet.types.length - 1;\n this.dialect = this.parseDialect();\n this.top = this.topRules[Object.keys(this.topRules)[0]];\n }\n createParse(input, fragments, ranges) {\n let parse = new Parse(this, input, fragments, ranges);\n for (let w of this.wrappers)\n parse = w(parse, input, fragments, ranges);\n return parse;\n }\n /**\n Get a goto table entry @internal\n */\n getGoto(state, term, loose = false) {\n let table = this.goto;\n if (term >= table[0])\n return -1;\n for (let pos = table[term + 1];;) {\n let groupTag = table[pos++], last = groupTag & 1;\n let target = table[pos++];\n if (last && loose)\n return target;\n for (let end = pos + (groupTag >> 1); pos < end; pos++)\n if (table[pos] == state)\n return target;\n if (last)\n return -1;\n }\n }\n /**\n Check if this state has an action for a given terminal @internal\n */\n hasAction(state, terminal) {\n let data = this.data;\n for (let set = 0; set < 2; set++) {\n for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) {\n if ((next = data[i]) == 65535 /* Seq.End */) {\n if (data[i + 1] == 1 /* Seq.Next */)\n next = data[i = pair(data, i + 2)];\n else if (data[i + 1] == 2 /* Seq.Other */)\n return pair(data, i + 2);\n else\n break;\n }\n if (next == terminal || next == 0 /* Term.Err */)\n return pair(data, i + 1);\n }\n }\n return 0;\n }\n /**\n @internal\n */\n stateSlot(state, slot) {\n return this.states[(state * 6 /* ParseState.Size */) + slot];\n }\n /**\n @internal\n */\n stateFlag(state, flag) {\n return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0;\n }\n /**\n @internal\n */\n validAction(state, action) {\n return !!this.allActions(state, a => a == action ? true : null);\n }\n /**\n @internal\n */\n allActions(state, action) {\n let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */);\n let result = deflt ? action(deflt) : undefined;\n for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) {\n if (this.data[i] == 65535 /* Seq.End */) {\n if (this.data[i + 1] == 1 /* Seq.Next */)\n i = pair(this.data, i + 2);\n else\n break;\n }\n result = action(pair(this.data, i + 1));\n }\n return result;\n }\n /**\n Get the states that can follow this one through shift actions or\n goto jumps. @internal\n */\n nextStates(state) {\n let result = [];\n for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {\n if (this.data[i] == 65535 /* Seq.End */) {\n if (this.data[i + 1] == 1 /* Seq.Next */)\n i = pair(this.data, i + 2);\n else\n break;\n }\n if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) {\n let value = this.data[i + 1];\n if (!result.some((v, i) => (i & 1) && v == value))\n result.push(this.data[i], value);\n }\n }\n return result;\n }\n /**\n Configure the parser. Returns a new parser instance that has the\n given settings modified. Settings not provided in `config` are\n kept from the original parser.\n */\n configure(config) {\n // Hideous reflection-based kludge to make it easy to create a\n // slightly modified copy of a parser.\n let copy = Object.assign(Object.create(LRParser.prototype), this);\n if (config.props)\n copy.nodeSet = this.nodeSet.extend(...config.props);\n if (config.top) {\n let info = this.topRules[config.top];\n if (!info)\n throw new RangeError(`Invalid top rule name ${config.top}`);\n copy.top = info;\n }\n if (config.tokenizers)\n copy.tokenizers = this.tokenizers.map(t => {\n let found = config.tokenizers.find(r => r.from == t);\n return found ? found.to : t;\n });\n if (config.specializers) {\n copy.specializers = this.specializers.slice();\n copy.specializerSpecs = this.specializerSpecs.map((s, i) => {\n let found = config.specializers.find(r => r.from == s.external);\n if (!found)\n return s;\n let spec = Object.assign(Object.assign({}, s), { external: found.to });\n copy.specializers[i] = getSpecializer(spec);\n return spec;\n });\n }\n if (config.contextTracker)\n copy.context = config.contextTracker;\n if (config.dialect)\n copy.dialect = this.parseDialect(config.dialect);\n if (config.strict != null)\n copy.strict = config.strict;\n if (config.wrap)\n copy.wrappers = copy.wrappers.concat(config.wrap);\n if (config.bufferLength != null)\n copy.bufferLength = config.bufferLength;\n return copy;\n }\n /**\n Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)\n are registered for this parser.\n */\n hasWrappers() {\n return this.wrappers.length > 0;\n }\n /**\n Returns the name associated with a given term. This will only\n work for all terms when the parser was generated with the\n `--names` option. By default, only the names of tagged terms are\n stored.\n */\n getName(term) {\n return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);\n }\n /**\n The eof term id is always allocated directly after the node\n types. @internal\n */\n get eofTerm() { return this.maxNode + 1; }\n /**\n The type of top node produced by the parser.\n */\n get topNode() { return this.nodeSet.types[this.top[1]]; }\n /**\n @internal\n */\n dynamicPrecedence(term) {\n let prec = this.dynamicPrecedences;\n return prec == null ? 0 : prec[term] || 0;\n }\n /**\n @internal\n */\n parseDialect(dialect) {\n let values = Object.keys(this.dialects), flags = values.map(() => false);\n if (dialect)\n for (let part of dialect.split(\" \")) {\n let id = values.indexOf(part);\n if (id >= 0)\n flags[id] = true;\n }\n let disabled = null;\n for (let i = 0; i < values.length; i++)\n if (!flags[i]) {\n for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;)\n (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;\n }\n return new Dialect(dialect, flags, disabled);\n }\n /**\n Used by the output of the parser generator. Not available to\n user code. @hide\n */\n static deserialize(spec) {\n return new LRParser(spec);\n }\n}\nfunction pair(data, off) { return data[off] | (data[off + 1] << 16); }\nfunction findFinished(stacks) {\n let best = null;\n for (let stack of stacks) {\n let stopped = stack.p.stoppedAt;\n if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) &&\n stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) &&\n (!best || best.score < stack.score))\n best = stack;\n }\n return best;\n}\nfunction getSpecializer(spec) {\n if (spec.external) {\n let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */;\n return (value, stack) => (spec.external(value, stack) << 1) | mask;\n }\n return spec.get;\n}\n\nexport { ContextTracker, ExternalTokenizer, InputStream, LRParser, LocalTokenGroup, Stack };\n","import { ContextTracker, ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { parseMixed } from '@lezer/common';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst scriptText = 54,\n StartCloseScriptTag = 1,\n styleText = 55,\n StartCloseStyleTag = 2,\n textareaText = 56,\n StartCloseTextareaTag = 3,\n EndTag = 4,\n SelfClosingEndTag = 5,\n StartTag = 6,\n StartScriptTag = 7,\n StartStyleTag = 8,\n StartTextareaTag = 9,\n StartSelfClosingTag = 10,\n StartCloseTag = 11,\n NoMatchStartCloseTag = 12,\n MismatchedStartCloseTag = 13,\n missingCloseTag = 57,\n IncompleteCloseTag = 14,\n commentContent$1 = 58,\n Element = 20,\n TagName = 22,\n Attribute = 23,\n AttributeName = 24,\n AttributeValue = 26,\n UnquotedAttributeValue = 27,\n ScriptText = 28,\n StyleText = 31,\n TextareaText = 34,\n OpenTag = 36,\n CloseTag = 37,\n Dialect_noMatch = 0,\n Dialect_selfClosing = 1;\n\n/* Hand-written tokenizers for HTML. */\n\nconst selfClosers = {\n area: true, base: true, br: true, col: true, command: true,\n embed: true, frame: true, hr: true, img: true, input: true,\n keygen: true, link: true, meta: true, param: true, source: true,\n track: true, wbr: true, menuitem: true\n};\n\nconst implicitlyClosed = {\n dd: true, li: true, optgroup: true, option: true, p: true,\n rp: true, rt: true, tbody: true, td: true, tfoot: true,\n th: true, tr: true\n};\n\nconst closeOnOpen = {\n dd: {dd: true, dt: true},\n dt: {dd: true, dt: true},\n li: {li: true},\n option: {option: true, optgroup: true},\n optgroup: {optgroup: true},\n p: {\n address: true, article: true, aside: true, blockquote: true, dir: true,\n div: true, dl: true, fieldset: true, footer: true, form: true,\n h1: true, h2: true, h3: true, h4: true, h5: true, h6: true,\n header: true, hgroup: true, hr: true, menu: true, nav: true, ol: true,\n p: true, pre: true, section: true, table: true, ul: true\n },\n rp: {rp: true, rt: true},\n rt: {rp: true, rt: true},\n tbody: {tbody: true, tfoot: true},\n td: {td: true, th: true},\n tfoot: {tbody: true},\n th: {td: true, th: true},\n thead: {tbody: true, tfoot: true},\n tr: {tr: true}\n};\n\nfunction nameChar(ch) {\n return ch == 45 || ch == 46 || ch == 58 || ch >= 65 && ch <= 90 || ch == 95 || ch >= 97 && ch <= 122 || ch >= 161\n}\n\nfunction isSpace(ch) {\n return ch == 9 || ch == 10 || ch == 13 || ch == 32\n}\n\nlet cachedName = null, cachedInput = null, cachedPos = 0;\nfunction tagNameAfter(input, offset) {\n let pos = input.pos + offset;\n if (cachedPos == pos && cachedInput == input) return cachedName\n let next = input.peek(offset);\n while (isSpace(next)) next = input.peek(++offset);\n let name = \"\";\n for (;;) {\n if (!nameChar(next)) break\n name += String.fromCharCode(next);\n next = input.peek(++offset);\n }\n // Undefined to signal there's a <? or <!, null for just missing\n cachedInput = input; cachedPos = pos;\n return cachedName = name ? name.toLowerCase() : next == question || next == bang ? undefined : null\n}\n\nconst lessThan = 60, greaterThan = 62, slash = 47, question = 63, bang = 33, dash = 45;\n\nfunction ElementContext(name, parent) {\n this.name = name;\n this.parent = parent;\n}\n\nconst startTagTerms = [StartTag, StartSelfClosingTag, StartScriptTag, StartStyleTag, StartTextareaTag];\n\nconst elementContext = new ContextTracker({\n start: null,\n shift(context, term, stack, input) {\n return startTagTerms.indexOf(term) > -1 ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n },\n reduce(context, term) {\n return term == Element && context ? context.parent : context\n },\n reuse(context, node, stack, input) {\n let type = node.type.id;\n return type == StartTag || type == OpenTag\n ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n },\n strict: false\n});\n\nconst tagStart = new ExternalTokenizer((input, stack) => {\n if (input.next != lessThan) {\n // End of file, close any open tags\n if (input.next < 0 && stack.context) input.acceptToken(missingCloseTag);\n return\n }\n input.advance();\n let close = input.next == slash;\n if (close) input.advance();\n let name = tagNameAfter(input, 0);\n if (name === undefined) return\n if (!name) return input.acceptToken(close ? IncompleteCloseTag : StartTag)\n\n let parent = stack.context ? stack.context.name : null;\n if (close) {\n if (name == parent) return input.acceptToken(StartCloseTag)\n if (parent && implicitlyClosed[parent]) return input.acceptToken(missingCloseTag, -2)\n if (stack.dialectEnabled(Dialect_noMatch)) return input.acceptToken(NoMatchStartCloseTag)\n for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return\n input.acceptToken(MismatchedStartCloseTag);\n } else {\n if (name == \"script\") return input.acceptToken(StartScriptTag)\n if (name == \"style\") return input.acceptToken(StartStyleTag)\n if (name == \"textarea\") return input.acceptToken(StartTextareaTag)\n if (selfClosers.hasOwnProperty(name)) return input.acceptToken(StartSelfClosingTag)\n if (parent && closeOnOpen[parent] && closeOnOpen[parent][name]) input.acceptToken(missingCloseTag, -1);\n else input.acceptToken(StartTag);\n }\n}, {contextual: true});\n\nconst commentContent = new ExternalTokenizer(input => {\n for (let dashes = 0, i = 0;; i++) {\n if (input.next < 0) {\n if (i) input.acceptToken(commentContent$1);\n break\n }\n if (input.next == dash) {\n dashes++;\n } else if (input.next == greaterThan && dashes >= 2) {\n if (i >= 3) input.acceptToken(commentContent$1, -2);\n break\n } else {\n dashes = 0;\n }\n input.advance();\n }\n});\n\nfunction inForeignElement(context) {\n for (; context; context = context.parent)\n if (context.name == \"svg\" || context.name == \"math\") return true\n return false\n}\n\nconst endTag = new ExternalTokenizer((input, stack) => {\n if (input.next == slash && input.peek(1) == greaterThan) {\n let selfClosing = stack.dialectEnabled(Dialect_selfClosing) || inForeignElement(stack.context);\n input.acceptToken(selfClosing ? SelfClosingEndTag : EndTag, 2);\n } else if (input.next == greaterThan) {\n input.acceptToken(EndTag, 1);\n }\n});\n\nfunction contentTokenizer(tag, textToken, endToken) {\n let lastState = 2 + tag.length;\n return new ExternalTokenizer(input => {\n // state means:\n // - 0 nothing matched\n // - 1 '<' matched\n // - 2 '</' + possibly whitespace matched\n // - 3-(1+tag.length) part of the tag matched\n // - lastState whole tag + possibly whitespace matched\n for (let state = 0, matchedLen = 0, i = 0;; i++) {\n if (input.next < 0) {\n if (i) input.acceptToken(textToken);\n break\n }\n if (state == 0 && input.next == lessThan ||\n state == 1 && input.next == slash ||\n state >= 2 && state < lastState && input.next == tag.charCodeAt(state - 2)) {\n state++;\n matchedLen++;\n } else if ((state == 2 || state == lastState) && isSpace(input.next)) {\n matchedLen++;\n } else if (state == lastState && input.next == greaterThan) {\n if (i > matchedLen)\n input.acceptToken(textToken, -matchedLen);\n else\n input.acceptToken(endToken, -(matchedLen - 2));\n break\n } else if ((input.next == 10 /* '\\n' */ || input.next == 13 /* '\\r' */) && i) {\n input.acceptToken(textToken, 1);\n break\n } else {\n state = matchedLen = 0;\n }\n input.advance();\n }\n })\n}\n\nconst scriptTokens = contentTokenizer(\"script\", scriptText, StartCloseScriptTag);\n\nconst styleTokens = contentTokenizer(\"style\", styleText, StartCloseStyleTag);\n\nconst textareaTokens = contentTokenizer(\"textarea\", textareaText, StartCloseTextareaTag);\n\nconst htmlHighlighting = styleTags({\n \"Text RawText\": tags.content,\n \"StartTag StartCloseTag SelfClosingEndTag EndTag\": tags.angleBracket,\n TagName: tags.tagName,\n \"MismatchedCloseTag/TagName\": [tags.tagName, tags.invalid],\n AttributeName: tags.attributeName,\n \"AttributeValue UnquotedAttributeValue\": tags.attributeValue,\n Is: tags.definitionOperator,\n \"EntityReference CharacterReference\": tags.character,\n Comment: tags.blockComment,\n ProcessingInst: tags.processingInstruction,\n DoctypeDecl: tags.documentMeta\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = LRParser.deserialize({\n version: 14,\n states: \",xOVO!rOOO!WQ#tO'#CqO!]Q#tO'#CzO!bQ#tO'#C}O!gQ#tO'#DQO!lQ#tO'#DSO!qOaO'#CpO!|ObO'#CpO#XOdO'#CpO$eO!rO'#CpOOO`'#Cp'#CpO$lO$fO'#DTO$tQ#tO'#DVO$yQ#tO'#DWOOO`'#Dk'#DkOOO`'#DY'#DYQVO!rOOO%OQ&rO,59]O%ZQ&rO,59fO%fQ&rO,59iO%qQ&rO,59lO%|Q&rO,59nOOOa'#D^'#D^O&XOaO'#CxO&dOaO,59[OOOb'#D_'#D_O&lObO'#C{O&wObO,59[OOOd'#D`'#D`O'POdO'#DOO'[OdO,59[OOO`'#Da'#DaO'dO!rO,59[O'kQ#tO'#DROOO`,59[,59[OOOp'#Db'#DbO'pO$fO,59oOOO`,59o,59oO'xQ#|O,59qO'}Q#|O,59rOOO`-E7W-E7WO(SQ&rO'#CsOOQW'#DZ'#DZO(bQ&rO1G.wOOOa1G.w1G.wOOO`1G/Y1G/YO(mQ&rO1G/QOOOb1G/Q1G/QO(xQ&rO1G/TOOOd1G/T1G/TO)TQ&rO1G/WOOO`1G/W1G/WO)`Q&rO1G/YOOOa-E7[-E7[O)kQ#tO'#CyOOO`1G.v1G.vOOOb-E7]-E7]O)pQ#tO'#C|OOOd-E7^-E7^O)uQ#tO'#DPOOO`-E7_-E7_O)zQ#|O,59mOOOp-E7`-E7`OOO`1G/Z1G/ZOOO`1G/]1G/]OOO`1G/^1G/^O*PQ,UO,59_OOQW-E7X-E7XOOOa7+$c7+$cOOO`7+$t7+$tOOOb7+$l7+$lOOOd7+$o7+$oOOO`7+$r7+$rO*[Q#|O,59eO*aQ#|O,59hO*fQ#|O,59kOOO`1G/X1G/XO*kO7[O'#CvO*|OMhO'#CvOOQW1G.y1G.yOOO`1G/P1G/POOO`1G/S1G/SOOO`1G/V1G/VOOOO'#D['#D[O+_O7[O,59bOOQW,59b,59bOOOO'#D]'#D]O+pOMhO,59bOOOO-E7Y-E7YOOQW1G.|1G.|OOOO-E7Z-E7Z\",\n stateData: \",]~O!^OS~OUSOVPOWQOXROYTO[]O][O^^O`^Oa^Ob^Oc^Ox^O{_O!dZO~OfaO~OfbO~OfcO~OfdO~OfeO~O!WfOPlP!ZlP~O!XiOQoP!ZoP~O!YlORrP!ZrP~OUSOVPOWQOXROYTOZqO[]O][O^^O`^Oa^Ob^Oc^Ox^O!dZO~O!ZrO~P#dO![sO!euO~OfvO~OfwO~OS|OT}OhyO~OS!POT}OhyO~OS!ROT}OhyO~OS!TOT}OhyO~OS}OT}OhyO~O!WfOPlX!ZlX~OP!WO!Z!XO~O!XiOQoX!ZoX~OQ!ZO!Z!XO~O!YlORrX!ZrX~OR!]O!Z!XO~O!Z!XO~P#dOf!_O~O![sO!e!aO~OS!bO~OS!cO~Oi!dOSgXTgXhgX~OS!fOT!gOhyO~OS!hOT!gOhyO~OS!iOT!gOhyO~OS!jOT!gOhyO~OS!gOT!gOhyO~Of!kO~Of!lO~Of!mO~OS!nO~Ok!qO!`!oO!b!pO~OS!rO~OS!sO~OS!tO~Oa!uOb!uOc!uO!`!wO!a!uO~Oa!xOb!xOc!xO!b!wO!c!xO~Oa!uOb!uOc!uO!`!{O!a!uO~Oa!xOb!xOc!xO!b!{O!c!xO~OT~bac!dx{!d~\",\n goto: \"%p!`PPPPPPPPPPPPPPPPPPPP!a!gP!mPP!yP!|#P#S#Y#]#`#f#i#l#r#x!aP!a!aP$O$U$l$r$x%O%U%[%bPPPPPPPP%hX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp\",\n nodeNames: \"⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl\",\n maxTerm: 67,\n context: elementContext,\n nodeProps: [\n [\"closedBy\", -10,1,2,3,7,8,9,10,11,12,13,\"EndTag\",6,\"EndTag SelfClosingEndTag\",-4,21,30,33,36,\"CloseTag\"],\n [\"openedBy\", 4,\"StartTag StartCloseTag\",5,\"StartTag\",-4,29,32,35,37,\"OpenTag\"],\n [\"group\", -9,14,17,18,19,20,39,40,41,42,\"Entity\",16,\"Entity TextContent\",-3,28,31,34,\"TextContent Entity\"],\n [\"isolate\", -11,21,29,30,32,33,35,36,37,38,41,42,\"ltr\",-3,26,27,39,\"\"]\n ],\n propSources: [htmlHighlighting],\n skippedNodes: [0],\n repeatNodeCount: 9,\n tokenData: \"!<p!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs3_sv-_vw3}wxHYx}-_}!OH{!O!P-_!P!Q$q!Q![-_![!]Mz!]!^-_!^!_!$S!_!`!;x!`!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4U-_4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!Z$|c`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!a&X!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!R&bX`P!a`!cpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&Xq'UV`P!cpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}P'pT`POv'kw!^'k!_;'S'k;'S;=`(P<%lO'kP(SP;=`<%l'kp([S!cpOv(Vx;'S(V;'S;=`(h<%lO(Vp(kP;=`<%l(Vq(qP;=`<%l&}a({W`P!a`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t`)jT!a`Or)esv)ew;'S)e;'S;=`)y<%lO)e`)|P;=`<%l)ea*SP;=`<%l(t!Q*^V!a`!cpOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!Q*vP;=`<%l*V!R*|P;=`<%l&XW+UYkWOX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+PW+wP;=`<%l+P!Z+}P;=`<%l$q!a,]``P!a`!cp!^^OX&XXY,QYZ,QZ]&X]^,Q^p&Xpq,Qqr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!_-ljhS`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q[/ebhSkWOX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+PS0rXhSqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0mS1bP;=`<%l0m[1hP;=`<%l/^!V1vchS`P!a`!cpOq&Xqr1krs&}sv1kvw0mwx(tx!P1k!P!Q&X!Q!^1k!^!_*V!_!a&X!a#s1k#s$f&X$f;'S1k;'S;=`3R<%l?Ah1k?Ah?BY&X?BY?Mn1k?MnO&X!V3UP;=`<%l1k!_3[P;=`<%l-_!Z3hV!`h`P!cpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}!_4WihSkWc!ROX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst>]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zbkWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOa!R!R7tP;=`<%l7S!Z8OYkWa!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{ihSkWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbhSkWa!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!V<QchSOp7Sqr;{rs7Sst0mtw;{wx7Sx!P;{!P!Q7S!Q!];{!]!^=]!^!a7S!a#s;{#s$f7S$f;'S;{;'S;=`>P<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXhSa!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhhSkWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TakWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOb!R!RAwP;=`<%lAY!ZBRYkWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhhSkWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbhSkWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbhSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXhSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!bx`P!a`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYlhS`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_khS`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_X`P!a`!cp!eQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZhSfQ`PkW!a`!cpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!a`!cpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!a`!cpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!a`!cpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!a`!cp!dPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!a`!cpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!a`!cpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!a`!cpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!a`!cpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!a`!cpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!a`!cpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!a`!cpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!cpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO{PP!-nP;=`<%l!-Sq!-xS!cp{POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!a`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!a`{POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!a`!cp{POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!a`!cpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!a`!cpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!a`!cpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!a`!cpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!a`!cpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!a`!cpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!a`!cpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!cpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOxPP!7TP;=`<%l!6Vq!7]V!cpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!cpxPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!a`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!a`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!a`xPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!a`!cpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!a`!cpxPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!<TXiS`P!a`!cpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X\",\n tokenizers: [scriptTokens, styleTokens, textareaTokens, endTag, tagStart, commentContent, 0, 1, 2, 3, 4, 5],\n topRules: {\"Document\":[0,15]},\n dialects: {noMatch: 0, selfClosing: 509},\n tokenPrec: 511\n});\n\nfunction getAttrs(openTag, input) {\n let attrs = Object.create(null);\n for (let att of openTag.getChildren(Attribute)) {\n let name = att.getChild(AttributeName), value = att.getChild(AttributeValue) || att.getChild(UnquotedAttributeValue);\n if (name) attrs[input.read(name.from, name.to)] =\n !value ? \"\" : value.type.id == AttributeValue ? input.read(value.from + 1, value.to - 1) : input.read(value.from, value.to);\n }\n return attrs\n}\n\nfunction findTagName(openTag, input) {\n let tagNameNode = openTag.getChild(TagName);\n return tagNameNode ? input.read(tagNameNode.from, tagNameNode.to) : \" \"\n}\n\nfunction maybeNest(node, input, tags) {\n let attrs;\n for (let tag of tags) {\n if (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(node.node.parent.firstChild, input))))\n return {parser: tag.parser}\n }\n return null\n}\n\n// tags?: {\n// tag: string,\n// attrs?: ({[attr: string]: string}) => boolean,\n// parser: Parser\n// }[]\n// attributes?: {\n// name: string,\n// tagName?: string,\n// parser: Parser\n// }[]\n \nfunction configureNesting(tags = [], attributes = []) {\n let script = [], style = [], textarea = [], other = [];\n for (let tag of tags) {\n let array = tag.tag == \"script\" ? script : tag.tag == \"style\" ? style : tag.tag == \"textarea\" ? textarea : other;\n array.push(tag);\n }\n let attrs = attributes.length ? Object.create(null) : null;\n for (let attr of attributes) (attrs[attr.name] || (attrs[attr.name] = [])).push(attr);\n\n return parseMixed((node, input) => {\n let id = node.type.id;\n if (id == ScriptText) return maybeNest(node, input, script)\n if (id == StyleText) return maybeNest(node, input, style)\n if (id == TextareaText) return maybeNest(node, input, textarea)\n\n if (id == Element && other.length) {\n let n = node.node, open = n.firstChild, tagName = open && findTagName(open, input), attrs;\n if (tagName) for (let tag of other) {\n if (tag.tag == tagName && (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(open, input))))) {\n let close = n.lastChild;\n let to = close.type.id == CloseTag ? close.from : n.to;\n if (to > open.to)\n return {parser: tag.parser, overlay: [{from: open.to, to}]}\n }\n }\n }\n\n if (attrs && id == Attribute) {\n let n = node.node, nameNode;\n if (nameNode = n.firstChild) {\n let matches = attrs[input.read(nameNode.from, nameNode.to)];\n if (matches) for (let attr of matches) {\n if (attr.tagName && attr.tagName != findTagName(n.parent, input)) continue\n let value = n.lastChild;\n if (value.type.id == AttributeValue) {\n let from = value.from + 1;\n let last = value.lastChild, to = value.to - (last && last.isError ? 0 : 1);\n if (to > from) return {parser: attr.parser, overlay: [{from, to}]}\n } else if (value.type.id == UnquotedAttributeValue) {\n return {parser: attr.parser, overlay: [{from: value.from, to: value.to}]}\n }\n }\n }\n }\n return null\n })\n}\n\nexport { configureNesting, parser };\n","import { ExternalTokenizer, LRParser, LocalTokenGroup } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst descendantOp = 99,\n Unit = 1,\n callee = 100,\n identifier = 101,\n VariableName = 2;\n\n/* Hand-written tokenizers for CSS tokens that can't be\n expressed by Lezer's built-in tokenizer. */\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197,\n 8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];\nconst colon = 58, parenL = 40, underscore = 95, bracketL = 91, dash = 45, period = 46,\n hash = 35, percent = 37, ampersand = 38, backslash = 92, newline = 10;\n\nfunction isAlpha(ch) { return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 161 }\n\nfunction isDigit(ch) { return ch >= 48 && ch <= 57 }\n\nconst identifiers = new ExternalTokenizer((input, stack) => {\n for (let inside = false, dashes = 0, i = 0;; i++) {\n let {next} = input;\n if (isAlpha(next) || next == dash || next == underscore || (inside && isDigit(next))) {\n if (!inside && (next != dash || i > 0)) inside = true;\n if (dashes === i && next == dash) dashes++;\n input.advance();\n } else if (next == backslash && input.peek(1) != newline) {\n input.advance();\n if (input.next > -1) input.advance();\n inside = true;\n } else {\n if (inside)\n input.acceptToken(next == parenL ? callee : dashes == 2 && stack.canShift(VariableName) ? VariableName : identifier);\n break\n }\n }\n});\n\nconst descendant = new ExternalTokenizer(input => {\n if (space.includes(input.peek(-1))) {\n let {next} = input;\n if (isAlpha(next) || next == underscore || next == hash || next == period ||\n next == bracketL || next == colon && isAlpha(input.peek(1)) ||\n next == dash || next == ampersand)\n input.acceptToken(descendantOp);\n }\n});\n\nconst unitToken = new ExternalTokenizer(input => {\n if (!space.includes(input.peek(-1))) {\n let {next} = input;\n if (next == percent) { input.advance(); input.acceptToken(Unit); }\n if (isAlpha(next)) {\n do { input.advance(); } while (isAlpha(input.next) || isDigit(input.next))\n input.acceptToken(Unit);\n }\n }\n});\n\nconst cssHighlighting = styleTags({\n \"AtKeyword import charset namespace keyframes media supports\": tags.definitionKeyword,\n \"from to selector\": tags.keyword,\n NamespaceName: tags.namespace,\n KeyframeName: tags.labelName,\n KeyframeRangeName: tags.operatorKeyword,\n TagName: tags.tagName,\n ClassName: tags.className,\n PseudoClassName: tags.constant(tags.className),\n IdName: tags.labelName,\n \"FeatureName PropertyName\": tags.propertyName,\n AttributeName: tags.attributeName,\n NumberLiteral: tags.number,\n KeywordQuery: tags.keyword,\n UnaryQueryOp: tags.operatorKeyword,\n \"CallTag ValueName\": tags.atom,\n VariableName: tags.variableName,\n Callee: tags.operatorKeyword,\n Unit: tags.unit,\n \"UniversalSelector NestingSelector\": tags.definitionOperator,\n MatchOp: tags.compareOperator,\n \"ChildOp SiblingOp, LogicOp\": tags.logicOperator,\n BinOp: tags.arithmeticOperator,\n Important: tags.modifier,\n Comment: tags.blockComment,\n ColorLiteral: tags.color,\n \"ParenthesizedContent StringLiteral\": tags.string,\n \":\": tags.punctuation,\n \"PseudoOp #\": tags.derefOperator,\n \"; ,\": tags.separator,\n \"( )\": tags.paren,\n \"[ ]\": tags.squareBracket,\n \"{ }\": tags.brace\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_callee = {__proto__:null,lang:32, \"nth-child\":32, \"nth-last-child\":32, \"nth-of-type\":32, \"nth-last-of-type\":32, dir:32, \"host-context\":32, url:60, \"url-prefix\":60, domain:60, regexp:60, selector:138};\nconst spec_AtKeyword = {__proto__:null,\"@import\":118, \"@media\":142, \"@charset\":146, \"@namespace\":150, \"@keyframes\":156, \"@supports\":168};\nconst spec_identifier = {__proto__:null,not:132, only:132};\nconst parser = LRParser.deserialize({\n version: 14,\n states: \":jQYQ[OOO#_Q[OOP#fOWOOOOQP'#Cd'#CdOOQP'#Cc'#CcO#kQ[O'#CfO$_QXO'#CaO$fQ[O'#ChO$qQ[O'#DTO$vQ[O'#DWOOQP'#Em'#EmO${QdO'#DgO%jQ[O'#DtO${QdO'#DvO%{Q[O'#DxO&WQ[O'#D{O&`Q[O'#ERO&nQ[O'#ETOOQS'#El'#ElOOQS'#EW'#EWQYQ[OOO&uQXO'#CdO'jQWO'#DcO'oQWO'#EsO'zQ[O'#EsQOQWOOP(UO#tO'#C_POOO)C@[)C@[OOQP'#Cg'#CgOOQP,59Q,59QO#kQ[O,59QO(aQ[O'#E[O({QWO,58{O)TQ[O,59SO$qQ[O,59oO$vQ[O,59rO(aQ[O,59uO(aQ[O,59wO(aQ[O,59xO)`Q[O'#DbOOQS,58{,58{OOQP'#Ck'#CkOOQO'#DR'#DROOQP,59S,59SO)gQWO,59SO)lQWO,59SOOQP'#DV'#DVOOQP,59o,59oOOQO'#DX'#DXO)qQ`O,59rOOQS'#Cp'#CpO${QdO'#CqO)yQvO'#CsO+ZQtO,5:ROOQO'#Cx'#CxO)lQWO'#CwO+oQWO'#CyO+tQ[O'#DOOOQS'#Ep'#EpOOQO'#Dj'#DjO+|Q[O'#DqO,[QWO'#EtO&`Q[O'#DoO,jQWO'#DrOOQO'#Eu'#EuO)OQWO,5:`O,oQpO,5:bOOQS'#Dz'#DzO,wQWO,5:dO,|Q[O,5:dOOQO'#D}'#D}O-UQWO,5:gO-ZQWO,5:mO-cQWO,5:oOOQS-E8U-E8UO-kQdO,59}O-{Q[O'#E^O.YQWO,5;_O.YQWO,5;_POOO'#EV'#EVP.eO#tO,58yPOOO,58y,58yOOQP1G.l1G.lO/[QXO,5:vOOQO-E8Y-E8YOOQS1G.g1G.gOOQP1G.n1G.nO)gQWO1G.nO)lQWO1G.nOOQP1G/Z1G/ZO/iQ`O1G/^O0SQXO1G/aO0jQXO1G/cO1QQXO1G/dO1hQWO,59|O1mQ[O'#DSO1tQdO'#CoOOQP1G/^1G/^O${QdO1G/^O1{QpO,59]OOQS,59_,59_O${QdO,59aO2TQWO1G/mOOQS,59c,59cO2YQ!bO,59eOOQS'#DP'#DPOOQS'#EY'#EYO2eQ[O,59jOOQS,59j,59jO2mQWO'#DjO2xQWO,5:VO2}QWO,5:]O&`Q[O,5:XO&`Q[O'#E_O3VQWO,5;`O3bQWO,5:ZO(aQ[O,5:^OOQS1G/z1G/zOOQS1G/|1G/|OOQS1G0O1G0OO3sQWO1G0OO3xQdO'#EOOOQS1G0R1G0ROOQS1G0X1G0XOOQS1G0Z1G0ZO4TQtO1G/iOOQO1G/i1G/iOOQO,5:x,5:xO4kQ[O,5:xOOQO-E8[-E8[O4xQWO1G0yPOOO-E8T-E8TPOOO1G.e1G.eOOQP7+$Y7+$YOOQP7+$x7+$xO${QdO7+$xOOQS1G/h1G/hO5TQXO'#ErO5[QWO,59nO5aQtO'#EXO6XQdO'#EoO6cQWO,59ZO6hQpO7+$xOOQS1G.w1G.wOOQS1G.{1G.{OOQS7+%X7+%XOOQS1G/P1G/PO6pQWO1G/POOQS-E8W-E8WOOQS1G/U1G/UO${QdO1G/qOOQO1G/w1G/wOOQO1G/s1G/sO6uQWO,5:yOOQO-E8]-E8]O7TQXO1G/xOOQS7+%j7+%jO7[QYO'#CsOOQO'#EQ'#EQO7gQ`O'#EPOOQO'#EP'#EPO7rQWO'#E`O7zQdO,5:jOOQS,5:j,5:jO8VQtO'#E]O${QdO'#E]O9WQdO7+%TOOQO7+%T7+%TOOQO1G0d1G0dO9kQpO<<HdO9sQWO,5;^OOQP1G/Y1G/YOOQS-E8V-E8VO${QdO'#EZO9{QWO,5;ZOOQT1G.u1G.uOOQP<<Hd<<HdOOQS7+$k7+$kO:TQdO7+%]OOQO7+%d7+%dOOQO,5:k,5:kO3{QdO'#EaO7rQWO,5:zOOQS,5:z,5:zOOQS-E8^-E8^OOQS1G0U1G0UO:[QtO,5:wOOQS-E8Z-E8ZOOQO<<Ho<<HoOOQPAN>OAN>OO;]QdO,5:uOOQO-E8X-E8XOOQO<<Hw<<HwOOQO,5:{,5:{OOQO-E8_-E8_OOQS1G0f1G0f\",\n stateData: \";o~O#ZOS#[QQ~OUYOXYO]VO^VOqXOxWO![aO!]ZO!i[O!k]O!m^O!p_O!v`O#XRO#bTO~OQfOUYOXYO]VO^VOqXOxWO![aO!]ZO!i[O!k]O!m^O!p_O!v`O#XeO#bTO~O#U#gP~P!ZO#[jO~O#XlO~O]qO^qOqsOtoOxrO!OtO!RvO#VuO#bnO~O!TwO~P#pO`}O#WzO#XyO~O#X!OO~O#X!QO~OQ![Ob!TOf![Oh![On!YOq!ZO#W!WO#X!SO#e!UO~Ob!^O!d!`O!g!aO#X!]O!T#hP~Oh!fOn!YO#X!eO~Oh!hO#X!hO~Ob!^O!d!`O!g!aO#X!]O~O!Y#hP~P%jO]WX]!WX^WXqWXtWXxWX!OWX!RWX!TWX#VWX#bWX~O]!mO~O!Y!nO#U#gX!S#gX~O#U#gX!S#gX~P!ZO#]!qO#^!qO#_!sO~OUYOXYO]VO^VOqXOxWO#XRO#bTO~OtoO!TwO~O`!zO#WzO#XyO~O!S#gP~P!ZOb#RO~Ob#SO~Op#TO|#UO~OP#WObgXjgX!YgX!dgX!ggX#XgXagXQgXfgXhgXngXqgXtgX!XgX#UgX#WgX#egXpgX!SgX~Ob!^Oj#XO!d!`O!g!aO#X!]O!Y#hP~Ob#[O~Op#`O#X#]O~Ob!^O!d!`O!g!aO#X#aO~Ot#eO!b#dO!T#hX!Y#hX~Ob#hO~Oj#XO!Y#jO~O!Y#kO~Oh#lOn!YO~O!T#mO~O!TwO!b#dO~O!TwO!Y#pO~O!X#rO!Y!Va#U!Va!S!Va~P${O!Y#QX#U#QX!S#QX~P!ZO!Y!nO#U#ga!S#ga~O#]!qO#^!qO#_#xO~O]qO^qOqsOxrO!OtO!RvO#VuO#bnO~Ot#Oa!T#Oaa#Oa~P.pOp#zO|#{O~O]qO^qOqsOxrO#bnO~Ot}i!O}i!R}i!T}i#V}ia}i~P/qOt!Pi!O!Pi!R!Pi!T!Pi#V!Pia!Pi~P/qOt!Qi!O!Qi!R!Qi!T!Qi#V!Qia!Qi~P/qO!S#|O~Oa#fP~P(aOa#cP~P${Oa$TOj#XO~O!Y$VO~Oa$WOh$XOo$XO~Op$ZO#X#]O~O]!`Xa!^X!b!^X~O]$[O~Oa$]O!b#dO~Ot#eO!T#ha!Y#ha~O!b#dOt!ca!T!ca!Y!caa!ca~O!Y$bO~O!S$iO#X$dO#e$cO~Oj#XOt$kO!X$mO!Y!Vi#U!Vi!S!Vi~P${O!Y#Qa#U#Qa!S#Qa~P!ZO!Y!nO#U#gi!S#gi~Oa#fX~P#pOa$qO~Oj#XOQ!{Xa!{Xb!{Xf!{Xh!{Xn!{Xq!{Xt!{X#W!{X#X!{X#e!{X~Ot$sOa#cX~P${Oa$uO~Oj#XOp$vO~Oa$wO~O!b#dOt#Ra!T#Ra!Y#Ra~Oa$yO~P.pOP#WOtgX!TgX~O#e$cOt!sX!T!sX~Ot${O!TwO~O!S%PO#X$dO#e$cO~Oj#XOQ#PXb#PXf#PXh#PXn#PXq#PXt#PX!X#PX!Y#PX#U#PX#W#PX#X#PX#e#PX!S#PX~Ot$kO!X%SO!Y!Vq#U!Vq!S!Vq~P${Oj#XOp%TO~OtoOa#fa~Ot$sOa#ca~Oa%WO~P${Oj#XOQ#Pab#Paf#Pah#Pan#Paq#Pat#Pa!X#Pa!Y#Pa#U#Pa#W#Pa#X#Pa#e#Pa!S#Pa~Oa!}at!}a~P${O#Zo#[#ej!R#e~\",\n goto: \"-g#jPPP#kP#nP#w$WP#w$g#wPP$mPPP$s$|$|P%`P$|P$|%z&^PPPP$|&vP&z'Q#wP'W#w'^P#wP#w#wPPP'd'y(WPP#nPP(_(_(i(_P(_P(_(_P#nP#nP#nP(l#nP(o(r(u(|#nP#nP)R)X)h)v)|*S*^*d*n*t*zPPPPPPPPPP+Q+ZP+v+yP,o,r,x-RRkQ_bOPdhw!n#tkYOPdhotuvw!n#R#h#tkSOPdhotuvw!n#R#h#tQmTR!tnQ{VR!xqQ!x}Q#Z!XR#y!zq![Z]!T!m#S#U#X#q#{$Q$[$k$l$s$x%Up![Z]!T!m#S#U#X#q#{$Q$[$k$l$s$x%UU$f#m$h${R$z$eq!XZ]!T!m#S#U#X#q#{$Q$[$k$l$s$x%Up![Z]!T!m#S#U#X#q#{$Q$[$k$l$s$x%UQ!f^R#l!gT#^!Z#_Q|VR!yqQ!x|R#y!yQ!PWR!{rQ!RXR!|sQxUQ!wpQ#i!cQ#o!jQ#p!kQ$}$gR%Z$|SgPwQ!phQ#s!nR$n#tZfPhw!n#ta!b[`a!V!^!`#d#eR#b!^R!g^R!i_R#n!iS$g#m$hR%X${V$e#m$h${Q!rjR#w!rQdOShPwU!ldh#tR#t!nQ$Q#SU$r$Q$x%UQ$x$[R%U$sQ#_!ZR$Y#_Q$t$QR%V$tQpUS!vp$pR$p#}Q$l#qR%R$lQ!ogS#u!o#vR#v!pQ#f!_R$`#fQ$h#mR%O$hQ$|$gR%Y$|_cOPdhw!n#t^UOPdhw!n#tQ!uoQ!}tQ#OuQ#PvQ#}#RR$a#hR$R#SQ!VZQ!d]Q#V!TQ#q!m[$P#S$Q$[$s$x%UQ$S#UQ$U#XS$j#q$lQ$o#{R%Q$kR$O#RQiPR#QwQ!c[Q!kaR#Y!VU!_[a!VQ!j`Q#c!^Q#g!`Q$^#dR$_#e\",\n nodeNames: \"⚠ Unit VariableName Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee CallLiteral CallTag ParenthesizedContent ] [ LineNames LineName , PseudoClassName ArgList IdSelector # IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp } { Block Declaration PropertyName Important ; ImportStatement AtKeyword import KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports AtRule Styles\",\n maxTerm: 117,\n nodeProps: [\n [\"isolate\", -2,3,24,\"\"],\n [\"openedBy\", 17,\"(\",32,\"[\",50,\"{\"],\n [\"closedBy\", 18,\")\",33,\"]\",51,\"}\"]\n ],\n propSources: [cssHighlighting],\n skippedNodes: [0,3,87],\n repeatNodeCount: 11,\n tokenData: \"J^~R!^OX$}X^%u^p$}pq%uqr)Xrs.Rst/utu6duv$}vw7^wx7oxy9^yz9oz{9t{|:_|}?Q}!O?c!O!P@Q!P!Q@i!Q![Ab![!]B]!]!^CX!^!_$}!_!`Cj!`!aC{!a!b$}!b!cDw!c!}$}!}#OFa#O#P$}#P#QFr#Q#R6d#R#T$}#T#UGT#U#c$}#c#dHf#d#o$}#o#pH{#p#q6d#q#rI^#r#sIo#s#y$}#y#z%u#z$f$}$f$g%u$g#BY$}#BY#BZ%u#BZ$IS$}$IS$I_%u$I_$I|$}$I|$JO%u$JO$JT$}$JT$JU%u$JU$KV$}$KV$KW%u$KW&FU$}&FU&FV%u&FV;'S$};'S;=`JW<%lO$}`%QSOy%^z;'S%^;'S;=`%o<%lO%^`%cSo`Oy%^z;'S%^;'S;=`%o<%lO%^`%rP;=`<%l%^~%zh#Z~OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^~'mh#Z~o`OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^l)[UOy%^z#]%^#]#^)n#^;'S%^;'S;=`%o<%lO%^l)sUo`Oy%^z#a%^#a#b*V#b;'S%^;'S;=`%o<%lO%^l*[Uo`Oy%^z#d%^#d#e*n#e;'S%^;'S;=`%o<%lO%^l*sUo`Oy%^z#c%^#c#d+V#d;'S%^;'S;=`%o<%lO%^l+[Uo`Oy%^z#f%^#f#g+n#g;'S%^;'S;=`%o<%lO%^l+sUo`Oy%^z#h%^#h#i,V#i;'S%^;'S;=`%o<%lO%^l,[Uo`Oy%^z#T%^#T#U,n#U;'S%^;'S;=`%o<%lO%^l,sUo`Oy%^z#b%^#b#c-V#c;'S%^;'S;=`%o<%lO%^l-[Uo`Oy%^z#h%^#h#i-n#i;'S%^;'S;=`%o<%lO%^l-uS!X[o`Oy%^z;'S%^;'S;=`%o<%lO%^~.UWOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o<%lO.R~.sOh~~.vRO;'S.R;'S;=`/P;=`O.R~/SXOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o;=`<%l.R<%lO.R~/rP;=`<%l.Rn/zYxQOy%^z!Q%^!Q![0j![!c%^!c!i0j!i#T%^#T#Z0j#Z;'S%^;'S;=`%o<%lO%^l0oYo`Oy%^z!Q%^!Q![1_![!c%^!c!i1_!i#T%^#T#Z1_#Z;'S%^;'S;=`%o<%lO%^l1dYo`Oy%^z!Q%^!Q![2S![!c%^!c!i2S!i#T%^#T#Z2S#Z;'S%^;'S;=`%o<%lO%^l2ZYf[o`Oy%^z!Q%^!Q![2y![!c%^!c!i2y!i#T%^#T#Z2y#Z;'S%^;'S;=`%o<%lO%^l3QYf[o`Oy%^z!Q%^!Q![3p![!c%^!c!i3p!i#T%^#T#Z3p#Z;'S%^;'S;=`%o<%lO%^l3uYo`Oy%^z!Q%^!Q![4e![!c%^!c!i4e!i#T%^#T#Z4e#Z;'S%^;'S;=`%o<%lO%^l4lYf[o`Oy%^z!Q%^!Q![5[![!c%^!c!i5[!i#T%^#T#Z5[#Z;'S%^;'S;=`%o<%lO%^l5aYo`Oy%^z!Q%^!Q![6P![!c%^!c!i6P!i#T%^#T#Z6P#Z;'S%^;'S;=`%o<%lO%^l6WSf[o`Oy%^z;'S%^;'S;=`%o<%lO%^d6gUOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^d7QS|So`Oy%^z;'S%^;'S;=`%o<%lO%^b7cSXQOy%^z;'S%^;'S;=`%o<%lO%^~7rWOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W<%lO7o~8_RO;'S7o;'S;=`8h;=`O7o~8kXOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W;=`<%l7o<%lO7o~9ZP;=`<%l7on9cSb^Oy%^z;'S%^;'S;=`%o<%lO%^~9tOa~n9{UUQjWOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^n:fWjW!RQOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^l;TUo`Oy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^l;nYo`#e[Oy%^z!Q%^!Q![;g![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^l<cYo`Oy%^z{%^{|=R|}%^}!O=R!O!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=WUo`Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=qUo`#e[Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l>[[o`#e[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^n?VSt^Oy%^z;'S%^;'S;=`%o<%lO%^l?hWjWOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^n@VU#bQOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^~@nTjWOy%^z{@}{;'S%^;'S;=`%o<%lO%^~AUSo`#[~Oy%^z;'S%^;'S;=`%o<%lO%^lAg[#e[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^bBbU]QOy%^z![%^![!]Bt!];'S%^;'S;=`%o<%lO%^bB{S^Qo`Oy%^z;'S%^;'S;=`%o<%lO%^nC^S!Y^Oy%^z;'S%^;'S;=`%o<%lO%^dCoS|SOy%^z;'S%^;'S;=`%o<%lO%^bDQU!OQOy%^z!`%^!`!aDd!a;'S%^;'S;=`%o<%lO%^bDkS!OQo`Oy%^z;'S%^;'S;=`%o<%lO%^bDzWOy%^z!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^bEk[![Qo`Oy%^z}%^}!OEd!O!Q%^!Q![Ed![!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^nFfSq^Oy%^z;'S%^;'S;=`%o<%lO%^nFwSp^Oy%^z;'S%^;'S;=`%o<%lO%^bGWUOy%^z#b%^#b#cGj#c;'S%^;'S;=`%o<%lO%^bGoUo`Oy%^z#W%^#W#XHR#X;'S%^;'S;=`%o<%lO%^bHYS!bQo`Oy%^z;'S%^;'S;=`%o<%lO%^bHiUOy%^z#f%^#f#gHR#g;'S%^;'S;=`%o<%lO%^fIQS!TUOy%^z;'S%^;'S;=`%o<%lO%^nIcS!S^Oy%^z;'S%^;'S;=`%o<%lO%^fItU!RQOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^`JZP;=`<%l$}\",\n tokenizers: [descendant, unitToken, identifiers, 1, 2, 3, 4, new LocalTokenGroup(\"m~RRYZ[z{a~~g~aO#^~~dP!P!Qg~lO#_~~\", 28, 105)],\n topRules: {\"StyleSheet\":[0,4],\"Styles\":[1,86]},\n specialized: [{term: 100, get: (value) => spec_callee[value] || -1},{term: 58, get: (value) => spec_AtKeyword[value] || -1},{term: 101, get: (value) => spec_identifier[value] || -1}],\n tokenPrec: 1219\n});\n\nexport { parser };\n","import { parser } from '@lezer/css';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\nlet _properties = null;\nfunction properties() {\n if (!_properties && typeof document == \"object\" && document.body) {\n let { style } = document.body, names = [], seen = new Set;\n for (let prop in style)\n if (prop != \"cssText\" && prop != \"cssFloat\") {\n if (typeof style[prop] == \"string\") {\n if (/[A-Z]/.test(prop))\n prop = prop.replace(/[A-Z]/g, ch => \"-\" + ch.toLowerCase());\n if (!seen.has(prop)) {\n names.push(prop);\n seen.add(prop);\n }\n }\n }\n _properties = names.sort().map(name => ({ type: \"property\", label: name, apply: name + \": \" }));\n }\n return _properties || [];\n}\nconst pseudoClasses = /*@__PURE__*/[\n \"active\", \"after\", \"any-link\", \"autofill\", \"backdrop\", \"before\",\n \"checked\", \"cue\", \"default\", \"defined\", \"disabled\", \"empty\",\n \"enabled\", \"file-selector-button\", \"first\", \"first-child\",\n \"first-letter\", \"first-line\", \"first-of-type\", \"focus\",\n \"focus-visible\", \"focus-within\", \"fullscreen\", \"has\", \"host\",\n \"host-context\", \"hover\", \"in-range\", \"indeterminate\", \"invalid\",\n \"is\", \"lang\", \"last-child\", \"last-of-type\", \"left\", \"link\", \"marker\",\n \"modal\", \"not\", \"nth-child\", \"nth-last-child\", \"nth-last-of-type\",\n \"nth-of-type\", \"only-child\", \"only-of-type\", \"optional\", \"out-of-range\",\n \"part\", \"placeholder\", \"placeholder-shown\", \"read-only\", \"read-write\",\n \"required\", \"right\", \"root\", \"scope\", \"selection\", \"slotted\", \"target\",\n \"target-text\", \"valid\", \"visited\", \"where\"\n].map(name => ({ type: \"class\", label: name }));\nconst values = /*@__PURE__*/[\n \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"after-white-space\",\n \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\", \"always\",\n \"antialiased\", \"appworkspace\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\",\n \"avoid-page\", \"avoid-region\", \"axis-pan\", \"background\", \"backwards\", \"baseline\", \"below\",\n \"bidi-override\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\",\n \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\",\n \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"capitalize\",\n \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\", \"cell\", \"center\", \"checkbox\", \"circle\",\n \"cjk-decimal\", \"clear\", \"clip\", \"close-quote\", \"col-resize\", \"collapse\", \"color\", \"color-burn\",\n \"color-dodge\", \"column\", \"column-reverse\", \"compact\", \"condensed\", \"contain\", \"content\",\n \"contents\", \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\",\n \"crop\", \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\", \"destination-in\",\n \"destination-out\", \"destination-over\", \"difference\", \"disc\", \"discard\", \"disclosure-closed\",\n \"disclosure-open\", \"document\", \"dot-dash\", \"dot-dot-dash\", \"dotted\", \"double\", \"down\", \"e-resize\",\n \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\", \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\",\n \"ethiopic-abegede-gez\", \"ethiopic-halehame-aa-er\", \"ethiopic-halehame-gez\", \"ew-resize\", \"exclusion\",\n \"expanded\", \"extends\", \"extra-condensed\", \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fill-box\",\n \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\", \"forwards\", \"from\",\n \"geometricPrecision\", \"graytext\", \"grid\", \"groove\", \"hand\", \"hard-light\", \"help\", \"hidden\", \"hide\",\n \"higher\", \"highlight\", \"highlighttext\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\",\n \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\", \"infobackground\", \"infotext\",\n \"inherit\", \"initial\", \"inline\", \"inline-axis\", \"inline-block\", \"inline-flex\", \"inline-grid\",\n \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\", \"italic\", \"justify\", \"keep-all\",\n \"landscape\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\", \"line-through\", \"linear\",\n \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\", \"local\", \"logical\", \"loud\", \"lower\",\n \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\", \"lowercase\", \"ltr\", \"luminosity\", \"manipulation\",\n \"match\", \"matrix\", \"matrix3d\", \"medium\", \"menu\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n \"mix\", \"monospace\", \"move\", \"multiple\", \"multiple_mask_images\", \"multiply\", \"n-resize\", \"narrower\",\n \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\", \"no-open-quote\", \"no-repeat\", \"none\",\n \"normal\", \"not-allowed\", \"nowrap\", \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\",\n \"oblique\", \"opacity\", \"open-quote\", \"optimizeLegibility\", \"optimizeSpeed\", \"outset\", \"outside\",\n \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\", \"painted\", \"page\", \"paused\",\n \"perspective\", \"pinch-zoom\", \"plus-darker\", \"plus-lighter\", \"pointer\", \"polygon\", \"portrait\",\n \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\", \"progress\", \"push-button\", \"radial-gradient\", \"radio\",\n \"read-only\", \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\", \"relative\", \"repeat\",\n \"repeating-linear-gradient\", \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\", \"rotateZ\", \"round\",\n \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\", \"s-resize\", \"sans-serif\", \"saturation\",\n \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\", \"scroll\", \"scrollbar\", \"scroll-position\",\n \"se-resize\", \"self-start\", \"self-end\", \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\",\n \"single\", \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\", \"small\", \"small-caps\",\n \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"source-atop\", \"source-in\", \"source-out\",\n \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\", \"start\",\n \"static\", \"status-bar\", \"stretch\", \"stroke\", \"stroke-box\", \"sub\", \"subpixel-antialiased\", \"svg_masks\",\n \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\", \"table-caption\", \"table-cell\",\n \"table-column\", \"table-column-group\", \"table-footer-group\", \"table-header-group\", \"table-row\",\n \"table-row-group\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thick\", \"thin\",\n \"threeddarkshadow\", \"threedface\", \"threedhighlight\", \"threedlightshadow\", \"threedshadow\", \"to\", \"top\",\n \"transform\", \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\", \"transparent\",\n \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unidirectional-pan\", \"unset\", \"up\", \"upper-latin\",\n \"uppercase\", \"url\", \"var\", \"vertical\", \"vertical-text\", \"view-box\", \"visible\", \"visibleFill\",\n \"visiblePainted\", \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\", \"window\", \"windowframe\",\n \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\", \"xx-large\", \"xx-small\"\n].map(name => ({ type: \"keyword\", label: name })).concat(/*@__PURE__*/[\n \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\",\n \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\",\n \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\",\n \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\",\n \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n \"whitesmoke\", \"yellow\", \"yellowgreen\"\n].map(name => ({ type: \"constant\", label: name })));\nconst tags = /*@__PURE__*/[\n \"a\", \"abbr\", \"address\", \"article\", \"aside\", \"b\", \"bdi\", \"bdo\", \"blockquote\", \"body\",\n \"br\", \"button\", \"canvas\", \"caption\", \"cite\", \"code\", \"col\", \"colgroup\", \"dd\", \"del\",\n \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"dt\", \"em\", \"figcaption\", \"figure\", \"footer\",\n \"form\", \"header\", \"hgroup\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hr\", \"html\", \"i\", \"iframe\",\n \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"main\", \"meter\", \"nav\", \"ol\", \"output\",\n \"p\", \"pre\", \"ruby\", \"section\", \"select\", \"small\", \"source\", \"span\", \"strong\", \"sub\", \"summary\",\n \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"tr\", \"u\", \"ul\"\n].map(name => ({ type: \"type\", label: name }));\nconst atRules = /*@__PURE__*/[\n \"@charset\", \"@color-profile\", \"@container\", \"@counter-style\", \"@font-face\", \"@font-feature-values\",\n \"@font-palette-values\", \"@import\", \"@keyframes\", \"@layer\", \"@media\", \"@namespace\", \"@page\",\n \"@position-try\", \"@property\", \"@scope\", \"@starting-style\", \"@supports\", \"@view-transition\"\n].map(label => ({ type: \"keyword\", label }));\nconst identifier = /^(\\w[\\w-]*|-\\w[\\w-]*|)$/, variable = /^-(-[\\w-]*)?$/;\nfunction isVarArg(node, doc) {\n var _a;\n if (node.name == \"(\" || node.type.isError)\n node = node.parent || node;\n if (node.name != \"ArgList\")\n return false;\n let callee = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.firstChild;\n if ((callee === null || callee === void 0 ? void 0 : callee.name) != \"Callee\")\n return false;\n return doc.sliceString(callee.from, callee.to) == \"var\";\n}\nconst VariablesByNode = /*@__PURE__*/new NodeWeakMap();\nconst declSelector = [\"Declaration\"];\nfunction astTop(node) {\n for (let cur = node;;) {\n if (cur.type.isTop)\n return cur;\n if (!(cur = cur.parent))\n return node;\n }\n}\nfunction variableNames(doc, node, isVariable) {\n if (node.to - node.from > 4096) {\n let known = VariablesByNode.get(node);\n if (known)\n return known;\n let result = [], seen = new Set, cursor = node.cursor(IterMode.IncludeAnonymous);\n if (cursor.firstChild())\n do {\n for (let option of variableNames(doc, cursor.node, isVariable))\n if (!seen.has(option.label)) {\n seen.add(option.label);\n result.push(option);\n }\n } while (cursor.nextSibling());\n VariablesByNode.set(node, result);\n return result;\n }\n else {\n let result = [], seen = new Set;\n node.cursor().iterate(node => {\n var _a;\n if (isVariable(node) && node.matchContext(declSelector) && ((_a = node.node.nextSibling) === null || _a === void 0 ? void 0 : _a.name) == \":\") {\n let name = doc.sliceString(node.from, node.to);\n if (!seen.has(name)) {\n seen.add(name);\n result.push({ label: name, type: \"variable\" });\n }\n }\n });\n return result;\n }\n}\n/**\nCreate a completion source for a CSS dialect, providing a\npredicate for determining what kind of syntax node can act as a\ncompletable variable. This is used by language modes like Sass and\nLess to reuse this package's completion logic.\n*/\nconst defineCSSCompletionSource = (isVariable) => context => {\n let { state, pos } = context, node = syntaxTree(state).resolveInner(pos, -1);\n let isDash = node.type.isError && node.from == node.to - 1 && state.doc.sliceString(node.from, node.to) == \"-\";\n if (node.name == \"PropertyName\" ||\n (isDash || node.name == \"TagName\") && /^(Block|Styles)$/.test(node.resolve(node.to).name))\n return { from: node.from, options: properties(), validFor: identifier };\n if (node.name == \"ValueName\")\n return { from: node.from, options: values, validFor: identifier };\n if (node.name == \"PseudoClassName\")\n return { from: node.from, options: pseudoClasses, validFor: identifier };\n if (isVariable(node) || (context.explicit || isDash) && isVarArg(node, state.doc))\n return { from: isVariable(node) || isDash ? node.from : pos,\n options: variableNames(state.doc, astTop(node), isVariable),\n validFor: variable };\n if (node.name == \"TagName\") {\n for (let { parent } = node; parent; parent = parent.parent)\n if (parent.name == \"Block\")\n return { from: node.from, options: properties(), validFor: identifier };\n return { from: node.from, options: tags, validFor: identifier };\n }\n if (node.name == \"AtKeyword\")\n return { from: node.from, options: atRules, validFor: identifier };\n if (!context.explicit)\n return null;\n let above = node.resolve(pos), before = above.childBefore(pos);\n if (before && before.name == \":\" && above.name == \"PseudoClassSelector\")\n return { from: pos, options: pseudoClasses, validFor: identifier };\n if (before && before.name == \":\" && above.name == \"Declaration\" || above.name == \"ArgList\")\n return { from: pos, options: values, validFor: identifier };\n if (above.name == \"Block\" || above.name == \"Styles\")\n return { from: pos, options: properties(), validFor: identifier };\n return null;\n};\n/**\nCSS property, variable, and value keyword completion source.\n*/\nconst cssCompletionSource = /*@__PURE__*/defineCSSCompletionSource(n => n.name == \"VariableName\");\n\n/**\nA language provider based on the [Lezer CSS\nparser](https://github.com/lezer-parser/css), extended with\nhighlighting and indentation information.\n*/\nconst cssLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"css\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Declaration: /*@__PURE__*/continuedIndent()\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Block KeyframeList\": foldInside\n })\n ]\n }),\n languageData: {\n commentTokens: { block: { open: \"/*\", close: \"*/\" } },\n indentOnInput: /^\\s*\\}$/,\n wordChars: \"-\"\n }\n});\n/**\nLanguage support for CSS.\n*/\nfunction css() {\n return new LanguageSupport(cssLanguage, cssLanguage.data.of({ autocomplete: cssCompletionSource }));\n}\n\nexport { css, cssCompletionSource, cssLanguage, defineCSSCompletionSource };\n","import { ContextTracker, ExternalTokenizer, LRParser, LocalTokenGroup } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst noSemi = 314,\n noSemiType = 315,\n incdec = 1,\n incdecPrefix = 2,\n questionDot = 3,\n JSXStartTag = 4,\n insertSemi = 316,\n spaces = 318,\n newline = 319,\n LineComment = 5,\n BlockComment = 6,\n Dialect_jsx = 0;\n\n/* Hand-written tokenizers for JavaScript tokens that can't be\n expressed by lezer's built-in tokenizer. */\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200,\n 8201, 8202, 8232, 8233, 8239, 8287, 12288];\n\nconst braceR = 125, semicolon = 59, slash = 47, star = 42, plus = 43, minus = 45, lt = 60, comma = 44,\n question = 63, dot = 46, bracketL = 91;\n\nconst trackNewline = new ContextTracker({\n start: false,\n shift(context, term) {\n return term == LineComment || term == BlockComment || term == spaces ? context : term == newline\n },\n strict: false\n});\n\nconst insertSemicolon = new ExternalTokenizer((input, stack) => {\n let {next} = input;\n if (next == braceR || next == -1 || stack.context)\n input.acceptToken(insertSemi);\n}, {contextual: true, fallback: true});\n\nconst noSemicolon = new ExternalTokenizer((input, stack) => {\n let {next} = input, after;\n if (space.indexOf(next) > -1) return\n if (next == slash && ((after = input.peek(1)) == slash || after == star)) return\n if (next != braceR && next != semicolon && next != -1 && !stack.context)\n input.acceptToken(noSemi);\n}, {contextual: true});\n\nconst noSemicolonType = new ExternalTokenizer((input, stack) => {\n if (input.next == bracketL && !stack.context) input.acceptToken(noSemiType);\n}, {contextual: true});\n\nconst operatorToken = new ExternalTokenizer((input, stack) => {\n let {next} = input;\n if (next == plus || next == minus) {\n input.advance();\n if (next == input.next) {\n input.advance();\n let mayPostfix = !stack.context && stack.canShift(incdec);\n input.acceptToken(mayPostfix ? incdec : incdecPrefix);\n }\n } else if (next == question && input.peek(1) == dot) {\n input.advance(); input.advance();\n if (input.next < 48 || input.next > 57) // No digit after\n input.acceptToken(questionDot);\n }\n}, {contextual: true});\n\nfunction identifierChar(ch, start) {\n return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch == 95 || ch >= 192 ||\n !start && ch >= 48 && ch <= 57\n}\n\nconst jsx = new ExternalTokenizer((input, stack) => {\n if (input.next != lt || !stack.dialectEnabled(Dialect_jsx)) return\n input.advance();\n if (input.next == slash) return\n // Scan for an identifier followed by a comma or 'extends', don't\n // treat this as a start tag if present.\n let back = 0;\n while (space.indexOf(input.next) > -1) { input.advance(); back++; }\n if (identifierChar(input.next, true)) {\n input.advance();\n back++;\n while (identifierChar(input.next, false)) { input.advance(); back++; }\n while (space.indexOf(input.next) > -1) { input.advance(); back++; }\n if (input.next == comma) return\n for (let i = 0;; i++) {\n if (i == 7) {\n if (!identifierChar(input.next, true)) return\n break\n }\n if (input.next != \"extends\".charCodeAt(i)) break\n input.advance();\n back++;\n }\n }\n input.acceptToken(JSXStartTag, -back);\n});\n\nconst jsHighlight = styleTags({\n \"get set async static\": tags.modifier,\n \"for while do if else switch try catch finally return throw break continue default case\": tags.controlKeyword,\n \"in of await yield void typeof delete instanceof\": tags.operatorKeyword,\n \"let var const using function class extends\": tags.definitionKeyword,\n \"import export from\": tags.moduleKeyword,\n \"with debugger as new\": tags.keyword,\n TemplateString: tags.special(tags.string),\n super: tags.atom,\n BooleanLiteral: tags.bool,\n this: tags.self,\n null: tags.null,\n Star: tags.modifier,\n VariableName: tags.variableName,\n \"CallExpression/VariableName TaggedTemplateExpression/VariableName\": tags.function(tags.variableName),\n VariableDefinition: tags.definition(tags.variableName),\n Label: tags.labelName,\n PropertyName: tags.propertyName,\n PrivatePropertyName: tags.special(tags.propertyName),\n \"CallExpression/MemberExpression/PropertyName\": tags.function(tags.propertyName),\n \"FunctionDeclaration/VariableDefinition\": tags.function(tags.definition(tags.variableName)),\n \"ClassDeclaration/VariableDefinition\": tags.definition(tags.className),\n \"NewExpression/VariableName\": tags.className,\n PropertyDefinition: tags.definition(tags.propertyName),\n PrivatePropertyDefinition: tags.definition(tags.special(tags.propertyName)),\n UpdateOp: tags.updateOperator,\n \"LineComment Hashbang\": tags.lineComment,\n BlockComment: tags.blockComment,\n Number: tags.number,\n String: tags.string,\n Escape: tags.escape,\n ArithOp: tags.arithmeticOperator,\n LogicOp: tags.logicOperator,\n BitOp: tags.bitwiseOperator,\n CompareOp: tags.compareOperator,\n RegExp: tags.regexp,\n Equals: tags.definitionOperator,\n Arrow: tags.function(tags.punctuation),\n \": Spread\": tags.punctuation,\n \"( )\": tags.paren,\n \"[ ]\": tags.squareBracket,\n \"{ }\": tags.brace,\n \"InterpolationStart InterpolationEnd\": tags.special(tags.brace),\n \".\": tags.derefOperator,\n \", ;\": tags.separator,\n \"@\": tags.meta,\n\n TypeName: tags.typeName,\n TypeDefinition: tags.definition(tags.typeName),\n \"type enum interface implements namespace module declare\": tags.definitionKeyword,\n \"abstract global Privacy readonly override\": tags.modifier,\n \"is keyof unique infer asserts\": tags.operatorKeyword,\n\n JSXAttributeValue: tags.attributeValue,\n JSXText: tags.content,\n \"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag\": tags.angleBracket,\n \"JSXIdentifier JSXNameSpacedName\": tags.tagName,\n \"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName\": tags.attributeName,\n \"JSXBuiltin/JSXIdentifier\": tags.standard(tags.tagName)\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,export:20, as:25, from:33, default:36, async:41, function:42, const:52, extends:56, this:60, true:68, false:68, null:80, void:84, typeof:88, super:104, new:138, delete:150, yield:159, await:163, class:168, public:231, private:231, protected:231, readonly:233, instanceof:252, satisfies:255, in:256, import:290, keyof:347, unique:351, infer:357, asserts:393, is:395, abstract:415, implements:417, type:419, let:422, var:424, using:427, interface:433, enum:437, namespace:443, module:445, declare:449, global:453, for:472, of:481, while:484, with:488, do:492, if:496, else:498, switch:502, case:508, try:514, catch:518, finally:522, return:526, throw:530, break:534, continue:538, debugger:542};\nconst spec_word = {__proto__:null,async:125, get:127, set:129, declare:191, public:193, private:193, protected:193, static:195, abstract:197, override:199, readonly:205, accessor:207, new:399};\nconst spec_LessThan = {__proto__:null,\"<\":189};\nconst parser = LRParser.deserialize({\n version: 14,\n states: \"$EOQ%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#D_O.QQlO'#DeO.bQlO'#DpO%[QlO'#DxO0fQlO'#EQOOQ!0Lf'#EY'#EYO1PQ`O'#EVOOQO'#En'#EnOOQO'#Ij'#IjO1XQ`O'#GrO1dQ`O'#EmO1iQ`O'#EmO3hQ!0MxO'#JpO6[Q!0MxO'#JqO6uQ`O'#F[O6zQ,UO'#FsOOQ!0Lf'#Fe'#FeO7VO7dO'#FeO7eQMhO'#F{O9UQ`O'#FzOOQ!0Lf'#Jq'#JqOOQ!0Lb'#Jp'#JpO9ZQ`O'#GvOOQ['#K]'#K]O9fQ`O'#IWO9kQ!0LrO'#IXOOQ['#J^'#J^OOQ['#I]'#I]Q`QlOOQ`QlOOO9sQ!L^O'#DtO9zQlO'#D|O:RQlO'#EOO9aQ`O'#GrO:YQMhO'#CoO:hQ`O'#ElO:sQ`O'#EwO:xQMhO'#FdO;gQ`O'#GrOOQO'#K^'#K^O;lQ`O'#K^O;zQ`O'#GzO;zQ`O'#G{O;zQ`O'#G}O9aQ`O'#HQO<qQ`O'#HTO>YQ`O'#CeO>jQ`O'#HaO>rQ`O'#HgO>rQ`O'#HiO`QlO'#HkO>rQ`O'#HmO>rQ`O'#HpO>wQ`O'#HvO>|Q!0LsO'#H|O%[QlO'#IOO?XQ!0LsO'#IQO?dQ!0LsO'#ISO9kQ!0LrO'#IUO?oQ!0MxO'#CiO@qQpO'#DjQOQ`OOO%[QlO'#EOOAXQ`O'#ERO:YQMhO'#ElOAdQ`O'#ElOAoQ!bO'#FdOOQ['#Cg'#CgOOQ!0Lb'#Do'#DoOOQ!0Lb'#Jt'#JtO%[QlO'#JtOOQO'#Jw'#JwOOQO'#If'#IfOBoQpO'#EeOOQ!0Lb'#Ed'#EdOOQ!0Lb'#J{'#J{OCkQ!0MSO'#EeOCuQpO'#EUOOQO'#Jv'#JvODZQpO'#JwOEhQpO'#EUOCuQpO'#EePEuO&2DjO'#CbPOOO)CD{)CD{OOOO'#I^'#I^OFQO#tO,59UOOQ!0Lh,59U,59UOOOO'#I_'#I_OF`O&jO,59UOFnQ!L^O'#DaOOOO'#Ia'#IaOFuO#@ItO,59yOOQ!0Lf,59y,59yOGTQlO'#IbOGhQ`O'#JrOIgQ!fO'#JrO+}QlO'#JrOInQ`O,5:POJUQ`O'#EnOJcQ`O'#KROJnQ`O'#KQOJnQ`O'#KQOJvQ`O,5;[OJ{Q`O'#KPOOQ!0Ln,5:[,5:[OKSQlO,5:[OMQQ!0MxO,5:dOMqQ`O,5:lON[Q!0LrO'#KOONcQ`O'#J}O9ZQ`O'#J}ONwQ`O'#J}O! PQ`O,5;ZO! UQ`O'#J}O!#ZQ!fO'#JqOOQ!0Lh'#Ci'#CiO%[QlO'#EQO!#yQ!fO,5:qOOQS'#Jx'#JxOOQO-E<h-E<hO9aQ`O,5=^O!$aQ`O,5=^O!$fQlO,5;XO!&iQMhO'#EiO!(SQ`O,5;XO!(XQlO'#DwO!(cQpO,5;bO!(kQpO,5;bO%[QlO,5;bOOQ['#FS'#FSOOQ['#FU'#FUO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cOOQ['#FY'#FYO!(yQlO,5;sOOQ!0Lf,5;x,5;xOOQ!0Lf,5;y,5;yOOQ!0Lf,5;{,5;{O%[QlO'#InO!*|Q!0LrO,5<hO%[QlO,5;cO!&iQMhO,5;cO!+kQMhO,5;cO!-]QMhO'#E[O%[QlO,5;vOOQ!0Lf,5;z,5;zO!-dQ,UO'#FiO!.aQ,UO'#KVO!-{Q,UO'#KVO!.hQ,UO'#KVOOQO'#KV'#KVO!.|Q,UO,5<ROOOW,5<_,5<_O!/_QlO'#FuOOOW'#Im'#ImO7VO7dO,5<PO!/fQ,UO'#FwOOQ!0Lf,5<P,5<PO!0VQ$IUO'#CwOOQ!0Lh'#C{'#C{O!0jO#@ItO'#DPO!1WQMjO,5<dO!1_Q`O,5<gO!2zQ(CWO'#GWO!3XQ`O'#GXO!3^Q`O'#GXO!4|Q(CWO'#G]O!6RQpO'#GaOOQO'#Gm'#GmO!+rQMhO'#GlOOQO'#Go'#GoO!+rQMhO'#GnO!6tQ$IUO'#JjOOQ!0Lh'#Jj'#JjO!7OQ`O'#JiO!7^Q`O'#JhO!7fQ`O'#CuOOQ!0Lh'#Cy'#CyO!7qQ`O'#C{OOQ!0Lh'#DT'#DTOOQ!0Lh'#DV'#DVO1SQ`O'#DXO!+rQMhO'#GOO!+rQMhO'#GQO!7vQ`O'#GSO!7{Q`O'#GTO!3^Q`O'#GZO!+rQMhO'#G`O;zQ`O'#JiO!8QQ`O'#EoO!8oQ`O,5<fOOQ!0Lb'#Cr'#CrO!8wQ`O'#EpO!9qQpO'#EqOOQ!0Lb'#KP'#KPO!9xQ!0LrO'#K_O9kQ!0LrO,5=bO`QlO,5>rOOQ['#Jf'#JfOOQ[,5>s,5>sOOQ[-E<Z-E<ZO!;wQ!0MxO,5:`O!9lQpO,5:^O!>bQ!0MxO,5:hO%[QlO,5:hO!@xQ!0MxO,5:jOOQO,5@x,5@xO!AiQMhO,5=^O!AwQ!0LrO'#JgO9UQ`O'#JgO!BYQ!0LrO,59ZO!BeQpO,59ZO!BmQMhO,59ZO:YQMhO,59ZO!BxQ`O,5;XO!CQQ`O'#H`O!CfQ`O'#KbO%[QlO,5;|O!9lQpO,5<OO!CnQ`O,5=yO!CsQ`O,5=yO!CxQ`O,5=yO9kQ!0LrO,5=yO;zQ`O,5=iOOQO'#Cw'#CwO!DWQpO,5=fO!D`QMhO,5=gO!DkQ`O,5=iO!DpQ!bO,5=lO!DxQ`O'#K^O>wQ`O'#HVO9aQ`O'#HXO!D}Q`O'#HXO:YQMhO'#HZO!ESQ`O'#HZOOQ[,5=o,5=oO!EXQ`O'#H[O!EjQ`O'#CoO!EoQ`O,59PO!EyQ`O,59PO!HOQlO,59POOQ[,59P,59PO!H`Q!0LrO,59PO%[QlO,59PO!JkQlO'#HcOOQ['#Hd'#HdOOQ['#He'#HeO`QlO,5={O!KRQ`O,5={O`QlO,5>RO`QlO,5>TO!KWQ`O,5>VO`QlO,5>XO!K]Q`O,5>[O!KbQlO,5>bOOQ[,5>h,5>hO%[QlO,5>hO9kQ!0LrO,5>jOOQ[,5>l,5>lO# lQ`O,5>lOOQ[,5>n,5>nO# lQ`O,5>nOOQ[,5>p,5>pO#!YQpO'#D]O%[QlO'#JtO#!{QpO'#JtO##VQpO'#DkO##hQpO'#DkO#%yQlO'#DkO#&QQ`O'#JsO#&YQ`O,5:UO#&_Q`O'#ErO#&mQ`O'#KSO#&uQ`O,5;]O#&zQpO'#DkO#'XQpO'#ETOOQ!0Lf,5:m,5:mO%[QlO,5:mO#'`Q`O,5:mO>wQ`O,5;WO!BeQpO,5;WO!BmQMhO,5;WO:YQMhO,5;WO#'hQ`O,5@`O#'mQ07dO,5:qOOQO-E<d-E<dO#(sQ!0MSO,5;POCuQpO,5:pO#(}QpO,5:pOCuQpO,5;PO!BYQ!0LrO,5:pOOQ!0Lb'#Eh'#EhOOQO,5;P,5;PO%[QlO,5;PO#)[Q!0LrO,5;PO#)gQ!0LrO,5;PO!BeQpO,5:pOOQO,5;V,5;VO#)uQ!0LrO,5;PPOOO'#I['#I[P#*ZO&2DjO,58|POOO,58|,58|OOOO-E<[-E<[OOQ!0Lh1G.p1G.pOOOO-E<]-E<]OOOO,59{,59{O#*fQ!bO,59{OOOO-E<_-E<_OOQ!0Lf1G/e1G/eO#*kQ!fO,5>|O+}QlO,5>|OOQO,5?S,5?SO#*uQlO'#IbOOQO-E<`-E<`O#+SQ`O,5@^O#+[Q!fO,5@^O#+cQ`O,5@lOOQ!0Lf1G/k1G/kO%[QlO,5@mO#+kQ`O'#IhOOQO-E<f-E<fO#+cQ`O,5@lOOQ!0Lb1G0v1G0vOOQ!0Ln1G/v1G/vOOQ!0Ln1G0W1G0WO%[QlO,5@jO#,PQ!0LrO,5@jO#,bQ!0LrO,5@jO#,iQ`O,5@iO9ZQ`O,5@iO#,qQ`O,5@iO#-PQ`O'#IkO#,iQ`O,5@iOOQ!0Lb1G0u1G0uO!(cQpO,5:sO!(nQpO,5:sOOQS,5:u,5:uO#-qQdO,5:uO#-yQMhO1G2xO9aQ`O1G2xOOQ!0Lf1G0s1G0sO#.XQ!0MxO1G0sO#/^Q!0MvO,5;TOOQ!0Lh'#GV'#GVO#/zQ!0MzO'#JjO!$fQlO1G0sO#2VQ!fO'#JuO%[QlO'#JuO#2aQ`O,5:cOOQ!0Lh'#D]'#D]OOQ!0Lf1G0|1G0|O%[QlO1G0|OOQ!0Lf1G1e1G1eO#2fQ`O1G0|O#4zQ!0MxO1G0}O#5RQ!0MxO1G0}O#7iQ!0MxO1G0}O#7pQ!0MxO1G0}O#:WQ!0MxO1G0}O#<nQ!0MxO1G0}O#<uQ!0MxO1G0}O#<|Q!0MxO1G0}O#?dQ!0MxO1G0}O#?kQ!0MxO1G0}O#AxQ?MtO'#CiO#CsQ?MtO1G1_O#CzQ?MtO'#JqO#D_Q!0MxO,5?YOOQ!0Lb-E<l-E<lO#FlQ!0MxO1G0}O#GiQ!0MzO1G0}OOQ!0Lf1G0}1G0}O#HlQMjO'#JzO#HvQ`O,5:vO#H{Q!0MxO1G1bO#IoQ,UO,5<VO#IwQ,UO,5<WO#JPQ,UO'#FnO#JhQ`O'#FmOOQO'#KW'#KWOOQO'#Il'#IlO#JmQ,UO1G1mOOQ!0Lf1G1m1G1mOOOW1G1x1G1xO#KOQ?MtO'#JpO#KYQ`O,5<aO!(yQlO,5<aOOOW-E<k-E<kOOQ!0Lf1G1k1G1kO#K_QpO'#KVOOQ!0Lf,5<c,5<cO#KgQpO,5<cO#KlQMhO'#DROOOO'#I`'#I`O#KsO#@ItO,59kOOQ!0Lh,59k,59kO%[QlO1G2OO!7{Q`O'#IpO#LOQ`O,5<yOOQ!0Lh,5<v,5<vO!+rQMhO'#IsO#LlQMjO,5=WO!+rQMhO'#IuO#M_QMjO,5=YO!&iQMhO,5=[OOQO1G2R1G2RO#MiQ!dO'#CrO#M|Q(CWO'#EpO$ RQpO'#GaO$ iQ!dO,5<rO$ pQ`O'#KYO9ZQ`O'#KYO$!OQ`O,5<tO!+rQMhO,5<sO$!TQ`O'#GYO$!fQ`O,5<sO$!kQ!dO'#GVO$!xQ!dO'#KZO$#SQ`O'#KZO!&iQMhO'#KZO$#XQ`O,5<wO$#^QlO'#JtO$#hQpO'#GbO##hQpO'#GbO$#yQ`O'#GfO!3^Q`O'#GjO$$OQ!0LrO'#IrO$$ZQpO,5<{OOQ!0Lp,5<{,5<{O$$bQpO'#GbO$$oQpO'#GcO$%QQpO'#GcO$%VQMjO,5=WO$%gQMjO,5=YOOQ!0Lh,5=],5=]O!+rQMhO,5@TO!+rQMhO,5@TO$%wQ`O'#IwO$&VQ`O,5@SO$&_Q`O,59aOOQ!0Lh,59g,59gO$'UQ$IYO,59sOOQ!0Lh'#Jn'#JnO$'wQMjO,5<jO$(jQMjO,5<lO@iQ`O,5<nOOQ!0Lh,5<o,5<oO$(tQ`O,5<uO$(yQMjO,5<zO$)ZQ`O,5@TO$)iQ`O'#J}O!$fQlO1G2QO$)nQ`O1G2QO9ZQ`O'#KQO9ZQ`O'#ErO%[QlO'#ErO9ZQ`O'#IyO$)sQ!0LrO,5@yOOQ[1G2|1G2|OOQ[1G4^1G4^OOQ!0Lf1G/z1G/zOOQ!0Lf1G/x1G/xO$+uQ!0MxO1G0SOOQ[1G2x1G2xO!&iQMhO1G2xO%[QlO1G2xO#-|Q`O1G2xO$-yQMhO'#EiOOQ!0Lb,5@R,5@RO$.WQ!0LrO,5@ROOQ[1G.u1G.uO!BYQ!0LrO1G.uO!BeQpO1G.uO!BmQMhO1G.uO$.iQ`O1G0sO$.nQ`O'#CiO$.yQ`O'#KcO$/RQ`O,5=zO$/WQ`O'#KcO$/]Q`O'#KcO$/kQ`O'#JPO$/yQ`O,5@|O$0RQ!fO1G1hOOQ!0Lf1G1j1G1jO9aQ`O1G3eO@iQ`O1G3eO$0YQ`O1G3eO$0_Q`O1G3eOOQ[1G3e1G3eO!DkQ`O1G3TO!&iQMhO1G3QO$0dQ`O1G3QOOQ[1G3R1G3RO!&iQMhO1G3RO$0iQ`O1G3RO$0qQpO'#HPOOQ[1G3T1G3TO!5|QpO'#I{O!DpQ!bO1G3WOOQ[1G3W1G3WOOQ[,5=q,5=qO$0yQMhO,5=sO9aQ`O,5=sO$#yQ`O,5=uO9UQ`O,5=uO!BeQpO,5=uO!BmQMhO,5=uO:YQMhO,5=uO$1XQ`O'#KaO$1dQ`O,5=vOOQ[1G.k1G.kO$1iQ!0LrO1G.kO@iQ`O1G.kO$1tQ`O1G.kO9kQ!0LrO1G.kO$3|Q!fO,5AOO$4ZQ`O,5AOO9ZQ`O,5AOO$4fQlO,5=}O$4mQ`O,5=}OOQ[1G3g1G3gO`QlO1G3gOOQ[1G3m1G3mOOQ[1G3o1G3oO>rQ`O1G3qO$4rQlO1G3sO$8vQlO'#HrOOQ[1G3v1G3vO$9TQ`O'#HxO>wQ`O'#HzOOQ[1G3|1G3|O$9]QlO1G3|O9kQ!0LrO1G4SOOQ[1G4U1G4UOOQ!0Lb'#G^'#G^O9kQ!0LrO1G4WO9kQ!0LrO1G4YO$=dQ`O,5@`O!(yQlO,5;^O9ZQ`O,5;^O>wQ`O,5:VO!(yQlO,5:VO!BeQpO,5:VO$=iQ?MtO,5:VOOQO,5;^,5;^O$=sQpO'#IcO$>ZQ`O,5@_OOQ!0Lf1G/p1G/pO$>cQpO'#IiO$>mQ`O,5@nOOQ!0Lb1G0w1G0wO##hQpO,5:VOOQO'#Ie'#IeO$>uQpO,5:oOOQ!0Ln,5:o,5:oO#'cQ`O1G0XOOQ!0Lf1G0X1G0XO%[QlO1G0XOOQ!0Lf1G0r1G0rO>wQ`O1G0rO!BeQpO1G0rO!BmQMhO1G0rOOQ!0Lb1G5z1G5zO!BYQ!0LrO1G0[OOQO1G0k1G0kO%[QlO1G0kO$>|Q!0LrO1G0kO$?XQ!0LrO1G0kO!BeQpO1G0[OCuQpO1G0[O$?gQ!0LrO1G0kOOQO1G0[1G0[O$?{Q!0MxO1G0kPOOO-E<Y-E<YPOOO1G.h1G.hOOOO1G/g1G/gO$@VQ!bO,5<hO$@_Q!fO1G4hOOQO1G4n1G4nO%[QlO,5>|O$@iQ`O1G5xO$@qQ`O1G6WO$@yQ!fO1G6XO9ZQ`O,5?SO$ATQ!0MxO1G6UO%[QlO1G6UO$AeQ!0LrO1G6UO$AvQ`O1G6TO$AvQ`O1G6TO9ZQ`O1G6TO$BOQ`O,5?VO9ZQ`O,5?VOOQO,5?V,5?VO$BdQ`O,5?VO$)iQ`O,5?VOOQO-E<i-E<iOOQS1G0_1G0_OOQS1G0a1G0aO#-tQ`O1G0aOOQ[7+(d7+(dO!&iQMhO7+(dO%[QlO7+(dO$BrQ`O7+(dO$B}QMhO7+(dO$C]Q!0MzO,5=WO$EhQ!0MzO,5=YO$GsQ!0MzO,5=WO$JUQ!0MzO,5=YO$LgQ!0MzO,59sO$NlQ!0MzO,5<jO%!wQ!0MzO,5<lO%%SQ!0MzO,5<zOOQ!0Lf7+&_7+&_O%'eQ!0MxO7+&_O%(XQlO'#IdO%(fQ`O,5@aO%(nQ!fO,5@aOOQ!0Lf1G/}1G/}O%(xQ`O7+&hOOQ!0Lf7+&h7+&hO%(}Q?MtO,5:dO%[QlO7+&yO%)XQ?MtO,5:`O%)fQ?MtO,5:hO%)pQ?MtO,5:jO%)zQMhO'#IgO%*UQ`O,5@fOOQ!0Lh1G0b1G0bOOQO1G1q1G1qOOQO1G1r1G1rO%*^Q!jO,5<YO!(yQlO,5<XOOQO-E<j-E<jOOQ!0Lf7+'X7+'XOOOW7+'d7+'dOOOW1G1{1G1{O%*iQ`O1G1{OOQ!0Lf1G1}1G1}OOOO,59m,59mO%*nQ!dO,59mOOOO-E<^-E<^OOQ!0Lh1G/V1G/VO%*uQ!0MxO7+'jOOQ!0Lh,5?[,5?[O%+iQMhO1G2eP%+pQ`O'#IpPOQ!0Lh-E<n-E<nO%,^QMjO,5?_OOQ!0Lh-E<q-E<qO%-PQMjO,5?aOOQ!0Lh-E<s-E<sO%-ZQ!dO1G2vO%-bQ!dO'#CrO%-xQMhO'#KQO$#^QlO'#JtOOQ!0Lh1G2^1G2^O%.PQ`O'#IoO%.eQ`O,5@tO%.eQ`O,5@tO%.mQ`O,5@tO%.xQ`O,5@tOOQO1G2`1G2`O%/WQMjO1G2_O!+rQMhO1G2_O%/hQ(CWO'#IqO%/uQ`O,5@uO!&iQMhO,5@uO%/}Q!dO,5@uOOQ!0Lh1G2c1G2cO%2_Q!fO'#CiO%2iQ`O,5=OOOQ!0Lb,5<|,5<|O%2qQpO,5<|OOQ!0Lb,5<},5<}OCfQ`O,5<|O%2|QpO,5<|OOQ!0Lb,5=Q,5=QO$)iQ`O,5=UOOQO,5?^,5?^OOQO-E<p-E<pOOQ!0Lp1G2g1G2gO##hQpO,5<|O$#^QlO,5=OO%3[Q`O,5<}O%3gQpO,5<}O!+rQMhO'#IsO%4aQMjO1G2rO!+rQMhO'#IuO%5SQMjO1G2tO%5^QMjO1G5oO%5hQMjO1G5oOOQO,5?c,5?cOOQO-E<u-E<uOOQO1G.{1G.{O!9lQpO,59uO%[QlO,59uOOQ!0Lh,5<i,5<iO%5uQ`O1G2YO!+rQMhO1G2aO!+rQMhO1G5oO!+rQMhO1G5oO%5zQ!0MxO7+'lOOQ!0Lf7+'l7+'lO!$fQlO7+'lO%6nQ`O,5;^OOQ!0Lb,5?e,5?eOOQ!0Lb-E<w-E<wO%6sQ!dO'#K[O#'cQ`O7+(dO4UQ!fO7+(dO$BuQ`O7+(dO%6}Q!0MvO'#CiO%7nQ!0LrO,5=RO%8PQ!0MvO,5=RO%8dQ`O,5=ROOQ!0Lb1G5m1G5mOOQ[7+$a7+$aO!BYQ!0LrO7+$aO!BeQpO7+$aO!$fQlO7+&_O%8lQ`O'#JOO%9TQ`O,5@}OOQO1G3f1G3fO9aQ`O,5@}O%9TQ`O,5@}O%9]Q`O,5@}OOQO,5?k,5?kOOQO-E<}-E<}OOQ!0Lf7+'S7+'SO%9bQ`O7+)PO9kQ!0LrO7+)PO9aQ`O7+)PO@iQ`O7+)POOQ[7+(o7+(oO%9gQ!0MvO7+(lO!&iQMhO7+(lO!DfQ`O7+(mOOQ[7+(m7+(mO!&iQMhO7+(mO%9qQ`O'#K`O%9|Q`O,5=kOOQO,5?g,5?gOOQO-E<y-E<yOOQ[7+(r7+(rO%;`QpO'#HYOOQ[1G3_1G3_O!&iQMhO1G3_O%[QlO1G3_O%;gQ`O1G3_O%;rQMhO1G3_O9kQ!0LrO1G3aO$#yQ`O1G3aO9UQ`O1G3aO!BeQpO1G3aO!BmQMhO1G3aO%<QQ`O'#I}O%<fQ`O,5@{O%<nQpO,5@{OOQ!0Lb1G3b1G3bOOQ[7+$V7+$VO@iQ`O7+$VO9kQ!0LrO7+$VO%<yQ`O7+$VO%[QlO1G6jO%[QlO1G6kO%=OQ!0LrO1G6jO%=YQlO1G3iO%=aQ`O1G3iO%=fQlO1G3iOOQ[7+)R7+)RO9kQ!0LrO7+)]O`QlO7+)_OOQ['#Kf'#KfOOQ['#JQ'#JQO%=mQlO,5>^OOQ[,5>^,5>^O%[QlO'#HsO%=zQ`O'#HuOOQ[,5>d,5>dO9ZQ`O,5>dOOQ[,5>f,5>fOOQ[7+)h7+)hOOQ[7+)n7+)nOOQ[7+)r7+)rOOQ[7+)t7+)tO%>PQpO1G5zO%>kQ?MtO1G0xO%>uQ`O1G0xOOQO1G/q1G/qO%?QQ?MtO1G/qO>wQ`O1G/qO!(yQlO'#DkOOQO,5>},5>}OOQO-E<a-E<aOOQO,5?T,5?TOOQO-E<g-E<gO!BeQpO1G/qOOQO-E<c-E<cOOQ!0Ln1G0Z1G0ZOOQ!0Lf7+%s7+%sO#'cQ`O7+%sOOQ!0Lf7+&^7+&^O>wQ`O7+&^O!BeQpO7+&^OOQO7+%v7+%vO$?{Q!0MxO7+&VOOQO7+&V7+&VO%[QlO7+&VO%?[Q!0LrO7+&VO!BYQ!0LrO7+%vO!BeQpO7+%vO%?gQ!0LrO7+&VO%?uQ!0MxO7++pO%[QlO7++pO%@VQ`O7++oO%@VQ`O7++oOOQO1G4q1G4qO9ZQ`O1G4qO%@_Q`O1G4qOOQS7+%{7+%{O#'cQ`O<<LOO4UQ!fO<<LOO%@mQ`O<<LOOOQ[<<LO<<LOO!&iQMhO<<LOO%[QlO<<LOO%@uQ`O<<LOO%AQQ!0MzO,5?_O%C]Q!0MzO,5?aO%EhQ!0MzO1G2_O%GyQ!0MzO1G2rO%JUQ!0MzO1G2tO%LaQ!fO,5?OO%[QlO,5?OOOQO-E<b-E<bO%LkQ`O1G5{OOQ!0Lf<<JS<<JSO%LsQ?MtO1G0sO%NzQ?MtO1G0}O& RQ?MtO1G0}O&#SQ?MtO1G0}O&#ZQ?MtO1G0}O&%[Q?MtO1G0}O&']Q?MtO1G0}O&'dQ?MtO1G0}O&'kQ?MtO1G0}O&)lQ?MtO1G0}O&)sQ?MtO1G0}O&)zQ!0MxO<<JeO&+rQ?MtO1G0}O&,oQ?MvO1G0}O&-rQ?MvO'#JjO&/xQ?MtO1G1bO&0VQ?MtO1G0SO&0aQMjO,5?ROOQO-E<e-E<eO!(yQlO'#FpOOQO'#KX'#KXOOQO1G1t1G1tO&0kQ`O1G1sO&0pQ?MtO,5?YOOOW7+'g7+'gOOOO1G/X1G/XO&0zQ!dO1G4vOOQ!0Lh7+(P7+(PP!&iQMhO,5?[O!+rQMhO7+(bO&1RQ`O,5?ZO9ZQ`O,5?ZOOQO-E<m-E<mO&1aQ`O1G6`O&1aQ`O1G6`O&1iQ`O1G6`O&1tQMjO7+'yO&2UQ!dO,5?]O&2`Q`O,5?]O!&iQMhO,5?]OOQO-E<o-E<oO&2eQ!dO1G6aO&2oQ`O1G6aO&2wQ`O1G2jO!&iQMhO1G2jOOQ!0Lb1G2h1G2hOOQ!0Lb1G2i1G2iO%2qQpO1G2hO!BeQpO1G2hOCfQ`O1G2hOOQ!0Lb1G2p1G2pO&2|QpO1G2hO&3[Q`O1G2jO$)iQ`O1G2iOCfQ`O1G2iO$#^QlO1G2jO&3dQ`O1G2iO&4WQMjO,5?_OOQ!0Lh-E<r-E<rO&4yQMjO,5?aOOQ!0Lh-E<t-E<tO!+rQMhO7++ZOOQ!0Lh1G/a1G/aO&5TQ`O1G/aOOQ!0Lh7+'t7+'tO&5YQMjO7+'{O&5jQMjO7++ZO&5tQMjO7++ZO&6RQ!0MxO<<KWOOQ!0Lf<<KW<<KWO&6uQ`O1G0xO!&iQMhO'#IxO&6zQ`O,5@vO&8|Q!fO<<LOO!&iQMhO1G2mO&9TQ!0LrO1G2mOOQ[<<G{<<G{O!BYQ!0LrO<<G{O&9fQ!0MxO<<IyOOQ!0Lf<<Iy<<IyOOQO,5?j,5?jO&:YQ`O,5?jO&:_Q`O,5?jOOQO-E<|-E<|O&:mQ`O1G6iO&:mQ`O1G6iO9aQ`O1G6iO@iQ`O<<LkOOQ[<<Lk<<LkO&:uQ`O<<LkO9kQ!0LrO<<LkOOQ[<<LW<<LWO%9gQ!0MvO<<LWOOQ[<<LX<<LXO!DfQ`O<<LXO&:zQpO'#IzO&;VQ`O,5@zO!(yQlO,5@zOOQ[1G3V1G3VOOQO'#I|'#I|O9kQ!0LrO'#I|O&;_QpO,5=tOOQ[,5=t,5=tO&;fQpO'#EeO&;mQpO'#GdO&;rQ`O7+(yO&;wQ`O7+(yOOQ[7+(y7+(yO!&iQMhO7+(yO%[QlO7+(yO&<PQ`O7+(yOOQ[7+({7+({O9kQ!0LrO7+({O$#yQ`O7+({O9UQ`O7+({O!BeQpO7+({O&<[Q`O,5?iOOQO-E<{-E<{OOQO'#H]'#H]O&<gQ`O1G6gO9kQ!0LrO<<GqOOQ[<<Gq<<GqO@iQ`O<<GqO&<oQ`O7+,UO&<tQ`O7+,VO%[QlO7+,UO%[QlO7+,VOOQ[7+)T7+)TO&<yQ`O7+)TO&=OQlO7+)TO&=VQ`O7+)TOOQ[<<Lw<<LwOOQ[<<Ly<<LyOOQ[-E=O-E=OOOQ[1G3x1G3xO&=[Q`O,5>_OOQ[,5>a,5>aO&=aQ`O1G4OO9ZQ`O7+&dO!(yQlO7+&dOOQO7+%]7+%]O&=fQ?MtO1G6XO>wQ`O7+%]OOQ!0Lf<<I_<<I_OOQ!0Lf<<Ix<<IxO>wQ`O<<IxOOQO<<Iq<<IqO$?{Q!0MxO<<IqO%[QlO<<IqOOQO<<Ib<<IbO!BYQ!0LrO<<IbO&=pQ!0LrO<<IqO&={Q!0MxO<= [O&>]Q`O<= ZOOQO7+*]7+*]O9ZQ`O7+*]OOQ[ANAjANAjO&>eQ!fOANAjO!&iQMhOANAjO#'cQ`OANAjO4UQ!fOANAjO&>lQ`OANAjO%[QlOANAjO&>tQ!0MzO7+'yO&AVQ!0MzO,5?_O&CbQ!0MzO,5?aO&EmQ!0MzO7+'{O&HOQ!fO1G4jO&HYQ?MtO7+&_O&J^Q?MvO,5=WO&LeQ?MvO,5=YO&LuQ?MvO,5=WO&MVQ?MvO,5=YO&MgQ?MvO,59sO' mQ?MvO,5<jO'#pQ?MvO,5<lO'&UQ?MvO,5<zO''zQ?MtO7+'jO'(XQ?MtO7+'lO'(fQ`O,5<[OOQO7+'_7+'_OOQ!0Lh7+*b7+*bO'(kQMjO<<K|OOQO1G4u1G4uO'(rQ`O1G4uO'(}Q`O1G4uO')]Q`O7++zO')]Q`O7++zO!&iQMhO1G4wO')eQ!dO1G4wO')oQ`O7++{O')wQ`O7+(UO'*SQ!dO7+(UOOQ!0Lb7+(S7+(SOOQ!0Lb7+(T7+(TO!BeQpO7+(SOCfQ`O7+(SO'*^Q`O7+(UO!&iQMhO7+(UO$)iQ`O7+(TO'*cQ`O7+(UOCfQ`O7+(TO'*kQMjO<<NuOOQ!0Lh7+${7+${O!+rQMhO<<NuO'*uQ!dO,5?dOOQO-E<v-E<vO'+PQ!0MvO7+(XO!&iQMhO7+(XOOQ[AN=gAN=gO9aQ`O1G5UOOQO1G5U1G5UO'+aQ`O1G5UO'+fQ`O7+,TO'+fQ`O7+,TO9kQ!0LrOANBVO@iQ`OANBVOOQ[ANBVANBVOOQ[ANArANArOOQ[ANAsANAsO'+nQ`O,5?fOOQO-E<x-E<xO'+yQ?MtO1G6fOOQO,5?h,5?hOOQO-E<z-E<zOOQ[1G3`1G3`O',TQ`O,5=OOOQ[<<Le<<LeO!&iQMhO<<LeO&;rQ`O<<LeO',YQ`O<<LeO%[QlO<<LeOOQ[<<Lg<<LgO9kQ!0LrO<<LgO$#yQ`O<<LgO9UQ`O<<LgO',bQpO1G5TO',mQ`O7+,ROOQ[AN=]AN=]O9kQ!0LrOAN=]OOQ[<= p<= pOOQ[<= q<= qO',uQ`O<= pO',zQ`O<= qOOQ[<<Lo<<LoO'-PQ`O<<LoO'-UQlO<<LoOOQ[1G3y1G3yO>wQ`O7+)jO'-]Q`O<<JOO'-hQ?MtO<<JOOOQO<<Hw<<HwOOQ!0LfAN?dAN?dOOQOAN?]AN?]O$?{Q!0MxOAN?]OOQOAN>|AN>|O%[QlOAN?]OOQO<<Mw<<MwOOQ[G27UG27UO!&iQMhOG27UO#'cQ`OG27UO'-rQ!fOG27UO4UQ!fOG27UO'-yQ`OG27UO'.RQ?MtO<<JeO'.`Q?MvO1G2_O'0UQ?MvO,5?_O'2XQ?MvO,5?aO'4[Q?MvO1G2rO'6_Q?MvO1G2tO'8bQ?MtO<<KWO'8oQ?MtO<<IyOOQO1G1v1G1vO!+rQMhOANAhOOQO7+*a7+*aO'8|Q`O7+*aO'9XQ`O<= fO'9aQ!dO7+*cOOQ!0Lb<<Kp<<KpO$)iQ`O<<KpOCfQ`O<<KpO'9kQ`O<<KpO!&iQMhO<<KpOOQ!0Lb<<Kn<<KnO!BeQpO<<KnO'9vQ!dO<<KpOOQ!0Lb<<Ko<<KoO':QQ`O<<KpO!&iQMhO<<KpO$)iQ`O<<KoO':VQMjOANDaO':aQ!0MvO<<KsOOQO7+*p7+*pO9aQ`O7+*pO':qQ`O<= oOOQ[G27qG27qO9kQ!0LrOG27qO!(yQlO1G5QO':yQ`O7+,QO';RQ`O1G2jO&;rQ`OANBPOOQ[ANBPANBPO!&iQMhOANBPO';WQ`OANBPOOQ[ANBRANBRO9kQ!0LrOANBRO$#yQ`OANBROOQO'#H^'#H^OOQO7+*o7+*oOOQ[G22wG22wOOQ[ANE[ANE[OOQ[ANE]ANE]OOQ[ANBZANBZO';`Q`OANBZOOQ[<<MU<<MUO!(yQlOAN?jOOQOG24wG24wO$?{Q!0MxOG24wO#'cQ`OLD,pOOQ[LD,pLD,pO!&iQMhOLD,pO';eQ!fOLD,pO';lQ?MvO7+'yO'=bQ?MvO,5?_O'?eQ?MvO,5?aO'AhQ?MvO7+'{O'C^QMjOG27SOOQO<<M{<<M{OOQ!0LbANA[ANA[O$)iQ`OANA[OCfQ`OANA[O'CnQ!dOANA[OOQ!0LbANAYANAYO'CuQ`OANA[O!&iQMhOANA[O'DQQ!dOANA[OOQ!0LbANAZANAZOOQO<<N[<<N[OOQ[LD-]LD-]O'D[Q?MtO7+*lOOQO'#Ge'#GeOOQ[G27kG27kO&;rQ`OG27kO!&iQMhOG27kOOQ[G27mG27mO9kQ!0LrOG27mOOQ[G27uG27uO'DfQ?MtOG25UOOQOLD*cLD*cOOQ[!$(![!$(![O#'cQ`O!$(![O!&iQMhO!$(![O'DpQ!0MzOG27SOOQ!0LbG26vG26vO$)iQ`OG26vO'GRQ`OG26vOCfQ`OG26vO'G^Q!dOG26vO!&iQMhOG26vOOQ[LD-VLD-VO&;rQ`OLD-VOOQ[LD-XLD-XOOQ[!)9Ev!)9EvO#'cQ`O!)9EvOOQ!0LbLD,bLD,bO$)iQ`OLD,bOCfQ`OLD,bO'GeQ`OLD,bO'GpQ!dOLD,bOOQ[!$(!q!$(!qOOQ[!.K;b!.K;bO'GwQ?MvOG27SOOQ!0Lb!$( |!$( |O$)iQ`O!$( |OCfQ`O!$( |O'ImQ`O!$( |OOQ!0Lb!)9Eh!)9EhO$)iQ`O!)9EhOCfQ`O!)9EhOOQ!0Lb!.K;S!.K;SO$)iQ`O!.K;SOOQ!0Lb!4/0n!4/0nO!(yQlO'#DxO1PQ`O'#EVO'IxQ!fO'#JpO'JPQ!L^O'#DtO'JWQlO'#D|O'J_Q!fO'#CiO'LuQ!fO'#CiO!(yQlO'#EOO'MVQlO,5;XO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO'#InO( YQ`O,5<hO!(yQlO,5;cO( bQMhO,5;cO(!{QMhO,5;cO!(yQlO,5;vO!&iQMhO'#GlO( bQMhO'#GlO!&iQMhO'#GnO( bQMhO'#GnO1SQ`O'#DXO1SQ`O'#DXO!&iQMhO'#GOO( bQMhO'#GOO!&iQMhO'#GQO( bQMhO'#GQO!&iQMhO'#G`O( bQMhO'#G`O!(yQlO,5:hO(#SQpO'#D]O(#^QpO'#JtO!(yQlO,5@mO'MVQlO1G0sO(#hQ?MtO'#CiO!(yQlO1G2OO!&iQMhO'#IsO( bQMhO'#IsO!&iQMhO'#IuO( bQMhO'#IuO(#rQ!dO'#CrO!&iQMhO,5<sO( bQMhO,5<sO'MVQlO1G2QO!(yQlO7+&yO!&iQMhO1G2_O( bQMhO1G2_O!&iQMhO'#IsO( bQMhO'#IsO!&iQMhO'#IuO( bQMhO'#IuO!&iQMhO1G2aO( bQMhO1G2aO'MVQlO7+'lO'MVQlO7+&_O!&iQMhOANAhO( bQMhOANAhO($VQ`O'#EmO($[Q`O'#EmO($dQ`O'#F[O($iQ`O'#EwO($nQ`O'#KRO($yQ`O'#KPO(%UQ`O,5;XO(%ZQMjO,5<dO(%bQ`O'#GXO(%gQ`O'#GXO(%lQ`O,5<fO(%tQ`O,5;XO(%|Q?MtO1G1_O(&TQ`O,5<sO(&YQ`O,5<sO(&_Q`O,5<uO(&dQ`O,5<uO(&iQ`O1G2QO(&nQ`O1G0sO(&sQMjO<<K|O(&zQMjO<<K|O7eQMhO'#F{O9UQ`O'#FzOAdQ`O'#ElO!(yQlO,5;sO!3^Q`O'#GXO!3^Q`O'#GXO!3^Q`O'#GZO!3^Q`O'#GZO!+rQMhO7+(bO!+rQMhO7+(bO%-ZQ!dO1G2vO%-ZQ!dO1G2vO!&iQMhO,5=[O!&iQMhO,5=[\",\n stateData: \"((P~O'zOS'{OSTOS'|RQ~OPYOQYOSfOY!VOaqOdzOeyOj!POnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]XO!guO!jZO!mYO!nYO!oYO!qvO!swO!vxO!z]O$V|O$miO%g}O%i!QO%k!OO%l!OO%m!OO%p!RO%r!SO%u!TO%v!TO%x!UO&U!WO&[!XO&^!YO&`!ZO&b![O&e!]O&k!^O&q!_O&s!`O&u!aO&w!bO&y!cO(RSO(TTO(WUO(_VO(m[O~OWtO~P`OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(R!dO(TTO(WUO(_VO(m[O~Oa!wOq!nO!Q!oO!`!yO!a!vO!b!vO!z;wO#R!pO#S!pO#T!xO#U!pO#V!pO#Y!zO#Z!zO(S!lO(TTO(WUO(c!mO(m!sO~O'|!{O~OP]XR]X[]Xa]Xp]X!O]X!Q]X!Z]X!j]X!n]X#P]X#Q]X#^]X#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X'x]X(_]X(p]X(w]X(x]X~O!e%QX~P(qO_!}O(T#PO(U!}O(V#PO~O_#QO(V#PO(W#PO(X#QO~Ov#SO!S#TO(`#TO(a#VO~OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(R;{O(TTO(WUO(_VO(m[O~O!Y#ZO!Z#WO!W(fP!W(tP~P+}O![#cO~P`OPYOQYOSfOd!jOe!iOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(TTO(WUO(_VO(m[O~On#mO!Y#iO!z]O#g#lO#h#iO(R;|O!i(qP~P.iO!j#oO(R#nO~O!v#sO!z]O%g#tO~O#i#uO~O!e#vO#i#uO~OP$[OR#zO[$cOp$aO!O#yO!Q#{O!Z$_O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO#y$WO#z$XO(_VO(p$YO(w#|O(x#}O~Oa(dX'x(dX'u(dX!i(dX!W(dX!](dX%h(dX!e(dX~P1qO#Q$dO#^$eO$P$eOP(eXR(eX[(eXp(eX!O(eX!Q(eX!Z(eX!j(eX!n(eX#P(eX#l(eX#m(eX#n(eX#o(eX#p(eX#q(eX#r(eX#s(eX#t(eX#u(eX#w(eX#y(eX#z(eX(_(eX(p(eX(w(eX(x(eX!](eX%h(eX~Oa(eX'x(eX'u(eX!W(eX!i(eXt(eX!e(eX~P4UO#^$eO~O$[$hO$^$gO$e$mO~OSfO!]$nO$h$oO$j$qO~Oh%VOj%cOn%WOp%XOq$tOr$tOx%YOz%ZO|%[O!Q${O!]$|O!g%aO!j$xO#h%bO$V%_O$s%]O$u%^O$x%`O(R$sO(TTO(WUO(_$uO(w$}O(x%POg([P~O!j%dO~O!Q%gO!]%hO(R%fO~O!e%lO~Oa%mO'x%mO~O!O%qO~P%[O(S!lO~P%[O%m%uO~P%[Oh%VO!j%dO(R%fO(S!lO~Oe%|O!j%dO(R%fO~O#t$RO~O!O&RO!]&OO!j&QO%i&UO(R%fO(S!lO(TTO(WUO`)UP~O!v#sO~O%r&WO!Q)QX!])QX(R)QX~O(R&XO~Oj!PO!s&^O%i!QO%k!OO%l!OO%m!OO%p!RO%r!SO%u!TO%v!TO~Od&cOe&bO!v&`O%g&aO%z&_O~P<POd&fOeyOj!PO!]&eO!s&^O!vxO!z]O%g}O%k!OO%l!OO%m!OO%p!RO%r!SO%u!TO%v!TO%x!UO~Ob&iO#^&lO%i&gO(S!lO~P=UO!j&mO!s&qO~O!j#oO~O!]XO~Oa%mO'v&yO'x%mO~Oa%mO'v&|O'x%mO~Oa%mO'v'OO'x%mO~O'u]X!W]Xt]X!i]X&Y]X!]]X%h]X!e]X~P(qO!`']O!a'UO!b'UO(S!lO(TTO(WUO~Oq'SO!Q'RO!Y'VO(c'QO![(gP![(vP~P@]Ol'`O!]'^O(R%fO~Oe'eO!j%dO(R%fO~O!O&RO!j&QO~Oq!nO!Q!oO!z;wO#R!pO#S!pO#U!pO#V!pO(S!lO(TTO(WUO(c!mO(m!sO~O!`'kO!a'jO!b'jO#T!pO#Y'lO#Z'lO~PAwOa%mOh%VO!e#vO!j%dO'x%mO(p'nO~O!n'rO#^'pO~PCVOq!nO!Q!oO(TTO(WUO(c!mO(m!sO~O!]XOq(kX!Q(kX!`(kX!a(kX!b(kX!z(kX#R(kX#S(kX#T(kX#U(kX#V(kX#Y(kX#Z(kX(S(kX(T(kX(W(kX(c(kX(m(kX~O!a'jO!b'jO(S!lO~PCuO'}'vO(O'vO(P'xO~O_!}O(T'zO(U!}O(V'zO~O_#QO(V'zO(W'zO(X#QO~Ot'|O~P%[Ov#SO!S#TO(`#TO(a(PO~O!Y(RO!W'UX!W'[X!Z'UX!Z'[X~P+}O!Z(TO!W(fX~OP$[OR#zO[$cOp$aO!O#yO!Q#{O!Z(TO!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO#y$WO#z$XO(_VO(p$YO(w#|O(x#}O~O!W(fX~PGpO!W(YO~O!W(sX!Z(sX!e(sX!i(sX(p(sX~O#^(sX#i#bX![(sX~PIsO#^(ZO!W(uX!Z(uX~O!Z([O!W(tX~O!W(_O~O#^$eO~PIsO![(`O~P`OR#zO!O#yO!Q#{O!j#xO(_VOP!la[!lap!la!Z!la!n!la#P!la#l!la#m!la#n!la#o!la#p!la#q!la#r!la#s!la#t!la#u!la#w!la#y!la#z!la(p!la(w!la(x!la~Oa!la'x!la'u!la!W!la!i!lat!la!]!la%h!la!e!la~PKZO!i(aO~O!e#vO#^(bO(p'nO!Z(rXa(rX'x(rX~O!i(rX~PMvO!Q%gO!]%hO!z]O#g(gO#h(fO(R%fO~O!Z(hO!i(qX~O!i(jO~O!Q%gO!]%hO#h(fO(R%fO~OP(eXR(eX[(eXp(eX!O(eX!Q(eX!Z(eX!j(eX!n(eX#P(eX#l(eX#m(eX#n(eX#o(eX#p(eX#q(eX#r(eX#s(eX#t(eX#u(eX#w(eX#y(eX#z(eX(_(eX(p(eX(w(eX(x(eX~O!e#vO!i(eX~P! dOR(lO!O(kO!j#xO#Q$dO!z!ya!Q!ya~O!v!ya%g!ya!]!ya#g!ya#h!ya(R!ya~P!#eO!v(pO~OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]XO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(R!dO(TTO(WUO(_VO(m[O~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<eO!Q${O!]$|O!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(R(tO(TTO(WUO(_$uO(w$}O(x%PO~O#i(vO~O!Y(xO!i(iP~P%[O(c(zO(m[O~O!Q(|O!j#xO(c(zO(m[O~OP;vOQ;vOSfOd=rOe!iOnkOp;vOqkOrkOxkOz;vO|;vO!QWO!UkO!VkO!]!eO!g;yO!jZO!m;vO!n;vO!o;vO!q;zO!s;}O!v!hO$V!kO$m=pO(R)ZO(TTO(WUO(_VO(m[O~O!Z$_Oa$pa'x$pa'u$pa!i$pa!W$pa!]$pa%h$pa!e$pa~Oj)bO~P!&iOh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|%[O!Q${O!]$|O!g%aO!j$xO#h%bO$V%_O$s%]O$u%^O$x%`O(R(tO(TTO(WUO(_$uO(w$}O(x%PO~Og(nP~P!+rO!O)gO!e)fO!]$]X$Y$]X$[$]X$^$]X$e$]X~O!e)fO!](yX$Y(yX$[(yX$^(yX$e(yX~O!O)gO~P!-{O!O)gO!](yX$Y(yX$[(yX$^(yX$e(yX~O!])iO$Y)mO$[)hO$^)hO$e)nO~O!Y)qO~P!(yO$[$hO$^$gO$e)uO~Ol$yX!O$yX#Q$yX'w$yX(w$yX(x$yX~OgkXg$yXlkX!ZkX#^kX~P!/qOv)wO(`)xO(a)zO~Ol*TO!O)|O'w)}O(w$}O(x%PO~Og){O~P!0uOg*UO~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<eO!Q*WO!]*XO!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(TTO(WUO(_$uO(w$}O(x%PO~O!Y*[O(R*VO!i(|P~P!1dO#i*^O~O!j*_O~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<eO!Q${O!]$|O!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(R*aO(TTO(WUO(_$uO(w$}O(x%PO~O!Y*dO!W(}P~P!3cOp*pOq!nO!Q*fO!`*nO!a*hO!b*hO!j*_O#Y*oO%_*jO(S!lO(TTO(WUO(c!mO~O![*mO~P!5WO#Q$dOl(^X!O(^X'w(^X(w(^X(x(^X!Z(^X#^(^X~Og(^X#}(^X~P!6YOl*uO#^*tOg(]X!Z(]X~O!Z*vOg([X~Oj%cO(R&XOg([P~Oq*yO~O!j+OO~O(R(tO~On+TO!Q%gO!Y#iO!]%hO!z]O#g#lO#h#iO(R%fO!i(qP~O!e#vO#i+UO~O!Q%gO!Y+WO!Z([O!]%hO(R%fO!W(tP~Oq'YO!Q+YO!Y+XO(TTO(WUO(c(zO~O![(vP~P!9]O!Z+ZOa)RX'x)RX~OP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO#y$WO#z$XO(_VO(p$YO(w#|O(x#}O~Oa!ha!Z!ha'x!ha'u!ha!W!ha!i!hat!ha!]!ha%h!ha!e!ha~P!:TOR#zO!O#yO!Q#{O!j#xO(_VOP!pa[!pap!pa!Z!pa!n!pa#P!pa#l!pa#m!pa#n!pa#o!pa#p!pa#q!pa#r!pa#s!pa#t!pa#u!pa#w!pa#y!pa#z!pa(p!pa(w!pa(x!pa~Oa!pa'x!pa'u!pa!W!pa!i!pat!pa!]!pa%h!pa!e!pa~P!<kOR#zO!O#yO!Q#{O!j#xO(_VOP!ra[!rap!ra!Z!ra!n!ra#P!ra#l!ra#m!ra#n!ra#o!ra#p!ra#q!ra#r!ra#s!ra#t!ra#u!ra#w!ra#y!ra#z!ra(p!ra(w!ra(x!ra~Oa!ra'x!ra'u!ra!W!ra!i!rat!ra!]!ra%h!ra!e!ra~P!?ROh%VOl+dO!]'^O%h+cO~O!e+fOa(ZX!](ZX'x(ZX!Z(ZX~Oa%mO!]XO'x%mO~Oh%VO!j%dO~Oh%VO!j%dO(R%fO~O!e#vO#i(vO~Ob+qO%i+rO(R+nO(TTO(WUO![)VP~O!Z+sO`)UX~O[+wO~O`+xO~O!]&OO(R%fO(S!lO`)UP~Oh%VO#^+}O~Oh%VOl,QO!]$|O~O!],SO~O!O,UO!]XO~O%m%uO~O!v,ZO~Oe,`O~Ob,aO(R#nO(TTO(WUO![)TP~Oe%|O~O%i!QO(R&XO~P=UO[,fO`,eO~OPYOQYOSfOdzOeyOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!guO!jZO!mYO!nYO!oYO!qvO!vxO!z]O$miO%g}O(TTO(WUO(_VO(m[O~O!]!eO!s!gO$V!kO(R!dO~P!FRO`,eOa%mO'x%mO~OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!v!hO$V!kO$miO(R!dO(TTO(WUO(_VO(m[O~Oa,kOj!OO!swO%k!OO%l!OO%m!OO~P!HkO!j&mO~O&[,qO~O!],sO~O&m,uO&o,vOP&jaQ&jaS&jaY&jaa&jad&jae&jaj&jan&jap&jaq&jar&jax&jaz&ja|&ja!Q&ja!U&ja!V&ja!]&ja!g&ja!j&ja!m&ja!n&ja!o&ja!q&ja!s&ja!v&ja!z&ja$V&ja$m&ja%g&ja%i&ja%k&ja%l&ja%m&ja%p&ja%r&ja%u&ja%v&ja%x&ja&U&ja&[&ja&^&ja&`&ja&b&ja&e&ja&k&ja&q&ja&s&ja&u&ja&w&ja&y&ja'u&ja(R&ja(T&ja(W&ja(_&ja(m&ja![&ja&c&jab&ja&h&ja~O(R,{O~Oh!cX!Z!PX![!PX!e!PX!e!cX!j!cX#^!PX~O!Z!cX![!cX~P# qO!e-QO#^-POh(hX!Z#fX![#fX!e(hX!j(hX~O!Z(hX![(hX~P#!dOh%VO!e-SO!j%dO!Z!_X![!_X~Oq!nO!Q!oO(TTO(WUO(c!mO~OP;vOQ;vOSfOd=rOe!iOnkOp;vOqkOrkOxkOz;vO|;vO!QWO!UkO!VkO!]!eO!g;yO!jZO!m;vO!n;vO!o;vO!q;zO!s;}O!v!hO$V!kO$m=pO(TTO(WUO(_VO(m[O~O(R<rO~P##yO!Z-WO![(gX~O![-YO~O!e-QO#^-PO!Z#fX![#fX~O!Z-ZO![(vX~O![-]O~O!a-^O!b-^O(S!lO~P##hO![-aO~P'_Ol-dO!]'^O~O!W-iO~Oq!ya!`!ya!a!ya!b!ya#R!ya#S!ya#T!ya#U!ya#V!ya#Y!ya#Z!ya(S!ya(T!ya(W!ya(c!ya(m!ya~P!#eO!n-nO#^-lO~PCVO!a-pO!b-pO(S!lO~PCuOa%mO#^-lO'x%mO~Oa%mO!e#vO#^-lO'x%mO~Oa%mO!e#vO!n-nO#^-lO'x%mO(p'nO~O'}'vO(O'vO(P-uO~Ot-vO~O!W'Ua!Z'Ua~P!:TO!Y-zO!W'UX!Z'UX~P%[O!Z(TO!W(fa~O!W(fa~PGpO!Z([O!W(ta~O!Q%gO!Y.OO!]%hO(R%fO!W'[X!Z'[X~O#^.QO!Z(ra!i(raa(ra'x(ra~O!e#vO~P#,PO!Z(hO!i(qa~O!Q%gO!]%hO#h.UO(R%fO~On.ZO!Q%gO!Y.WO!]%hO!z]O#g.YO#h.WO(R%fO!Z'_X!i'_X~OR._O!j#xO~Oh%VOl.bO!]'^O%h.aO~Oa#ai!Z#ai'x#ai'u#ai!W#ai!i#ait#ai!]#ai%h#ai!e#ai~P!:TOl=|O!O)|O'w)}O(w$}O(x%PO~O#i#]aa#]a#^#]a'x#]a!Z#]a!i#]a!]#]a!W#]a~P#.{O#i(^XP(^XR(^X[(^Xa(^Xp(^X!Q(^X!j(^X!n(^X#P(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#r(^X#s(^X#t(^X#u(^X#w(^X#y(^X#z(^X'x(^X(_(^X(p(^X!i(^X!W(^X'u(^Xt(^X!](^X%h(^X!e(^X~P!6YO!Z.oO!i(iX~P!:TO!i.rO~O!W.tO~OP$[OR#zO!O#yO!Q#{O!j#xO!n$[O(_VO[#kia#kip#ki!Z#ki#P#ki#m#ki#n#ki#o#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki'x#ki(p#ki(w#ki(x#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#l#ki~P#2kO#l$OO~P#2kOP$[OR#zOp$aO!O#yO!Q#{O!j#xO!n$[O#l$OO#m$PO#n$PO#o$PO(_VO[#kia#ki!Z#ki#P#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki'x#ki(p#ki(w#ki(x#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#p#ki~P#5YO#p$QO~P#5YOP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO(_VOa#ki!Z#ki#w#ki#y#ki#z#ki'x#ki(p#ki(w#ki(x#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#u#ki~P#7wOP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO(_VO(x#}Oa#ki!Z#ki#y#ki#z#ki'x#ki(p#ki(w#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#w$UO~P#:_O#w#ki~P#:_O#u$SO~P#7wOP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO(_VO(w#|O(x#}Oa#ki!Z#ki#z#ki'x#ki(p#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#y#ki~P#=TO#y$WO~P#=TOP]XR]X[]Xp]X!O]X!Q]X!j]X!n]X#P]X#Q]X#^]X#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X(_]X(p]X(w]X(x]X!Z]X![]X~O#}]X~P#?rOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO#u<TO#w<VO#y<XO#z<YO(_VO(p$YO(w#|O(x#}O~O#}.vO~P#BPO#Q$dO#^<`O$P<`O#}(eX![(eX~P! dOa'ba!Z'ba'x'ba'u'ba!i'ba!W'bat'ba!]'ba%h'ba!e'ba~P!:TO[#kia#kip#ki!Z#ki#P#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki'x#ki(p#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~OP$[OR#zO!O#yO!Q#{O!j#xO!n$[O#l$OO#m$PO#n$PO#o$PO(_VO(w#ki(x#ki~P#EROl=|O!O)|O'w)}O(w$}O(x%POP#kiR#ki!Q#ki!j#ki!n#ki#l#ki#m#ki#n#ki#o#ki(_#ki~P#ERO!Z.zOg(nX~P!0uOg.|O~Oa$Oi!Z$Oi'x$Oi'u$Oi!W$Oi!i$Oit$Oi!]$Oi%h$Oi!e$Oi~P!:TO$[.}O$^.}O~O$[/OO$^/OO~O!e)fO#^/PO!]$bX$Y$bX$[$bX$^$bX$e$bX~O!Y/QO~O!])iO$Y/SO$[)hO$^)hO$e/TO~O!Z<ZO![(dX~P#BPO![/UO~O!e)fO$e(yX~O$e/WO~Ot/XO~P!&iOv)wO(`)xO(a/[O~O!Q/_O~O(w$}Ol%`a!O%`a'w%`a(x%`a!Z%`a#^%`a~Og%`a#}%`a~P#LTO(x%POl%ba!O%ba'w%ba(w%ba!Z%ba#^%ba~Og%ba#}%ba~P#LvO!ZfX!efX!ifX!i$yX(pfX~P!/qO!Y/hO!Z([O(R/gO!W(tP!W(}P~P!1dOp*pO!`*nO!a*hO!b*hO!j*_O#Y*oO%_*jO(S!lO(TTO(WUO~Oq<oO!Q/iO!Y+XO![*mO(c<nO![(vP~P#NaO!i/jO~P#.{O!Z/kO!e#vO(p'nO!i(|X~O!i/pO~O!Q%gO!Y*[O!]%hO(R%fO!i(|P~O#i/rO~O!W$yX!Z$yX!e%QX~P!/qO!Z/sO!W(}X~P#.{O!e/uO~O!W/wO~OnkO(R/xO~P.iOh%VOp/}O!e#vO!j%dO(p'nO~O!e+fO~Oa%mO!Z0RO'x%mO~O![0TO~P!5WO!a0UO!b0UO(S!lO~P##hOq!nO!Q0VO(TTO(WUO(c!mO~O#Y0XO~Og%`a!Z%`a#^%`a#}%`a~P!0uOg%ba!Z%ba#^%ba#}%ba~P!0uOj%cO(R&XOg'kX!Z'kX~O!Z*vOg([a~Og0bO~OR0cO!O0cO!Q0dO#Q$dOl{a'w{a(w{a(x{a!Z{a#^{a~Og{a#}{a~P$&dO!O)|O'w)}Ol$ra(w$ra(x$ra!Z$ra#^$ra~Og$ra#}$ra~P$'`O!O)|O'w)}Ol$ta(w$ta(x$ta!Z$ta#^$ta~Og$ta#}$ta~P$(RO#i0gO~Og%Sa!Z%Sa#^%Sa#}%Sa~P!0uOl0iO#^0hOg(]a!Z(]a~O!e#vO~O#i0lO~O!Z+ZOa)Ra'x)Ra~OR#zO!O#yO!Q#{O!j#xO(_VOP!pi[!pip!pi!Z!pi!n!pi#P!pi#l!pi#m!pi#n!pi#o!pi#p!pi#q!pi#r!pi#s!pi#t!pi#u!pi#w!pi#y!pi#z!pi(p!pi(w!pi(x!pi~Oa!pi'x!pi'u!pi!W!pi!i!pit!pi!]!pi%h!pi!e!pi~P$*OOh%VOp%XOq$tOr$tOx%YOz%ZO|<eO!Q${O!]$|O!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(TTO(WUO(_$uO(w$}O(x%PO~On0vO%[0wO(R0tO~P$,fO!e+fOa(Za!](Za'x(Za!Z(Za~O#i0|O~O[]X!ZfX![fX~O!Z0}O![)VX~O![1PO~O[1QO~Ob1SO(R+nO(TTO(WUO~O!]&OO(R%fO`'sX!Z'sX~O!Z+sO`)Ua~O!i1VO~P!:TO[1YO~O`1ZO~O#^1^O~Ol1aO!]$|O~O(c(zO![)SP~Oh%VOl1jO!]1gO%h1iO~O[1tO!Z1rO![)TX~O![1uO~O`1wOa%mO'x%mO~O(R#nO(TTO(WUO~O#Q$dO#^$eO$P$eOP(eXR(eX[(eXp(eX!O(eX!Q(eX!Z(eX!j(eX!n(eX#P(eX#l(eX#m(eX#n(eX#o(eX#p(eX#q(eX#r(eX#s(eX#u(eX#w(eX#y(eX#z(eX(_(eX(p(eX(w(eX(x(eX~O#t1zO&Y1{Oa(eX~P$2PO#^$eO#t1zO&Y1{O~Oa1}O~P%[Oa2PO~O&c2SOP&aiQ&aiS&aiY&aia&aid&aie&aij&ain&aip&aiq&air&aix&aiz&ai|&ai!Q&ai!U&ai!V&ai!]&ai!g&ai!j&ai!m&ai!n&ai!o&ai!q&ai!s&ai!v&ai!z&ai$V&ai$m&ai%g&ai%i&ai%k&ai%l&ai%m&ai%p&ai%r&ai%u&ai%v&ai%x&ai&U&ai&[&ai&^&ai&`&ai&b&ai&e&ai&k&ai&q&ai&s&ai&u&ai&w&ai&y&ai'u&ai(R&ai(T&ai(W&ai(_&ai(m&ai![&aib&ai&h&ai~Ob2YO![2WO&h2XO~P`O!]XO!j2[O~O&o,vOP&jiQ&jiS&jiY&jia&jid&jie&jij&jin&jip&jiq&jir&jix&jiz&ji|&ji!Q&ji!U&ji!V&ji!]&ji!g&ji!j&ji!m&ji!n&ji!o&ji!q&ji!s&ji!v&ji!z&ji$V&ji$m&ji%g&ji%i&ji%k&ji%l&ji%m&ji%p&ji%r&ji%u&ji%v&ji%x&ji&U&ji&[&ji&^&ji&`&ji&b&ji&e&ji&k&ji&q&ji&s&ji&u&ji&w&ji&y&ji'u&ji(R&ji(T&ji(W&ji(_&ji(m&ji![&ji&c&jib&ji&h&ji~O!W2bO~O!Z!_a![!_a~P#BPOq!nO!Q!oO!Y2hO(c!mO!Z'VX!['VX~P@]O!Z-WO![(ga~O!Z']X![']X~P!9]O!Z-ZO![(va~O![2oO~P'_Oa%mO#^2xO'x%mO~Oa%mO!e#vO#^2xO'x%mO~Oa%mO!e#vO!n2|O#^2xO'x%mO(p'nO~Oa%mO'x%mO~P!:TO!Z$_Ot$pa~O!W'Ui!Z'Ui~P!:TO!Z(TO!W(fi~O!Z([O!W(ti~O!W(ui!Z(ui~P!:TO!Z(ri!i(ria(ri'x(ri~P!:TO#^3OO!Z(ri!i(ria(ri'x(ri~O!Z(hO!i(qi~O!Q%gO!]%hO!z]O#g3TO#h3SO(R%fO~O!Q%gO!]%hO#h3SO(R%fO~Ol3[O!]'^O%h3ZO~Oh%VOl3[O!]'^O%h3ZO~O#i%`aP%`aR%`a[%`aa%`ap%`a!Q%`a!j%`a!n%`a#P%`a#l%`a#m%`a#n%`a#o%`a#p%`a#q%`a#r%`a#s%`a#t%`a#u%`a#w%`a#y%`a#z%`a'x%`a(_%`a(p%`a!i%`a!W%`a'u%`at%`a!]%`a%h%`a!e%`a~P#LTO#i%baP%baR%ba[%baa%bap%ba!Q%ba!j%ba!n%ba#P%ba#l%ba#m%ba#n%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#w%ba#y%ba#z%ba'x%ba(_%ba(p%ba!i%ba!W%ba'u%bat%ba!]%ba%h%ba!e%ba~P#LvO#i%`aP%`aR%`a[%`aa%`ap%`a!Q%`a!Z%`a!j%`a!n%`a#P%`a#l%`a#m%`a#n%`a#o%`a#p%`a#q%`a#r%`a#s%`a#t%`a#u%`a#w%`a#y%`a#z%`a'x%`a(_%`a(p%`a!i%`a!W%`a'u%`a#^%`at%`a!]%`a%h%`a!e%`a~P#.{O#i%baP%baR%ba[%baa%bap%ba!Q%ba!Z%ba!j%ba!n%ba#P%ba#l%ba#m%ba#n%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#w%ba#y%ba#z%ba'x%ba(_%ba(p%ba!i%ba!W%ba'u%ba#^%bat%ba!]%ba%h%ba!e%ba~P#.{O#i{aP{a[{aa{ap{a!j{a!n{a#P{a#l{a#m{a#n{a#o{a#p{a#q{a#r{a#s{a#t{a#u{a#w{a#y{a#z{a'x{a(_{a(p{a!i{a!W{a'u{at{a!]{a%h{a!e{a~P$&dO#i$raP$raR$ra[$raa$rap$ra!Q$ra!j$ra!n$ra#P$ra#l$ra#m$ra#n$ra#o$ra#p$ra#q$ra#r$ra#s$ra#t$ra#u$ra#w$ra#y$ra#z$ra'x$ra(_$ra(p$ra!i$ra!W$ra'u$rat$ra!]$ra%h$ra!e$ra~P$'`O#i$taP$taR$ta[$taa$tap$ta!Q$ta!j$ta!n$ta#P$ta#l$ta#m$ta#n$ta#o$ta#p$ta#q$ta#r$ta#s$ta#t$ta#u$ta#w$ta#y$ta#z$ta'x$ta(_$ta(p$ta!i$ta!W$ta'u$tat$ta!]$ta%h$ta!e$ta~P$(RO#i%SaP%SaR%Sa[%Saa%Sap%Sa!Q%Sa!Z%Sa!j%Sa!n%Sa#P%Sa#l%Sa#m%Sa#n%Sa#o%Sa#p%Sa#q%Sa#r%Sa#s%Sa#t%Sa#u%Sa#w%Sa#y%Sa#z%Sa'x%Sa(_%Sa(p%Sa!i%Sa!W%Sa'u%Sa#^%Sat%Sa!]%Sa%h%Sa!e%Sa~P#.{Oa#aq!Z#aq'x#aq'u#aq!W#aq!i#aqt#aq!]#aq%h#aq!e#aq~P!:TO!Y3dO!Z'WX!i'WX~P%[O!Z.oO!i(ia~O!Z.oO!i(ia~P!:TO!W3gO~O#}!la![!la~PKZO#}!ha!Z!ha![!ha~P#BPO#}!pa![!pa~P!<kO#}!ra![!ra~P!?ROg'ZX!Z'ZX~P!+rO!Z.zOg(na~OSfO!]3{O$c3|O~O![4QO~Ot4RO~P#.{Oa$lq!Z$lq'x$lq'u$lq!W$lq!i$lqt$lq!]$lq%h$lq!e$lq~P!:TO!W4TO~P!&iO!Q4UO~O!O)|O'w)}O(x%POl'ga(w'ga!Z'ga#^'ga~Og'ga#}'ga~P%+uO!O)|O'w)}Ol'ia(w'ia(x'ia!Z'ia#^'ia~Og'ia#}'ia~P%,hO(p$YO~P#.{O!WfX!W$yX!ZfX!Z$yX!e%QX#^fX~P!/qO(R<xO~P!1dO!Q%gO!Y4XO!]%hO(R%fO!Z'cX!i'cX~O!Z/kO!i(|a~O!Z/kO!e#vO!i(|a~O!Z/kO!e#vO(p'nO!i(|a~Og${i!Z${i#^${i#}${i~P!0uO!Y4aO!W'eX!Z'eX~P!3cO!Z/sO!W(}a~O!Z/sO!W(}a~P#.{OP]XR]X[]Xp]X!O]X!Q]X!W]X!Z]X!j]X!n]X#P]X#Q]X#^]X#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X(_]X(p]X(w]X(x]X~O!e%XX#t%XX~P%0XO!e#vO#t4fO~Oh%VO!e#vO!j%dO~Oh%VOp4kO!j%dO(p'nO~Op4pO!e#vO(p'nO~Oq!nO!Q4qO(TTO(WUO(c!mO~O(w$}Ol%`i!O%`i'w%`i(x%`i!Z%`i#^%`i~Og%`i#}%`i~P%3xO(x%POl%bi!O%bi'w%bi(w%bi!Z%bi#^%bi~Og%bi#}%bi~P%4kOg(]i!Z(]i~P!0uO#^4wOg(]i!Z(]i~P!0uO!i4zO~Oa$nq!Z$nq'x$nq'u$nq!W$nq!i$nqt$nq!]$nq%h$nq!e$nq~P!:TO!W5QO~O!Z5RO!])OX~P#.{Oa]Xa$yX!]]X!]$yX%]]X'x]X'x$yX!Z]X!Z$yX~P!/qO%]5UOa%Za!]%Za'x%Za!Z%Za~OlmX!OmX'wmX(wmX(xmX~P%7nOn5VO(R#nO~Ob5]O%i5^O(R+nO(TTO(WUO!Z'rX!['rX~O!Z0}O![)Va~O[5bO~O`5cO~Oa%mO'x%mO~P#.{O!Z5kO#^5mO![)SX~O![5nO~Op5tOq!nO!Q*fO!`!yO!a!vO!b!vO!z;wO#R!pO#S!pO#T!pO#U!pO#V!pO#Y5sO#Z!zO(S!lO(TTO(WUO(c!mO(m!sO~O![5rO~P%:ROl5yO!]1gO%h5xO~Oh%VOl5yO!]1gO%h5xO~Ob6QO(R#nO(TTO(WUO!Z'qX!['qX~O!Z1rO![)Ta~O(TTO(WUO(c6SO~O`6WO~O#t6ZO&Y6[O~PMvO!i6]O~P%[Oa6_O~Oa6_O~P%[Ob2YO![6dO&h2XO~P`O!e6fO~O!e6hOh(hi!Z(hi![(hi!e(hi!j(hip(hi(p(hi~O!Z#fi![#fi~P#BPO#^6iO!Z#fi![#fi~O!Z!_i![!_i~P#BPOa%mO#^6rO'x%mO~Oa%mO!e#vO#^6rO'x%mO~O!Z(rq!i(rqa(rq'x(rq~P!:TO!Z(hO!i(qq~O!Q%gO!]%hO#h6yO(R%fO~O!]'^O%h6|O~Ol7QO!]'^O%h6|O~O#i'gaP'gaR'ga['gaa'gap'ga!Q'ga!j'ga!n'ga#P'ga#l'ga#m'ga#n'ga#o'ga#p'ga#q'ga#r'ga#s'ga#t'ga#u'ga#w'ga#y'ga#z'ga'x'ga(_'ga(p'ga!i'ga!W'ga'u'gat'ga!]'ga%h'ga!e'ga~P%+uO#i'iaP'iaR'ia['iaa'iap'ia!Q'ia!j'ia!n'ia#P'ia#l'ia#m'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#w'ia#y'ia#z'ia'x'ia(_'ia(p'ia!i'ia!W'ia'u'iat'ia!]'ia%h'ia!e'ia~P%,hO#i${iP${iR${i[${ia${ip${i!Q${i!Z${i!j${i!n${i#P${i#l${i#m${i#n${i#o${i#p${i#q${i#r${i#s${i#t${i#u${i#w${i#y${i#z${i'x${i(_${i(p${i!i${i!W${i'u${i#^${it${i!]${i%h${i!e${i~P#.{O#i%`iP%`iR%`i[%`ia%`ip%`i!Q%`i!j%`i!n%`i#P%`i#l%`i#m%`i#n%`i#o%`i#p%`i#q%`i#r%`i#s%`i#t%`i#u%`i#w%`i#y%`i#z%`i'x%`i(_%`i(p%`i!i%`i!W%`i'u%`it%`i!]%`i%h%`i!e%`i~P%3xO#i%biP%biR%bi[%bia%bip%bi!Q%bi!j%bi!n%bi#P%bi#l%bi#m%bi#n%bi#o%bi#p%bi#q%bi#r%bi#s%bi#t%bi#u%bi#w%bi#y%bi#z%bi'x%bi(_%bi(p%bi!i%bi!W%bi'u%bit%bi!]%bi%h%bi!e%bi~P%4kO!Z'Wa!i'Wa~P!:TO!Z.oO!i(ii~O#}#ai!Z#ai![#ai~P#BPOP$[OR#zO!O#yO!Q#{O!j#xO!n$[O(_VO[#kip#ki#P#ki#m#ki#n#ki#o#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki#}#ki(p#ki(w#ki(x#ki!Z#ki![#ki~O#l#ki~P%MQO#l<PO~P%MQOP$[OR#zOp<]O!O#yO!Q#{O!j#xO!n$[O#l<PO#m<QO#n<QO#o<QO(_VO[#ki#P#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki#}#ki(p#ki(w#ki(x#ki!Z#ki![#ki~O#p#ki~P& YO#p<RO~P& YOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO(_VO#w#ki#y#ki#z#ki#}#ki(p#ki(w#ki(x#ki!Z#ki![#ki~O#u#ki~P&#bOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO#u<TO(_VO(x#}O#y#ki#z#ki#}#ki(p#ki(w#ki!Z#ki![#ki~O#w<VO~P&%cO#w#ki~P&%cO#u<TO~P&#bOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO#u<TO#w<VO(_VO(w#|O(x#}O#z#ki#}#ki(p#ki!Z#ki![#ki~O#y#ki~P&'rO#y<XO~P&'rOa#{y!Z#{y'x#{y'u#{y!W#{y!i#{yt#{y!]#{y%h#{y!e#{y~P!:TO[#kip#ki#P#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki#}#ki(p#ki!Z#ki![#ki~OP$[OR#zO!O#yO!Q#{O!j#xO!n$[O#l<PO#m<QO#n<QO#o<QO(_VO(w#ki(x#ki~P&*nOl=}O!O)|O'w)}O(w$}O(x%POP#kiR#ki!Q#ki!j#ki!n#ki#l#ki#m#ki#n#ki#o#ki(_#ki~P&*nO#Q$dOP(^XR(^X[(^Xl(^Xp(^X!O(^X!Q(^X!j(^X!n(^X#P(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#r(^X#s(^X#t(^X#u(^X#w(^X#y(^X#z(^X#}(^X'w(^X(_(^X(p(^X(w(^X(x(^X!Z(^X![(^X~O#}$Oi!Z$Oi![$Oi~P#BPO#}!pi![!pi~P$*OOg'Za!Z'Za~P!0uO![7dO~O!Z'ba!['ba~P#BPO!W7eO~P#.{O!e#vO(p'nO!Z'ca!i'ca~O!Z/kO!i(|i~O!Z/kO!e#vO!i(|i~Og${q!Z${q#^${q#}${q~P!0uO!W'ea!Z'ea~P#.{O!e7lO~O!Z/sO!W(}i~P#.{O!Z/sO!W(}i~O!W7oO~Oh%VOp7tO!j%dO(p'nO~O!e#vO#t7vO~Op7yO!e#vO(p'nO~O!O)|O'w)}O(x%POl'ha(w'ha!Z'ha#^'ha~Og'ha#}'ha~P&3oO!O)|O'w)}Ol'ja(w'ja(x'ja!Z'ja#^'ja~Og'ja#}'ja~P&4bO!W7{O~Og$}q!Z$}q#^$}q#}$}q~P!0uOg(]q!Z(]q~P!0uO#^7|Og(]q!Z(]q~P!0uOa$ny!Z$ny'x$ny'u$ny!W$ny!i$nyt$ny!]$ny%h$ny!e$ny~P!:TO!e6hO~O!Z5RO!])Oa~O!]'^OP$SaR$Sa[$Sap$Sa!O$Sa!Q$Sa!Z$Sa!j$Sa!n$Sa#P$Sa#l$Sa#m$Sa#n$Sa#o$Sa#p$Sa#q$Sa#r$Sa#s$Sa#t$Sa#u$Sa#w$Sa#y$Sa#z$Sa(_$Sa(p$Sa(w$Sa(x$Sa~O%h6|O~P&7SO%]8QOa%Zi!]%Zi'x%Zi!Z%Zi~Oa#ay!Z#ay'x#ay'u#ay!W#ay!i#ayt#ay!]#ay%h#ay!e#ay~P!:TO[8SO~Ob8UO(R+nO(TTO(WUO~O!Z0}O![)Vi~O`8YO~O(c(zO!Z'nX!['nX~O!Z5kO![)Sa~O![8cO~P%:RO(m!sO~P$$oO#Y8dO~O!]1gO~O!]1gO%h8fO~Ol8iO!]1gO%h8fO~O[8nO!Z'qa!['qa~O!Z1rO![)Ti~O!i8rO~O!i8sO~O!i8vO~O!i8vO~P%[Oa8xO~O!e8yO~O!i8zO~O!Z(ui![(ui~P#BPOa%mO#^9SO'x%mO~O!Z(ry!i(rya(ry'x(ry~P!:TO!Z(hO!i(qy~O%h9VO~P&7SO!]'^O%h9VO~O#i${qP${qR${q[${qa${qp${q!Q${q!Z${q!j${q!n${q#P${q#l${q#m${q#n${q#o${q#p${q#q${q#r${q#s${q#t${q#u${q#w${q#y${q#z${q'x${q(_${q(p${q!i${q!W${q'u${q#^${qt${q!]${q%h${q!e${q~P#.{O#i'haP'haR'ha['haa'hap'ha!Q'ha!j'ha!n'ha#P'ha#l'ha#m'ha#n'ha#o'ha#p'ha#q'ha#r'ha#s'ha#t'ha#u'ha#w'ha#y'ha#z'ha'x'ha(_'ha(p'ha!i'ha!W'ha'u'hat'ha!]'ha%h'ha!e'ha~P&3oO#i'jaP'jaR'ja['jaa'jap'ja!Q'ja!j'ja!n'ja#P'ja#l'ja#m'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#w'ja#y'ja#z'ja'x'ja(_'ja(p'ja!i'ja!W'ja'u'jat'ja!]'ja%h'ja!e'ja~P&4bO#i$}qP$}qR$}q[$}qa$}qp$}q!Q$}q!Z$}q!j$}q!n$}q#P$}q#l$}q#m$}q#n$}q#o$}q#p$}q#q$}q#r$}q#s$}q#t$}q#u$}q#w$}q#y$}q#z$}q'x$}q(_$}q(p$}q!i$}q!W$}q'u$}q#^$}qt$}q!]$}q%h$}q!e$}q~P#.{O!Z'Wi!i'Wi~P!:TO#}#aq!Z#aq![#aq~P#BPO(w$}OP%`aR%`a[%`ap%`a!Q%`a!j%`a!n%`a#P%`a#l%`a#m%`a#n%`a#o%`a#p%`a#q%`a#r%`a#s%`a#t%`a#u%`a#w%`a#y%`a#z%`a#}%`a(_%`a(p%`a!Z%`a![%`a~Ol%`a!O%`a'w%`a(x%`a~P&HgO(x%POP%baR%ba[%bap%ba!Q%ba!j%ba!n%ba#P%ba#l%ba#m%ba#n%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#w%ba#y%ba#z%ba#}%ba(_%ba(p%ba!Z%ba![%ba~Ol%ba!O%ba'w%ba(w%ba~P&JnOl=}O!O)|O'w)}O(x%PO~P&HgOl=}O!O)|O'w)}O(w$}O~P&JnOR0cO!O0cO!Q0dO#Q$dOP{a[{al{ap{a!j{a!n{a#P{a#l{a#m{a#n{a#o{a#p{a#q{a#r{a#s{a#t{a#u{a#w{a#y{a#z{a#}{a'w{a(_{a(p{a(w{a(x{a!Z{a![{a~O!O)|O'w)}OP$raR$ra[$ral$rap$ra!Q$ra!j$ra!n$ra#P$ra#l$ra#m$ra#n$ra#o$ra#p$ra#q$ra#r$ra#s$ra#t$ra#u$ra#w$ra#y$ra#z$ra#}$ra(_$ra(p$ra(w$ra(x$ra!Z$ra![$ra~O!O)|O'w)}OP$taR$ta[$tal$tap$ta!Q$ta!j$ta!n$ta#P$ta#l$ta#m$ta#n$ta#o$ta#p$ta#q$ta#r$ta#s$ta#t$ta#u$ta#w$ta#y$ta#z$ta#}$ta(_$ta(p$ta(w$ta(x$ta!Z$ta![$ta~Ol=}O!O)|O'w)}O(w$}O(x%PO~OP%SaR%Sa[%Sap%Sa!Q%Sa!j%Sa!n%Sa#P%Sa#l%Sa#m%Sa#n%Sa#o%Sa#p%Sa#q%Sa#r%Sa#s%Sa#t%Sa#u%Sa#w%Sa#y%Sa#z%Sa#}%Sa(_%Sa(p%Sa!Z%Sa![%Sa~P'%sO#}$lq!Z$lq![$lq~P#BPO#}$nq!Z$nq![$nq~P#BPO![9dO~O#}9eO~P!0uO!e#vO!Z'ci!i'ci~O!e#vO(p'nO!Z'ci!i'ci~O!Z/kO!i(|q~O!W'ei!Z'ei~P#.{O!Z/sO!W(}q~Op9lO!e#vO(p'nO~O[9nO!W9mO~P#.{O!W9mO~O!e#vO#t9tO~Og(]y!Z(]y~P!0uO!Z'la!]'la~P#.{Oa%Zq!]%Zq'x%Zq!Z%Zq~P#.{O[9yO~O!Z0}O![)Vq~O#^9}O!Z'na!['na~O!Z5kO![)Si~P#BPO!Q:PO~O!]1gO%h:SO~O(TTO(WUO(c:XO~O!Z1rO![)Tq~O!i:[O~O!i:]O~O!i:^O~O!i:^O~P%[O#^:aO!Z#fy![#fy~O!Z#fy![#fy~P#BPO%h:fO~P&7SO!]'^O%h:fO~O#}#{y!Z#{y![#{y~P#BPOP${iR${i[${ip${i!Q${i!j${i!n${i#P${i#l${i#m${i#n${i#o${i#p${i#q${i#r${i#s${i#t${i#u${i#w${i#y${i#z${i#}${i(_${i(p${i!Z${i![${i~P'%sO!O)|O'w)}O(x%POP'gaR'ga['gal'gap'ga!Q'ga!j'ga!n'ga#P'ga#l'ga#m'ga#n'ga#o'ga#p'ga#q'ga#r'ga#s'ga#t'ga#u'ga#w'ga#y'ga#z'ga#}'ga(_'ga(p'ga(w'ga!Z'ga!['ga~O!O)|O'w)}OP'iaR'ia['ial'iap'ia!Q'ia!j'ia!n'ia#P'ia#l'ia#m'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#w'ia#y'ia#z'ia#}'ia(_'ia(p'ia(w'ia(x'ia!Z'ia!['ia~O(w$}OP%`iR%`i[%`il%`ip%`i!O%`i!Q%`i!j%`i!n%`i#P%`i#l%`i#m%`i#n%`i#o%`i#p%`i#q%`i#r%`i#s%`i#t%`i#u%`i#w%`i#y%`i#z%`i#}%`i'w%`i(_%`i(p%`i(x%`i!Z%`i![%`i~O(x%POP%biR%bi[%bil%bip%bi!O%bi!Q%bi!j%bi!n%bi#P%bi#l%bi#m%bi#n%bi#o%bi#p%bi#q%bi#r%bi#s%bi#t%bi#u%bi#w%bi#y%bi#z%bi#}%bi'w%bi(_%bi(p%bi(w%bi!Z%bi![%bi~O#}$ny!Z$ny![$ny~P#BPO#}#ay!Z#ay![#ay~P#BPO!e#vO!Z'cq!i'cq~O!Z/kO!i(|y~O!W'eq!Z'eq~P#.{Op:pO!e#vO(p'nO~O[:tO!W:sO~P#.{O!W:sO~Og(]!R!Z(]!R~P!0uOa%Zy!]%Zy'x%Zy!Z%Zy~P#.{O!Z0}O![)Vy~O!Z5kO![)Sq~O(R:zO~O!]1gO%h:}O~O!i;QO~O%h;VO~P&7SOP${qR${q[${qp${q!Q${q!j${q!n${q#P${q#l${q#m${q#n${q#o${q#p${q#q${q#r${q#s${q#t${q#u${q#w${q#y${q#z${q#}${q(_${q(p${q!Z${q![${q~P'%sO!O)|O'w)}O(x%POP'haR'ha['hal'hap'ha!Q'ha!j'ha!n'ha#P'ha#l'ha#m'ha#n'ha#o'ha#p'ha#q'ha#r'ha#s'ha#t'ha#u'ha#w'ha#y'ha#z'ha#}'ha(_'ha(p'ha(w'ha!Z'ha!['ha~O!O)|O'w)}OP'jaR'ja['jal'jap'ja!Q'ja!j'ja!n'ja#P'ja#l'ja#m'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#w'ja#y'ja#z'ja#}'ja(_'ja(p'ja(w'ja(x'ja!Z'ja!['ja~OP$}qR$}q[$}qp$}q!Q$}q!j$}q!n$}q#P$}q#l$}q#m$}q#n$}q#o$}q#p$}q#q$}q#r$}q#s$}q#t$}q#u$}q#w$}q#y$}q#z$}q#}$}q(_$}q(p$}q!Z$}q![$}q~P'%sOg%d!Z!Z%d!Z#^%d!Z#}%d!Z~P!0uO!W;ZO~P#.{Op;[O!e#vO(p'nO~O[;^O!W;ZO~P#.{O!Z'nq!['nq~P#BPO!Z#f!Z![#f!Z~P#BPO#i%d!ZP%d!ZR%d!Z[%d!Za%d!Zp%d!Z!Q%d!Z!Z%d!Z!j%d!Z!n%d!Z#P%d!Z#l%d!Z#m%d!Z#n%d!Z#o%d!Z#p%d!Z#q%d!Z#r%d!Z#s%d!Z#t%d!Z#u%d!Z#w%d!Z#y%d!Z#z%d!Z'x%d!Z(_%d!Z(p%d!Z!i%d!Z!W%d!Z'u%d!Z#^%d!Zt%d!Z!]%d!Z%h%d!Z!e%d!Z~P#.{Op;fO!e#vO(p'nO~O!W;gO~P#.{Op;nO!e#vO(p'nO~O!W;oO~P#.{OP%d!ZR%d!Z[%d!Zp%d!Z!Q%d!Z!j%d!Z!n%d!Z#P%d!Z#l%d!Z#m%d!Z#n%d!Z#o%d!Z#p%d!Z#q%d!Z#r%d!Z#s%d!Z#t%d!Z#u%d!Z#w%d!Z#y%d!Z#z%d!Z#}%d!Z(_%d!Z(p%d!Z!Z%d!Z![%d!Z~P'%sOp;rO!e#vO(p'nO~Ot(dX~P1qO!O%qO~P!(yO(S!lO~P!(yO!WfX!ZfX#^fX~P%0XOP]XR]X[]Xp]X!O]X!Q]X!Z]X!ZfX!j]X!n]X#P]X#Q]X#^]X#^fX#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X(_]X(p]X(w]X(x]X~O!efX!i]X!ifX(pfX~P'JlOP;vOQ;vOSfOd=rOe!iOnkOp;vOqkOrkOxkOz;vO|;vO!QWO!UkO!VkO!]XO!g;yO!jZO!m;vO!n;vO!o;vO!q;zO!s;}O!v!hO$V!kO$m=pO(R)ZO(TTO(WUO(_VO(m[O~O!Z<ZO![$pa~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<fO!Q${O!]$|O!g=wO!j$xO#h<lO$V%_O$s<hO$u<jO$x%`O(R(tO(TTO(WUO(_$uO(w$}O(x%PO~Oj)bO~P( bOp!cX(p!cX~P# qOp(hX(p(hX~P#!dO![]X![fX~P'JlO!WfX!W$yX!ZfX!Z$yX#^fX~P!/qO#i<OO~O!e#vO#i<OO~O#^<`O~O#t<SO~O#^<pO!Z(uX![(uX~O#^<`O!Z(sX![(sX~O#i<qO~Og<sO~P!0uO#i<yO~O#i<zO~O!e#vO#i<{O~O!e#vO#i<qO~O#}<|O~P#BPO#i<}O~O#i=OO~O#i=TO~O#i=UO~O#i=VO~O#i=WO~O#}=XO~P!0uO#}=YO~P!0uO#Q#R#S#U#V#Y#g#h#s$m$s$u$x%[%]%g%h%i%p%r%u%v%x%z~'|T#m!V'z(S#nq#l#op!O'{$['{(R$^(c~\",\n goto: \"$8f)ZPPPPPP)[PP)_P)pP+Q/VPPPP6aPP6wPP<oP@cP@yP@yPPP@yPCRP@yP@yP@yPCVPC[PCyPHsPPPHwPPPPHwKzPPPLQLrPHwPHwPP! QHwPPPHwPHwP!#XHwP!&o!'t!'}P!(q!(u!(q!,SPPPPPPP!,s!'tPP!-T!.uP!2RHwHw!2W!5d!:Q!:Q!>PPPP!>XHwPPPPPPPPPP!AhP!BuPPHw!DWPHwPHwHwHwHwHwPHw!EjP!HtP!KzP!LO!LY!L^!L^P!HqP!Lb!LbP# hP# lHwPHw# r#$wCV@yP@yP@y@yP#&U@y@y#(h@y#+`@y#-l@y@y#.[#0p#0p#0u#1O#0p#1ZPP#0pP@y#1s@y#5r@y@y6aPPP#9wPPP#:b#:bP#:bP#:x#:bPP#;OP#:uP#:u#;c#:u#;}#<T#<W)_#<Z)_P#<b#<b#<bP)_P)_P)_P)_PP)_P#<h#<kP#<k)_P#<oP#<rP)_P)_P)_P)_P)_P)_)_PP#<x#=O#=Z#=a#=g#=m#=s#>R#>X#>c#>i#>s#>y#?Z#?a#@R#@e#@k#@q#AP#Af#CZ#Ci#Cp#E[#Ej#G[#Gj#Gp#Gv#G|#HW#H^#Hd#Hn#IQ#IWPPPPPPPPPPP#I^PPPPPPP#JR#MY#Nr#Ny$ RPPP$&mP$&v$)o$0Y$0]$0`$1_$1b$1i$1qP$1w$1zP$2h$2l$3d$4r$4w$5_PP$5d$5j$5n$5q$5u$5y$6u$7^$7u$7y$7|$8P$8V$8Y$8^$8bR!|RoqOXst!Z#d%l&p&r&s&u,n,s2S2VY!vQ'^-`1g5qQ%svQ%{yQ&S|Q&h!VS'U!e-WQ'd!iS'j!r!yU*h$|*X*lQ+l%|Q+y&UQ,_&bQ-^']Q-h'eQ-p'kQ0U*nQ1q,`R<m;z%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y,k,n,s-d-l-z.Q.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3d4q5y6Z6[6_6r8i8x9SS#q];w!r)]$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sU*{%[<e<fQ+q&OQ,a&eQ,h&mQ0r+dQ0u+fQ1S+rQ1y,fQ3W.bQ5V0wQ5]0}Q6Q1rQ7O3[Q8U5^R9Y7Q'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=s!S!nQ!r!v!y!z$|'U']'^'j'k'l*h*l*n*o-W-^-`-p0U0X1g5q5s%[$ti#v$b$c$d$x${%O%Q%]%^%b)w*P*R*T*W*^*d*t*u+c+f+},Q.a.z/_/h/r/s/u0Y0[0g0h0i1^1a1i3Z4U4V4a4f4w5R5U5x6|7l7v7|8Q8f9V9e9n9t:S:f:t:};V;^<^<_<a<b<c<d<g<h<i<j<k<l<t<u<v<w<y<z<}=O=P=Q=R=S=T=U=X=Y=p=x=y=|=}Q&V|Q'S!eS'Y%h-ZQ+q&OQ,a&eQ0f+OQ1S+rQ1X+xQ1x,eQ1y,fQ5]0}Q5f1ZQ6Q1rQ6T1tQ6U1wQ8U5^Q8X5cQ8q6WQ9|8YQ:Y8nR<o*XrnOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VR,c&i&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=r=s[#]WZ#W#Z'V(R!b%im#h#i#l$x%d%g([(f(g(h*W*[*_+W+X+Z,j-Q.O.U.V.W.Y/h/k2[3S3T4X6h6yQ%vxQ%zyS&P|&UQ&]!TQ'a!hQ'c!iQ(o#sS+k%{%|Q+o&OQ,Y&`Q,^&bS-g'd'eQ.d(pQ0{+lQ1R+rQ1T+sQ1W+wQ1l,ZS1p,_,`Q2t-hQ5[0}Q5`1QQ5e1YQ6P1qQ8T5^Q8W5bQ9x8SR:w9y!U$zi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y!^%xy!i!u%z%{%|'T'c'd'e'i's*g+k+l-T-g-h-o/{0O0{2m2t2{4i4j4m7s9pQ+e%vQ,O&YQ,R&ZQ,]&bQ.c(oQ1k,YU1o,^,_,`Q3].dQ5z1lS6O1p1qQ8m6P#f=t#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}o=u<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=YW%Ti%V*v=pS&Y!Q&gQ&Z!RQ&[!SQ+S%cR+|&W%]%Si#v$b$c$d$x${%O%Q%]%^%b)w*P*R*T*W*^*d*t*u+c+f+},Q.a.z/_/h/r/s/u0Y0[0g0h0i1^1a1i3Z4U4V4a4f4w5R5U5x6|7l7v7|8Q8f9V9e9n9t:S:f:t:};V;^<^<_<a<b<c<d<g<h<i<j<k<l<t<u<v<w<y<z<}=O=P=Q=R=S=T=U=X=Y=p=x=y=|=}T)x$u)yV*{%[<e<fW'Y!e%h*X-ZS({#y#zQ+`%qQ+v&RS.](k(lQ1b,SQ4x0cR8^5k'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=s$i$^c#Y#e%p%r%t(Q(W(r(w)P)Q)R)S)T)U)V)W)X)Y)[)^)`)e)o+a+u-U-s-x-}.P.n.q.u.w.x.y/]0j2c2f2v2}3c3h3i3j3k3l3m3n3o3p3q3r3s3t3w3x4P5O5Y6k6q6v7V7W7a7b8`8|9Q9[9b9c:c:y;R;x=gT#TV#U'RkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sQ'W!eR2i-W!W!nQ!e!r!v!y!z$|'U']'^'j'k'l*X*h*l*n*o-W-^-`-p0U0X1g5q5sR1d,UnqOXst!Z#d%l&p&r&s&u,n,s2S2VQ&w!^Q't!xS(q#u<OQ+i%yQ,W&]Q,X&_Q-e'bQ-r'mS.m(v<qS0k+U<{Q0y+jQ1f,VQ2Z,uQ2],vQ2e-RQ2r-fQ2u-jS5P0l=VQ5W0zS5Z0|=WQ6j2gQ6n2sQ6s2zQ8R5XQ8}6lQ9O6oQ9R6tR:`8z$d$]c#Y#e%r%t(Q(W(r(w)P)Q)R)S)T)U)V)W)X)Y)[)^)`)e)o+a+u-U-s-x-}.P.n.q.u.x.y/]0j2c2f2v2}3c3h3i3j3k3l3m3n3o3p3q3r3s3t3w3x4P5O5Y6k6q6v7V7W7a7b8`8|9Q9[9b9c:c:y;R;x=gS(m#p'gQ(}#zS+_%p.wS.^(l(nR3U._'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sS#q];wQ&r!XQ&s!YQ&u![Q&v!]R2R,qQ'_!hQ+b%vQ-c'aS.`(o+eQ2p-bW3Y.c.d0q0sQ6m2qW6z3V3X3]5TU9U6{6}7PU:e9W9X9ZS;T:d:gQ;b;UR;j;cU!wQ'^-`T5o1g5q!Q_OXZ`st!V!Z#d#h%d%l&g&i&p&r&s&u(h,n,s.V2S2V]!pQ!r'^-`1g5qT#q];w%^{OPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SS({#y#zS.](k(l!s=^$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sU$fd)],hS(n#p'gU*s%R(u3vU0e*z.i7]Q5T0rQ6{3WQ9X7OR:g9Ym!tQ!r!v!y!z'^'j'k'l-`-p1g5q5sQ'r!uS(d#g1|S-n'i'uQ/n*ZQ/{*gQ2|-qQ4]/oQ4i/}Q4j0OQ4o0WQ7h4WS7s4k4mS7w4p4rQ9g7iQ9k7oQ9p7tQ9u7yS:o9l9mS;Y:p:sS;e;Z;[S;m;f;gS;q;n;oR;t;rQ#wbQ'q!uS(c#g1|S(e#m+TQ+V%eQ+g%wQ+m%}U-m'i'r'uQ.R(dQ/m*ZQ/|*gQ0P*iQ0x+hQ1m,[S2y-n-qQ3R.ZS4[/n/oQ4e/yS4h/{0WQ4l0QQ5|1nQ6u2|Q7g4WQ7k4]U7r4i4o4rQ7u4nQ8k5}S9f7h7iQ9j7oQ9r7wQ9s7xQ:V8lQ:m9gS:n9k9mQ:v9uQ;P:WS;X:o:sS;d;Y;ZS;l;e;gS;p;m;oQ;s;qQ;u;tQ=a=[Q=l=eR=m=fV!wQ'^-`%^aOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SS#wz!j!r=Z$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sR=a=r%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SQ%ej!^%wy!i!u%z%{%|'T'c'd'e'i's*g+k+l-T-g-h-o/{0O0{2m2t2{4i4j4m7s9pS%}z!jQ+h%xQ,[&bW1n,],^,_,`U5}1o1p1qS8l6O6PQ:W8m!r=[$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sQ=e=qR=f=r%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&p&r&s&u&y'R'`'p(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SY#bWZ#W#Z(R!b%im#h#i#l$x%d%g([(f(g(h*W*[*_+W+X+Z,j-Q.O.U.V.W.Y/h/k2[3S3T4X6h6yQ,i&m!p=]$Z$n)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sR=`'VU'Z!e%h*XR2k-Z%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y,k,n,s-d-l-z.Q.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3d4q5y6Z6[6_6r8i8x9S!r)]$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sQ,h&mQ0r+dQ3W.bQ7O3[R9Y7Q!b$Tc#Y%p(Q(W(r(w)X)Y)^)e+u-s-x-}.P.n.q/]0j2v2}3c3s5O5Y6q6v7V9Q:c;x!P<U)[)o-U.w2c2f3h3q3r3w4P6k7W7a7b8`8|9[9b9c:y;R=g!f$Vc#Y%p(Q(W(r(w)U)V)X)Y)^)e+u-s-x-}.P.n.q/]0j2v2}3c3s5O5Y6q6v7V9Q:c;x!T<W)[)o-U.w2c2f3h3n3o3q3r3w4P6k7W7a7b8`8|9[9b9c:y;R=g!^$Zc#Y%p(Q(W(r(w)^)e+u-s-x-}.P.n.q/]0j2v2}3c3s5O5Y6q6v7V9Q:c;xQ4V/fz=s)[)o-U.w2c2f3h3w4P6k7W7a7b8`8|9[9b9c:y;R=gQ=x=zR=y={'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sS$oh$pR3|/P'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/P/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sT$kf$qQ$ifS)h$l)lR)t$qT$jf$qT)j$l)l'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/P/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sT$oh$pQ$rhR)s$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9S!s=q$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=s#glOPXZst!Z!`!o#S#d#o#{$n%l&i&l&m&p&r&s&u&y'R'`(|)q*f+Y+d,k,n,s-d.b/Q/i0V0d1j1z1{1}2P2S2V2X3[3{4q5y6Z6[6_7Q8i8x!U%Ri$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y#f(u#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}Q+P%`Q/^)|o3v<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=Y!U$yi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=yQ*`$zU*i$|*X*lQ+Q%aQ0Q*j#f=c#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}n=d<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=YQ=h=tQ=i=uQ=j=vR=k=w!U%Ri$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y#f(u#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}o3v<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=YnoOXst!Z#d%l&p&r&s&u,n,s2S2VS*c${*WQ,|&|Q,}'OR4`/s%[%Si#v$b$c$d$x${%O%Q%]%^%b)w*P*R*T*W*^*d*t*u+c+f+},Q.a.z/_/h/r/s/u0Y0[0g0h0i1^1a1i3Z4U4V4a4f4w5R5U5x6|7l7v7|8Q8f9V9e9n9t:S:f:t:};V;^<^<_<a<b<c<d<g<h<i<j<k<l<t<u<v<w<y<z<}=O=P=Q=R=S=T=U=X=Y=p=x=y=|=}Q,P&ZQ1`,RQ5i1_R8]5jV*k$|*X*lU*k$|*X*lT5p1g5qS/y*f/iQ4n0VT7x4q:PQ+g%wQ0P*iQ0x+hQ1m,[Q5|1nQ8k5}Q:V8lR;P:W!U%Oi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=yx*P$v)c*Q*r+R/q0^0_3y4^4{4|4}7f7z9v:l=b=n=oS0Y*q0Z#f<a#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}n<b<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=Y!d<t(s)a*Y*b.e.h.l/Y/f/v0p1]3`4S4_4c5h7R7U7m7p7}8P9i9q9w:q:u;W;];h=z={`<u3u7X7[7`9]:h:k;kS=P.g3aT=Q7Z9`!U%Qi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y|*R$v)c*S*q+R/b/q0^0_3y4^4s4{4|4}7f7z9v:l=b=n=oS0[*r0]#f<c#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}n<d<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=Y!h<v(s)a*Y*b.f.g.l/Y/f/v0p1]3^3`4S4_4c5h7R7S7U7m7p7}8P9i9q9w:q:u;W;];h=z={d<w3u7Y7Z7`9]9^:h:i:k;kS=R.h3bT=S7[9arnOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VQ&d!UR,k&mrnOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VR&d!UQ,T&[R1[+|snOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VQ1h,YS5w1k1lU8e5u5v5zS:R8g8hS:{:Q:TQ;_:|R;i;`Q&k!VR,d&gR6T1tR:Y8nS&P|&UR1T+sQ&p!WR,n&qR,t&vT2T,s2VR,x&wQ,w&wR2^,xQ'w!{R-t'wSsOtQ#dXT%os#dQ#OTR'y#OQ#RUR'{#RQ)y$uR/Z)yQ#UVR(O#UQ#XWU(U#X(V-{Q(V#YR-{(WQ-X'WR2j-XQ.p(wS3e.p3fR3f.qQ-`'^R2n-`Y!rQ'^-`1g5qR'h!rQ.{)cR3z.{U#_W%g*WU(]#_(^-|Q(^#`R-|(XQ-['ZR2l-[t`OXst!V!Z#d%l&g&i&p&r&s&u,n,s2S2VS#hZ%dU#r`#h.VR.V(hQ(i#jQ.S(eW.[(i.S3P6wQ3P.TR6w3QQ)l$lR/R)lQ$phR)r$pQ$`cU)_$`-w<[Q-w;xR<[)oQ/l*ZW4Y/l4Z7j9hU4Z/m/n/oS7j4[4]R9h7k$e*O$v(s)a)c*Y*b*q*r*|*}+R.g.h.j.k.l/Y/b/d/f/q/v0^0_0p1]3^3_3`3u3y4S4^4_4c4s4u4{4|4}5h7R7S7T7U7Z7[7^7_7`7f7m7p7z7}8P9]9^9_9i9q9v9w:h:i:j:k:l:q:u;W;];h;k=b=n=o=z={Q/t*bU4b/t4d7nQ4d/vR7n4cS*l$|*XR0S*lx*Q$v)c*q*r+R/q0^0_3y4^4{4|4}7f7z9v:l=b=n=o!d.e(s)a*Y*b.g.h.l/Y/f/v0p1]3`4S4_4c5h7R7U7m7p7}8P9i9q9w:q:u;W;];h=z={U/c*Q.e7Xa7X3u7Z7[7`9]:h:k;kQ0Z*qQ3a.gU4t0Z3a9`R9`7Z|*S$v)c*q*r+R/b/q0^0_3y4^4s4{4|4}7f7z9v:l=b=n=o!h.f(s)a*Y*b.g.h.l/Y/f/v0p1]3^3`4S4_4c5h7R7S7U7m7p7}8P9i9q9w:q:u;W;];h=z={U/e*S.f7Ye7Y3u7Z7[7`9]9^:h:i:k;kQ0]*rQ3b.hU4v0]3b9aR9a7[Q*w%UR0a*wQ5S0pR8O5SQ+[%jR0o+[Q5l1bS8_5l:OR:O8`Q,V&]R1e,VQ5q1gR8b5qQ1s,aS6R1s8oR8o6TQ1O+oW5_1O5a8V9zQ5a1RQ8V5`R9z8WQ+t&PR1U+tQ2V,sR6c2VYrOXst#dQ&t!ZQ+^%lQ,m&pQ,o&rQ,p&sQ,r&uQ2Q,nS2T,s2VR6b2SQ%npQ&x!_Q&{!aQ&}!bQ'P!cQ'o!uQ+]%kQ+i%yQ+{&VQ,c&kQ,z&zW-k'i'q'r'uQ-r'mQ0R*kQ0y+jS1v,d,gQ2_,yQ2`,|Q2a,}Q2u-jW2w-m-n-q-sQ5W0zQ5d1XQ5g1]Q5{1mQ6V1xQ6a2RU6p2v2y2|Q6s2zQ8R5XQ8Z5fQ8[5hQ8a5pQ8j5|Q8p6US9P6q6uQ9R6tQ9{8XQ:U8kQ:Z8qQ:b9QQ:x9|Q;O:VQ;S:cR;a;PQ%yyQ'b!iQ'm!uU+j%z%{%|Q-R'TU-f'c'd'eS-j'i'sQ/z*gS0z+k+lQ2g-TS2s-g-hQ2z-oS4g/{0OQ5X0{Q6l2mQ6o2tQ6t2{U7q4i4j4mQ9o7sR:r9pS$wi=pR*x%VU%Ui%V=pR0`*vQ$viS(s#v+fS)a$b$cQ)c$dQ*Y$xS*b${*WQ*q%OQ*r%QQ*|%]Q*}%^Q+R%bQ.g<aQ.h<cQ.j<gQ.k<iQ.l<kQ/Y)wQ/b*PQ/d*RQ/f*TQ/q*^S/v*d/hQ0^*tQ0_*ul0p+c,Q.a1a1i3Z5x6|8f9V:S:f:};VQ1]+}Q3^<tQ3_<vQ3`<yS3u<^<_Q3y.zS4S/_4UQ4^/rQ4_/sQ4c/uQ4s0YQ4u0[Q4{0gQ4|0hQ4}0iQ5h1^Q7R<}Q7S=PQ7T=RQ7U=TQ7Z<bQ7[<dQ7^<hQ7_<jQ7`<lQ7f4VQ7m4aQ7p4fQ7z4wQ7}5RQ8P5UQ9]<zQ9^<uQ9_<wQ9i7lQ9q7vQ9v7|Q9w8QQ:h=OQ:i=QQ:j=SQ:k=UQ:l9eQ:q9nQ:u9tQ;W=XQ;]:tQ;h;^Q;k=YQ=b=pQ=n=xQ=o=yQ=z=|R={=}Q*z%[Q.i<eR7]<fnpOXst!Z#d%l&p&r&s&u,n,s2S2VQ!fPS#fZ#oQ&z!`W'f!o*f0V4qQ'}#SQ)O#{Q)p$nS,g&i&lQ,l&mQ,y&yS-O'R/iQ-b'`Q.s(|Q/V)qQ0m+YQ0s+dQ2O,kQ2q-dQ3X.bQ4O/QQ4y0dQ5v1jQ6X1zQ6Y1{Q6^1}Q6`2PQ6e2XQ7P3[Q7c3{Q8h5yQ8t6ZQ8u6[Q8w6_Q9Z7QQ:T8iR:_8x#[cOPXZst!Z!`!o#d#o#{%l&i&l&m&p&r&s&u&y'R'`(|*f+Y+d,k,n,s-d.b/i0V0d1j1z1{1}2P2S2V2X3[4q5y6Z6[6_7Q8i8xQ#YWQ#eYQ%puQ%rvS%tw!gS(Q#W(TQ(W#ZQ(r#uQ(w#xQ)P$OQ)Q$PQ)R$QQ)S$RQ)T$SQ)U$TQ)V$UQ)W$VQ)X$WQ)Y$XQ)[$ZQ)^$_Q)`$aQ)e$eW)o$n)q/Q3{Q+a%sQ+u&QS-U'V2hQ-s'pS-x(R-zQ-}(ZQ.P(bQ.n(vQ.q(xQ.u;vQ.w;yQ.x;zQ.y;}Q/]){Q0j+UQ2c-PQ2f-SQ2v-lQ2}.QQ3c.oQ3h<OQ3i<PQ3j<QQ3k<RQ3l<SQ3m<TQ3n<UQ3o<VQ3p<WQ3q<XQ3r<YQ3s.vQ3t<]Q3w<`Q3x<mQ4P<ZQ5O0lQ5Y0|Q6k<pQ6q2xQ6v3OQ7V3dQ7W<qQ7a<sQ7b<{Q8`5mQ8|6iQ9Q6rQ9[<|Q9b=VQ9c=WQ:c9SQ:y9}Q;R:aQ;x#SR=g=sR#[WR'X!el!tQ!r!v!y!z'^'j'k'l-`-p1g5q5sS'T!e-WU*g$|*X*lS-T'U']S0O*h*nQ0W*oQ2m-^Q4m0UR4r0XR(y#xQ!fQT-_'^-`]!qQ!r'^-`1g5qQ#p]R'g;wR)d$dY!uQ'^-`1g5qQ'i!rS's!v!yS'u!z5sS-o'j'kQ-q'lR2{-pT#kZ%dS#jZ%dS%jm,jU(e#h#i#lS.T(f(gQ.X(hQ0n+ZQ3Q.UU3R.V.W.YS6x3S3TR9T6yd#^W#W#Z%g(R([*W+W.O/hr#gZm#h#i#l%d(f(g(h+Z.U.V.W.Y3S3T6yS*Z$x*_Q/o*[Q1|,jQ2d-QQ4W/kQ6g2[Q7i4XQ8{6hT=_'V+XV#aW%g*WU#`W%g*WS(S#W([U(X#Z+W/hS-V'V+XT-y(R.OV'[!e%h*XQ$lfR)v$qT)k$l)lR3}/PT*]$x*_T*e${*WQ0q+cQ1_,QQ3V.aQ5j1aQ5u1iQ6}3ZQ8g5xQ9W6|Q:Q8fQ:d9VQ:|:SQ;U:fQ;`:}R;c;VnqOXst!Z#d%l&p&r&s&u,n,s2S2VQ&j!VR,c&gtmOXst!U!V!Z#d%l&g&p&r&s&u,n,s2S2VR,j&mT%km,jR1c,SR,b&eQ&T|R+z&UR+p&OT&n!W&qT&o!W&qT2U,s2V\",\n nodeNames: \"⚠ ArithOp ArithOp ?. JSXStartTag LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > < TypeParamList const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies in CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem\",\n maxTerm: 378,\n context: trackNewline,\n nodeProps: [\n [\"isolate\", -8,5,6,14,35,37,49,51,53,\"\"],\n [\"group\", -26,9,17,19,66,206,210,214,215,217,220,223,233,235,241,243,245,247,250,256,262,264,266,268,270,272,273,\"Statement\",-34,13,14,30,33,34,40,49,52,53,55,60,68,70,74,78,80,82,83,108,109,118,119,135,138,140,141,142,143,144,146,147,166,168,170,\"Expression\",-23,29,31,35,39,41,43,172,174,176,177,179,180,181,183,184,185,187,188,189,200,202,204,205,\"Type\",-3,86,101,107,\"ClassItem\"],\n [\"openedBy\", 23,\"<\",36,\"InterpolationStart\",54,\"[\",58,\"{\",71,\"(\",159,\"JSXStartCloseTag\"],\n [\"closedBy\", -2,24,167,\">\",38,\"InterpolationEnd\",48,\"]\",59,\"}\",72,\")\",164,\"JSXEndTag\"]\n ],\n propSources: [jsHighlight],\n skippedNodes: [0,5,6,276],\n repeatNodeCount: 37,\n tokenData: \"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$<r#p#q$=h#q#r$>x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$h&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$h&j(X!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(X!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$h&j(UpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(UpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$h&j(Up(X!b'z0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(V#S$h&j'{0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$h&j(Up(X!b'{0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$h&j!n),Q(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#u(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#u(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(T':f$h&j(X!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$h&j(X!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$h&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$c`$h&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$c``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$c`$h&j(X!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(X!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$c`(X!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$h&j(Up(X!bOY%ZYZ&cZq%Zqr<Srs&}st%ZtuCruw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr(r<__WS$h&j(Up(X!bOY<SYZ&cZr<Srs=^sw<Swx@nx!^<S!^!_Bm!_#O<S#O#P>`#P#o<S#o#pBm#p;'S<S;'S;=`Cl<%lO<S(Q=g]WS$h&j(X!bOY=^YZ&cZw=^wx>`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$h&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(X!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$h&j(UpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(UpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Up(X!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l<S%9[C}i$h&j(m%1l(Up(X!bOY%ZYZ&cZr%Zrs&}st%ZtuCruw%Zwx(rx!Q%Z!Q![Cr![!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr%9[EoP;=`<%lCr07[FRk$h&j(Up(X!b$[#t(R,2j(c$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr+dHRk$h&j(Up(X!b$[#tOY%ZYZ&cZr%Zrs&}st%ZtuGvuw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Gv![!^%Z!^!_*g!_!c%Z!c!}Gv!}#O%Z#O#P&c#P#R%Z#R#SGv#S#T%Z#T#oGv#o#p*g#p$g%Z$g;'SGv;'S;=`Iv<%lOGv+dIyP;=`<%lGv07[JPP;=`<%lEr(KWJ_`$h&j(Up(X!b#n(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWKl_$h&j$P(Ch(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,#xLva(x+JY$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sv%ZvwM{wx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWNW`$h&j#y(Ch(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At! c_(W';W$h&j(UpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b'l!!i_$h&j(UpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b&z!#mX$h&jOw!#hwx6cx!^!#h!^!_!$Y!_#o!#h#o#p!$Y#p;'S!#h;'S;=`!$r<%lO!#h`!$]TOw!$Ywx7]x;'S!$Y;'S;=`!$l<%lO!$Y`!$oP;=`<%l!$Y&z!$uP;=`<%l!#h'l!%R]$c`$h&j(UpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r!Q!&PZ(UpOY!%zYZ!$YZr!%zrs!$Ysw!%zwx!&rx#O!%z#O#P!$Y#P;'S!%z;'S;=`!']<%lO!%z!Q!&yU$c`(UpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r!Q!'`P;=`<%l!%z'l!'fP;=`<%l!!b/5|!'t_!j/.^$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&U!)O_!i!Lf$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z-!n!*[b$h&j(Up(X!b(S%&f#o(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!+d{!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW!+o`$h&j(Up(X!b#l(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;x!,|`$h&j(Up(X!bp+4YOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,$U!.Z_!Z+Jf$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!/ec$h&j(Up(X!b!O.2^OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!0p!P!Q%Z!Q![!3Y![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!0ya$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!2O!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!2Z_!Y!L^$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!3eg$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!3Y![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S!3Y#S#X%Z#X#Y!4|#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!5Vg$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!6n|}%Z}!O!6n!O!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!6wc$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!8_c$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!9uf$h&j(Up(X!b#m(ChOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcxz!;Zz{#-}{!P!;Z!P!Q#/d!Q!^!;Z!^!_#(i!_!`#7S!`!a#8i!a!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z?O!;fb$h&j(Up(X!b!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z>^!<w`$h&j(X!b!V7`OY!<nYZ&cZw!<nwx!=yx!P!<n!P!Q!Eq!Q!^!<n!^!_!Gr!_!}!<n!}#O!KS#O#P!Dy#P#o!<n#o#p!Gr#p;'S!<n;'S;=`!L]<%lO!<n<z!>Q^$h&j!V7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!?Td$h&j!V7`O!^&c!_#W&c#W#X!>|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!V7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!V7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c<z!C][$h&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#O!CW#O#P!DR#P#Q!=y#Q#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DWX$h&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DvP;=`<%l!CW<z!EOX$h&jOY!=yYZ&cZ!^!=y!^!_!@c!_#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!EnP;=`<%l!=y>^!Ezl$h&j(X!b!V7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(X!b!V7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(X!b!V7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(X!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$h&j(X!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!<n#Q#o!KS#o#p!JU#p;'S!KS;'S;=`!LV<%lO!KS>^!LYP;=`<%l!KS>^!L`P;=`<%l!<n=l!Ll`$h&j(Up!V7`OY!LcYZ&cZr!Lcrs!=ys!P!Lc!P!Q!Mn!Q!^!Lc!^!_# o!_!}!Lc!}#O#%P#O#P!Dy#P#o!Lc#o#p# o#p;'S!Lc;'S;=`#&Y<%lO!Lc=l!Mwl$h&j(Up!V7`OY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#W(r#W#X!Mn#X#Z(r#Z#[!Mn#[#](r#]#^!Mn#^#a(r#a#b!Mn#b#g(r#g#h!Mn#h#i(r#i#j!Mn#j#k!Mn#k#m(r#m#n!Mn#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r8Q# vZ(Up!V7`OY# oZr# ors!@cs!P# o!P!Q#!i!Q!}# o!}#O#$R#O#P!Bq#P;'S# o;'S;=`#$y<%lO# o8Q#!pe(Up!V7`OY)rZr)rs#O)r#P#W)r#W#X#!i#X#Z)r#Z#[#!i#[#])r#]#^#!i#^#a)r#a#b#!i#b#g)r#g#h#!i#h#i)r#i#j#!i#j#k#!i#k#m)r#m#n#!i#n;'S)r;'S;=`*Z<%lO)r8Q#$WX(UpOY#$RZr#$Rrs!Ars#O#$R#O#P!B[#P#Q# o#Q;'S#$R;'S;=`#$s<%lO#$R8Q#$vP;=`<%l#$R8Q#$|P;=`<%l# o=l#%W^$h&j(UpOY#%PYZ&cZr#%Prs!CWs!^#%P!^!_#$R!_#O#%P#O#P!DR#P#Q!Lc#Q#o#%P#o#p#$R#p;'S#%P;'S;=`#&S<%lO#%P=l#&VP;=`<%l#%P=l#&]P;=`<%l!Lc?O#&kn$h&j(Up(X!b!V7`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#W%Z#W#X#&`#X#Z%Z#Z#[#&`#[#]%Z#]#^#&`#^#a%Z#a#b#&`#b#g%Z#g#h#&`#h#i%Z#i#j#&`#j#k#&`#k#m%Z#m#n#&`#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z9d#(r](Up(X!b!V7`OY#(iZr#(irs!Grsw#(iwx# ox!P#(i!P!Q#)k!Q!}#(i!}#O#+`#O#P!Bq#P;'S#(i;'S;=`#,`<%lO#(i9d#)th(Up(X!b!V7`OY*gZr*grs'}sw*gwx)rx#O*g#P#W*g#W#X#)k#X#Z*g#Z#[#)k#[#]*g#]#^#)k#^#a*g#a#b#)k#b#g*g#g#h#)k#h#i*g#i#j#)k#j#k#)k#k#m*g#m#n#)k#n;'S*g;'S;=`+Z<%lO*g9d#+gZ(Up(X!bOY#+`Zr#+`rs!JUsw#+`wx#$Rx#O#+`#O#P!B[#P#Q#(i#Q;'S#+`;'S;=`#,Y<%lO#+`9d#,]P;=`<%l#+`9d#,cP;=`<%l#(i?O#,o`$h&j(Up(X!bOY#,fYZ&cZr#,frs!KSsw#,fwx#%Px!^#,f!^!_#+`!_#O#,f#O#P!DR#P#Q!;Z#Q#o#,f#o#p#+`#p;'S#,f;'S;=`#-q<%lO#,f?O#-tP;=`<%l#,f?O#-zP;=`<%l!;Z07[#.[b$h&j(Up(X!b'|0/l!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z07[#/o_$h&j(Up(X!bT0/lOY#/dYZ&cZr#/drs#0nsw#/dwx#4Ox!^#/d!^!_#5}!_#O#/d#O#P#1p#P#o#/d#o#p#5}#p;'S#/d;'S;=`#6|<%lO#/d06j#0w]$h&j(X!bT0/lOY#0nYZ&cZw#0nwx#1px!^#0n!^!_#3R!_#O#0n#O#P#1p#P#o#0n#o#p#3R#p;'S#0n;'S;=`#3x<%lO#0n05W#1wX$h&jT0/lOY#1pYZ&cZ!^#1p!^!_#2d!_#o#1p#o#p#2d#p;'S#1p;'S;=`#2{<%lO#1p0/l#2iST0/lOY#2dZ;'S#2d;'S;=`#2u<%lO#2d0/l#2xP;=`<%l#2d05W#3OP;=`<%l#1p01O#3YW(X!bT0/lOY#3RZw#3Rwx#2dx#O#3R#O#P#2d#P;'S#3R;'S;=`#3r<%lO#3R01O#3uP;=`<%l#3R06j#3{P;=`<%l#0n05x#4X]$h&j(UpT0/lOY#4OYZ&cZr#4Ors#1ps!^#4O!^!_#5Q!_#O#4O#O#P#1p#P#o#4O#o#p#5Q#p;'S#4O;'S;=`#5w<%lO#4O00^#5XW(UpT0/lOY#5QZr#5Qrs#2ds#O#5Q#O#P#2d#P;'S#5Q;'S;=`#5q<%lO#5Q00^#5tP;=`<%l#5Q05x#5zP;=`<%l#4O01p#6WY(Up(X!bT0/lOY#5}Zr#5}rs#3Rsw#5}wx#5Qx#O#5}#O#P#2d#P;'S#5};'S;=`#6v<%lO#5}01p#6yP;=`<%l#5}07[#7PP;=`<%l#/d)3h#7ab$h&j$P(Ch(Up(X!b!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;ZAt#8vb$Y#t$h&j(Up(X!b!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z'Ad#:Zp$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#U%Z#U#V#?i#V#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#<jk$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!e$b$h&j#})Lv(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#P-<U(Up(X!b$m7`OY*gZr*grs'}sw*gwx)rx!P*g!P!Q#MO!Q!^*g!^!_#Mt!_!`$ f!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#MXX$j&j(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El#M}Z#p(Ch(Up(X!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#Np!`#O*g#P;'S*g;'S;=`+Z<%lO*g(El#NyX$P(Ch(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El$ oX#q(Ch(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g*)x$!ga#^*!Y$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a$#l!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(K[$#w_#i(Cl$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x$%Vag!*r#q(Ch$e#|$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`$&[!`!a$'f!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$&g_#q(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$'qa#p(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`!a$(v!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$)R`#p(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(Kd$*`a(p(Ct$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!a%Z!a!b$+e!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$+p`$h&j#z(Ch(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`$,}_!z$Ip$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f$.X_!Q0,v$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$/]Z$h&jO!^$0O!^!_$0f!_#i$0O#i#j$0k#j#l$0O#l#m$2^#m#o$0O#o#p$0f#p;'S$0O;'S;=`$4i<%lO$0O(n$0VT_#S$h&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$0kO_#S(n$0p[$h&jO!Q&c!Q![$1f![!^&c!_!c&c!c!i$1f!i#T&c#T#Z$1f#Z#o&c#o#p$3|#p;'S&c;'S;=`&w<%lO&c(n$1kZ$h&jO!Q&c!Q![$2^![!^&c!_!c&c!c!i$2^!i#T&c#T#Z$2^#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$2cZ$h&jO!Q&c!Q![$3U![!^&c!_!c&c!c!i$3U!i#T&c#T#Z$3U#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$3ZZ$h&jO!Q&c!Q![$0O![!^&c!_!c&c!c!i$0O!i#T&c#T#Z$0O#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$4PR!Q![$4Y!c!i$4Y#T#Z$4Y#S$4]S!Q![$4Y!c!i$4Y#T#Z$4Y#q#r$0f(n$4lP;=`<%l$0O#1[$4z_!W#)l$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$6U`#w(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;p$7c_$h&j(Up(X!b(_+4QOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$8qk$h&j(Up(X!b(R,2j$^#t(c$I[OY%ZYZ&cZr%Zrs&}st%Ztu$8buw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$8b![!^%Z!^!_*g!_!c%Z!c!}$8b!}#O%Z#O#P&c#P#R%Z#R#S$8b#S#T%Z#T#o$8b#o#p*g#p$g%Z$g;'S$8b;'S;=`$<l<%lO$8b+d$:qk$h&j(Up(X!b$^#tOY%ZYZ&cZr%Zrs&}st%Ztu$:fuw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$:f![!^%Z!^!_*g!_!c%Z!c!}$:f!}#O%Z#O#P&c#P#R%Z#R#S$:f#S#T%Z#T#o$:f#o#p*g#p$g%Z$g;'S$:f;'S;=`$<f<%lO$:f+d$<iP;=`<%l$:f07[$<oP;=`<%l$8b#Jf$<{X!]#Hb(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g,#x$=sa(w+JY$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$+e#q;'S%Z;'S;=`+a<%lO%Z)>v$?V_![(CdtBr$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!o7`$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$h&j(Up(X!b'z0/l$[#t(R,2j(c$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$h&j(Up(X!b'{0/l$[#t(R,2j(c$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr\",\n tokenizers: [noSemicolon, noSemicolonType, operatorToken, jsx, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, insertSemicolon, new LocalTokenGroup(\"$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOv~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!S~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(a~~\", 141, 338), new LocalTokenGroup(\"j~RQYZXz{^~^O(O~~aP!P!Qd~iO(P~~\", 25, 321)],\n topRules: {\"Script\":[0,7],\"SingleExpression\":[1,274],\"SingleClassItem\":[2,275]},\n dialects: {jsx: 0, ts: 15091},\n dynamicPrecedences: {\"78\":1,\"80\":1,\"92\":1,\"168\":1,\"198\":1},\n specialized: [{term: 325, get: (value) => spec_identifier[value] || -1},{term: 341, get: (value) => spec_word[value] || -1},{term: 93, get: (value) => spec_LessThan[value] || -1}],\n tokenPrec: 15116\n});\n\nexport { parser };\n","import { parser } from '@lezer/javascript';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, defineLanguageFacet, sublanguageProp, LanguageSupport } from '@codemirror/language';\nimport { EditorSelection } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { snippetCompletion, ifNotIn, completeFromList } from '@codemirror/autocomplete';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\n/**\nA collection of JavaScript-related\n[snippets](https://codemirror.net/6/docs/ref/#autocomplete.snippet).\n*/\nconst snippets = [\n /*@__PURE__*/snippetCompletion(\"function ${name}(${params}) {\\n\\t${}\\n}\", {\n label: \"function\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\\n\\t${}\\n}\", {\n label: \"for\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"for (let ${name} of ${collection}) {\\n\\t${}\\n}\", {\n label: \"for\",\n detail: \"of loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"do {\\n\\t${}\\n} while (${})\", {\n label: \"do\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"while (${}) {\\n\\t${}\\n}\", {\n label: \"while\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"try {\\n\\t${}\\n} catch (${error}) {\\n\\t${}\\n}\", {\n label: \"try\",\n detail: \"/ catch block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n}\", {\n label: \"if\",\n detail: \"block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n} else {\\n\\t${}\\n}\", {\n label: \"if\",\n detail: \"/ else block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"class ${name} {\\n\\tconstructor(${params}) {\\n\\t\\t${}\\n\\t}\\n}\", {\n label: \"class\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"import {${names}} from \\\"${module}\\\"\\n${}\", {\n label: \"import\",\n detail: \"named\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"import ${name} from \\\"${module}\\\"\\n${}\", {\n label: \"import\",\n detail: \"default\",\n type: \"keyword\"\n })\n];\n/**\nA collection of snippet completions for TypeScript. Includes the\nJavaScript [snippets](https://codemirror.net/6/docs/ref/#lang-javascript.snippets).\n*/\nconst typescriptSnippets = /*@__PURE__*/snippets.concat([\n /*@__PURE__*/snippetCompletion(\"interface ${name} {\\n\\t${}\\n}\", {\n label: \"interface\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"type ${name} = ${type}\", {\n label: \"type\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"enum ${name} {\\n\\t${}\\n}\", {\n label: \"enum\",\n detail: \"definition\",\n type: \"keyword\"\n })\n]);\n\nconst cache = /*@__PURE__*/new NodeWeakMap();\nconst ScopeNodes = /*@__PURE__*/new Set([\n \"Script\", \"Block\",\n \"FunctionExpression\", \"FunctionDeclaration\", \"ArrowFunction\", \"MethodDeclaration\",\n \"ForStatement\"\n]);\nfunction defID(type) {\n return (node, def) => {\n let id = node.node.getChild(\"VariableDefinition\");\n if (id)\n def(id, type);\n return true;\n };\n}\nconst functionContext = [\"FunctionDeclaration\"];\nconst gatherCompletions = {\n FunctionDeclaration: /*@__PURE__*/defID(\"function\"),\n ClassDeclaration: /*@__PURE__*/defID(\"class\"),\n ClassExpression: () => true,\n EnumDeclaration: /*@__PURE__*/defID(\"constant\"),\n TypeAliasDeclaration: /*@__PURE__*/defID(\"type\"),\n NamespaceDeclaration: /*@__PURE__*/defID(\"namespace\"),\n VariableDefinition(node, def) { if (!node.matchContext(functionContext))\n def(node, \"variable\"); },\n TypeDefinition(node, def) { def(node, \"type\"); },\n __proto__: null\n};\nfunction getScope(doc, node) {\n let cached = cache.get(node);\n if (cached)\n return cached;\n let completions = [], top = true;\n function def(node, type) {\n let name = doc.sliceString(node.from, node.to);\n completions.push({ label: name, type });\n }\n node.cursor(IterMode.IncludeAnonymous).iterate(node => {\n if (top) {\n top = false;\n }\n else if (node.name) {\n let gather = gatherCompletions[node.name];\n if (gather && gather(node, def) || ScopeNodes.has(node.name))\n return false;\n }\n else if (node.to - node.from > 8192) {\n // Allow caching for bigger internal nodes\n for (let c of getScope(doc, node.node))\n completions.push(c);\n return false;\n }\n });\n cache.set(node, completions);\n return completions;\n}\nconst Identifier = /^[\\w$\\xa1-\\uffff][\\w$\\d\\xa1-\\uffff]*$/;\nconst dontComplete = [\n \"TemplateString\", \"String\", \"RegExp\",\n \"LineComment\", \"BlockComment\",\n \"VariableDefinition\", \"TypeDefinition\", \"Label\",\n \"PropertyDefinition\", \"PropertyName\",\n \"PrivatePropertyDefinition\", \"PrivatePropertyName\",\n \".\", \"?.\"\n];\n/**\nCompletion source that looks up locally defined names in\nJavaScript code.\n*/\nfunction localCompletionSource(context) {\n let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n if (dontComplete.indexOf(inner.name) > -1)\n return null;\n let isWord = inner.name == \"VariableName\" ||\n inner.to - inner.from < 20 && Identifier.test(context.state.sliceDoc(inner.from, inner.to));\n if (!isWord && !context.explicit)\n return null;\n let options = [];\n for (let pos = inner; pos; pos = pos.parent) {\n if (ScopeNodes.has(pos.name))\n options = options.concat(getScope(context.state.doc, pos));\n }\n return {\n options,\n from: isWord ? inner.from : context.pos,\n validFor: Identifier\n };\n}\nfunction pathFor(read, member, name) {\n var _a;\n let path = [];\n for (;;) {\n let obj = member.firstChild, prop;\n if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"VariableName\") {\n path.push(read(obj));\n return { path: path.reverse(), name };\n }\n else if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"MemberExpression\" && ((_a = (prop = obj.lastChild)) === null || _a === void 0 ? void 0 : _a.name) == \"PropertyName\") {\n path.push(read(prop));\n member = obj;\n }\n else {\n return null;\n }\n }\n}\n/**\nHelper function for defining JavaScript completion sources. It\nreturns the completable name and object path for a completion\ncontext, or null if no name/property completion should happen at\nthat position. For example, when completing after `a.b.c` it will\nreturn `{path: [\"a\", \"b\"], name: \"c\"}`. When completing after `x`\nit will return `{path: [], name: \"x\"}`. When not in a property or\nname, it will return null if `context.explicit` is false, and\n`{path: [], name: \"\"}` otherwise.\n*/\nfunction completionPath(context) {\n let read = (node) => context.state.doc.sliceString(node.from, node.to);\n let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n if (inner.name == \"PropertyName\") {\n return pathFor(read, inner.parent, read(inner));\n }\n else if ((inner.name == \".\" || inner.name == \"?.\") && inner.parent.name == \"MemberExpression\") {\n return pathFor(read, inner.parent, \"\");\n }\n else if (dontComplete.indexOf(inner.name) > -1) {\n return null;\n }\n else if (inner.name == \"VariableName\" || inner.to - inner.from < 20 && Identifier.test(read(inner))) {\n return { path: [], name: read(inner) };\n }\n else if (inner.name == \"MemberExpression\") {\n return pathFor(read, inner, \"\");\n }\n else {\n return context.explicit ? { path: [], name: \"\" } : null;\n }\n}\nfunction enumeratePropertyCompletions(obj, top) {\n let options = [], seen = new Set;\n for (let depth = 0;; depth++) {\n for (let name of (Object.getOwnPropertyNames || Object.keys)(obj)) {\n if (!/^[a-zA-Z_$\\xaa-\\uffdc][\\w$\\xaa-\\uffdc]*$/.test(name) || seen.has(name))\n continue;\n seen.add(name);\n let value;\n try {\n value = obj[name];\n }\n catch (_) {\n continue;\n }\n options.push({\n label: name,\n type: typeof value == \"function\" ? (/^[A-Z]/.test(name) ? \"class\" : top ? \"function\" : \"method\")\n : top ? \"variable\" : \"property\",\n boost: -depth\n });\n }\n let next = Object.getPrototypeOf(obj);\n if (!next)\n return options;\n obj = next;\n }\n}\n/**\nDefines a [completion source](https://codemirror.net/6/docs/ref/#autocomplete.CompletionSource) that\ncompletes from the given scope object (for example `globalThis`).\nWill enter properties of the object when completing properties on\na directly-named path.\n*/\nfunction scopeCompletionSource(scope) {\n let cache = new Map;\n return (context) => {\n let path = completionPath(context);\n if (!path)\n return null;\n let target = scope;\n for (let step of path.path) {\n target = target[step];\n if (!target)\n return null;\n }\n let options = cache.get(target);\n if (!options)\n cache.set(target, options = enumeratePropertyCompletions(target, !path.path.length));\n return {\n from: context.pos - path.name.length,\n options,\n validFor: Identifier\n };\n };\n}\n\n/**\nA language provider based on the [Lezer JavaScript\nparser](https://github.com/lezer-parser/javascript), extended with\nhighlighting and indentation information.\n*/\nconst javascriptLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"javascript\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch\\b|finally\\b)/ }),\n LabeledStatement: flatIndent,\n SwitchBody: context => {\n let after = context.textAfter, closed = /^\\s*\\}/.test(after), isCase = /^\\s*(case|default)\\b/.test(after);\n return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;\n },\n Block: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n ArrowFunction: cx => cx.baseIndent + cx.unit,\n \"TemplateString BlockComment\": () => null,\n \"Statement Property\": /*@__PURE__*/continuedIndent({ except: /^{/ }),\n JSXElement(context) {\n let closed = /^\\s*<\\//.test(context.textAfter);\n return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n },\n JSXEscape(context) {\n let closed = /\\s*\\}/.test(context.textAfter);\n return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n },\n \"JSXOpenTag JSXSelfClosingTag\"(context) {\n return context.column(context.node.from) + context.unit;\n }\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType\": foldInside,\n BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; }\n })\n ]\n }),\n languageData: {\n closeBrackets: { brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"] },\n commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n indentOnInput: /^\\s*(?:case |default:|\\{|\\}|<\\/)$/,\n wordChars: \"$\"\n }\n});\nconst jsxSublanguage = {\n test: node => /^JSX/.test(node.name),\n facet: /*@__PURE__*/defineLanguageFacet({ commentTokens: { block: { open: \"{/*\", close: \"*/}\" } } })\n};\n/**\nA language provider for TypeScript.\n*/\nconst typescriptLanguage = /*@__PURE__*/javascriptLanguage.configure({ dialect: \"ts\" }, \"typescript\");\n/**\nLanguage provider for JSX.\n*/\nconst jsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n dialect: \"jsx\",\n props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n});\n/**\nLanguage provider for JSX + TypeScript.\n*/\nconst tsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n dialect: \"jsx ts\",\n props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n}, \"typescript\");\nlet kwCompletion = (name) => ({ label: name, type: \"keyword\" });\nconst keywords = /*@__PURE__*/\"break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield\".split(\" \").map(kwCompletion);\nconst typescriptKeywords = /*@__PURE__*/keywords.concat(/*@__PURE__*/[\"declare\", \"implements\", \"private\", \"protected\", \"public\"].map(kwCompletion));\n/**\nJavaScript support. Includes [snippet](https://codemirror.net/6/docs/ref/#lang-javascript.snippets)\nand local variable completion.\n*/\nfunction javascript(config = {}) {\n let lang = config.jsx ? (config.typescript ? tsxLanguage : jsxLanguage)\n : config.typescript ? typescriptLanguage : javascriptLanguage;\n let completions = config.typescript ? typescriptSnippets.concat(typescriptKeywords) : snippets.concat(keywords);\n return new LanguageSupport(lang, [\n javascriptLanguage.data.of({\n autocomplete: ifNotIn(dontComplete, completeFromList(completions))\n }),\n javascriptLanguage.data.of({\n autocomplete: localCompletionSource\n }),\n config.jsx ? autoCloseTags : [],\n ]);\n}\nfunction findOpenTag(node) {\n for (;;) {\n if (node.name == \"JSXOpenTag\" || node.name == \"JSXSelfClosingTag\" || node.name == \"JSXFragmentTag\")\n return node;\n if (node.name == \"JSXEscape\" || !node.parent)\n return null;\n node = node.parent;\n }\n}\nfunction elementName(doc, tree, max = doc.length) {\n for (let ch = tree === null || tree === void 0 ? void 0 : tree.firstChild; ch; ch = ch.nextSibling) {\n if (ch.name == \"JSXIdentifier\" || ch.name == \"JSXBuiltin\" || ch.name == \"JSXNamespacedName\" ||\n ch.name == \"JSXMemberExpression\")\n return doc.sliceString(ch.from, Math.min(ch.to, max));\n }\n return \"\";\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\n/**\nExtension that will automatically insert JSX close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, defaultInsert) => {\n if ((android ? view.composing : view.compositionStarted) || view.state.readOnly ||\n from != to || (text != \">\" && text != \"/\") ||\n !javascriptLanguage.isActiveAt(view.state, from, -1))\n return false;\n let base = defaultInsert(), { state } = base;\n let closeTags = state.changeByRange(range => {\n var _a;\n let { head } = range, around = syntaxTree(state).resolveInner(head - 1, -1), name;\n if (around.name == \"JSXStartTag\")\n around = around.parent;\n if (state.doc.sliceString(head - 1, head) != text || around.name == \"JSXAttributeValue\" && around.to > head) ;\n else if (text == \">\" && around.name == \"JSXFragmentTag\") {\n return { range, changes: { from: head, insert: `</>` } };\n }\n else if (text == \"/\" && around.name == \"JSXStartCloseTag\") {\n let empty = around.parent, base = empty.parent;\n if (base && empty.from == head - 2 &&\n ((name = elementName(state.doc, base.firstChild, head)) || ((_a = base.firstChild) === null || _a === void 0 ? void 0 : _a.name) == \"JSXFragmentTag\")) {\n let insert = `${name}>`;\n return { range: EditorSelection.cursor(head + insert.length, -1), changes: { from: head, insert } };\n }\n }\n else if (text == \">\") {\n let openTag = findOpenTag(around);\n if (openTag && openTag.name == \"JSXOpenTag\" &&\n !/^\\/?>|^<\\//.test(state.doc.sliceString(head, head + 2)) &&\n (name = elementName(state.doc, openTag, head)))\n return { range, changes: { from: head, insert: `</${name}>` } };\n }\n return { range };\n });\n if (closeTags.changes.empty)\n return false;\n view.dispatch([\n base,\n state.update(closeTags, { userEvent: \"input.complete\", scrollIntoView: true })\n ]);\n return true;\n});\n\n/**\nConnects an [ESLint](https://eslint.org/) linter to CodeMirror's\n[lint](https://codemirror.net/6/docs/ref/#lint) integration. `eslint` should be an instance of the\n[`Linter`](https://eslint.org/docs/developer-guide/nodejs-api#linter)\nclass, and `config` an optional ESLint configuration. The return\nvalue of this function can be passed to [`linter`](https://codemirror.net/6/docs/ref/#lint.linter)\nto create a JavaScript linting extension.\n\nNote that ESLint targets node, and is tricky to run in the\nbrowser. The\n[eslint-linter-browserify](https://github.com/UziTech/eslint-linter-browserify)\npackage may help with that (see\n[example](https://github.com/UziTech/eslint-linter-browserify/blob/master/example/script.js)).\n*/\nfunction esLint(eslint, config) {\n if (!config) {\n config = {\n parserOptions: { ecmaVersion: 2019, sourceType: \"module\" },\n env: { browser: true, node: true, es6: true, es2015: true, es2017: true, es2020: true },\n rules: {}\n };\n eslint.getRules().forEach((desc, name) => {\n if (desc.meta.docs.recommended)\n config.rules[name] = 2;\n });\n }\n return (view) => {\n let { state } = view, found = [];\n for (let { from, to } of javascriptLanguage.findRegions(state)) {\n let fromLine = state.doc.lineAt(from), offset = { line: fromLine.number - 1, col: from - fromLine.from, pos: from };\n for (let d of eslint.verify(state.sliceDoc(from, to), config))\n found.push(translateDiagnostic(d, state.doc, offset));\n }\n return found;\n };\n}\nfunction mapPos(line, col, doc, offset) {\n return doc.line(line + offset.line).from + col + (line == 1 ? offset.col - 1 : -1);\n}\nfunction translateDiagnostic(input, doc, offset) {\n let start = mapPos(input.line, input.column, doc, offset);\n let result = {\n from: start,\n to: input.endLine != null && input.endColumn != 1 ? mapPos(input.endLine, input.endColumn, doc, offset) : start,\n message: input.message,\n source: input.ruleId ? \"eslint:\" + input.ruleId : \"eslint\",\n severity: input.severity == 1 ? \"warning\" : \"error\",\n };\n if (input.fix) {\n let { range, text } = input.fix, from = range[0] + offset.pos - start, to = range[1] + offset.pos - start;\n result.actions = [{\n name: \"fix\",\n apply(view, start) {\n view.dispatch({ changes: { from: start + from, to: start + to, insert: text }, scrollIntoView: true });\n }\n }];\n }\n return result;\n}\n\nexport { autoCloseTags, completionPath, esLint, javascript, javascriptLanguage, jsxLanguage, localCompletionSource, scopeCompletionSource, snippets, tsxLanguage, typescriptLanguage, typescriptSnippets };\n","import { parser, configureNesting } from '@lezer/html';\nimport { cssLanguage, css } from '@codemirror/lang-css';\nimport { javascriptLanguage, typescriptLanguage, jsxLanguage, tsxLanguage, javascript } from '@codemirror/lang-javascript';\nimport { EditorView } from '@codemirror/view';\nimport { EditorSelection } from '@codemirror/state';\nimport { syntaxTree, LRLanguage, indentNodeProp, foldNodeProp, bracketMatchingHandle, LanguageSupport } from '@codemirror/language';\n\nconst Targets = [\"_blank\", \"_self\", \"_top\", \"_parent\"];\nconst Charsets = [\"ascii\", \"utf-8\", \"utf-16\", \"latin1\", \"latin1\"];\nconst Methods = [\"get\", \"post\", \"put\", \"delete\"];\nconst Encs = [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"];\nconst Bool = [\"true\", \"false\"];\nconst S = {}; // Empty tag spec\nconst Tags = {\n a: {\n attrs: {\n href: null, ping: null, type: null,\n media: null,\n target: Targets,\n hreflang: null\n }\n },\n abbr: S,\n address: S,\n area: {\n attrs: {\n alt: null, coords: null, href: null, target: null, ping: null,\n media: null, hreflang: null, type: null,\n shape: [\"default\", \"rect\", \"circle\", \"poly\"]\n }\n },\n article: S,\n aside: S,\n audio: {\n attrs: {\n src: null, mediagroup: null,\n crossorigin: [\"anonymous\", \"use-credentials\"],\n preload: [\"none\", \"metadata\", \"auto\"],\n autoplay: [\"autoplay\"],\n loop: [\"loop\"],\n controls: [\"controls\"]\n }\n },\n b: S,\n base: { attrs: { href: null, target: Targets } },\n bdi: S,\n bdo: S,\n blockquote: { attrs: { cite: null } },\n body: S,\n br: S,\n button: {\n attrs: {\n form: null, formaction: null, name: null, value: null,\n autofocus: [\"autofocus\"],\n disabled: [\"autofocus\"],\n formenctype: Encs,\n formmethod: Methods,\n formnovalidate: [\"novalidate\"],\n formtarget: Targets,\n type: [\"submit\", \"reset\", \"button\"]\n }\n },\n canvas: { attrs: { width: null, height: null } },\n caption: S,\n center: S,\n cite: S,\n code: S,\n col: { attrs: { span: null } },\n colgroup: { attrs: { span: null } },\n command: {\n attrs: {\n type: [\"command\", \"checkbox\", \"radio\"],\n label: null, icon: null, radiogroup: null, command: null, title: null,\n disabled: [\"disabled\"],\n checked: [\"checked\"]\n }\n },\n data: { attrs: { value: null } },\n datagrid: { attrs: { disabled: [\"disabled\"], multiple: [\"multiple\"] } },\n datalist: { attrs: { data: null } },\n dd: S,\n del: { attrs: { cite: null, datetime: null } },\n details: { attrs: { open: [\"open\"] } },\n dfn: S,\n div: S,\n dl: S,\n dt: S,\n em: S,\n embed: { attrs: { src: null, type: null, width: null, height: null } },\n eventsource: { attrs: { src: null } },\n fieldset: { attrs: { disabled: [\"disabled\"], form: null, name: null } },\n figcaption: S,\n figure: S,\n footer: S,\n form: {\n attrs: {\n action: null, name: null,\n \"accept-charset\": Charsets,\n autocomplete: [\"on\", \"off\"],\n enctype: Encs,\n method: Methods,\n novalidate: [\"novalidate\"],\n target: Targets\n }\n },\n h1: S, h2: S, h3: S, h4: S, h5: S, h6: S,\n head: {\n children: [\"title\", \"base\", \"link\", \"style\", \"meta\", \"script\", \"noscript\", \"command\"]\n },\n header: S,\n hgroup: S,\n hr: S,\n html: {\n attrs: { manifest: null }\n },\n i: S,\n iframe: {\n attrs: {\n src: null, srcdoc: null, name: null, width: null, height: null,\n sandbox: [\"allow-top-navigation\", \"allow-same-origin\", \"allow-forms\", \"allow-scripts\"],\n seamless: [\"seamless\"]\n }\n },\n img: {\n attrs: {\n alt: null, src: null, ismap: null, usemap: null, width: null, height: null,\n crossorigin: [\"anonymous\", \"use-credentials\"]\n }\n },\n input: {\n attrs: {\n alt: null, dirname: null, form: null, formaction: null,\n height: null, list: null, max: null, maxlength: null, min: null,\n name: null, pattern: null, placeholder: null, size: null, src: null,\n step: null, value: null, width: null,\n accept: [\"audio/*\", \"video/*\", \"image/*\"],\n autocomplete: [\"on\", \"off\"],\n autofocus: [\"autofocus\"],\n checked: [\"checked\"],\n disabled: [\"disabled\"],\n formenctype: Encs,\n formmethod: Methods,\n formnovalidate: [\"novalidate\"],\n formtarget: Targets,\n multiple: [\"multiple\"],\n readonly: [\"readonly\"],\n required: [\"required\"],\n type: [\"hidden\", \"text\", \"search\", \"tel\", \"url\", \"email\", \"password\", \"datetime\", \"date\", \"month\",\n \"week\", \"time\", \"datetime-local\", \"number\", \"range\", \"color\", \"checkbox\", \"radio\",\n \"file\", \"submit\", \"image\", \"reset\", \"button\"]\n }\n },\n ins: { attrs: { cite: null, datetime: null } },\n kbd: S,\n keygen: {\n attrs: {\n challenge: null, form: null, name: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n keytype: [\"RSA\"]\n }\n },\n label: { attrs: { for: null, form: null } },\n legend: S,\n li: { attrs: { value: null } },\n link: {\n attrs: {\n href: null, type: null,\n hreflang: null,\n media: null,\n sizes: [\"all\", \"16x16\", \"16x16 32x32\", \"16x16 32x32 64x64\"]\n }\n },\n map: { attrs: { name: null } },\n mark: S,\n menu: { attrs: { label: null, type: [\"list\", \"context\", \"toolbar\"] } },\n meta: {\n attrs: {\n content: null,\n charset: Charsets,\n name: [\"viewport\", \"application-name\", \"author\", \"description\", \"generator\", \"keywords\"],\n \"http-equiv\": [\"content-language\", \"content-type\", \"default-style\", \"refresh\"]\n }\n },\n meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },\n nav: S,\n noscript: S,\n object: {\n attrs: {\n data: null, type: null, name: null, usemap: null, form: null, width: null, height: null,\n typemustmatch: [\"typemustmatch\"]\n }\n },\n ol: { attrs: { reversed: [\"reversed\"], start: null, type: [\"1\", \"a\", \"A\", \"i\", \"I\"] },\n children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n optgroup: { attrs: { disabled: [\"disabled\"], label: null } },\n option: { attrs: { disabled: [\"disabled\"], label: null, selected: [\"selected\"], value: null } },\n output: { attrs: { for: null, form: null, name: null } },\n p: S,\n param: { attrs: { name: null, value: null } },\n pre: S,\n progress: { attrs: { value: null, max: null } },\n q: { attrs: { cite: null } },\n rp: S,\n rt: S,\n ruby: S,\n samp: S,\n script: {\n attrs: {\n type: [\"text/javascript\"],\n src: null,\n async: [\"async\"],\n defer: [\"defer\"],\n charset: Charsets\n }\n },\n section: S,\n select: {\n attrs: {\n form: null, name: null, size: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n multiple: [\"multiple\"]\n }\n },\n slot: { attrs: { name: null } },\n small: S,\n source: { attrs: { src: null, type: null, media: null } },\n span: S,\n strong: S,\n style: {\n attrs: {\n type: [\"text/css\"],\n media: null,\n scoped: null\n }\n },\n sub: S,\n summary: S,\n sup: S,\n table: S,\n tbody: S,\n td: { attrs: { colspan: null, rowspan: null, headers: null } },\n template: S,\n textarea: {\n attrs: {\n dirname: null, form: null, maxlength: null, name: null, placeholder: null,\n rows: null, cols: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n readonly: [\"readonly\"],\n required: [\"required\"],\n wrap: [\"soft\", \"hard\"]\n }\n },\n tfoot: S,\n th: { attrs: { colspan: null, rowspan: null, headers: null, scope: [\"row\", \"col\", \"rowgroup\", \"colgroup\"] } },\n thead: S,\n time: { attrs: { datetime: null } },\n title: S,\n tr: S,\n track: {\n attrs: {\n src: null, label: null, default: null,\n kind: [\"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\"],\n srclang: null\n }\n },\n ul: { children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n var: S,\n video: {\n attrs: {\n src: null, poster: null, width: null, height: null,\n crossorigin: [\"anonymous\", \"use-credentials\"],\n preload: [\"auto\", \"metadata\", \"none\"],\n autoplay: [\"autoplay\"],\n mediagroup: [\"movie\"],\n muted: [\"muted\"],\n controls: [\"controls\"]\n }\n },\n wbr: S\n};\nconst GlobalAttrs = {\n accesskey: null,\n class: null,\n contenteditable: Bool,\n contextmenu: null,\n dir: [\"ltr\", \"rtl\", \"auto\"],\n draggable: [\"true\", \"false\", \"auto\"],\n dropzone: [\"copy\", \"move\", \"link\", \"string:\", \"file:\"],\n hidden: [\"hidden\"],\n id: null,\n inert: [\"inert\"],\n itemid: null,\n itemprop: null,\n itemref: null,\n itemscope: [\"itemscope\"],\n itemtype: null,\n lang: [\"ar\", \"bn\", \"de\", \"en-GB\", \"en-US\", \"es\", \"fr\", \"hi\", \"id\", \"ja\", \"pa\", \"pt\", \"ru\", \"tr\", \"zh\"],\n spellcheck: Bool,\n autocorrect: Bool,\n autocapitalize: Bool,\n style: null,\n tabindex: null,\n title: null,\n translate: [\"yes\", \"no\"],\n rel: [\"stylesheet\", \"alternate\", \"author\", \"bookmark\", \"help\", \"license\", \"next\", \"nofollow\", \"noreferrer\", \"prefetch\", \"prev\", \"search\", \"tag\"],\n role: /*@__PURE__*/\"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer\".split(\" \"),\n \"aria-activedescendant\": null,\n \"aria-atomic\": Bool,\n \"aria-autocomplete\": [\"inline\", \"list\", \"both\", \"none\"],\n \"aria-busy\": Bool,\n \"aria-checked\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n \"aria-controls\": null,\n \"aria-describedby\": null,\n \"aria-disabled\": Bool,\n \"aria-dropeffect\": null,\n \"aria-expanded\": [\"true\", \"false\", \"undefined\"],\n \"aria-flowto\": null,\n \"aria-grabbed\": [\"true\", \"false\", \"undefined\"],\n \"aria-haspopup\": Bool,\n \"aria-hidden\": Bool,\n \"aria-invalid\": [\"true\", \"false\", \"grammar\", \"spelling\"],\n \"aria-label\": null,\n \"aria-labelledby\": null,\n \"aria-level\": null,\n \"aria-live\": [\"off\", \"polite\", \"assertive\"],\n \"aria-multiline\": Bool,\n \"aria-multiselectable\": Bool,\n \"aria-owns\": null,\n \"aria-posinset\": null,\n \"aria-pressed\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n \"aria-readonly\": Bool,\n \"aria-relevant\": null,\n \"aria-required\": Bool,\n \"aria-selected\": [\"true\", \"false\", \"undefined\"],\n \"aria-setsize\": null,\n \"aria-sort\": [\"ascending\", \"descending\", \"none\", \"other\"],\n \"aria-valuemax\": null,\n \"aria-valuemin\": null,\n \"aria-valuenow\": null,\n \"aria-valuetext\": null\n};\nconst eventAttributes = /*@__PURE__*/(\"beforeunload copy cut dragstart dragover dragleave dragenter dragend \" +\n \"drag paste focus blur change click load mousedown mouseenter mouseleave \" +\n \"mouseup keydown keyup resize scroll unload\").split(\" \").map(n => \"on\" + n);\nfor (let a of eventAttributes)\n GlobalAttrs[a] = null;\nclass Schema {\n constructor(extraTags, extraAttrs) {\n this.tags = Object.assign(Object.assign({}, Tags), extraTags);\n this.globalAttrs = Object.assign(Object.assign({}, GlobalAttrs), extraAttrs);\n this.allTags = Object.keys(this.tags);\n this.globalAttrNames = Object.keys(this.globalAttrs);\n }\n}\nSchema.default = /*@__PURE__*/new Schema;\nfunction elementName(doc, tree, max = doc.length) {\n if (!tree)\n return \"\";\n let tag = tree.firstChild;\n let name = tag && tag.getChild(\"TagName\");\n return name ? doc.sliceString(name.from, Math.min(name.to, max)) : \"\";\n}\nfunction findParentElement(tree, skip = false) {\n for (; tree; tree = tree.parent)\n if (tree.name == \"Element\") {\n if (skip)\n skip = false;\n else\n return tree;\n }\n return null;\n}\nfunction allowedChildren(doc, tree, schema) {\n let parentInfo = schema.tags[elementName(doc, findParentElement(tree))];\n return (parentInfo === null || parentInfo === void 0 ? void 0 : parentInfo.children) || schema.allTags;\n}\nfunction openTags(doc, tree) {\n let open = [];\n for (let parent = findParentElement(tree); parent && !parent.type.isTop; parent = findParentElement(parent.parent)) {\n let tagName = elementName(doc, parent);\n if (tagName && parent.lastChild.name == \"CloseTag\")\n break;\n if (tagName && open.indexOf(tagName) < 0 && (tree.name == \"EndTag\" || tree.from >= parent.firstChild.to))\n open.push(tagName);\n }\n return open;\n}\nconst identifier = /^[:\\-\\.\\w\\u00b7-\\uffff]*$/;\nfunction completeTag(state, schema, tree, from, to) {\n let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n let parent = findParentElement(tree, true);\n return { from, to,\n options: allowedChildren(state.doc, parent, schema).map(tagName => ({ label: tagName, type: \"type\" })).concat(openTags(state.doc, tree).map((tag, i) => ({ label: \"/\" + tag, apply: \"/\" + tag + end,\n type: \"type\", boost: 99 - i }))),\n validFor: /^\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeCloseTag(state, tree, from, to) {\n let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n return { from, to,\n options: openTags(state.doc, tree).map((tag, i) => ({ label: tag, apply: tag + end, type: \"type\", boost: 99 - i })),\n validFor: identifier };\n}\nfunction completeStartTag(state, schema, tree, pos) {\n let options = [], level = 0;\n for (let tagName of allowedChildren(state.doc, tree, schema))\n options.push({ label: \"<\" + tagName, type: \"type\" });\n for (let open of openTags(state.doc, tree))\n options.push({ label: \"</\" + open + \">\", type: \"type\", boost: 99 - level++ });\n return { from: pos, to: pos, options, validFor: /^<\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeAttrName(state, schema, tree, from, to) {\n let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n let localAttrs = info && info.attrs ? Object.keys(info.attrs) : [];\n let names = info && info.globalAttrs === false ? localAttrs\n : localAttrs.length ? localAttrs.concat(schema.globalAttrNames) : schema.globalAttrNames;\n return { from, to,\n options: names.map(attrName => ({ label: attrName, type: \"property\" })),\n validFor: identifier };\n}\nfunction completeAttrValue(state, schema, tree, from, to) {\n var _a;\n let nameNode = (_a = tree.parent) === null || _a === void 0 ? void 0 : _a.getChild(\"AttributeName\");\n let options = [], token = undefined;\n if (nameNode) {\n let attrName = state.sliceDoc(nameNode.from, nameNode.to);\n let attrs = schema.globalAttrs[attrName];\n if (!attrs) {\n let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n attrs = (info === null || info === void 0 ? void 0 : info.attrs) && info.attrs[attrName];\n }\n if (attrs) {\n let base = state.sliceDoc(from, to).toLowerCase(), quoteStart = '\"', quoteEnd = '\"';\n if (/^['\"]/.test(base)) {\n token = base[0] == '\"' ? /^[^\"]*$/ : /^[^']*$/;\n quoteStart = \"\";\n quoteEnd = state.sliceDoc(to, to + 1) == base[0] ? \"\" : base[0];\n base = base.slice(1);\n from++;\n }\n else {\n token = /^[^\\s<>='\"]*$/;\n }\n for (let value of attrs)\n options.push({ label: value, apply: quoteStart + value + quoteEnd, type: \"constant\" });\n }\n }\n return { from, to, options, validFor: token };\n}\nfunction htmlCompletionFor(schema, context) {\n let { state, pos } = context, tree = syntaxTree(state).resolveInner(pos, -1), around = tree.resolve(pos);\n for (let scan = pos, before; around == tree && (before = tree.childBefore(scan));) {\n let last = before.lastChild;\n if (!last || !last.type.isError || last.from < last.to)\n break;\n around = tree = before;\n scan = last.from;\n }\n if (tree.name == \"TagName\") {\n return tree.parent && /CloseTag$/.test(tree.parent.name) ? completeCloseTag(state, tree, tree.from, pos)\n : completeTag(state, schema, tree, tree.from, pos);\n }\n else if (tree.name == \"StartTag\") {\n return completeTag(state, schema, tree, pos, pos);\n }\n else if (tree.name == \"StartCloseTag\" || tree.name == \"IncompleteCloseTag\") {\n return completeCloseTag(state, tree, pos, pos);\n }\n else if (tree.name == \"OpenTag\" || tree.name == \"SelfClosingTag\" || tree.name == \"AttributeName\") {\n return completeAttrName(state, schema, tree, tree.name == \"AttributeName\" ? tree.from : pos, pos);\n }\n else if (tree.name == \"Is\" || tree.name == \"AttributeValue\" || tree.name == \"UnquotedAttributeValue\") {\n return completeAttrValue(state, schema, tree, tree.name == \"Is\" ? pos : tree.from, pos);\n }\n else if (context.explicit && (around.name == \"Element\" || around.name == \"Text\" || around.name == \"Document\")) {\n return completeStartTag(state, schema, tree, pos);\n }\n else {\n return null;\n }\n}\n/**\nHTML tag completion. Opens and closes tags and attributes in a\ncontext-aware way.\n*/\nfunction htmlCompletionSource(context) {\n return htmlCompletionFor(Schema.default, context);\n}\n/**\nCreate a completion source for HTML extended with additional tags\nor attributes.\n*/\nfunction htmlCompletionSourceWith(config) {\n let { extraTags, extraGlobalAttributes: extraAttrs } = config;\n let schema = extraAttrs || extraTags ? new Schema(extraTags, extraAttrs) : Schema.default;\n return (context) => htmlCompletionFor(schema, context);\n}\n\nconst jsonParser = /*@__PURE__*/javascriptLanguage.parser.configure({ top: \"SingleExpression\" });\nconst defaultNesting = [\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/typescript\" || attrs.lang == \"ts\",\n parser: typescriptLanguage.parser },\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/babel\" || attrs.type == \"text/jsx\",\n parser: jsxLanguage.parser },\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/typescript-jsx\",\n parser: tsxLanguage.parser },\n { tag: \"script\",\n attrs(attrs) {\n return /^(importmap|speculationrules|application\\/(.+\\+)?json)$/i.test(attrs.type);\n },\n parser: jsonParser },\n { tag: \"script\",\n attrs(attrs) {\n return !attrs.type || /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type);\n },\n parser: javascriptLanguage.parser },\n { tag: \"style\",\n attrs(attrs) {\n return (!attrs.lang || attrs.lang == \"css\") && (!attrs.type || /^(text\\/)?(x-)?(stylesheet|css)$/i.test(attrs.type));\n },\n parser: cssLanguage.parser }\n];\nconst defaultAttrs = /*@__PURE__*/[\n { name: \"style\",\n parser: /*@__PURE__*/cssLanguage.parser.configure({ top: \"Styles\" }) }\n].concat(/*@__PURE__*/eventAttributes.map(name => ({ name, parser: javascriptLanguage.parser })));\n/**\nA language provider based on the [Lezer HTML\nparser](https://github.com/lezer-parser/html), extended with the\nJavaScript and CSS parsers to parse the content of `<script>` and\n`<style>` tags.\n*/\nconst htmlPlain = /*@__PURE__*/LRLanguage.define({\n name: \"html\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Element(context) {\n let after = /^(\\s*)(<\\/)?/.exec(context.textAfter);\n if (context.node.to <= context.pos + after[0].length)\n return context.continue();\n return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit);\n },\n \"OpenTag CloseTag SelfClosingTag\"(context) {\n return context.column(context.node.from) + context.unit;\n },\n Document(context) {\n if (context.pos + /\\s*/.exec(context.textAfter)[0].length < context.node.to)\n return context.continue();\n let endElt = null, close;\n for (let cur = context.node;;) {\n let last = cur.lastChild;\n if (!last || last.name != \"Element\" || last.to != cur.to)\n break;\n endElt = cur = last;\n }\n if (endElt && !((close = endElt.lastChild) && (close.name == \"CloseTag\" || close.name == \"SelfClosingTag\")))\n return context.lineIndent(endElt.from) + context.unit;\n return null;\n }\n }),\n /*@__PURE__*/foldNodeProp.add({\n Element(node) {\n let first = node.firstChild, last = node.lastChild;\n if (!first || first.name != \"OpenTag\")\n return null;\n return { from: first.to, to: last.name == \"CloseTag\" ? last.from : node.to };\n }\n }),\n /*@__PURE__*/bracketMatchingHandle.add({\n \"OpenTag CloseTag\": node => node.getChild(\"TagName\")\n })\n ]\n }),\n languageData: {\n commentTokens: { block: { open: \"<!--\", close: \"-->\" } },\n indentOnInput: /^\\s*<\\/\\w+\\W$/,\n wordChars: \"-._\"\n }\n});\n/**\nA language provider based on the [Lezer HTML\nparser](https://github.com/lezer-parser/html), extended with the\nJavaScript and CSS parsers to parse the content of `<script>` and\n`<style>` tags.\n*/\nconst htmlLanguage = /*@__PURE__*/htmlPlain.configure({\n wrap: /*@__PURE__*/configureNesting(defaultNesting, defaultAttrs)\n});\n/**\nLanguage support for HTML, including\n[`htmlCompletion`](https://codemirror.net/6/docs/ref/#lang-html.htmlCompletion) and JavaScript and\nCSS support extensions.\n*/\nfunction html(config = {}) {\n let dialect = \"\", wrap;\n if (config.matchClosingTags === false)\n dialect = \"noMatch\";\n if (config.selfClosingTags === true)\n dialect = (dialect ? dialect + \" \" : \"\") + \"selfClosing\";\n if (config.nestedLanguages && config.nestedLanguages.length ||\n config.nestedAttributes && config.nestedAttributes.length)\n wrap = configureNesting((config.nestedLanguages || []).concat(defaultNesting), (config.nestedAttributes || []).concat(defaultAttrs));\n let lang = wrap ? htmlPlain.configure({ wrap, dialect }) : dialect ? htmlLanguage.configure({ dialect }) : htmlLanguage;\n return new LanguageSupport(lang, [\n htmlLanguage.data.of({ autocomplete: htmlCompletionSourceWith(config) }),\n config.autoCloseTags !== false ? autoCloseTags : [],\n javascript().support,\n css().support\n ]);\n}\nconst selfClosers = /*@__PURE__*/new Set(/*@__PURE__*/\"area base br col command embed frame hr img input keygen link meta param source track wbr menuitem\".split(\" \"));\n/**\nExtension that will automatically insert close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, insertTransaction) => {\n if (view.composing || view.state.readOnly || from != to || (text != \">\" && text != \"/\") ||\n !htmlLanguage.isActiveAt(view.state, from, -1))\n return false;\n let base = insertTransaction(), { state } = base;\n let closeTags = state.changeByRange(range => {\n var _a, _b, _c;\n let didType = state.doc.sliceString(range.from - 1, range.to) == text;\n let { head } = range, after = syntaxTree(state).resolveInner(head, -1), name;\n if (didType && text == \">\" && after.name == \"EndTag\") {\n let tag = after.parent;\n if (((_b = (_a = tag.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != \"CloseTag\" &&\n (name = elementName(state.doc, tag.parent, head)) &&\n !selfClosers.has(name)) {\n let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n let insert = `</${name}>`;\n return { range, changes: { from: head, to, insert } };\n }\n }\n else if (didType && text == \"/\" && after.name == \"IncompleteCloseTag\") {\n let tag = after.parent;\n if (after.from == head - 2 && ((_c = tag.lastChild) === null || _c === void 0 ? void 0 : _c.name) != \"CloseTag\" &&\n (name = elementName(state.doc, tag, head)) && !selfClosers.has(name)) {\n let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n let insert = `${name}>`;\n return {\n range: EditorSelection.cursor(head + insert.length, -1),\n changes: { from: head, to, insert }\n };\n }\n }\n return { range };\n });\n if (closeTags.changes.empty)\n return false;\n view.dispatch([\n base,\n state.update(closeTags, {\n userEvent: \"input.complete\",\n scrollIntoView: true\n })\n ]);\n return true;\n});\n\nexport { autoCloseTags, html, htmlCompletionSource, htmlCompletionSourceWith, htmlLanguage, htmlPlain };\n","import { EditorSelection, countColumn, Prec, EditorState } from '@codemirror/state';\nimport { keymap } from '@codemirror/view';\nimport { defineLanguageFacet, foldNodeProp, indentNodeProp, languageDataProp, foldService, syntaxTree, Language, LanguageDescription, ParseContext, indentUnit, LanguageSupport } from '@codemirror/language';\nimport { CompletionContext } from '@codemirror/autocomplete';\nimport { parser, GFM, Subscript, Superscript, Emoji, MarkdownParser, parseCode } from '@lezer/markdown';\nimport { html, htmlCompletionSource } from '@codemirror/lang-html';\nimport { NodeProp } from '@lezer/common';\n\nconst data = /*@__PURE__*/defineLanguageFacet({ commentTokens: { block: { open: \"<!--\", close: \"-->\" } } });\nconst headingProp = /*@__PURE__*/new NodeProp();\nconst commonmark = /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/foldNodeProp.add(type => {\n return !type.is(\"Block\") || type.is(\"Document\") || isHeading(type) != null || isList(type) ? undefined\n : (tree, state) => ({ from: state.doc.lineAt(tree.from).to, to: tree.to });\n }),\n /*@__PURE__*/headingProp.add(isHeading),\n /*@__PURE__*/indentNodeProp.add({\n Document: () => null\n }),\n /*@__PURE__*/languageDataProp.add({\n Document: data\n })\n ]\n});\nfunction isHeading(type) {\n let match = /^(?:ATX|Setext)Heading(\\d)$/.exec(type.name);\n return match ? +match[1] : undefined;\n}\nfunction isList(type) {\n return type.name == \"OrderedList\" || type.name == \"BulletList\";\n}\nfunction findSectionEnd(headerNode, level) {\n let last = headerNode;\n for (;;) {\n let next = last.nextSibling, heading;\n if (!next || (heading = isHeading(next.type)) != null && heading <= level)\n break;\n last = next;\n }\n return last.to;\n}\nconst headerIndent = /*@__PURE__*/foldService.of((state, start, end) => {\n for (let node = syntaxTree(state).resolveInner(end, -1); node; node = node.parent) {\n if (node.from < start)\n break;\n let heading = node.type.prop(headingProp);\n if (heading == null)\n continue;\n let upto = findSectionEnd(node, heading);\n if (upto > end)\n return { from: end, to: upto };\n }\n return null;\n});\nfunction mkLang(parser) {\n return new Language(data, parser, [headerIndent], \"markdown\");\n}\n/**\nLanguage support for strict CommonMark.\n*/\nconst commonmarkLanguage = /*@__PURE__*/mkLang(commonmark);\nconst extended = /*@__PURE__*/commonmark.configure([GFM, Subscript, Superscript, Emoji, {\n props: [\n /*@__PURE__*/foldNodeProp.add({\n Table: (tree, state) => ({ from: state.doc.lineAt(tree.from).to, to: tree.to })\n })\n ]\n }]);\n/**\nLanguage support for [GFM](https://github.github.com/gfm/) plus\nsubscript, superscript, and emoji syntax.\n*/\nconst markdownLanguage = /*@__PURE__*/mkLang(extended);\nfunction getCodeParser(languages, defaultLanguage) {\n return (info) => {\n if (info && languages) {\n let found = null;\n // Strip anything after whitespace\n info = /\\S*/.exec(info)[0];\n if (typeof languages == \"function\")\n found = languages(info);\n else\n found = LanguageDescription.matchLanguageName(languages, info, true);\n if (found instanceof LanguageDescription)\n return found.support ? found.support.language.parser : ParseContext.getSkippingParser(found.load());\n else if (found)\n return found.parser;\n }\n return defaultLanguage ? defaultLanguage.parser : null;\n };\n}\n\nclass Context {\n constructor(node, from, to, spaceBefore, spaceAfter, type, item) {\n this.node = node;\n this.from = from;\n this.to = to;\n this.spaceBefore = spaceBefore;\n this.spaceAfter = spaceAfter;\n this.type = type;\n this.item = item;\n }\n blank(maxWidth, trailing = true) {\n let result = this.spaceBefore + (this.node.name == \"Blockquote\" ? \">\" : \"\");\n if (maxWidth != null) {\n while (result.length < maxWidth)\n result += \" \";\n return result;\n }\n else {\n for (let i = this.to - this.from - result.length - this.spaceAfter.length; i > 0; i--)\n result += \" \";\n return result + (trailing ? this.spaceAfter : \"\");\n }\n }\n marker(doc, add) {\n let number = this.node.name == \"OrderedList\" ? String((+itemNumber(this.item, doc)[2] + add)) : \"\";\n return this.spaceBefore + number + this.type + this.spaceAfter;\n }\n}\nfunction getContext(node, doc) {\n let nodes = [];\n for (let cur = node; cur; cur = cur.parent) {\n if (cur.name == \"ListItem\" || cur.name == \"Blockquote\" || cur.name == \"FencedCode\")\n nodes.push(cur);\n }\n let context = [];\n for (let i = nodes.length - 1; i >= 0; i--) {\n let node = nodes[i], match;\n let line = doc.lineAt(node.from), startPos = node.from - line.from;\n if (node.name == \"FencedCode\") {\n context.push(new Context(node, startPos, startPos, \"\", \"\", \"\", null));\n }\n else if (node.name == \"Blockquote\" && (match = /^ *>( ?)/.exec(line.text.slice(startPos)))) {\n context.push(new Context(node, startPos, startPos + match[0].length, \"\", match[1], \">\", null));\n }\n else if (node.name == \"ListItem\" && node.parent.name == \"OrderedList\" &&\n (match = /^( *)\\d+([.)])( *)/.exec(line.text.slice(startPos)))) {\n let after = match[3], len = match[0].length;\n if (after.length >= 4) {\n after = after.slice(0, after.length - 4);\n len -= 4;\n }\n context.push(new Context(node.parent, startPos, startPos + len, match[1], after, match[2], node));\n }\n else if (node.name == \"ListItem\" && node.parent.name == \"BulletList\" &&\n (match = /^( *)([-+*])( {1,4}\\[[ xX]\\])?( +)/.exec(line.text.slice(startPos)))) {\n let after = match[4], len = match[0].length;\n if (after.length > 4) {\n after = after.slice(0, after.length - 4);\n len -= 4;\n }\n let type = match[2];\n if (match[3])\n type += match[3].replace(/[xX]/, ' ');\n context.push(new Context(node.parent, startPos, startPos + len, match[1], after, type, node));\n }\n }\n return context;\n}\nfunction itemNumber(item, doc) {\n return /^(\\s*)(\\d+)(?=[.)])/.exec(doc.sliceString(item.from, item.from + 10));\n}\nfunction renumberList(after, doc, changes, offset = 0) {\n for (let prev = -1, node = after;;) {\n if (node.name == \"ListItem\") {\n let m = itemNumber(node, doc);\n let number = +m[2];\n if (prev >= 0) {\n if (number != prev + 1)\n return;\n changes.push({ from: node.from + m[1].length, to: node.from + m[0].length, insert: String(prev + 2 + offset) });\n }\n prev = number;\n }\n let next = node.nextSibling;\n if (!next)\n break;\n node = next;\n }\n}\nfunction normalizeIndent(content, state) {\n let blank = /^[ \\t]*/.exec(content)[0].length;\n if (!blank || state.facet(indentUnit) != \"\\t\")\n return content;\n let col = countColumn(content, 4, blank);\n let space = \"\";\n for (let i = col; i > 0;) {\n if (i >= 4) {\n space += \"\\t\";\n i -= 4;\n }\n else {\n space += \" \";\n i--;\n }\n }\n return space + content.slice(blank);\n}\n/**\nThis command, when invoked in Markdown context with cursor\nselection(s), will create a new line with the markup for\nblockquotes and lists that were active on the old line. If the\ncursor was directly after the end of the markup for the old line,\ntrailing whitespace and list markers are removed from that line.\n\nThe command does nothing in non-Markdown context, so it should\nnot be used as the only binding for Enter (even in a Markdown\ndocument, HTML and code regions might use a different language).\n*/\nconst insertNewlineContinueMarkup = ({ state, dispatch }) => {\n let tree = syntaxTree(state), { doc } = state;\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty || !markdownLanguage.isActiveAt(state, range.from, 0))\n return dont = { range };\n let pos = range.from, line = doc.lineAt(pos);\n let context = getContext(tree.resolveInner(pos, -1), doc);\n while (context.length && context[context.length - 1].from > pos - line.from)\n context.pop();\n if (!context.length)\n return dont = { range };\n let inner = context[context.length - 1];\n if (inner.to - inner.spaceAfter.length > pos - line.from)\n return dont = { range };\n let emptyLine = pos >= (inner.to - inner.spaceAfter.length) && !/\\S/.test(line.text.slice(inner.to));\n // Empty line in list\n if (inner.item && emptyLine) {\n let first = inner.node.firstChild, second = inner.node.getChild(\"ListItem\", \"ListItem\");\n // Not second item or blank line before: delete a level of markup\n if (first.to >= pos || second && second.to < pos ||\n line.from > 0 && !/[^\\s>]/.test(doc.lineAt(line.from - 1).text)) {\n let next = context.length > 1 ? context[context.length - 2] : null;\n let delTo, insert = \"\";\n if (next && next.item) { // Re-add marker for the list at the next level\n delTo = line.from + next.from;\n insert = next.marker(doc, 1);\n }\n else {\n delTo = line.from + (next ? next.to : 0);\n }\n let changes = [{ from: delTo, to: pos, insert }];\n if (inner.node.name == \"OrderedList\")\n renumberList(inner.item, doc, changes, -2);\n if (next && next.node.name == \"OrderedList\")\n renumberList(next.item, doc, changes);\n return { range: EditorSelection.cursor(delTo + insert.length), changes };\n }\n else { // Move second item down, making tight two-item list non-tight\n let insert = blankLine(context, state, line);\n return { range: EditorSelection.cursor(pos + insert.length + 1),\n changes: { from: line.from, insert: insert + state.lineBreak } };\n }\n }\n if (inner.node.name == \"Blockquote\" && emptyLine && line.from) {\n let prevLine = doc.lineAt(line.from - 1), quoted = />\\s*$/.exec(prevLine.text);\n // Two aligned empty quoted lines in a row\n if (quoted && quoted.index == inner.from) {\n let changes = state.changes([{ from: prevLine.from + quoted.index, to: prevLine.to },\n { from: line.from + inner.from, to: line.to }]);\n return { range: range.map(changes), changes };\n }\n }\n let changes = [];\n if (inner.node.name == \"OrderedList\")\n renumberList(inner.item, doc, changes);\n let continued = inner.item && inner.item.from < line.from;\n let insert = \"\";\n // If not dedented\n if (!continued || /^[\\s\\d.)\\-+*>]*/.exec(line.text)[0].length >= inner.to) {\n for (let i = 0, e = context.length - 1; i <= e; i++) {\n insert += i == e && !continued ? context[i].marker(doc, 1)\n : context[i].blank(i < e ? countColumn(line.text, 4, context[i + 1].from) - insert.length : null);\n }\n }\n let from = pos;\n while (from > line.from && /\\s/.test(line.text.charAt(from - line.from - 1)))\n from--;\n insert = normalizeIndent(insert, state);\n if (nonTightList(inner.node, state.doc))\n insert = blankLine(context, state, line) + state.lineBreak + insert;\n changes.push({ from, to: pos, insert: state.lineBreak + insert });\n return { range: EditorSelection.cursor(from + insert.length + 1), changes };\n });\n if (dont)\n return false;\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n};\nfunction isMark(node) {\n return node.name == \"QuoteMark\" || node.name == \"ListMark\";\n}\nfunction nonTightList(node, doc) {\n if (node.name != \"OrderedList\" && node.name != \"BulletList\")\n return false;\n let first = node.firstChild, second = node.getChild(\"ListItem\", \"ListItem\");\n if (!second)\n return false;\n let line1 = doc.lineAt(first.to), line2 = doc.lineAt(second.from);\n let empty = /^[\\s>]*$/.test(line1.text);\n return line1.number + (empty ? 0 : 1) < line2.number;\n}\nfunction blankLine(context, state, line) {\n let insert = \"\";\n for (let i = 0, e = context.length - 2; i <= e; i++) {\n insert += context[i].blank(i < e ? countColumn(line.text, 4, context[i + 1].from) - insert.length : null, i < e);\n }\n return normalizeIndent(insert, state);\n}\nfunction contextNodeForDelete(tree, pos) {\n let node = tree.resolveInner(pos, -1), scan = pos;\n if (isMark(node)) {\n scan = node.from;\n node = node.parent;\n }\n for (let prev; prev = node.childBefore(scan);) {\n if (isMark(prev)) {\n scan = prev.from;\n }\n else if (prev.name == \"OrderedList\" || prev.name == \"BulletList\") {\n node = prev.lastChild;\n scan = node.to;\n }\n else {\n break;\n }\n }\n return node;\n}\n/**\nThis command will, when invoked in a Markdown context with the\ncursor directly after list or blockquote markup, delete one level\nof markup. When the markup is for a list, it will be replaced by\nspaces on the first invocation (a further invocation will delete\nthe spaces), to make it easy to continue a list.\n\nWhen not after Markdown block markup, this command will return\nfalse, so it is intended to be bound alongside other deletion\ncommands, with a higher precedence than the more generic commands.\n*/\nconst deleteMarkupBackward = ({ state, dispatch }) => {\n let tree = syntaxTree(state);\n let dont = null, changes = state.changeByRange(range => {\n let pos = range.from, { doc } = state;\n if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {\n let line = doc.lineAt(pos);\n let context = getContext(contextNodeForDelete(tree, pos), doc);\n if (context.length) {\n let inner = context[context.length - 1];\n let spaceEnd = inner.to - inner.spaceAfter.length + (inner.spaceAfter ? 1 : 0);\n // Delete extra trailing space after markup\n if (pos - line.from > spaceEnd && !/\\S/.test(line.text.slice(spaceEnd, pos - line.from)))\n return { range: EditorSelection.cursor(line.from + spaceEnd),\n changes: { from: line.from + spaceEnd, to: pos } };\n if (pos - line.from == spaceEnd &&\n // Only apply this if we're on the line that has the\n // construct's syntax, or there's only indentation in the\n // target range\n (!inner.item || line.from <= inner.item.from || !/\\S/.test(line.text.slice(0, inner.to)))) {\n let start = line.from + inner.from;\n // Replace a list item marker with blank space\n if (inner.item && inner.node.from < inner.item.from && /\\S/.test(line.text.slice(inner.from, inner.to))) {\n let insert = inner.blank(countColumn(line.text, 4, inner.to) - countColumn(line.text, 4, inner.from));\n if (start == line.from)\n insert = normalizeIndent(insert, state);\n return { range: EditorSelection.cursor(start + insert.length),\n changes: { from: start, to: line.from + inner.to, insert } };\n }\n // Delete one level of indentation\n if (start < pos)\n return { range: EditorSelection.cursor(start), changes: { from: start, to: pos } };\n }\n }\n }\n return dont = { range };\n });\n if (dont)\n return false;\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete\" }));\n return true;\n};\n\n/**\nA small keymap with Markdown-specific bindings. Binds Enter to\n[`insertNewlineContinueMarkup`](https://codemirror.net/6/docs/ref/#lang-markdown.insertNewlineContinueMarkup)\nand Backspace to\n[`deleteMarkupBackward`](https://codemirror.net/6/docs/ref/#lang-markdown.deleteMarkupBackward).\n*/\nconst markdownKeymap = [\n { key: \"Enter\", run: insertNewlineContinueMarkup },\n { key: \"Backspace\", run: deleteMarkupBackward }\n];\nconst htmlNoMatch = /*@__PURE__*/html({ matchClosingTags: false });\n/**\nMarkdown language support.\n*/\nfunction markdown(config = {}) {\n let { codeLanguages, defaultCodeLanguage, addKeymap = true, base: { parser } = commonmarkLanguage, completeHTMLTags = true, htmlTagLanguage = htmlNoMatch } = config;\n if (!(parser instanceof MarkdownParser))\n throw new RangeError(\"Base parser provided to `markdown` should be a Markdown parser\");\n let extensions = config.extensions ? [config.extensions] : [];\n let support = [htmlTagLanguage.support], defaultCode;\n if (defaultCodeLanguage instanceof LanguageSupport) {\n support.push(defaultCodeLanguage.support);\n defaultCode = defaultCodeLanguage.language;\n }\n else if (defaultCodeLanguage) {\n defaultCode = defaultCodeLanguage;\n }\n let codeParser = codeLanguages || defaultCode ? getCodeParser(codeLanguages, defaultCode) : undefined;\n extensions.push(parseCode({ codeParser, htmlParser: htmlTagLanguage.language.parser }));\n if (addKeymap)\n support.push(Prec.high(keymap.of(markdownKeymap)));\n let lang = mkLang(parser.configure(extensions));\n if (completeHTMLTags)\n support.push(lang.data.of({ autocomplete: htmlTagCompletion }));\n return new LanguageSupport(lang, support);\n}\nfunction htmlTagCompletion(context) {\n let { state, pos } = context, m = /<[:\\-\\.\\w\\u00b7-\\uffff]*$/.exec(state.sliceDoc(pos - 25, pos));\n if (!m)\n return null;\n let tree = syntaxTree(state).resolveInner(pos, -1);\n while (tree && !tree.type.isTop) {\n if (tree.name == \"CodeBlock\" || tree.name == \"FencedCode\" || tree.name == \"ProcessingInstructionBlock\" ||\n tree.name == \"CommentBlock\" || tree.name == \"Link\" || tree.name == \"Image\")\n return null;\n tree = tree.parent;\n }\n return {\n from: pos - m[0].length, to: pos,\n options: htmlTagCompletions(),\n validFor: /^<[:\\-\\.\\w\\u00b7-\\uffff]*$/\n };\n}\nlet _tagCompletions = null;\nfunction htmlTagCompletions() {\n if (_tagCompletions)\n return _tagCompletions;\n let result = htmlCompletionSource(new CompletionContext(EditorState.create({ extensions: htmlNoMatch }), 0, true));\n return _tagCompletions = result ? result.options : [];\n}\n\nexport { commonmarkLanguage, deleteMarkupBackward, insertNewlineContinueMarkup, markdown, markdownKeymap, markdownLanguage };\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","export function copyToClipboard(content: string): Promise<void> {\n if (navigator.clipboard && window.isSecureContext) {\n return navigator.clipboard.writeText(content);\n }\n\n return fallbackCopyTextToClipboard(content);\n}\n\nfunction fallbackCopyTextToClipboard(content: string) {\n const textArea = document.createElement(\"textarea\");\n textArea.value = content;\n\n textArea.style.top = \"0\";\n textArea.style.left = \"0\";\n textArea.style.opacity = \"0\";\n textArea.style.position = \"fixed\";\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n return new Promise<void>((resolve, reject) => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n if (document.execCommand(\"copy\")) resolve();\n else reject();\n } catch {\n reject();\n } finally {\n document.body.removeChild(textArea);\n }\n });\n}\n","type TickOptions = {\n type?: \"micro\" | \"macro\";\n delay?: number;\n deep?: number;\n maxDeep?: number;\n recursiveCondition?: () => boolean;\n delayGetter?: (deep: number) => number;\n};\n\nexport function tick({\n deep = 1,\n maxDeep = 1,\n delay = 0,\n recursiveCondition,\n delayGetter,\n type = \"macro\",\n}: TickOptions) {\n return new Promise((resolve) => {\n if (type === \"micro\") {\n if (deep >= maxDeep || !recursiveCondition || recursiveCondition()) resolve(1);\n else\n void tick({ deep: deep + 1, maxDeep, delay, recursiveCondition, type, delayGetter }).then(\n () => resolve(1),\n );\n }\n if (type === \"macro\") {\n const currentDelay = delayGetter ? delayGetter(deep) : delay;\n\n setTimeout(() => {\n if (deep >= maxDeep || !recursiveCondition || recursiveCondition()) resolve(1);\n else\n void tick({ deep: deep + 1, maxDeep, delay, recursiveCondition, type, delayGetter }).then(\n () => resolve(1),\n );\n }, currentDelay);\n }\n });\n}\n","import { Decoration, type WidgetType } from \"@codemirror/view\";\n\ntype GetLineDecorationOptions = {\n style: string;\n range: [number, number?];\n};\nexport function getLineDecoration({ style, range }: GetLineDecorationOptions) {\n return Decoration.line({\n class: style,\n }).range(range[0], range[1]);\n}\n\ntype GetMarkDecorationOptions = {\n style: string;\n range: [number, number];\n};\nexport function getMarkDecoration({ range, style }: GetMarkDecorationOptions) {\n return Decoration.mark({\n class: style,\n }).range(range[0], range[1]);\n}\n\ntype GetHideDecorationOptions = {\n range: [number, number];\n};\nexport function getHideDecoration({ range }: GetHideDecorationOptions) {\n return Decoration.replace({}).range(range[0], range[1]);\n}\n\ntype GetReplaceDecorationOptions = {\n range: [number, number?];\n widget: WidgetType;\n};\nexport function getReplaceDecoration({ range, widget }: GetReplaceDecorationOptions) {\n return Decoration.replace({ widget }).range(range[0], range[1]);\n}\n\ntype GetWidgetDecorationOptions = {\n widget: WidgetType;\n range: [number, number?];\n};\nexport function getWidgetDecorationOptions({ widget, range }: GetWidgetDecorationOptions) {\n return Decoration.widget({ widget, side: 1 }).range(range[0], range[1]);\n}\n","export function isRangeOverlap(range: [number, number], text: [number, number]) {\n return range[0] <= text[1] && text[0] <= range[1];\n}\n","import type { SelectionRange } from \"@codemirror/state\";\nimport { isRangeOverlap } from \"./is-range-overlap\";\n\nexport function isInRange(ranges: readonly SelectionRange[], text: [number, number]) {\n return ranges.some((range) => isRangeOverlap([range.from, range.to], text));\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","export const NAME_OF_BLOCKQUOTE_MARK = \"QuoteMark\";\nexport const CODE_OF_SPACE = 32;\nexport const CODE_OF_BLOCKQUOTE_MARK = 62; // >\n","import { WidgetType } from \"@codemirror/view\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport styles from \"../styles.module.scss\";\n\nexport class BlockquoteWidget extends WidgetType {\n constructor(private readonly deep: boolean) {\n super();\n }\n\n toDOM(): HTMLElement {\n const span = document.createElement(\"span\");\n span.classList.add(styles.blockquote__inner);\n if (this.deep) span.classList.add(styles[\"blockquote__inner-deep\"]);\n span.classList.add(CLASSES.blockquoteInner);\n\n return span;\n }\n}\n","import clsx from \"clsx\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport {\n CODE_OF_BLOCKQUOTE_MARK,\n CODE_OF_SPACE,\n NAME_OF_BLOCKQUOTE_MARK,\n} from \"./blockquote-constants\";\nimport { BlockquoteWidget } from \"./blockquote-widget\";\n\nfunction getBlockquoteDecorations({ decorations, node, view }: GetDecorationOptions) {\n if (node.name !== NAME_OF_BLOCKQUOTE_MARK) {\n return;\n }\n\n const line = view.lineBlockAt(node.from);\n let isInner = false;\n\n if (line.from !== node.from) {\n const content = view.state.doc.sliceString(line.from, node.to);\n let pos = content.length - 1;\n let isHasMark = false;\n\n while (pos >= 0) {\n pos--;\n const currentCode = content.charCodeAt(pos);\n if (currentCode === CODE_OF_SPACE) continue;\n if (currentCode === CODE_OF_BLOCKQUOTE_MARK) {\n if (!isHasMark) {\n isHasMark = true;\n continue;\n }\n if (!isInner) {\n isInner = true;\n break;\n }\n }\n pos = -1;\n }\n }\n\n if (!isInner) {\n decorations.push(\n utils.getLineDecoration({\n style: clsx(styles.blockquote, CLASSES.blockquote),\n range: [line.from],\n }),\n );\n }\n}\n\nfunction getBlockquoteSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_BLOCKQUOTE_MARK) {\n return;\n }\n\n const line = view.lineBlockAt(node.from);\n let isInner = false;\n let isDeepInner = false;\n\n if (line.from !== node.from) {\n const content = view.state.doc.sliceString(line.from, node.to);\n let pos = content.length;\n let isHasMark = false;\n\n while (pos >= 0) {\n pos--;\n const currentCode = content.charCodeAt(pos);\n\n if (currentCode === CODE_OF_SPACE) continue;\n if (currentCode === CODE_OF_BLOCKQUOTE_MARK) {\n if (!isHasMark) {\n isHasMark = true;\n continue;\n }\n if (!isInner) {\n isInner = true;\n continue;\n }\n if (!isDeepInner) {\n isDeepInner = true;\n break;\n }\n }\n pos = -1;\n }\n }\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n ) {\n if (!isInner) decorations.push(utils.getHideDecoration({ range: [node.from, node.to] }));\n else\n decorations.push(\n utils.getReplaceDecoration({\n widget: new BlockquoteWidget(isDeepInner),\n range: [node.from, node.to],\n }),\n );\n }\n}\n\nexport const blockquoteDecorationPlugin: DecorationPlugin = {\n decorations: [getBlockquoteDecorations],\n selectionDecorations: [getBlockquoteSelectionDecorations],\n};\n","export const NAME_OF_BOLD = \"StrongEmphasis\";\nexport const LIST_OF_BOLD_MARKS = new Set([95, 42]); // _ *\n","import { syntaxTree } from \"@codemirror/language\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { LIST_OF_BOLD_MARKS, NAME_OF_BOLD } from \"./bold-constants\";\n\nfunction getBoldDecorations({ decorations, node, view }: GetDecorationOptions) {\n if (node.name !== NAME_OF_BOLD) {\n return;\n }\n\n const step =\n LIST_OF_BOLD_MARKS.has(view.state.doc.sliceString(node.from - 1, node.from).charCodeAt(0)) &&\n syntaxTree(view.state).resolve(node.from - 1).type.name !== \"Emphasis\"\n ? 1\n : 0;\n\n decorations.push(\n utils.getMarkDecoration({\n style: styles.bold,\n range: [node.from - step, node.to + step],\n }),\n );\n}\n\nfunction getBoldSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_BOLD) {\n return;\n }\n\n if (\n LIST_OF_BOLD_MARKS.has(view.state.doc.sliceString(node.from - 1, node.from).charCodeAt(0)) &&\n syntaxTree(view.state).resolve(node.from - 1).type.name !== \"Emphasis\"\n ) {\n return;\n }\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + 2] }));\n decorations.push(utils.getHideDecoration({ range: [node.to - 2, node.to] }));\n }\n}\n\nexport const boldDecorationPlugin: DecorationPlugin = {\n decorations: [getBoldDecorations],\n selectionDecorations: [getBoldSelectionDecorations],\n};\n","export const NAME_OF_FENCED_CODE = \"FencedCode\";\nexport const NAME_OF_INLINE_CODE = \"InlineCode\";\nexport const CODE_OF_CODE_MARK = 96; // `\n","import { type EditorView, WidgetType } from \"@codemirror/view\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport styles from \"../styles.module.scss\";\n\nexport class CodeWidget extends WidgetType {\n view: EditorView | undefined;\n\n timer: NodeJS.Timeout | undefined;\n\n button: HTMLElement | undefined;\n\n span: HTMLElement | undefined;\n\n constructor(\n private readonly language: string,\n private content: string | undefined,\n ) {\n super();\n }\n\n onClick() {\n if (this.content && this.button && this.span) {\n const span = this.span;\n const button = this.button;\n clearTimeout(this.timer);\n button.classList.remove(styles.pending);\n button.classList.remove(CLASSES.codeButtonPending);\n button.classList.remove(styles.success);\n button.classList.remove(CLASSES.codeButtonSuccess);\n button.classList.remove(styles.fail);\n button.classList.remove(CLASSES.codeButtonFail);\n\n button.classList.add(styles.pending);\n button.classList.add(CLASSES.codeButtonPending);\n\n span.classList.add(styles.hide);\n\n void utils\n .copyToClipboard(this.content)\n .then(() => {\n button.classList.remove(styles.pending);\n button.classList.remove(CLASSES.codeButtonPending);\n\n button.classList.add(styles.success);\n button.classList.add(CLASSES.codeButtonSuccess);\n\n this.timer = setTimeout(() => {\n button.classList.remove(styles.success);\n button.classList.remove(CLASSES.codeButtonSuccess);\n span.classList.remove(styles.hide);\n }, 500);\n })\n .catch(() => {\n button.classList.remove(styles.pending);\n button.classList.remove(CLASSES.codeButtonPending);\n button.classList.add(styles.fail);\n button.classList.add(CLASSES.codeButtonFail);\n\n this.timer = setTimeout(() => {\n button.classList.remove(styles.fail);\n button.classList.remove(CLASSES.codeButtonFail);\n\n span.classList.remove(styles.hide);\n }, 500);\n });\n }\n }\n\n toDOM(view: EditorView): HTMLElement {\n this.view = view;\n\n const span = document.createElement(\"span\");\n span.classList.add(styles.code__span);\n span.classList.add(CLASSES.codeButtonSpan);\n\n span.textContent = this.language;\n\n const button = document.createElement(\"button\");\n button.classList.add(styles.code__button);\n button.classList.add(CLASSES.codeButton);\n\n if (this.content) button.addEventListener(\"click\", this.onClick.bind(this));\n button.appendChild(span);\n\n this.button = button;\n this.span = span;\n\n return button;\n }\n\n destroy(dom: HTMLElement): void {\n if (this.content) dom.removeEventListener(\"click\", this.onClick.bind(this));\n }\n}\n","import clsx from \"clsx\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { CODE_OF_CODE_MARK, NAME_OF_FENCED_CODE, NAME_OF_INLINE_CODE } from \"./code-constants\";\nimport { CodeWidget } from \"./code-widget\";\n\nfunction getCodeSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_FENCED_CODE && node.name !== NAME_OF_INLINE_CODE) {\n return;\n }\n\n let isOverlapLine = false;\n const startMarkPosition = { from: -1, to: -1 };\n const endMarkPosition = { from: -1, to: -1 };\n const lines = view.viewportLineBlocks.filter((line) => {\n const isOverlap = utils.isRangeOverlap([node.from, node.to], [line.from, line.to]);\n if (isOverlap && utils.isInRange(view.state.selection.ranges, [line.from, line.to]))\n isOverlapLine = true;\n\n return isOverlap;\n });\n let languagePos: [number, number] | undefined;\n let language: string | undefined;\n let codeContent: string | undefined;\n\n const content = view.state.doc.sliceString(node.from, node.to);\n let pos = -1;\n while (\n (startMarkPosition.from === -1 || startMarkPosition.to === -1) &&\n pos >= -1 &&\n pos < content.length\n ) {\n pos++;\n const code = content.charCodeAt(pos);\n\n if (code !== CODE_OF_CODE_MARK && startMarkPosition.from === -1) continue;\n else if (code === CODE_OF_CODE_MARK && startMarkPosition.from === -1)\n startMarkPosition.from = node.from + pos;\n else if (code !== CODE_OF_CODE_MARK && startMarkPosition.from !== -1)\n startMarkPosition.to = node.from + pos;\n }\n\n pos = content.length;\n\n while (\n (endMarkPosition.from === -1 || endMarkPosition.to === -1) &&\n pos >= -1 &&\n pos <= content.length\n ) {\n pos--;\n const code = content.charCodeAt(pos);\n\n if (code !== CODE_OF_CODE_MARK && endMarkPosition.to === -1) continue;\n else if (code === CODE_OF_CODE_MARK && endMarkPosition.to === -1)\n endMarkPosition.to = node.from + pos + 1;\n else if (code !== CODE_OF_CODE_MARK && endMarkPosition.to !== -1)\n endMarkPosition.from = node.from + pos + 1;\n }\n\n if (node.name === NAME_OF_FENCED_CODE) {\n const codeInfo = node.node.getChild(\"CodeInfo\");\n const codeText = node.node.getChild(\"CodeText\");\n\n if (codeInfo) {\n language = view.state.doc.sliceString(codeInfo.from, codeInfo.to);\n languagePos = [codeInfo.from, codeInfo.to];\n }\n if (codeText) codeContent = view.state.doc.sliceString(codeText.from, codeText.to);\n else codeContent = \"\";\n }\n if (node.name === NAME_OF_INLINE_CODE) {\n codeContent = view.state.doc.sliceString(startMarkPosition.to, endMarkPosition.from).trim();\n }\n if (!language) language = \"copy\";\n\n if (lines.length > 1) {\n lines.forEach((line) => {\n decorations.push(\n utils.getLineDecoration({\n style: clsx(styles.code__line, CLASSES.code),\n range: [line.from],\n }),\n );\n });\n } else {\n decorations.push(\n utils.getMarkDecoration({\n style: clsx(styles.code__single, CLASSES.code),\n range: [node.from, node.to],\n }),\n );\n }\n\n if (\n isReadonly ||\n !view.hasFocus ||\n (lines.length > 1 && !isOverlapLine) ||\n (lines.length === 1 && !utils.isInRange(view.state.selection.ranges, [node.from, node.to]))\n ) {\n if (lines.length > 1 && language) {\n if (languagePos) decorations.push(utils.getHideDecoration({ range: languagePos }));\n decorations.push(\n utils.getWidgetDecorationOptions({\n widget: new CodeWidget(language, codeContent),\n range: [node.from],\n }),\n );\n }\n decorations.push(\n utils.getHideDecoration({ range: [startMarkPosition.from, startMarkPosition.to] }),\n );\n decorations.push(\n utils.getHideDecoration({ range: [endMarkPosition.from, endMarkPosition.to] }),\n );\n }\n}\n\nexport const codeDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getCodeSelectionDecorations],\n};\n","export const NAME_OF_HEADER = \"ATXHeading\";\nexport const NAME_OF_HEADER_UNDER = \"SetextHeading\";\nexport const NAME_OF_HEADER_MARK = \"HeaderMark\";\n","import clsx from \"clsx\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { NAME_OF_HEADER, NAME_OF_HEADER_MARK, NAME_OF_HEADER_UNDER } from \"./header-constants\";\n\nfunction getHeaderDecorations({ decorations, node, view }: GetDecorationOptions) {\n const isHeader = node.name.startsWith(NAME_OF_HEADER);\n const isHeaderUnder = node.name.startsWith(NAME_OF_HEADER_UNDER);\n\n if (!isHeader && !isHeaderUnder) {\n return;\n }\n\n let level: string | undefined;\n\n if (isHeader) {\n level = node.name.replace(NAME_OF_HEADER, \"\");\n\n if (view.state.doc.sliceString(node.from + +level).charCodeAt(0) !== 32) return;\n } else {\n level = node.name.replace(NAME_OF_HEADER_UNDER, \"\");\n }\n\n if (!level) return;\n\n decorations.push(\n utils.getLineDecoration({\n style: clsx(styles.header, styles[`level_${level}`]),\n range: [view.lineBlockAt(node.from).from],\n }),\n );\n}\n\nfunction getHeaderSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n const isHeader = node.name.startsWith(NAME_OF_HEADER);\n const isHeaderUnder = node.name.startsWith(NAME_OF_HEADER_UNDER);\n\n if (!isHeader && !isHeaderUnder) {\n return;\n }\n\n const mark = node.node.getChild(NAME_OF_HEADER_MARK);\n if (!mark) return;\n\n if (isHeader) {\n const line = view.lineBlockAt(mark.from);\n if (line.length < mark.to - mark.from + 1) return;\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [mark.from, mark.to + 1] }));\n }\n } else {\n const lineHeader = view.lineBlockAt(node.from);\n const lineMark = view.lineBlockAt(mark.from);\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [lineHeader.from, lineMark.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [lineMark.from, lineMark.to] }));\n }\n }\n}\n\nexport const headerDecorationPlugin: DecorationPlugin = {\n decorations: [getHeaderDecorations],\n selectionDecorations: [getHeaderSelectionDecorations],\n};\n","import clsx from \"clsx\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { NAME_OF_HORIZONTAL } from \"./horizontal-constants\";\n\nfunction getHorizontalSelectionDecoration({\n decorations,\n isReadonly,\n node,\n view,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_HORIZONTAL) return;\n\n const line = view.lineBlockAt(node.from);\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n ) {\n decorations.push(\n utils.getLineDecoration({\n style: clsx(styles.horizontal, CLASSES.horizontal),\n range: [line.from],\n }),\n );\n decorations.push(utils.getHideDecoration({ range: [node.from, node.to] }));\n }\n}\n\nexport const horizontalDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getHorizontalSelectionDecoration],\n};\n","export const NAME_OF_HORIZONTAL = \"HorizontalRule\";\n","import { type EditorView, WidgetType } from \"@codemirror/view\";\nimport { utils } from \"@/lib\";\nimport styles from \"../styles.module.scss\";\n\nconst INTERVAL_DELAY = 10000;\nconst IMAGE_NODES: Record<string, HTMLImageElement> = {};\nconst EXISTING_WIDGETS: Set<string> = new Set();\nlet interval: NodeJS.Timeout | null = null;\n\nexport class ImageWidget extends WidgetType {\n view: EditorView | undefined;\n\n constructor(\n private text: string,\n private link: string,\n private from: number,\n private to: number,\n ) {\n super();\n }\n\n get key() {\n return `${this.link}:${this.text}:${this.from}:${this.to}`;\n }\n\n eq(widget: ImageWidget): boolean {\n const image = IMAGE_NODES[this.key];\n\n delete IMAGE_NODES[this.key];\n EXISTING_WIDGETS.delete(this.key);\n\n if (image.src !== widget.link) image.src = widget.link;\n if (image.alt !== widget.text) image.alt = widget.text;\n\n this.link = widget.link;\n this.text = widget.text;\n this.from = widget.from;\n this.to = widget.to;\n\n IMAGE_NODES[this.key] = image;\n EXISTING_WIDGETS.add(this.key);\n\n return true;\n }\n\n updateDOM(): boolean {\n return true;\n }\n\n toDOM(view: EditorView): HTMLElement {\n EXISTING_WIDGETS.add(this.key);\n\n if (IMAGE_NODES[this.key]) {\n const image = IMAGE_NODES[this.key];\n if (image.src !== this.link) {\n image.src = this.link;\n }\n if (image.alt !== this.text) image.alt = this.text;\n\n return image;\n }\n\n this.view = view;\n const image = document.createElement(\"img\");\n image.classList.add(styles.image);\n image.alt = this.text;\n image.src = this.link;\n\n image.addEventListener(\"mousedown\", handleClick);\n image.addEventListener(\"click\", handleClick);\n\n IMAGE_NODES[this.key] = image;\n\n if (!interval) interval = setInterval(garbageCollectorInterval, INTERVAL_DELAY);\n\n return image;\n }\n\n destroy(): void {\n EXISTING_WIDGETS.delete(this.key);\n }\n}\n\nfunction garbageCollectorInterval() {\n for (const [key, node] of Object.entries(IMAGE_NODES)) {\n if (EXISTING_WIDGETS.has(key)) continue;\n\n delete IMAGE_NODES[key];\n node.removeEventListener(\"mousedown\", handleClick);\n node.removeEventListener(\"click\", handleClick);\n node.remove();\n }\n\n if (Object.keys(IMAGE_NODES).length === 0 && interval) {\n clearInterval(interval);\n interval = null;\n }\n}\n\n/** recursively find the link text node in line */\nfunction getTextNode(\n imageNode: HTMLImageElement,\n line: ChildNode | Node | null | undefined,\n): ChildNode | null {\n if (!line) return null;\n const link = imageNode.src;\n let textNode: ChildNode | null = null;\n\n for (const node of Array.from(line.childNodes)) {\n if (node.nodeType !== 3) {\n const innerNode = getTextNode(imageNode, node);\n if (innerNode) {\n textNode = innerNode;\n break;\n }\n\n continue;\n }\n\n const textContent = node.textContent;\n if (textContent && textContent.includes(link)) {\n textNode = node;\n break;\n }\n }\n\n return textNode;\n}\n\nfunction getMinLength(imageNode: HTMLImageElement) {\n const text = imageNode.alt || \"\";\n const link = imageNode.src;\n\n const startPosition = 4 + text.length;\n const endPosition = startPosition + link.length + 1;\n\n return endPosition;\n}\n\nfunction isCorrectNode(\n imageNode: HTMLImageElement,\n node: ChildNode | Node | null | undefined,\n): node is ChildNode | Node {\n if (!node) return false;\n\n const textContent = node?.textContent;\n const minLength = getMinLength(imageNode);\n\n return Boolean(node && textContent && node.nodeType === 3 && textContent.length >= minLength);\n}\n\ntype SelectLinkOptions = {\n node: ChildNode | Node;\n selection: Selection;\n start?: number;\n imageNode: HTMLImageElement;\n};\nfunction selectLink({ imageNode, node, selection, start }: SelectLinkOptions) {\n const link = imageNode.src;\n const startPosition = start ?? (node.textContent?.indexOf?.(link) || 0);\n const endPosition = startPosition + link.length;\n\n const range = document.createRange();\n range.setStart(node, startPosition);\n range.setEnd(node, endPosition);\n selection.removeAllRanges();\n selection.addRange(range);\n}\n\nfunction handleClick(event: MouseEvent) {\n const selection = window.getSelection();\n\n if (event.shiftKey || event.ctrlKey || event.altKey || event.metaKey) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n const target = event.target as HTMLImageElement;\n const parent = target.parentNode;\n let line: HTMLElement | null = parent as HTMLElement | null;\n\n /** recursively find line that contains link */\n while (line && !line.classList.contains(\"cm-line\")) {\n line = line.parentNode as HTMLElement | null;\n }\n\n const editor = Array.from(document.querySelectorAll(\".cm-editor\")).find((element) =>\n element.contains(target),\n );\n\n if (!selection || !editor || !parent) return;\n\n const prevLine = parent.previousSibling;\n let textNode = getTextNode(target, prevLine);\n if (!textNode) textNode = getTextNode(target, parent);\n if (textNode) {\n if (isCorrectNode(target, textNode))\n selectLink({ selection, imageNode: target, node: textNode });\n\n return;\n }\n\n const range = document.createRange();\n range.selectNode(target);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n\n /** wait for the widget to disappear and link will be visible */\n void utils\n .tick({\n delay: 0,\n maxDeep: 5,\n delayGetter: (deep) => {\n return deep > 1 ? 10 : 0;\n },\n recursiveCondition: () => {\n const textNode = getTextNode(target, line);\n\n return isCorrectNode(target, textNode);\n },\n })\n .then(() => {\n const textNode = getTextNode(target, line);\n if (isCorrectNode(target, textNode))\n selectLink({ selection, imageNode: target, node: textNode });\n });\n\n return false;\n}\n","import { type EditorView } from \"@codemirror/view\";\nimport type { SyntaxNodeRef } from \"@lezer/common\";\nimport { utils } from \"@/lib\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport {\n CODE_OF_END_IMAGE_TEXT,\n CODE_OF_END_IMAGE_URL,\n CODE_OF_START_IMAGE_TEXT,\n CODE_OF_START_IMAGE_URL,\n NAME_OF_IMAGE,\n} from \"./image-constants\";\nimport { ImageWidget } from \"./image-widget\";\n\nfunction getImageSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_IMAGE) {\n return;\n }\n\n const { text, url } = parseInfo(view, node);\n const line = view.lineBlockAt(node.from);\n\n if (line.from === node.from && line.to === node.to) {\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n ) {\n decorations.push(\n utils.getReplaceDecoration({\n range: [line.from, line.to],\n widget: new ImageWidget(text, url, node.from, node.to),\n }),\n );\n } else {\n decorations.push(\n utils.getWidgetDecorationOptions({\n range: [node.to + 1],\n widget: new ImageWidget(text, url, node.from, node.to),\n }),\n );\n }\n } else if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n ) {\n decorations.push(\n utils.getReplaceDecoration({\n range: [node.from, node.to],\n widget: new ImageWidget(text, url, node.from, node.to),\n }),\n );\n } else {\n decorations.push(\n utils.getWidgetDecorationOptions({\n range: [node.to],\n widget: new ImageWidget(text, url, node.from, node.to),\n }),\n );\n }\n}\n\nfunction parseInfo(view: EditorView, node: SyntaxNodeRef) {\n const content = view.state.doc.sliceString(node.from, node.to);\n const textCoordinates = { from: -1, to: -1 };\n const urlCoordinates = { from: -1, to: -1 };\n let pos = -1;\n\n while (pos < content.length) {\n pos++;\n const code = content.charCodeAt(pos);\n\n if (textCoordinates.from === -1 && code === CODE_OF_START_IMAGE_TEXT)\n textCoordinates.from = pos + 1;\n else if (\n urlCoordinates.from === -1 &&\n textCoordinates.to !== -1 &&\n code === CODE_OF_START_IMAGE_URL\n )\n urlCoordinates.from = pos + 1;\n else if (\n textCoordinates.from !== -1 &&\n textCoordinates.to === -1 &&\n code === CODE_OF_END_IMAGE_TEXT\n )\n textCoordinates.to = pos;\n else if (\n urlCoordinates.from !== -1 &&\n urlCoordinates.to === -1 &&\n code === CODE_OF_END_IMAGE_URL\n )\n urlCoordinates.to = pos;\n }\n\n const text = content.substring(textCoordinates.from, textCoordinates.to);\n const url = content.substring(urlCoordinates.from, urlCoordinates.to);\n\n return { text, url };\n}\n\nexport const imageDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getImageSelectionDecorations],\n};\n","export const NAME_OF_IMAGE = \"Image\";\nexport const CODE_OF_START_IMAGE_TEXT = 91; // [\nexport const CODE_OF_END_IMAGE_TEXT = 93; // ]\nexport const CODE_OF_START_IMAGE_URL = 40; // (\nexport const CODE_OF_END_IMAGE_URL = 41; // )\n","export const NAME_OF_ITALIC = \"Emphasis\";\nexport const LIST_OF_ITALIC_MARKS = new Set([95, 42]); // _ *\n","import { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { LIST_OF_ITALIC_MARKS, NAME_OF_ITALIC } from \"./italic-constants\";\n\nfunction getItalicDecorations({ decorations, node }: GetDecorationOptions) {\n if (node.name !== NAME_OF_ITALIC) {\n return;\n }\n\n decorations.push(\n utils.getMarkDecoration({\n style: styles.italic,\n range: [node.from, node.to],\n }),\n );\n}\n\nfunction getItalicSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_ITALIC) {\n return;\n }\n\n if (checkIsSeveralEmphasis({ decorations, node, view, isReadonly })) {\n return void splitEmphasis({ decorations, node, view, isReadonly });\n }\n\n let step = 1;\n const startText = view.state.doc.sliceString(node.from, node.from + 3);\n if (\n LIST_OF_ITALIC_MARKS.has(startText.charCodeAt(0)) &&\n LIST_OF_ITALIC_MARKS.has(startText.charCodeAt(1)) &&\n LIST_OF_ITALIC_MARKS.has(startText.charCodeAt(2))\n )\n step = 3;\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + step] }));\n decorations.push(utils.getHideDecoration({ range: [node.to - step, node.to] }));\n }\n}\n\n/** Fixed wide italic + italic */\nfunction checkIsSeveralEmphasis({ node, view }: GetSelectionDecorationOptions) {\n let marks = 0;\n let pos = 0;\n\n const text = view.state.doc.sliceString(node.from, node.to);\n\n while (pos <= text.length) {\n if (LIST_OF_ITALIC_MARKS.has(text.charCodeAt(pos))) marks++;\n pos++;\n }\n\n if (marks === 8) return true;\n\n return false;\n}\n\nfunction splitEmphasis({ decorations, node, view, isReadonly }: GetSelectionDecorationOptions) {\n const text = view.state.doc.sliceString(node.from, node.to);\n let marks = 0;\n let pos = 0;\n\n while (pos <= text.length && marks < 6) {\n if (LIST_OF_ITALIC_MARKS.has(text.charCodeAt(pos))) marks++;\n pos++;\n }\n\n getItalicSelectionDecorations({\n decorations,\n view,\n node: { ...node, name: node.name, from: node.from, to: node.from + pos },\n isReadonly,\n });\n getItalicSelectionDecorations({\n decorations,\n view,\n node: { ...node, name: node.name, from: node.from + pos, to: node.to },\n isReadonly,\n });\n}\n\nexport const italicDecorationPlugin: DecorationPlugin = {\n decorations: [getItalicDecorations],\n selectionDecorations: [getItalicSelectionDecorations],\n};\n","import { type EditorView, WidgetType } from \"@codemirror/view\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport styles from \"../styles.module.scss\";\n\nexport class LinkWidget extends WidgetType {\n view: EditorView | undefined;\n\n constructor(\n private readonly text: string,\n private readonly link: string,\n private readonly type: \"link\" | \"auto\",\n ) {\n super();\n }\n\n /** recursively find the link text node in line */\n getTextNode(line: ChildNode | Node | null | undefined): ChildNode | null {\n if (!line) return null;\n\n let textNode: ChildNode | null = null;\n\n for (const node of Array.from(line.childNodes)) {\n if (node.nodeType !== 3) {\n const innerNode = this.getTextNode(node);\n if (innerNode) {\n textNode = innerNode;\n break;\n }\n\n continue;\n }\n\n const textContent = node.textContent;\n if (textContent && textContent.includes(this.link)) {\n textNode = node;\n break;\n }\n }\n\n return textNode;\n }\n\n getMinLength() {\n let startPosition: number = 0;\n if (this.type === \"link\") startPosition = 3 + this.text.length;\n if (this.type === \"auto\") startPosition = 1;\n const endPosition = startPosition + this.link.length;\n\n return endPosition;\n }\n\n /** check that the text node is correct node */\n isCorrectNode(node: ChildNode | Node | null | undefined): node is ChildNode | Node {\n if (!node) return false;\n\n const textContent = node.textContent;\n const minLength = this.getMinLength();\n\n return Boolean(textContent && node.nodeType === 3 && textContent.length >= minLength);\n }\n\n selectLink(node: ChildNode | Node, selection: Selection) {\n const startPosition = node.textContent?.indexOf?.(this.link) || 0;\n const endPosition = startPosition + this.link.length;\n\n const range = document.createRange();\n range.setStart(node, startPosition);\n range.setEnd(node, endPosition);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n\n handleClick(event: MouseEvent) {\n if (!this.view) return;\n\n /** open the link if has special key or the view is readonly */\n const contentEditable = this.view.contentDOM.getAttribute(\"contenteditable\");\n const isReadonly = !contentEditable || contentEditable === \"false\";\n if (event.shiftKey || event.ctrlKey || event.altKey || event.metaKey || isReadonly) {\n if (event.type === \"mousedown\") {\n const target = event.target as HTMLAnchorElement;\n window.open(target.href, \"_blank\");\n }\n\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n const target = event.target as HTMLAnchorElement;\n const parent = target.parentNode;\n let line: HTMLElement | null = parent as HTMLElement | null;\n\n /** recursively find line that contains link */\n while (line && !line.classList.contains(\"cm-line\")) {\n line = line.parentNode as HTMLElement | null;\n }\n\n const editor = this.view.dom.querySelector(\".cm-content\");\n const selection = window.getSelection();\n\n if (!selection || !editor || !parent) return;\n\n const range = document.createRange();\n range.selectNode(target);\n range.collapse(true);\n\n selection.removeAllRanges();\n selection.addRange(range);\n\n /** trick for correct select the link by click when the view is not focused */\n void utils.tick({ delay: 0 }).then(() => {\n if (selection && selection.anchorNode?.nodeType !== 3) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n });\n\n /** wait for the widget to disappear and link will be visible */\n void utils\n .tick({\n delay: 0,\n maxDeep: 5,\n delayGetter: (deep) => {\n return deep > 1 ? 10 : 5;\n },\n recursiveCondition: () => {\n const textNode = this.getTextNode(line);\n\n return this.isCorrectNode(textNode);\n },\n })\n .then(() => {\n const textNode = this.getTextNode(line);\n\n if (this.isCorrectNode(textNode)) this.selectLink(textNode, selection);\n });\n\n return false;\n }\n\n toDOM(view: EditorView): HTMLElement {\n this.view = view;\n const anchor = document.createElement(\"a\");\n anchor.classList.add(styles.link);\n anchor.classList.add(CLASSES.link);\n\n anchor.target = \"_blank\";\n anchor.textContent = this.text;\n anchor.href = this.link;\n\n anchor.addEventListener(\"mousedown\", this.handleClick.bind(this));\n anchor.addEventListener(\"click\", this.handleClick.bind(this));\n\n return anchor;\n }\n\n destroy(dom: HTMLElement): void {\n dom.removeEventListener(\"mousedown\", this.handleClick.bind(this));\n dom.removeEventListener(\"click\", this.handleClick.bind(this));\n }\n}\n","import { utils } from \"@/lib\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport {\n CODE_OF_END_LINK_TEXT,\n CODE_OF_END_LINK_URL,\n CODE_OF_START_LINK_TEXT,\n CODE_OF_START_LINK_URL,\n NAME_OF_LINK,\n} from \"./link-constants\";\nimport { getLinkLabelSelectionDecoration } from \"./link-label-decoration\";\nimport { LinkWidget } from \"./link-widget\";\n\nfunction getLinkSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_LINK) {\n return;\n }\n\n const content = view.state.doc.sliceString(node.from, node.to);\n const textCoordinates = { from: -1, to: -1 };\n const urlCoordinates = { from: -1, to: -1 };\n let pos = -1;\n\n while (pos < content.length) {\n pos++;\n const code = content.charCodeAt(pos);\n\n if (textCoordinates.from === -1 && code === CODE_OF_START_LINK_TEXT)\n textCoordinates.from = pos + 1;\n else if (\n urlCoordinates.from === -1 &&\n textCoordinates.to !== -1 &&\n code === CODE_OF_START_LINK_URL\n )\n urlCoordinates.from = pos + 1;\n else if (\n textCoordinates.from !== -1 &&\n textCoordinates.to === -1 &&\n code === CODE_OF_END_LINK_TEXT\n )\n textCoordinates.to = pos;\n else if (\n urlCoordinates.from !== -1 &&\n urlCoordinates.to === -1 &&\n code === CODE_OF_END_LINK_URL\n )\n urlCoordinates.to = pos;\n }\n\n if (urlCoordinates.from === -1 || urlCoordinates.to === -1)\n return void getLinkLabelSelectionDecoration({ decorations, isReadonly, node, view });\n\n const text = content.substring(textCoordinates.from, textCoordinates.to);\n const url = content.substring(urlCoordinates.from, urlCoordinates.to);\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(\n utils.getReplaceDecoration({\n range: [node.from, node.to],\n widget: new LinkWidget(text, url, \"link\"),\n }),\n );\n }\n}\n\nexport const linkDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getLinkSelectionDecorations],\n};\n","export const NAME_OF_LINK = \"Link\";\nexport const CODE_OF_START_LINK_TEXT = 91; // [\nexport const CODE_OF_END_LINK_TEXT = 93; // ]\nexport const CODE_OF_START_LINK_URL = 40; // (\nexport const CODE_OF_END_LINK_URL = 41; // )\n\nexport const NAME_OF_AUTO_LINK = \"Autolink\";\n\nexport const CODE_OF_LINK_LABEL_END = 58; // :\n","import { utils } from \"@/lib\";\nimport { type GetSelectionDecorationOptions } from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { CODE_OF_LINK_LABEL_END } from \"./link-constants\";\n\nexport function getLinkLabelSelectionDecoration({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (view.state.doc.sliceString(node.to, node.to + 1).charCodeAt(0) !== CODE_OF_LINK_LABEL_END)\n return;\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to + 1])\n ) {\n decorations.push(\n utils.getMarkDecoration({\n range: [node.from, node.to + 1],\n style: styles.link__label,\n }),\n );\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + 1] }));\n decorations.push(utils.getHideDecoration({ range: [node.to - 1, node.to + 1] }));\n }\n}\n","import { utils } from \"@/lib\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport { NAME_OF_AUTO_LINK } from \"./link-constants\";\nimport { LinkWidget } from \"./link-widget\";\n\nfunction getAutoLinkSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_AUTO_LINK) return;\n\n const url = view.state.doc.sliceString(node.from + 1, node.to - 1);\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(\n utils.getReplaceDecoration({\n range: [node.from, node.to],\n widget: new LinkWidget(url, url, \"auto\"),\n }),\n );\n }\n}\n\nexport const autoLinkDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getAutoLinkSelectionDecorations],\n};\n","export const NAME_OF_LIST = \"ListMark\";\nexport const NAME_OF_TODO = \"Task\";\nexport const LIST_OF_LIST_MARKS = new Set([42, 43, 45]); // * + -\nexport const CODE_OF_ORDERED_LIST_MARK = 46; // .\n","import { WidgetType } from \"@codemirror/view\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport styles from \"../styles.module.scss\";\nimport { CODE_OF_ORDERED_LIST_MARK, LIST_OF_LIST_MARKS } from \"./list-constants\";\n\nexport class ListPointWidget extends WidgetType {\n constructor(\n private readonly mark: string,\n private readonly lastCodePoint: number,\n ) {\n super();\n }\n\n toDOM(): HTMLElement {\n const span = document.createElement(\"span\");\n span.classList.add(styles.list);\n span.textContent = this.mark;\n if (LIST_OF_LIST_MARKS.has(this.lastCodePoint)) {\n span.classList.add(styles.common);\n span.classList.add(CLASSES.listCommon);\n }\n if (CODE_OF_ORDERED_LIST_MARK === this.lastCodePoint) {\n span.classList.add(styles.ordered);\n }\n\n return span;\n }\n}\n","import { utils } from \"@/lib\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport {\n CODE_OF_ORDERED_LIST_MARK,\n LIST_OF_LIST_MARKS,\n NAME_OF_LIST,\n NAME_OF_TODO,\n} from \"./list-constants\";\nimport { ListPointWidget } from \"./list-widget\";\n\nfunction getListSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_LIST) {\n return;\n }\n\n const content = view.state.doc.sliceString(node.from, node.to);\n const lastCodePoint = content.codePointAt(content.length - 1) || 0;\n if (!LIST_OF_LIST_MARKS.has(lastCodePoint) && CODE_OF_ORDERED_LIST_MARK !== lastCodePoint) {\n return;\n }\n\n const nextSibling = node.node.nextSibling;\n if (nextSibling && nextSibling.name === NAME_OF_TODO) {\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, nextSibling.from + 3])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, nextSibling.from] }));\n }\n\n return;\n }\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(\n utils.getReplaceDecoration({\n range: [node.from, node.to],\n widget: new ListPointWidget(content, lastCodePoint),\n }),\n );\n }\n}\n\nexport const listDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getListSelectionDecorations],\n};\n","export const CODE_OF_START_MENTION = 64; // @\nexport const CODE_OF_SPACE = 32;\nexport const NAME_OF_MENTION = \"Mention\";\n","import clsx from \"clsx\";\nimport { CLASSES } from \"@/extensions/theme\";\nimport { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { NAME_OF_MENTION } from \"./mention-constants\";\n\nfunction getMentionDecorations({ decorations, node }: GetDecorationOptions) {\n if (node.name !== NAME_OF_MENTION) {\n return;\n }\n\n decorations.push(\n utils.getMarkDecoration({\n style: clsx(styles.mention, CLASSES.mention),\n range: [node.from, node.to],\n }),\n );\n}\n\nfunction getMentionSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_MENTION) {\n return;\n }\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + 1] }));\n }\n}\n\nexport const mentionDecorationPlugin: DecorationPlugin = {\n decorations: [getMentionDecorations],\n selectionDecorations: [getMentionSelectionDecorations],\n};\n","export const NAME_OF_STRIKE_THROUGH = \"Strikethrough\";\n","import { utils } from \"@/lib\";\nimport type {\n DecorationPlugin,\n GetDecorationOptions,\n GetSelectionDecorationOptions,\n} from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { NAME_OF_STRIKE_THROUGH } from \"./strike-through-constants\";\n\nfunction getStrikeThroughDecorations({ decorations, node }: GetDecorationOptions) {\n if (node.name !== NAME_OF_STRIKE_THROUGH) {\n return;\n }\n\n decorations.push(\n utils.getMarkDecoration({\n style: styles[\"strike-through\"],\n range: [node.from, node.to],\n }),\n );\n}\n\nfunction getStrikeThroughSelectionDecorations({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_STRIKE_THROUGH) {\n return;\n }\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [node.from, node.to])\n ) {\n decorations.push(utils.getHideDecoration({ range: [node.from, node.from + 2] }));\n decorations.push(utils.getHideDecoration({ range: [node.to - 2, node.to] }));\n }\n}\n\nexport const strikeThroughDecorationPlugin: DecorationPlugin = {\n decorations: [getStrikeThroughDecorations],\n selectionDecorations: [getStrikeThroughSelectionDecorations],\n};\n","export const NAME_OF_TODO = \"Task\";\nexport const NAME_OF_LIST_MARK = \"ListMark\";\nexport const LIST_OF_TODO_MARKS = new Set([120, 1093]); // x\n","import { type ChangeSpec } from \"@codemirror/state\";\nimport { type EditorView, WidgetType } from \"@codemirror/view\";\nimport styles from \"../styles.module.scss\";\n\nexport class TodoWidget extends WidgetType {\n view: EditorView | undefined;\n\n constructor(\n public checked: boolean,\n private readonly position: number,\n ) {\n super();\n }\n\n onClick(event: MouseEvent) {\n if (!this.view) return;\n event.stopPropagation();\n event.preventDefault();\n\n const target = event.target as HTMLInputElement;\n const change: ChangeSpec = {\n from: this.position,\n to: this.position + 1,\n insert: this.checked ? \" \" : \"x\",\n };\n\n this.view.dispatch({ changes: change });\n\n this.checked = !this.checked;\n target.checked = this.checked;\n }\n\n onBlock(event: MouseEvent) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n toDOM(view: EditorView): HTMLElement {\n const span = document.createElement(\"span\");\n span.classList.add(styles.todo);\n this.view = view;\n\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"checkbox\";\n checkbox.checked = this.checked;\n\n checkbox.addEventListener(\"click\", this.onBlock.bind(this));\n checkbox.addEventListener(\"mousedown\", this.onClick.bind(this));\n\n span.appendChild(checkbox);\n\n return span;\n }\n\n destroy(dom: HTMLElement): void {\n dom.removeEventListener(\"click\", this.onBlock.bind(this));\n dom.removeEventListener(\"mousedown\", this.onClick.bind(this));\n }\n}\n","import { utils } from \"@/lib\";\nimport type { DecorationPlugin, GetSelectionDecorationOptions } from \"../markdown-types\";\nimport styles from \"../styles.module.scss\";\nimport { LIST_OF_TODO_MARKS, NAME_OF_LIST_MARK, NAME_OF_TODO } from \"./todo-constants\";\nimport { TodoWidget } from \"./todo-widget\";\n\nfunction getTodoSelectionDecoration({\n decorations,\n node,\n view,\n isReadonly,\n}: GetSelectionDecorationOptions) {\n if (node.name !== NAME_OF_TODO) return;\n\n const prevSibling = node.node.prevSibling;\n if (!prevSibling || prevSibling.name !== NAME_OF_LIST_MARK) return;\n\n const isChecked = LIST_OF_TODO_MARKS.has(\n view.state.doc.sliceString(node.from + 1, node.from + 2).codePointAt(0) || 0,\n );\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [prevSibling.from, node.from + 3])\n ) {\n decorations.push(\n utils.getReplaceDecoration({\n range: [node.from, node.from + 3],\n widget: new TodoWidget(isChecked, node.from + 1),\n }),\n );\n }\n\n if (isChecked) {\n const line = view.lineBlockAt(node.from);\n\n if (\n isReadonly ||\n !view.hasFocus ||\n !utils.isInRange(view.state.selection.ranges, [line.from, line.to])\n )\n decorations.push(\n utils.getMarkDecoration({ style: styles.todo__checked, range: [node.from + 4, node.to] }),\n );\n }\n}\n\nexport const todoDecorationPlugin: DecorationPlugin = {\n selectionDecorations: [getTodoSelectionDecoration],\n};\n","import { syntaxTree } from \"@codemirror/language\";\nimport { type Range } from \"@codemirror/state\";\nimport {\n Decoration,\n type DecorationSet,\n type EditorView,\n ViewPlugin,\n type ViewUpdate,\n} from \"@codemirror/view\";\nimport { blockquoteDecorationPlugin } from \"./blockquote\";\nimport { boldDecorationPlugin } from \"./bold\";\nimport { codeDecorationPlugin } from \"./code\";\nimport { headerDecorationPlugin } from \"./header\";\nimport { horizontalDecorationPlugin } from \"./horizontal\";\nimport { imageDecorationPlugin } from \"./image/image-decoration\";\nimport { italicDecorationPlugin } from \"./italic\";\nimport { autoLinkDecorationPlugin, linkDecorationPlugin } from \"./link\";\nimport { listDecorationPlugin } from \"./list\";\nimport type {\n DecorationPlugin,\n GetDecorationFunction,\n GetSelectionDecorationFunction,\n} from \"./markdown-types\";\nimport { mentionDecorationPlugin } from \"./mention/mention-decoration\";\nimport { strikeThroughDecorationPlugin } from \"./strike-through\";\nimport { todoDecorationPlugin } from \"./todo\";\n\nconst decorationPlugins: DecorationPlugin[] = [\n blockquoteDecorationPlugin,\n boldDecorationPlugin,\n codeDecorationPlugin,\n headerDecorationPlugin,\n horizontalDecorationPlugin,\n imageDecorationPlugin,\n italicDecorationPlugin,\n linkDecorationPlugin,\n listDecorationPlugin,\n autoLinkDecorationPlugin,\n mentionDecorationPlugin,\n strikeThroughDecorationPlugin,\n todoDecorationPlugin,\n];\n\nlet decorationFunctions: GetDecorationFunction[] = [];\nlet selectionDecorationFunctions: GetSelectionDecorationFunction[] = [];\n\nfor (const plugin of decorationPlugins) {\n if (plugin.decorations) decorationFunctions = decorationFunctions.concat(plugin.decorations);\n if (plugin.selectionDecorations)\n selectionDecorationFunctions = selectionDecorationFunctions.concat(plugin.selectionDecorations);\n}\n\nconst SKIP_MARKS = new Set([\n \"Document\",\n \"Paragraph\",\n \"EmphasisMark\",\n \"Blockquote\",\n \"StrikethroughMark\",\n \"BulletList\",\n \"OrderedList\",\n \"ListItem\",\n \"LinkMark\",\n \"URL\",\n \"CodeMark\",\n \"CodeInfo\",\n \"CodeText\",\n \"HeaderMark\",\n \"TaskMarker\",\n]);\n\nlet markdownDecorations: Range<Decoration>[] = [];\n\nfunction getDecorations(view: EditorView, isChanged: boolean) {\n const decorations: Range<Decoration>[] = isChanged ? [] : markdownDecorations;\n const selectionDecorations: Range<Decoration>[] = [];\n const contentEditable = view.contentDOM.getAttribute(\"contenteditable\");\n const isReadonly = !contentEditable || contentEditable === \"false\";\n\n for (const { from: fromVisible, to: toVisible } of view.visibleRanges) {\n syntaxTree(view.state).iterate({\n from: fromVisible,\n to: toVisible,\n enter: (node) => {\n if (SKIP_MARKS.has(node.name)) return;\n /** Decoration by change content */\n if (isChanged) {\n decorationFunctions.forEach((f) => f({ decorations, node, view }));\n }\n\n /** Decoration by selection content */\n selectionDecorationFunctions.forEach((f) =>\n f({\n decorations: selectionDecorations,\n node,\n view,\n isReadonly,\n }),\n );\n },\n });\n }\n\n if (isChanged) {\n markdownDecorations = decorations;\n }\n\n return Decoration.set([...decorations, ...selectionDecorations], true);\n}\n\nexport const markdownDecorationPlugin = ViewPlugin.fromClass(\n class DecorationMarkdown {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = getDecorations(view, true);\n }\n\n update(update: ViewUpdate) {\n const isDocumentChanged =\n update.docChanged ||\n update.viewportChanged ||\n syntaxTree(update.startState) != syntaxTree(update.state);\n this.decorations = getDecorations(update.view, isDocumentChanged);\n }\n },\n {\n decorations: (plugin) => plugin.decorations,\n },\n);\n","import type { MarkdownExtension } from \"@lezer/markdown\";\nimport { mentionParser } from \"./mention\";\n\nexport const markdownParserPlugin: MarkdownExtension = [mentionParser];\n","import type { MarkdownConfig } from \"@lezer/markdown\";\nimport { CODE_OF_SPACE, CODE_OF_START_MENTION, NAME_OF_MENTION } from \"./mention-constants\";\n\nexport const mentionParser: MarkdownConfig = {\n defineNodes: [{ name: NAME_OF_MENTION }],\n parseInline: [\n {\n name: NAME_OF_MENTION,\n parse(cx, next, pos) {\n if (next != CODE_OF_START_MENTION) return -1;\n let end: number = pos + 1;\n for (let i = pos + 1; i < cx.end; i++) {\n const next = cx.char(i);\n if (next === CODE_OF_SPACE) break;\n end++;\n }\n\n return cx.addElement(cx.elt(NAME_OF_MENTION, pos, end));\n },\n },\n ],\n};\n","import { markdown, markdownLanguage } from \"@codemirror/lang-markdown\";\nimport { type Extension } from \"@codemirror/state\";\nimport { markdownDecorationPlugin } from \"./markdown-decoration\";\nimport { markdownParserPlugin } from \"./markdown-parser\";\nimport type { InitMarkdownOptions } from \"./markdown-types\";\n\nexport const initMarkdown = ({ languages }: InitMarkdownOptions): Extension => {\n return [\n markdown({\n base: markdownLanguage,\n codeLanguages: languages,\n addKeymap: true,\n extensions: [markdownParserPlugin],\n }),\n markdownDecorationPlugin,\n ];\n};\n"],"names":["CompletionContext","constructor","state","pos","explicit","view","this","abortListeners","abortOnDocChange","tokenBefore","types","token","syntaxTree","resolveInner","indexOf","name","parent","from","to","text","sliceDoc","type","matchBefore","expr","line","doc","lineAt","start","Math","max","str","slice","found","search","_a","source","addEnd","length","RegExp","flags","ignoreCase","ensureAnchor","aborted","addEventListener","listener","options","push","onDocChange","toSet","chars","flat","Object","keys","join","words","test","replace","completeFromList","list","map","o","label","validFor","match","every","first","create","rest","i","prefixMatch","context","pickedCompletion","Annotation","define","baseTheme","EditorView","fontFamily","whiteSpace","overflow","maxWidth_fallback","maxWidth","minWidth","maxHeight","height","listStyle","margin","padding","lineHeight","overflowX","textOverflow","cursor","display","borderBottom","paddingLeft","opacity","background","color","content","textAlign","position","width","boxSizing","right","left","backgroundColor","verticalAlign","borderLeft","textDecoration","marginLeft","fontStyle","fontSize","paddingRight","FieldPos","field","FieldRange","changes","mapPos","MapMode","TrackDel","Snippet","lines","fieldPositions","instantiate","lineStart","lineObj","baseIndent","exec","indent","tabs","facet","indentUnit","ranges","parse","template","m","fields","positions","split","seq","rawName","splice","index","_","brace","fieldMarker","Decoration","widget","WidgetType","toDOM","span","document","createElement","className","ignoreEvent","fieldRange","mark","class","ActiveSnippet","active","deco","set","r","range","mapped","selectionInsideField","sel","some","setActive","StateEffect","value","moveToField","snippetState","StateField","update","tr","effect","effects","is","docChanged","selection","provide","f","decorations","val","none","fieldSelection","EditorSelection","filter","snippet","editor","completion","spec","insert","Text","of","scrollIntoView","annotations","Transaction","userEvent","undefined","appendConfig","addSnippetKeymap","snippetPointerHandler","dispatch","moveField","dir","next","last","defaultSnippetKeymap","key","run","shift","snippetKeymap","Facet","combine","maps","Prec","highest","keymap","compute","snippetCompletion","assign","apply","domEventHandlers","mousedown","event","posAtCoords","x","clientX","y","clientY","find","closedBracket","RangeValue","startSide","endSide","CompositeBlock","parentHash","end","hash","children","hashProp","NodeProp","contextHash","addChild","child","prop","Tree","toTree","nodeSet","balance","makeTree","NodeType","Type","LeafBlock","marks","parsers","Line","basePos","depth","markers","forward","forwardInner","newPos","skipSpace","countIndent","charCodeAt","reset","pop","moveBase","moveBaseColumn","findColumn","addMarker","elt","goal","scrub","result","skipForList","bl","cx","block","stack","size","OrderedList","isOrderedList","isBulletList","BulletList","isHorizontalRule","DefaultSkipMarkup","Blockquote","QuoteMark","space","ListItem","_cx","Document","ch","skipSpaceBack","isFencedCode","isBlockquote","breaking","count","isSetextUnderline","parser","leafBlockParsers","DefaultLeafBlocks","SetextHeading","inList","isAtxHeading","EmptyLine","CommentEnd","ProcessingEnd","HTMLBlockStyle","isHTMLBlock","e","getListIndent","indentAfter","indented","addCodeText","CodeText","DefaultBlockParsers","LinkReference","IndentedCode","base","pendingMarks","nextLine","codeStart","concat","addNode","buffer","writeElements","finish","CodeBlock","FencedCode","fenceEnd","len","infoFrom","infoTo","CodeMark","CodeInfo","textStart","textEnd","prevLineEnd","startContext","HorizontalRule","newBase","ListMark","ATXHeading","off","endOfSpace","after","buf","write","HeaderMark","parseInline","node","ATXHeading1","HTMLBlock","trailing","nodeType","CommentBlock","ProcessingInstructionBlock","LinkReferenceParser","leaf","stage","elts","advance","complete","addLeafElement","nextStage","parseLinkLabel","LinkMark","skip","title","parseLinkTitle","titleEnd","lineEnd","parseURL","SetextHeadingParser","underline","underlineMark","SetextHeading1","SetextHeading2","DefaultEndLeaf","p","scanLineResult","BlockContext","input","fragments","atEnd","reusePlaceholders","Map","stoppedAt","rangeI","absoluteLineStart","absoluteLineEnd","FragmentCursor","readLine","parsedPos","markI","finishContext","reuseFragment","blockParsers","stop","endLeafBlock","finishLeaf","stopAt","RangeError","moveTo","matches","taken","takeNodes","toRelative","moveRangeI","parentType","scanLine","lineChunkAt","textOffset","nextFrom","handler","skipContextMarkup","Error","chunk","lineChunks","eol","startComposite","getNodeType","addElement","injectMarks","top","addGaps","tree","injectGaps","topNode","inline","Paragraph","TreeElement","Buffer","offset","dummies","rangeEnd","movePastNext","upto","inclusive","firstChild","nextSibling","reuse","get","propValues","MarkdownParser","Parser","blockNames","inlineParsers","inlineNames","wrappers","super","nodeTypes","t","id","createParse","w","configure","config","resolveConfig","nonEmpty","defineNodes","styles","s","composite","style","group","props","Array","isArray","Tag","NodeSet","extend","styleTags","remove","rm","parseBlock","before","findName","endLeaf","wrap","InlineContext","outer","char","resolveMarkers","a","conf","conc","b","wrapA","wrapB","inner","names","Escape","nodes","writeTo","build","reused","topID","Element$1","startOff","Element","EmphasisUnderscore","resolve","EmphasisAsterisk","LinkStart","ImageStart","InlineDelimiter","side","Escapable","Punctuation","DefaultInline","escaped","append","Entity","InlineCode","curSize","HTMLTag","url","Autolink","URL","comment","Comment","procInst","ProcessingInstruction","Emphasis","pBefore","pAfter","sBefore","sAfter","leftFlanking","rightFlanking","canOpen","canClose","HardBreak","Link","Image","LinkEnd","parts","part","takeContent","link","finishLink","j","startPos","endPos","unshift","dest","LinkTitle","requireNonWS","min","LinkLabel","addDelimiter","open","close","hasOpenLink","emp","closeSize","k","element","findOpeningDelimiter","startIndex","elements","eI","NotLast","FragmentCursor$1","fragment","fragmentEnd","nextFragment","read","c","rPos","childAfter","cur","fragEnd","openEnd","blockI","prevEnd","prevI","isAnonymous","dummy","abs","gapFrom","gapTo","markdownHighlighting","tags","quote","contentSeparator","heading1","heading2","heading3","heading4","heading5","heading6","escape","character","emphasis","strong","monospace","processingInstruction","labelName","string","n","leftOverSpace","nextPos","StrikethroughDelim","Strikethrough","strikethrough","parseRow","startI","cellStart","cellEnd","esc","parseCell","hasPipe","delimiterLine","TableParser","rows","lineText","firstRow","Table","heading","TaskParser","TaskList","atom","autolinkRE","urlRE","lastTwoDomainWords","emailRE","xmppResourceRE","autolinkEmailEnd","lastIndex","GFM","absPos","autolinkURLEnd","parseSubSuper","Superscript","special","Subscript","Emoji","Stack","reducePos","score","bufferBase","curContext","lookAhead","toString","StackContext","pushState","reduce","action","lookaheadRecord","setLookAhead","dPrec","dynamicPrecedence","getGoto","minRepeatTerm","storeNode","reduceContext","lastBigReductionStart","bigReductionCount","lastBigReductionSize","stateFlag","baseStateID","term","mustSink","mustMove","scan","shiftContext","maxNode","nextState","nextStart","nextEnd","useNode","updateContext","tracker","stream","recoverByDelete","isNode","canShift","sim","SimulatedStack","stateSlot","hasAction","recoverByInsert","nextStates","best","v","forceReduce","validAction","target","backup","findForcedReduction","seen","explore","includes","allActions","rDepth","forceAll","deadEnd","data","restart","sameState","other","dialectEnabled","dialectID","dialect","emitContext","emitLookAhead","newCx","strict","goto","StackBufferCursor","maybeNext","fork","decodeArray","Uint16Array","array","out","digit","CachedToken","extended","mask","nullToken","InputStream","chunkOff","chunk2","chunk2Pos","rangeIndex","chunkPos","readNext","resolveOffset","assoc","clipPos","peek","idx","resolved","acceptToken","endOffset","acceptTokenTo","getChunk","nextChunk","setDone","TokenGroup","readToken","tokenPrecTable","prototype","contextual","fallback","LocalTokenGroup","precTable","elseToken","skipped","atEof","ExternalTokenizer","precOffset","groupMask","accEnd","allows","overrides","low","high","mid","findOffset","prev","tableData","tableOffset","iPrev","verbose","process","env","LOG","stackIDs","cutAt","IterMode","IncludeAnonymous","childBefore","isError","prevSibling","safeFrom","safeTo","trees","fr","openStart","nodeAt","TokenCache","tokens","mainToken","actions","tokenizers","getActions","actionIndex","main","tokenizer","updateCachedToken","addActions","eofTerm","getMainToken","specialized","specializers","putAction","pair","Parse","recovering","nextStackID","minStackPos","topTerm","stacks","bufferLength","stopped","stoppedTokens","newStacks","advanceStack","tok","finished","findFinished","console","log","stackID","stackToTree","getName","SyntaxError","runRecovery","maxRemaining","sort","strictCx","cxHash","cached","defaultReduce","localStack","advanceFully","pushStackDedup","restarted","tokenEnd","force","forceBase","maxBufferLength","minRepeatType","WeakMap","String","fromCodePoint","Dialect","disabled","ContextTracker","LRParser","version","nodeNames","repeatNodeCount","topTerms","topRules","nodeProps","setProp","nodeID","deserialize","propSpec","error","skippedNodes","propSources","DefaultBufferLength","tokenArray","tokenData","specializerSpecs","getSpecializer","states","Uint32Array","stateData","maxTerm","dialects","dynamicPrecedences","tokenPrec","termNames","parseDialect","loose","table","groupTag","terminal","slot","flag","deflt","copy","info","external","contextTracker","hasWrappers","prec","values","Uint8Array","selfClosers","area","br","col","command","embed","frame","hr","img","keygen","meta","param","track","wbr","menuitem","implicitlyClosed","dd","li","optgroup","option","rp","rt","tbody","td","tfoot","th","closeOnOpen","dt","address","article","aside","blockquote","div","dl","fieldset","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","menu","nav","ol","pre","section","ul","thead","isSpace","cachedName","cachedInput","cachedPos","tagNameAfter","fromCharCode","toLowerCase","question","bang","ElementContext","startTagTerms","elementContext","tagStart","hasOwnProperty","commentContent","dashes","endTag","selfClosing","inForeignElement","contentTokenizer","tag","textToken","endToken","lastState","matchedLen","scriptTokens","styleTokens","textareaTokens","htmlHighlighting","angleBracket","TagName","tagName","invalid","AttributeName","attributeName","attributeValue","Is","definitionOperator","blockComment","ProcessingInst","DoctypeDecl","documentMeta","noMatch","getAttrs","openTag","attrs","att","getChildren","getChild","findTagName","tagNameNode","maybeNest","configureNesting","attributes","script","textarea","attr","parseMixed","lastChild","overlay","nameNode","isAlpha","isDigit","identifiers","inside","descendant","unitToken","cssHighlighting","definitionKeyword","keyword","NamespaceName","namespace","KeyframeName","KeyframeRangeName","operatorKeyword","ClassName","PseudoClassName","constant","IdName","propertyName","NumberLiteral","number","KeywordQuery","UnaryQueryOp","VariableName","variableName","Callee","Unit","unit","MatchOp","compareOperator","logicOperator","BinOp","arithmeticOperator","Important","modifier","ColorLiteral","punctuation","derefOperator","separator","paren","squareBracket","spec_callee","__proto__","lang","domain","regexp","selector","spec_AtKeyword","spec_identifier","not","only","StyleSheet","Styles","_properties","properties","body","Set","has","add","pseudoClasses","atRules","identifier","variable","VariablesByNode","NodeWeakMap","declSelector","astTop","isTop","variableNames","isVariable","known","iterate","matchContext","sliceString","defineCSSCompletionSource","isDash","callee","isVarArg","above","cssCompletionSource","cssLanguage","LRLanguage","indentNodeProp","Declaration","continuedIndent","foldNodeProp","foldInside","languageData","commentTokens","indentOnInput","wordChars","trackNewline","insertSemicolon","noSemicolon","noSemicolonType","operatorToken","mayPostfix","identifierChar","jsx","back","jsHighlight","controlKeyword","moduleKeyword","TemplateString","BooleanLiteral","bool","self","null","Star","function","VariableDefinition","definition","Label","PropertyName","PrivatePropertyName","PropertyDefinition","PrivatePropertyDefinition","UpdateOp","updateOperator","lineComment","BlockComment","Number","ArithOp","LogicOp","BitOp","bitwiseOperator","CompareOp","Equals","Arrow","TypeName","typeName","TypeDefinition","JSXAttributeValue","JSXText","standard","export","as","default","async","const","extends","true","false","void","typeof","new","delete","yield","await","public","private","protected","readonly","instanceof","satisfies","in","import","keyof","unique","infer","asserts","abstract","implements","let","var","using","interface","enum","module","declare","global","for","while","with","do","if","else","switch","case","try","catch","finally","return","throw","break","continue","debugger","spec_word","static","override","accessor","spec_LessThan","Script","SingleExpression","SingleClassItem","ts","snippets","detail","typescriptSnippets","cache","ScopeNodes","defID","def","functionContext","gatherCompletions","FunctionDeclaration","ClassDeclaration","ClassExpression","EnumDeclaration","TypeAliasDeclaration","NamespaceDeclaration","getScope","completions","gather","Identifier","dontComplete","localCompletionSource","isWord","javascriptLanguage","IfStatement","except","TryStatement","LabeledStatement","flatIndent","SwitchBody","textAfter","closed","isCase","Block","delimitedIndent","closing","ArrowFunction","JSXElement","lineIndent","JSXEscape","column","closeBrackets","brackets","jsxSublanguage","defineLanguageFacet","typescriptLanguage","jsxLanguage","sublanguageProp","tsxLanguage","kwCompletion","keywords","typescriptKeywords","javascript","typescript","LanguageSupport","autocomplete","autoCloseTags","elementName","android","navigator","userAgent","inputHandler","defaultInsert","composing","compositionStarted","readOnly","isActiveAt","closeTags","changeByRange","head","around","empty","findOpenTag","Targets","Charsets","Methods","Encs","Bool","S","Tags","href","ping","media","hreflang","abbr","alt","coords","shape","audio","src","mediagroup","crossorigin","preload","autoplay","loop","controls","bdi","bdo","cite","button","formaction","autofocus","formenctype","formmethod","formnovalidate","formtarget","canvas","caption","center","code","colgroup","icon","radiogroup","checked","datagrid","multiple","datalist","del","datetime","details","dfn","em","eventsource","figcaption","figure","enctype","method","novalidate","html","manifest","iframe","srcdoc","sandbox","seamless","ismap","usemap","dirname","maxlength","pattern","placeholder","step","accept","required","ins","kbd","challenge","keytype","legend","sizes","charset","meter","optimum","noscript","object","typemustmatch","reversed","selected","output","progress","q","ruby","samp","defer","select","small","scoped","sub","summary","sup","colspan","rowspan","headers","cols","scope","time","kind","srclang","video","poster","muted","GlobalAttrs","accesskey","contenteditable","contextmenu","draggable","dropzone","hidden","inert","itemid","itemprop","itemref","itemscope","itemtype","spellcheck","autocorrect","autocapitalize","tabindex","translate","rel","role","eventAttributes","Schema","extraTags","extraAttrs","globalAttrs","allTags","globalAttrNames","findParentElement","allowedChildren","schema","parentInfo","openTags","completeTag","boost","completeCloseTag","htmlCompletionFor","localAttrs","attrName","completeAttrName","quoteStart","quoteEnd","completeAttrValue","level","completeStartTag","htmlCompletionSourceWith","extraGlobalAttributes","jsonParser","defaultNesting","defaultAttrs","htmlPlain","endElt","bracketMatchingHandle","htmlLanguage","matchClosingTags","selfClosingTags","nestedLanguages","nestedAttributes","support","insertTransaction","_b","_c","didType","headingProp","commonmark","isHeading","isList","languageDataProp","findSectionEnd","headerNode","headerIndent","foldService","mkLang","Language","commonmarkLanguage","markdownLanguage","Context","spaceBefore","spaceAfter","item","blank","marker","itemNumber","getContext","renumberList","normalizeIndent","countColumn","isMark","blankLine","markdownKeymap","dont","emptyLine","second","delTo","lineBreak","prevLine","quoted","continued","charAt","line1","line2","nonTightList","contextNodeForDelete","spaceEnd","htmlNoMatch","markdown","codeLanguages","defaultCodeLanguage","addKeymap","completeHTMLTags","htmlTagLanguage","defaultCode","extensions","language","codeParser","languages","defaultLanguage","LanguageDescription","matchLanguageName","ParseContext","getSkippingParser","load","htmlParser","infoNode","parseCode","htmlTagCompletion","htmlTagCompletions","_tagCompletions","EditorState","clsx","arguments","copyToClipboard","clipboard","window","isSecureContext","writeText","textArea","appendChild","focus","Promise","reject","execCommand","removeChild","fallbackCopyTextToClipboard","tick","deep","maxDeep","delay","recursiveCondition","delayGetter","then","currentDelay","setTimeout","getLineDecoration","getMarkDecoration","getHideDecoration","getReplaceDecoration","getWidgetDecorationOptions","isRangeOverlap","isInRange","css","ref","insertAt","getElementsByTagName","insertBefore","styleSheet","cssText","createTextNode","NAME_OF_BLOCKQUOTE_MARK","BlockquoteWidget","classList","blockquote__inner","CLASSES","blockquoteInner","blockquoteDecorationPlugin","lineBlockAt","isInner","isHasMark","currentCode","utils.getLineDecoration","selectionDecorations","isReadonly","isDeepInner","hasFocus","utils.isInRange","utils.getReplaceDecoration","utils.getHideDecoration","NAME_OF_BOLD","LIST_OF_BOLD_MARKS","boldDecorationPlugin","utils.getMarkDecoration","bold","NAME_OF_FENCED_CODE","NAME_OF_INLINE_CODE","CODE_OF_CODE_MARK","CodeWidget","timer","onClick","clearTimeout","pending","codeButtonPending","success","codeButtonSuccess","fail","codeButtonFail","hide","utils\n .copyToClipboard","code__span","codeButtonSpan","textContent","code__button","codeButton","bind","destroy","dom","removeEventListener","codeDecorationPlugin","isOverlapLine","startMarkPosition","endMarkPosition","viewportLineBlocks","isOverlap","utils.isRangeOverlap","languagePos","codeContent","codeInfo","codeText","trim","forEach","code__line","code__single","utils.getWidgetDecorationOptions","NAME_OF_HEADER","NAME_OF_HEADER_UNDER","headerDecorationPlugin","isHeader","startsWith","isHeaderUnder","lineHeader","lineMark","horizontalDecorationPlugin","horizontal","IMAGE_NODES","EXISTING_WIDGETS","interval","ImageWidget","eq","image","updateDOM","handleClick","setInterval","garbageCollectorInterval","entries","clearInterval","getTextNode","imageNode","textNode","childNodes","innerNode","isCorrectNode","minLength","getMinLength","Boolean","selectLink","startPosition","endPosition","createRange","setStart","setEnd","removeAllRanges","addRange","getSelection","shiftKey","ctrlKey","altKey","metaKey","stopPropagation","preventDefault","parentNode","contains","querySelectorAll","previousSibling","selectNode","collapse","utils\n .tick","imageDecorationPlugin","textCoordinates","urlCoordinates","substring","parseInfo","NAME_OF_ITALIC","LIST_OF_ITALIC_MARKS","getItalicSelectionDecorations","checkIsSeveralEmphasis","splitEmphasis","startText","italicDecorationPlugin","italic","LinkWidget","contentEditable","contentDOM","getAttribute","querySelector","utils.tick","anchorNode","utils\n .tick","anchor","linkDecorationPlugin","link__label","getLinkLabelSelectionDecoration","autoLinkDecorationPlugin","LIST_OF_LIST_MARKS","ListPointWidget","lastCodePoint","common","listCommon","ordered","listDecorationPlugin","codePointAt","NAME_OF_MENTION","mentionDecorationPlugin","mention","NAME_OF_STRIKE_THROUGH","strikeThroughDecorationPlugin","LIST_OF_TODO_MARKS","TodoWidget","change","onBlock","todo","checkbox","decorationPlugins","isChecked","todo__checked","decorationFunctions","selectionDecorationFunctions","plugin","SKIP_MARKS","markdownDecorations","getDecorations","isChanged","fromVisible","toVisible","visibleRanges","enter","markdownDecorationPlugin","ViewPlugin","fromClass","isDocumentChanged","viewportChanged","startState","markdownParserPlugin","initMarkdown"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,16]}