@quartzds/core 1.0.0-beta.124 → 1.0.0-beta.125
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.
- package/CHANGELOG.md +15 -0
- package/components/{p-D5u-bDNf.js → p-2tdMcXmA.js} +3 -3
- package/components/{p-D5u-bDNf.js.map → p-2tdMcXmA.js.map} +1 -1
- package/components/{p-BxrR19WD.js → p-BRpaYGSM.js} +3 -3
- package/components/{p-BxrR19WD.js.map → p-BRpaYGSM.js.map} +1 -1
- package/components/{p-BGAgQ6J5.js → p-B_CYrw-t.js} +3 -3
- package/components/{p-BGAgQ6J5.js.map → p-B_CYrw-t.js.map} +1 -1
- package/components/{p-BPNu4xuI.js → p-BuCcV5P1.js} +5 -5
- package/components/p-BuCcV5P1.js.map +1 -0
- package/components/{p-DVXvtEPn.js → p-CG_jPYOl.js} +5 -5
- package/components/{p-DVXvtEPn.js.map → p-CG_jPYOl.js.map} +1 -1
- package/components/p-CaibVX_2.js +3539 -0
- package/components/p-CaibVX_2.js.map +1 -0
- package/components/{p-CsIsG3ra.js → p-CgQQYnEy.js} +5 -5
- package/components/p-CgQQYnEy.js.map +1 -0
- package/components/{p-De7cAKF1.js → p-DTMrBXCl.js} +3 -3
- package/components/{p-De7cAKF1.js.map → p-DTMrBXCl.js.map} +1 -1
- package/components/{p-Vtb6GsBy.js → p-ox2syNht.js} +3 -3
- package/components/{p-Vtb6GsBy.js.map → p-ox2syNht.js.map} +1 -1
- package/components/qds-action-item.js +2 -2
- package/components/qds-breadcrumb-item.js +2 -2
- package/components/qds-button.js +3 -3
- package/components/qds-checkbox.js +1 -1
- package/components/qds-chip.js +4 -4
- package/components/qds-chip.js.map +1 -1
- package/components/qds-dialog.js +4 -4
- package/components/qds-dialog.js.map +1 -1
- package/components/qds-dropdown.js +1 -1
- package/components/qds-icon-button.js +1 -1
- package/components/qds-icon-tab.js +3 -3
- package/components/qds-inline-link.js +1 -1
- package/components/qds-input.js +3 -3
- package/components/qds-label.js +2 -2
- package/components/qds-list-item.js +6 -6
- package/components/qds-menu-item.js +4 -4
- package/components/qds-menu-item.js.map +1 -1
- package/components/qds-mini-button.js +1 -1
- package/components/qds-radio.js +1 -1
- package/components/qds-select.js +2 -2
- package/components/qds-standalone-link.js +1 -1
- package/components/qds-switch.js +2 -2
- package/components/qds-switch.js.map +1 -1
- package/components/qds-tab.js +3 -3
- package/components/qds-tabbar.js +6 -6
- package/components/qds-tabbar.js.map +1 -1
- package/components/qds-tag.js +1 -1
- package/components/qds-textarea.js +1 -1
- package/components/qds-title.js +1 -1
- package/components/qds-tooltip.js +1 -1
- package/dist/cjs/helpers-DjUgyTKn.js +3559 -0
- package/dist/cjs/helpers-DjUgyTKn.js.map +1 -0
- package/dist/cjs/qds-action-item.cjs.entry.js +1 -1
- package/dist/cjs/qds-avatar-media.qds-checkbox.qds-radio.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-avatar-media_3.cjs.entry.js +3 -3
- package/dist/cjs/qds-breadcrumb-item.cjs.entry.js +1 -1
- package/dist/cjs/qds-button.cjs.entry.js +2 -2
- package/dist/cjs/qds-chip.cjs.entry.js +2 -2
- package/dist/cjs/qds-chip.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-dialog.cjs.entry.js +2 -2
- package/dist/cjs/qds-dialog.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-divider_2.cjs.entry.js +2 -2
- package/dist/cjs/qds-dropdown.cjs.entry.js +1 -1
- package/dist/cjs/qds-icon-tab.cjs.entry.js +1 -1
- package/dist/cjs/qds-inline-link.cjs.entry.js +1 -1
- package/dist/cjs/qds-input.cjs.entry.js +2 -2
- package/dist/cjs/qds-label.cjs.entry.js +1 -1
- package/dist/cjs/qds-list-item.cjs.entry.js +1 -1
- package/dist/cjs/qds-menu-item.cjs.entry.js +2 -2
- package/dist/cjs/qds-menu-item.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-mini-button.cjs.entry.js +1 -1
- package/dist/cjs/qds-select.cjs.entry.js +2 -2
- package/dist/cjs/qds-standalone-link.cjs.entry.js +1 -1
- package/dist/cjs/qds-switch.cjs.entry.js +2 -2
- package/dist/cjs/qds-switch.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-tab.cjs.entry.js +1 -1
- package/dist/cjs/qds-tabbar.cjs.entry.js +4 -4
- package/dist/cjs/qds-tabbar.entry.cjs.js.map +1 -1
- package/dist/cjs/qds-tag.cjs.entry.js +1 -1
- package/dist/cjs/qds-textarea.cjs.entry.js +1 -1
- package/dist/cjs/qds-title.cjs.entry.js +1 -1
- package/dist/cjs/qds-tooltip.cjs.entry.js +1 -1
- package/dist/docs.json +1 -1
- package/dist/esm/helpers-mPQzhx-O.js +3539 -0
- package/dist/esm/helpers-mPQzhx-O.js.map +1 -0
- package/dist/esm/qds-action-item.entry.js +1 -1
- package/dist/esm/qds-avatar-media.qds-checkbox.qds-radio.entry.js.map +1 -1
- package/dist/esm/qds-avatar-media_3.entry.js +3 -3
- package/dist/esm/qds-breadcrumb-item.entry.js +1 -1
- package/dist/esm/qds-button.entry.js +2 -2
- package/dist/esm/qds-chip.entry.js +2 -2
- package/dist/esm/qds-chip.entry.js.map +1 -1
- package/dist/esm/qds-dialog.entry.js +2 -2
- package/dist/esm/qds-dialog.entry.js.map +1 -1
- package/dist/esm/qds-divider_2.entry.js +2 -2
- package/dist/esm/qds-dropdown.entry.js +1 -1
- package/dist/esm/qds-icon-tab.entry.js +1 -1
- package/dist/esm/qds-inline-link.entry.js +1 -1
- package/dist/esm/qds-input.entry.js +2 -2
- package/dist/esm/qds-label.entry.js +1 -1
- package/dist/esm/qds-list-item.entry.js +1 -1
- package/dist/esm/qds-menu-item.entry.js +2 -2
- package/dist/esm/qds-menu-item.entry.js.map +1 -1
- package/dist/esm/qds-mini-button.entry.js +1 -1
- package/dist/esm/qds-select.entry.js +2 -2
- package/dist/esm/qds-standalone-link.entry.js +1 -1
- package/dist/esm/qds-switch.entry.js +2 -2
- package/dist/esm/qds-switch.entry.js.map +1 -1
- package/dist/esm/qds-tab.entry.js +1 -1
- package/dist/esm/qds-tabbar.entry.js +4 -4
- package/dist/esm/qds-tabbar.entry.js.map +1 -1
- package/dist/esm/qds-tag.entry.js +1 -1
- package/dist/esm/qds-textarea.entry.js +1 -1
- package/dist/esm/qds-title.entry.js +1 -1
- package/dist/esm/qds-tooltip.entry.js +1 -1
- package/hydrate/index.js +3270 -25
- package/hydrate/index.mjs +3270 -25
- package/package.json +2 -1
- package/components/p-BPNu4xuI.js.map +0 -1
- package/components/p-Bm_hrsjc.js +0 -294
- package/components/p-Bm_hrsjc.js.map +0 -1
- package/components/p-CsIsG3ra.js.map +0 -1
- package/dist/cjs/helpers-CPSgo4Ef.js +0 -314
- package/dist/cjs/helpers-CPSgo4Ef.js.map +0 -1
- package/dist/esm/helpers-JWnSavo8.js +0 -294
- package/dist/esm/helpers-JWnSavo8.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"p-CaibVX_2.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AAEO,MAAM,eAAe,GAAG;AAC/B,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,IAAI;AACR,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,IAAI,GAAG;AACP,CAAC;AACM,MAAM,mBAAmB,GAAG;AACnC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AACzB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;AAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AAC1B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC;AAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;AAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5B,IAAI,CAAC,OAAO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","names":["sharedGraphemeSegmenter","getSharedGraphemeSegmenter"],"sources":["../../node_modules/@chenglou/pretext/dist/generated/bidi-data.js","../../node_modules/@chenglou/pretext/dist/bidi.js","../../node_modules/@chenglou/pretext/dist/analysis.js","../../node_modules/@chenglou/pretext/dist/measurement.js","../../node_modules/@chenglou/pretext/dist/line-break.js","../../node_modules/@chenglou/pretext/dist/layout.js","src/helpers.ts"],"sourcesContent":["// Generated by scripts/generate-bidi-data.ts from scripts/unicode/DerivedBidiClass-17.0.0.txt.\n// Do not edit by hand. Regenerate with `bun run generate:bidi-data`.\n// Formatting and isolate controls are projected onto `BN` because the rich\n// bidi helper consumes a simplified class set and does not model UBA isolates.\nexport const unicodeBidiDataVersion = '17.0.0';\nexport const latin1BidiTypes = [\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'S',\n 'B',\n 'S',\n 'WS',\n 'B',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'B',\n 'B',\n 'B',\n 'S',\n 'WS',\n 'ON',\n 'ON',\n 'ET',\n 'ET',\n 'ET',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ES',\n 'CS',\n 'ES',\n 'CS',\n 'CS',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'EN',\n 'CS',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'B',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'BN',\n 'CS',\n 'ON',\n 'ET',\n 'ET',\n 'ET',\n 'ET',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'L',\n 'ON',\n 'ON',\n 'BN',\n 'ON',\n 'ON',\n 'ET',\n 'ET',\n 'EN',\n 'EN',\n 'ON',\n 'L',\n 'ON',\n 'ON',\n 'ON',\n 'EN',\n 'L',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'ON',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'ON',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'ON',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n 'L',\n];\nexport const nonLatin1BidiRanges = [\n [0x2B9, 0x2BA, 'ON'],\n [0x2C2, 0x2CF, 'ON'],\n [0x2D2, 0x2DF, 'ON'],\n [0x2E5, 0x2ED, 'ON'],\n [0x2EF, 0x2FF, 'ON'],\n [0x300, 0x36F, 'NSM'],\n [0x374, 0x375, 'ON'],\n [0x37E, 0x37E, 'ON'],\n [0x384, 0x385, 'ON'],\n [0x387, 0x387, 'ON'],\n [0x3F6, 0x3F6, 'ON'],\n [0x483, 0x489, 'NSM'],\n [0x58A, 0x58A, 'ON'],\n [0x58D, 0x58E, 'ON'],\n [0x58F, 0x58F, 'ET'],\n [0x590, 0x590, 'R'],\n [0x591, 0x5BD, 'NSM'],\n [0x5BE, 0x5BE, 'R'],\n [0x5BF, 0x5BF, 'NSM'],\n [0x5C0, 0x5C0, 'R'],\n [0x5C1, 0x5C2, 'NSM'],\n [0x5C3, 0x5C3, 'R'],\n [0x5C4, 0x5C5, 'NSM'],\n [0x5C6, 0x5C6, 'R'],\n [0x5C7, 0x5C7, 'NSM'],\n [0x5C8, 0x5FF, 'R'],\n [0x600, 0x605, 'AN'],\n [0x606, 0x607, 'ON'],\n [0x608, 0x608, 'AL'],\n [0x609, 0x60A, 'ET'],\n [0x60B, 0x60B, 'AL'],\n [0x60C, 0x60C, 'CS'],\n [0x60D, 0x60D, 'AL'],\n [0x60E, 0x60F, 'ON'],\n [0x610, 0x61A, 'NSM'],\n [0x61B, 0x64A, 'AL'],\n [0x64B, 0x65F, 'NSM'],\n [0x660, 0x669, 'AN'],\n [0x66A, 0x66A, 'ET'],\n [0x66B, 0x66C, 'AN'],\n [0x66D, 0x66F, 'AL'],\n [0x670, 0x670, 'NSM'],\n [0x671, 0x6D5, 'AL'],\n [0x6D6, 0x6DC, 'NSM'],\n [0x6DD, 0x6DD, 'AN'],\n [0x6DE, 0x6DE, 'ON'],\n [0x6DF, 0x6E4, 'NSM'],\n [0x6E5, 0x6E6, 'AL'],\n [0x6E7, 0x6E8, 'NSM'],\n [0x6E9, 0x6E9, 'ON'],\n [0x6EA, 0x6ED, 'NSM'],\n [0x6EE, 0x6EF, 'AL'],\n [0x6F0, 0x6F9, 'EN'],\n [0x6FA, 0x710, 'AL'],\n [0x711, 0x711, 'NSM'],\n [0x712, 0x72F, 'AL'],\n [0x730, 0x74A, 'NSM'],\n [0x74B, 0x7A5, 'AL'],\n [0x7A6, 0x7B0, 'NSM'],\n [0x7B1, 0x7BF, 'AL'],\n [0x7C0, 0x7EA, 'R'],\n [0x7EB, 0x7F3, 'NSM'],\n [0x7F4, 0x7F5, 'R'],\n [0x7F6, 0x7F9, 'ON'],\n [0x7FA, 0x7FC, 'R'],\n [0x7FD, 0x7FD, 'NSM'],\n [0x7FE, 0x815, 'R'],\n [0x816, 0x819, 'NSM'],\n [0x81A, 0x81A, 'R'],\n [0x81B, 0x823, 'NSM'],\n [0x824, 0x824, 'R'],\n [0x825, 0x827, 'NSM'],\n [0x828, 0x828, 'R'],\n [0x829, 0x82D, 'NSM'],\n [0x82E, 0x858, 'R'],\n [0x859, 0x85B, 'NSM'],\n [0x85C, 0x85F, 'R'],\n [0x860, 0x88F, 'AL'],\n [0x890, 0x891, 'AN'],\n [0x892, 0x896, 'AL'],\n [0x897, 0x89F, 'NSM'],\n [0x8A0, 0x8C9, 'AL'],\n [0x8CA, 0x8E1, 'NSM'],\n [0x8E2, 0x8E2, 'AN'],\n [0x8E3, 0x902, 'NSM'],\n [0x93A, 0x93A, 'NSM'],\n [0x93C, 0x93C, 'NSM'],\n [0x941, 0x948, 'NSM'],\n [0x94D, 0x94D, 'NSM'],\n [0x951, 0x957, 'NSM'],\n [0x962, 0x963, 'NSM'],\n [0x981, 0x981, 'NSM'],\n [0x9BC, 0x9BC, 'NSM'],\n [0x9C1, 0x9C4, 'NSM'],\n [0x9CD, 0x9CD, 'NSM'],\n [0x9E2, 0x9E3, 'NSM'],\n [0x9F2, 0x9F3, 'ET'],\n [0x9FB, 0x9FB, 'ET'],\n [0x9FE, 0x9FE, 'NSM'],\n [0xA01, 0xA02, 'NSM'],\n [0xA3C, 0xA3C, 'NSM'],\n [0xA41, 0xA42, 'NSM'],\n [0xA47, 0xA48, 'NSM'],\n [0xA4B, 0xA4D, 'NSM'],\n [0xA51, 0xA51, 'NSM'],\n [0xA70, 0xA71, 'NSM'],\n [0xA75, 0xA75, 'NSM'],\n [0xA81, 0xA82, 'NSM'],\n [0xABC, 0xABC, 'NSM'],\n [0xAC1, 0xAC5, 'NSM'],\n [0xAC7, 0xAC8, 'NSM'],\n [0xACD, 0xACD, 'NSM'],\n [0xAE2, 0xAE3, 'NSM'],\n [0xAF1, 0xAF1, 'ET'],\n [0xAFA, 0xAFF, 'NSM'],\n [0xB01, 0xB01, 'NSM'],\n [0xB3C, 0xB3C, 'NSM'],\n [0xB3F, 0xB3F, 'NSM'],\n [0xB41, 0xB44, 'NSM'],\n [0xB4D, 0xB4D, 'NSM'],\n [0xB55, 0xB56, 'NSM'],\n [0xB62, 0xB63, 'NSM'],\n [0xB82, 0xB82, 'NSM'],\n [0xBC0, 0xBC0, 'NSM'],\n [0xBCD, 0xBCD, 'NSM'],\n [0xBF3, 0xBF8, 'ON'],\n [0xBF9, 0xBF9, 'ET'],\n [0xBFA, 0xBFA, 'ON'],\n [0xC00, 0xC00, 'NSM'],\n [0xC04, 0xC04, 'NSM'],\n [0xC3C, 0xC3C, 'NSM'],\n [0xC3E, 0xC40, 'NSM'],\n [0xC46, 0xC48, 'NSM'],\n [0xC4A, 0xC4D, 'NSM'],\n [0xC55, 0xC56, 'NSM'],\n [0xC62, 0xC63, 'NSM'],\n [0xC78, 0xC7E, 'ON'],\n [0xC81, 0xC81, 'NSM'],\n [0xCBC, 0xCBC, 'NSM'],\n [0xCCC, 0xCCD, 'NSM'],\n [0xCE2, 0xCE3, 'NSM'],\n [0xD00, 0xD01, 'NSM'],\n [0xD3B, 0xD3C, 'NSM'],\n [0xD41, 0xD44, 'NSM'],\n [0xD4D, 0xD4D, 'NSM'],\n [0xD62, 0xD63, 'NSM'],\n [0xD81, 0xD81, 'NSM'],\n [0xDCA, 0xDCA, 'NSM'],\n [0xDD2, 0xDD4, 'NSM'],\n [0xDD6, 0xDD6, 'NSM'],\n [0xE31, 0xE31, 'NSM'],\n [0xE34, 0xE3A, 'NSM'],\n [0xE3F, 0xE3F, 'ET'],\n [0xE47, 0xE4E, 'NSM'],\n [0xEB1, 0xEB1, 'NSM'],\n [0xEB4, 0xEBC, 'NSM'],\n [0xEC8, 0xECE, 'NSM'],\n [0xF18, 0xF19, 'NSM'],\n [0xF35, 0xF35, 'NSM'],\n [0xF37, 0xF37, 'NSM'],\n [0xF39, 0xF39, 'NSM'],\n [0xF3A, 0xF3D, 'ON'],\n [0xF71, 0xF7E, 'NSM'],\n [0xF80, 0xF84, 'NSM'],\n [0xF86, 0xF87, 'NSM'],\n [0xF8D, 0xF97, 'NSM'],\n [0xF99, 0xFBC, 'NSM'],\n [0xFC6, 0xFC6, 'NSM'],\n [0x102D, 0x1030, 'NSM'],\n [0x1032, 0x1037, 'NSM'],\n [0x1039, 0x103A, 'NSM'],\n [0x103D, 0x103E, 'NSM'],\n [0x1058, 0x1059, 'NSM'],\n [0x105E, 0x1060, 'NSM'],\n [0x1071, 0x1074, 'NSM'],\n [0x1082, 0x1082, 'NSM'],\n [0x1085, 0x1086, 'NSM'],\n [0x108D, 0x108D, 'NSM'],\n [0x109D, 0x109D, 'NSM'],\n [0x135D, 0x135F, 'NSM'],\n [0x1390, 0x1399, 'ON'],\n [0x1400, 0x1400, 'ON'],\n [0x1680, 0x1680, 'WS'],\n [0x169B, 0x169C, 'ON'],\n [0x1712, 0x1714, 'NSM'],\n [0x1732, 0x1733, 'NSM'],\n [0x1752, 0x1753, 'NSM'],\n [0x1772, 0x1773, 'NSM'],\n [0x17B4, 0x17B5, 'NSM'],\n [0x17B7, 0x17BD, 'NSM'],\n [0x17C6, 0x17C6, 'NSM'],\n [0x17C9, 0x17D3, 'NSM'],\n [0x17DB, 0x17DB, 'ET'],\n [0x17DD, 0x17DD, 'NSM'],\n [0x17F0, 0x17F9, 'ON'],\n [0x1800, 0x180A, 'ON'],\n [0x180B, 0x180D, 'NSM'],\n [0x180E, 0x180E, 'BN'],\n [0x180F, 0x180F, 'NSM'],\n [0x1885, 0x1886, 'NSM'],\n [0x18A9, 0x18A9, 'NSM'],\n [0x1920, 0x1922, 'NSM'],\n [0x1927, 0x1928, 'NSM'],\n [0x1932, 0x1932, 'NSM'],\n [0x1939, 0x193B, 'NSM'],\n [0x1940, 0x1940, 'ON'],\n [0x1944, 0x1945, 'ON'],\n [0x19DE, 0x19FF, 'ON'],\n [0x1A17, 0x1A18, 'NSM'],\n [0x1A1B, 0x1A1B, 'NSM'],\n [0x1A56, 0x1A56, 'NSM'],\n [0x1A58, 0x1A5E, 'NSM'],\n [0x1A60, 0x1A60, 'NSM'],\n [0x1A62, 0x1A62, 'NSM'],\n [0x1A65, 0x1A6C, 'NSM'],\n [0x1A73, 0x1A7C, 'NSM'],\n [0x1A7F, 0x1A7F, 'NSM'],\n [0x1AB0, 0x1ADD, 'NSM'],\n [0x1AE0, 0x1AEB, 'NSM'],\n [0x1B00, 0x1B03, 'NSM'],\n [0x1B34, 0x1B34, 'NSM'],\n [0x1B36, 0x1B3A, 'NSM'],\n [0x1B3C, 0x1B3C, 'NSM'],\n [0x1B42, 0x1B42, 'NSM'],\n [0x1B6B, 0x1B73, 'NSM'],\n [0x1B80, 0x1B81, 'NSM'],\n [0x1BA2, 0x1BA5, 'NSM'],\n [0x1BA8, 0x1BA9, 'NSM'],\n [0x1BAB, 0x1BAD, 'NSM'],\n [0x1BE6, 0x1BE6, 'NSM'],\n [0x1BE8, 0x1BE9, 'NSM'],\n [0x1BED, 0x1BED, 'NSM'],\n [0x1BEF, 0x1BF1, 'NSM'],\n [0x1C2C, 0x1C33, 'NSM'],\n [0x1C36, 0x1C37, 'NSM'],\n [0x1CD0, 0x1CD2, 'NSM'],\n [0x1CD4, 0x1CE0, 'NSM'],\n [0x1CE2, 0x1CE8, 'NSM'],\n [0x1CED, 0x1CED, 'NSM'],\n [0x1CF4, 0x1CF4, 'NSM'],\n [0x1CF8, 0x1CF9, 'NSM'],\n [0x1DC0, 0x1DFF, 'NSM'],\n [0x1FBD, 0x1FBD, 'ON'],\n [0x1FBF, 0x1FC1, 'ON'],\n [0x1FCD, 0x1FCF, 'ON'],\n [0x1FDD, 0x1FDF, 'ON'],\n [0x1FED, 0x1FEF, 'ON'],\n [0x1FFD, 0x1FFE, 'ON'],\n [0x2000, 0x200A, 'WS'],\n [0x200B, 0x200D, 'BN'],\n [0x200F, 0x200F, 'R'],\n [0x2010, 0x2027, 'ON'],\n [0x2028, 0x2028, 'WS'],\n [0x2029, 0x2029, 'B'],\n [0x202A, 0x202E, 'BN'],\n [0x202F, 0x202F, 'CS'],\n [0x2030, 0x2034, 'ET'],\n [0x2035, 0x2043, 'ON'],\n [0x2044, 0x2044, 'CS'],\n [0x2045, 0x205E, 'ON'],\n [0x205F, 0x205F, 'WS'],\n [0x2060, 0x206F, 'BN'],\n [0x2070, 0x2070, 'EN'],\n [0x2074, 0x2079, 'EN'],\n [0x207A, 0x207B, 'ES'],\n [0x207C, 0x207E, 'ON'],\n [0x2080, 0x2089, 'EN'],\n [0x208A, 0x208B, 'ES'],\n [0x208C, 0x208E, 'ON'],\n [0x20A0, 0x20CF, 'ET'],\n [0x20D0, 0x20F0, 'NSM'],\n [0x2100, 0x2101, 'ON'],\n [0x2103, 0x2106, 'ON'],\n [0x2108, 0x2109, 'ON'],\n [0x2114, 0x2114, 'ON'],\n [0x2116, 0x2118, 'ON'],\n [0x211E, 0x2123, 'ON'],\n [0x2125, 0x2125, 'ON'],\n [0x2127, 0x2127, 'ON'],\n [0x2129, 0x2129, 'ON'],\n [0x212E, 0x212E, 'ET'],\n [0x213A, 0x213B, 'ON'],\n [0x2140, 0x2144, 'ON'],\n [0x214A, 0x214D, 'ON'],\n [0x2150, 0x215F, 'ON'],\n [0x2189, 0x218B, 'ON'],\n [0x2190, 0x2211, 'ON'],\n [0x2212, 0x2212, 'ES'],\n [0x2213, 0x2213, 'ET'],\n [0x2214, 0x2335, 'ON'],\n [0x237B, 0x2394, 'ON'],\n [0x2396, 0x2429, 'ON'],\n [0x2440, 0x244A, 'ON'],\n [0x2460, 0x2487, 'ON'],\n [0x2488, 0x249B, 'EN'],\n [0x24EA, 0x26AB, 'ON'],\n [0x26AD, 0x27FF, 'ON'],\n [0x2900, 0x2B73, 'ON'],\n [0x2B76, 0x2BFF, 'ON'],\n [0x2CE5, 0x2CEA, 'ON'],\n [0x2CEF, 0x2CF1, 'NSM'],\n [0x2CF9, 0x2CFF, 'ON'],\n [0x2D7F, 0x2D7F, 'NSM'],\n [0x2DE0, 0x2DFF, 'NSM'],\n [0x2E00, 0x2E5D, 'ON'],\n [0x2E80, 0x2E99, 'ON'],\n [0x2E9B, 0x2EF3, 'ON'],\n [0x2F00, 0x2FD5, 'ON'],\n [0x2FF0, 0x2FFF, 'ON'],\n [0x3000, 0x3000, 'WS'],\n [0x3001, 0x3004, 'ON'],\n [0x3008, 0x3020, 'ON'],\n [0x302A, 0x302D, 'NSM'],\n [0x3030, 0x3030, 'ON'],\n [0x3036, 0x3037, 'ON'],\n [0x303D, 0x303F, 'ON'],\n [0x3099, 0x309A, 'NSM'],\n [0x309B, 0x309C, 'ON'],\n [0x30A0, 0x30A0, 'ON'],\n [0x30FB, 0x30FB, 'ON'],\n [0x31C0, 0x31E5, 'ON'],\n [0x31EF, 0x31EF, 'ON'],\n [0x321D, 0x321E, 'ON'],\n [0x3250, 0x325F, 'ON'],\n [0x327C, 0x327E, 'ON'],\n [0x32B1, 0x32BF, 'ON'],\n [0x32CC, 0x32CF, 'ON'],\n [0x3377, 0x337A, 'ON'],\n [0x33DE, 0x33DF, 'ON'],\n [0x33FF, 0x33FF, 'ON'],\n [0x4DC0, 0x4DFF, 'ON'],\n [0xA490, 0xA4C6, 'ON'],\n [0xA60D, 0xA60F, 'ON'],\n [0xA66F, 0xA672, 'NSM'],\n [0xA673, 0xA673, 'ON'],\n [0xA674, 0xA67D, 'NSM'],\n [0xA67E, 0xA67F, 'ON'],\n [0xA69E, 0xA69F, 'NSM'],\n [0xA6F0, 0xA6F1, 'NSM'],\n [0xA700, 0xA721, 'ON'],\n [0xA788, 0xA788, 'ON'],\n [0xA802, 0xA802, 'NSM'],\n [0xA806, 0xA806, 'NSM'],\n [0xA80B, 0xA80B, 'NSM'],\n [0xA825, 0xA826, 'NSM'],\n [0xA828, 0xA82B, 'ON'],\n [0xA82C, 0xA82C, 'NSM'],\n [0xA838, 0xA839, 'ET'],\n [0xA874, 0xA877, 'ON'],\n [0xA8C4, 0xA8C5, 'NSM'],\n [0xA8E0, 0xA8F1, 'NSM'],\n [0xA8FF, 0xA8FF, 'NSM'],\n [0xA926, 0xA92D, 'NSM'],\n [0xA947, 0xA951, 'NSM'],\n [0xA980, 0xA982, 'NSM'],\n [0xA9B3, 0xA9B3, 'NSM'],\n [0xA9B6, 0xA9B9, 'NSM'],\n [0xA9BC, 0xA9BD, 'NSM'],\n [0xA9E5, 0xA9E5, 'NSM'],\n [0xAA29, 0xAA2E, 'NSM'],\n [0xAA31, 0xAA32, 'NSM'],\n [0xAA35, 0xAA36, 'NSM'],\n [0xAA43, 0xAA43, 'NSM'],\n [0xAA4C, 0xAA4C, 'NSM'],\n [0xAA7C, 0xAA7C, 'NSM'],\n [0xAAB0, 0xAAB0, 'NSM'],\n [0xAAB2, 0xAAB4, 'NSM'],\n [0xAAB7, 0xAAB8, 'NSM'],\n [0xAABE, 0xAABF, 'NSM'],\n [0xAAC1, 0xAAC1, 'NSM'],\n [0xAAEC, 0xAAED, 'NSM'],\n [0xAAF6, 0xAAF6, 'NSM'],\n [0xAB6A, 0xAB6B, 'ON'],\n [0xABE5, 0xABE5, 'NSM'],\n [0xABE8, 0xABE8, 'NSM'],\n [0xABED, 0xABED, 'NSM'],\n [0xFB1D, 0xFB1D, 'R'],\n [0xFB1E, 0xFB1E, 'NSM'],\n [0xFB1F, 0xFB28, 'R'],\n [0xFB29, 0xFB29, 'ES'],\n [0xFB2A, 0xFB4F, 'R'],\n [0xFB50, 0xFBC2, 'AL'],\n [0xFBC3, 0xFBD2, 'ON'],\n [0xFBD3, 0xFD3D, 'AL'],\n [0xFD3E, 0xFD4F, 'ON'],\n [0xFD50, 0xFD8F, 'AL'],\n [0xFD90, 0xFD91, 'ON'],\n [0xFD92, 0xFDC7, 'AL'],\n [0xFDC8, 0xFDCF, 'ON'],\n [0xFDD0, 0xFDEF, 'BN'],\n [0xFDF0, 0xFDFC, 'AL'],\n [0xFDFD, 0xFDFF, 'ON'],\n [0xFE00, 0xFE0F, 'NSM'],\n [0xFE10, 0xFE19, 'ON'],\n [0xFE20, 0xFE2F, 'NSM'],\n [0xFE30, 0xFE4F, 'ON'],\n [0xFE50, 0xFE50, 'CS'],\n [0xFE51, 0xFE51, 'ON'],\n [0xFE52, 0xFE52, 'CS'],\n [0xFE54, 0xFE54, 'ON'],\n [0xFE55, 0xFE55, 'CS'],\n [0xFE56, 0xFE5E, 'ON'],\n [0xFE5F, 0xFE5F, 'ET'],\n [0xFE60, 0xFE61, 'ON'],\n [0xFE62, 0xFE63, 'ES'],\n [0xFE64, 0xFE66, 'ON'],\n [0xFE68, 0xFE68, 'ON'],\n [0xFE69, 0xFE6A, 'ET'],\n [0xFE6B, 0xFE6B, 'ON'],\n [0xFE70, 0xFEFE, 'AL'],\n [0xFEFF, 0xFEFF, 'BN'],\n [0xFF01, 0xFF02, 'ON'],\n [0xFF03, 0xFF05, 'ET'],\n [0xFF06, 0xFF0A, 'ON'],\n [0xFF0B, 0xFF0B, 'ES'],\n [0xFF0C, 0xFF0C, 'CS'],\n [0xFF0D, 0xFF0D, 'ES'],\n [0xFF0E, 0xFF0F, 'CS'],\n [0xFF10, 0xFF19, 'EN'],\n [0xFF1A, 0xFF1A, 'CS'],\n [0xFF1B, 0xFF20, 'ON'],\n [0xFF3B, 0xFF40, 'ON'],\n [0xFF5B, 0xFF65, 'ON'],\n [0xFFE0, 0xFFE1, 'ET'],\n [0xFFE2, 0xFFE4, 'ON'],\n [0xFFE5, 0xFFE6, 'ET'],\n [0xFFE8, 0xFFEE, 'ON'],\n [0xFFF0, 0xFFF8, 'BN'],\n [0xFFF9, 0xFFFD, 'ON'],\n [0xFFFE, 0xFFFF, 'BN'],\n [0x10101, 0x10101, 'ON'],\n [0x10140, 0x1018C, 'ON'],\n [0x10190, 0x1019C, 'ON'],\n [0x101A0, 0x101A0, 'ON'],\n [0x101FD, 0x101FD, 'NSM'],\n [0x102E0, 0x102E0, 'NSM'],\n [0x102E1, 0x102FB, 'EN'],\n [0x10376, 0x1037A, 'NSM'],\n [0x10800, 0x1091E, 'R'],\n [0x1091F, 0x1091F, 'ON'],\n [0x10920, 0x10A00, 'R'],\n [0x10A01, 0x10A03, 'NSM'],\n [0x10A04, 0x10A04, 'R'],\n [0x10A05, 0x10A06, 'NSM'],\n [0x10A07, 0x10A0B, 'R'],\n [0x10A0C, 0x10A0F, 'NSM'],\n [0x10A10, 0x10A37, 'R'],\n [0x10A38, 0x10A3A, 'NSM'],\n [0x10A3B, 0x10A3E, 'R'],\n [0x10A3F, 0x10A3F, 'NSM'],\n [0x10A40, 0x10AE4, 'R'],\n [0x10AE5, 0x10AE6, 'NSM'],\n [0x10AE7, 0x10B38, 'R'],\n [0x10B39, 0x10B3F, 'ON'],\n [0x10B40, 0x10CFF, 'R'],\n [0x10D00, 0x10D23, 'AL'],\n [0x10D24, 0x10D27, 'NSM'],\n [0x10D28, 0x10D2F, 'AL'],\n [0x10D30, 0x10D39, 'AN'],\n [0x10D3A, 0x10D3F, 'AL'],\n [0x10D40, 0x10D49, 'AN'],\n [0x10D4A, 0x10D68, 'R'],\n [0x10D69, 0x10D6D, 'NSM'],\n [0x10D6E, 0x10D6E, 'ON'],\n [0x10D6F, 0x10E5F, 'R'],\n [0x10E60, 0x10E7E, 'AN'],\n [0x10E7F, 0x10EAA, 'R'],\n [0x10EAB, 0x10EAC, 'NSM'],\n [0x10EAD, 0x10EBF, 'R'],\n [0x10EC0, 0x10ECF, 'AL'],\n [0x10ED0, 0x10ED8, 'ON'],\n [0x10ED9, 0x10EF9, 'AL'],\n [0x10EFA, 0x10EFF, 'NSM'],\n [0x10F00, 0x10F2F, 'R'],\n [0x10F30, 0x10F45, 'AL'],\n [0x10F46, 0x10F50, 'NSM'],\n [0x10F51, 0x10F6F, 'AL'],\n [0x10F70, 0x10F81, 'R'],\n [0x10F82, 0x10F85, 'NSM'],\n [0x10F86, 0x10FFF, 'R'],\n [0x11001, 0x11001, 'NSM'],\n [0x11038, 0x11046, 'NSM'],\n [0x11052, 0x11065, 'ON'],\n [0x11070, 0x11070, 'NSM'],\n [0x11073, 0x11074, 'NSM'],\n [0x1107F, 0x11081, 'NSM'],\n [0x110B3, 0x110B6, 'NSM'],\n [0x110B9, 0x110BA, 'NSM'],\n [0x110C2, 0x110C2, 'NSM'],\n [0x11100, 0x11102, 'NSM'],\n [0x11127, 0x1112B, 'NSM'],\n [0x1112D, 0x11134, 'NSM'],\n [0x11173, 0x11173, 'NSM'],\n [0x11180, 0x11181, 'NSM'],\n [0x111B6, 0x111BE, 'NSM'],\n [0x111C9, 0x111CC, 'NSM'],\n [0x111CF, 0x111CF, 'NSM'],\n [0x1122F, 0x11231, 'NSM'],\n [0x11234, 0x11234, 'NSM'],\n [0x11236, 0x11237, 'NSM'],\n [0x1123E, 0x1123E, 'NSM'],\n [0x11241, 0x11241, 'NSM'],\n [0x112DF, 0x112DF, 'NSM'],\n [0x112E3, 0x112EA, 'NSM'],\n [0x11300, 0x11301, 'NSM'],\n [0x1133B, 0x1133C, 'NSM'],\n [0x11340, 0x11340, 'NSM'],\n [0x11366, 0x1136C, 'NSM'],\n [0x11370, 0x11374, 'NSM'],\n [0x113BB, 0x113C0, 'NSM'],\n [0x113CE, 0x113CE, 'NSM'],\n [0x113D0, 0x113D0, 'NSM'],\n [0x113D2, 0x113D2, 'NSM'],\n [0x113E1, 0x113E2, 'NSM'],\n [0x11438, 0x1143F, 'NSM'],\n [0x11442, 0x11444, 'NSM'],\n [0x11446, 0x11446, 'NSM'],\n [0x1145E, 0x1145E, 'NSM'],\n [0x114B3, 0x114B8, 'NSM'],\n [0x114BA, 0x114BA, 'NSM'],\n [0x114BF, 0x114C0, 'NSM'],\n [0x114C2, 0x114C3, 'NSM'],\n [0x115B2, 0x115B5, 'NSM'],\n [0x115BC, 0x115BD, 'NSM'],\n [0x115BF, 0x115C0, 'NSM'],\n [0x115DC, 0x115DD, 'NSM'],\n [0x11633, 0x1163A, 'NSM'],\n [0x1163D, 0x1163D, 'NSM'],\n [0x1163F, 0x11640, 'NSM'],\n [0x11660, 0x1166C, 'ON'],\n [0x116AB, 0x116AB, 'NSM'],\n [0x116AD, 0x116AD, 'NSM'],\n [0x116B0, 0x116B5, 'NSM'],\n [0x116B7, 0x116B7, 'NSM'],\n [0x1171D, 0x1171D, 'NSM'],\n [0x1171F, 0x1171F, 'NSM'],\n [0x11722, 0x11725, 'NSM'],\n [0x11727, 0x1172B, 'NSM'],\n [0x1182F, 0x11837, 'NSM'],\n [0x11839, 0x1183A, 'NSM'],\n [0x1193B, 0x1193C, 'NSM'],\n [0x1193E, 0x1193E, 'NSM'],\n [0x11943, 0x11943, 'NSM'],\n [0x119D4, 0x119D7, 'NSM'],\n [0x119DA, 0x119DB, 'NSM'],\n [0x119E0, 0x119E0, 'NSM'],\n [0x11A01, 0x11A06, 'NSM'],\n [0x11A09, 0x11A0A, 'NSM'],\n [0x11A33, 0x11A38, 'NSM'],\n [0x11A3B, 0x11A3E, 'NSM'],\n [0x11A47, 0x11A47, 'NSM'],\n [0x11A51, 0x11A56, 'NSM'],\n [0x11A59, 0x11A5B, 'NSM'],\n [0x11A8A, 0x11A96, 'NSM'],\n [0x11A98, 0x11A99, 'NSM'],\n [0x11B60, 0x11B60, 'NSM'],\n [0x11B62, 0x11B64, 'NSM'],\n [0x11B66, 0x11B66, 'NSM'],\n [0x11C30, 0x11C36, 'NSM'],\n [0x11C38, 0x11C3D, 'NSM'],\n [0x11C92, 0x11CA7, 'NSM'],\n [0x11CAA, 0x11CB0, 'NSM'],\n [0x11CB2, 0x11CB3, 'NSM'],\n [0x11CB5, 0x11CB6, 'NSM'],\n [0x11D31, 0x11D36, 'NSM'],\n [0x11D3A, 0x11D3A, 'NSM'],\n [0x11D3C, 0x11D3D, 'NSM'],\n [0x11D3F, 0x11D45, 'NSM'],\n [0x11D47, 0x11D47, 'NSM'],\n [0x11D90, 0x11D91, 'NSM'],\n [0x11D95, 0x11D95, 'NSM'],\n [0x11D97, 0x11D97, 'NSM'],\n [0x11EF3, 0x11EF4, 'NSM'],\n [0x11F00, 0x11F01, 'NSM'],\n [0x11F36, 0x11F3A, 'NSM'],\n [0x11F40, 0x11F40, 'NSM'],\n [0x11F42, 0x11F42, 'NSM'],\n [0x11F5A, 0x11F5A, 'NSM'],\n [0x11FD5, 0x11FDC, 'ON'],\n [0x11FDD, 0x11FE0, 'ET'],\n [0x11FE1, 0x11FF1, 'ON'],\n [0x13440, 0x13440, 'NSM'],\n [0x13447, 0x13455, 'NSM'],\n [0x1611E, 0x16129, 'NSM'],\n [0x1612D, 0x1612F, 'NSM'],\n [0x16AF0, 0x16AF4, 'NSM'],\n [0x16B30, 0x16B36, 'NSM'],\n [0x16F4F, 0x16F4F, 'NSM'],\n [0x16F8F, 0x16F92, 'NSM'],\n [0x16FE2, 0x16FE2, 'ON'],\n [0x16FE4, 0x16FE4, 'NSM'],\n [0x1BC9D, 0x1BC9E, 'NSM'],\n [0x1BCA0, 0x1BCA3, 'BN'],\n [0x1CC00, 0x1CCD5, 'ON'],\n [0x1CCF0, 0x1CCF9, 'EN'],\n [0x1CCFA, 0x1CCFC, 'ON'],\n [0x1CD00, 0x1CEB3, 'ON'],\n [0x1CEBA, 0x1CED0, 'ON'],\n [0x1CEE0, 0x1CEF0, 'ON'],\n [0x1CF00, 0x1CF2D, 'NSM'],\n [0x1CF30, 0x1CF46, 'NSM'],\n [0x1D167, 0x1D169, 'NSM'],\n [0x1D173, 0x1D17A, 'BN'],\n [0x1D17B, 0x1D182, 'NSM'],\n [0x1D185, 0x1D18B, 'NSM'],\n [0x1D1AA, 0x1D1AD, 'NSM'],\n [0x1D1E9, 0x1D1EA, 'ON'],\n [0x1D200, 0x1D241, 'ON'],\n [0x1D242, 0x1D244, 'NSM'],\n [0x1D245, 0x1D245, 'ON'],\n [0x1D300, 0x1D356, 'ON'],\n [0x1D6C1, 0x1D6C1, 'ON'],\n [0x1D6DB, 0x1D6DB, 'ON'],\n [0x1D6FB, 0x1D6FB, 'ON'],\n [0x1D715, 0x1D715, 'ON'],\n [0x1D735, 0x1D735, 'ON'],\n [0x1D74F, 0x1D74F, 'ON'],\n [0x1D76F, 0x1D76F, 'ON'],\n [0x1D789, 0x1D789, 'ON'],\n [0x1D7A9, 0x1D7A9, 'ON'],\n [0x1D7C3, 0x1D7C3, 'ON'],\n [0x1D7CE, 0x1D7FF, 'EN'],\n [0x1DA00, 0x1DA36, 'NSM'],\n [0x1DA3B, 0x1DA6C, 'NSM'],\n [0x1DA75, 0x1DA75, 'NSM'],\n [0x1DA84, 0x1DA84, 'NSM'],\n [0x1DA9B, 0x1DA9F, 'NSM'],\n [0x1DAA1, 0x1DAAF, 'NSM'],\n [0x1E000, 0x1E006, 'NSM'],\n [0x1E008, 0x1E018, 'NSM'],\n [0x1E01B, 0x1E021, 'NSM'],\n [0x1E023, 0x1E024, 'NSM'],\n [0x1E026, 0x1E02A, 'NSM'],\n [0x1E08F, 0x1E08F, 'NSM'],\n [0x1E130, 0x1E136, 'NSM'],\n [0x1E2AE, 0x1E2AE, 'NSM'],\n [0x1E2EC, 0x1E2EF, 'NSM'],\n [0x1E2FF, 0x1E2FF, 'ET'],\n [0x1E4EC, 0x1E4EF, 'NSM'],\n [0x1E5EE, 0x1E5EF, 'NSM'],\n [0x1E6E3, 0x1E6E3, 'NSM'],\n [0x1E6E6, 0x1E6E6, 'NSM'],\n [0x1E6EE, 0x1E6EF, 'NSM'],\n [0x1E6F5, 0x1E6F5, 'NSM'],\n [0x1E800, 0x1E8CF, 'R'],\n [0x1E8D0, 0x1E8D6, 'NSM'],\n [0x1E8D7, 0x1E943, 'R'],\n [0x1E944, 0x1E94A, 'NSM'],\n [0x1E94B, 0x1EC6F, 'R'],\n [0x1EC70, 0x1ECBF, 'AL'],\n [0x1ECC0, 0x1ECFF, 'R'],\n [0x1ED00, 0x1ED4F, 'AL'],\n [0x1ED50, 0x1EDFF, 'R'],\n [0x1EE00, 0x1EEEF, 'AL'],\n [0x1EEF0, 0x1EEF1, 'ON'],\n [0x1EEF2, 0x1EEFF, 'AL'],\n [0x1EF00, 0x1EFFF, 'R'],\n [0x1F000, 0x1F02B, 'ON'],\n [0x1F030, 0x1F093, 'ON'],\n [0x1F0A0, 0x1F0AE, 'ON'],\n [0x1F0B1, 0x1F0BF, 'ON'],\n [0x1F0C1, 0x1F0CF, 'ON'],\n [0x1F0D1, 0x1F0F5, 'ON'],\n [0x1F100, 0x1F10A, 'EN'],\n [0x1F10B, 0x1F10F, 'ON'],\n [0x1F12F, 0x1F12F, 'ON'],\n [0x1F16A, 0x1F16F, 'ON'],\n [0x1F1AD, 0x1F1AD, 'ON'],\n [0x1F260, 0x1F265, 'ON'],\n [0x1F300, 0x1F6D8, 'ON'],\n [0x1F6DC, 0x1F6EC, 'ON'],\n [0x1F6F0, 0x1F6FC, 'ON'],\n [0x1F700, 0x1F7D9, 'ON'],\n [0x1F7E0, 0x1F7EB, 'ON'],\n [0x1F7F0, 0x1F7F0, 'ON'],\n [0x1F800, 0x1F80B, 'ON'],\n [0x1F810, 0x1F847, 'ON'],\n [0x1F850, 0x1F859, 'ON'],\n [0x1F860, 0x1F887, 'ON'],\n [0x1F890, 0x1F8AD, 'ON'],\n [0x1F8B0, 0x1F8BB, 'ON'],\n [0x1F8C0, 0x1F8C1, 'ON'],\n [0x1F8D0, 0x1F8D8, 'ON'],\n [0x1F900, 0x1FA57, 'ON'],\n [0x1FA60, 0x1FA6D, 'ON'],\n [0x1FA70, 0x1FA7C, 'ON'],\n [0x1FA80, 0x1FA8A, 'ON'],\n [0x1FA8E, 0x1FAC6, 'ON'],\n [0x1FAC8, 0x1FAC8, 'ON'],\n [0x1FACD, 0x1FADC, 'ON'],\n [0x1FADF, 0x1FAEA, 'ON'],\n [0x1FAEF, 0x1FAF8, 'ON'],\n [0x1FB00, 0x1FB92, 'ON'],\n [0x1FB94, 0x1FBEF, 'ON'],\n [0x1FBF0, 0x1FBF9, 'EN'],\n [0x1FBFA, 0x1FBFA, 'ON'],\n [0x1FFFE, 0x1FFFF, 'BN'],\n [0x2FFFE, 0x2FFFF, 'BN'],\n [0x3FFFE, 0x3FFFF, 'BN'],\n [0x4FFFE, 0x4FFFF, 'BN'],\n [0x5FFFE, 0x5FFFF, 'BN'],\n [0x6FFFE, 0x6FFFF, 'BN'],\n [0x7FFFE, 0x7FFFF, 'BN'],\n [0x8FFFE, 0x8FFFF, 'BN'],\n [0x9FFFE, 0x9FFFF, 'BN'],\n [0xAFFFE, 0xAFFFF, 'BN'],\n [0xBFFFE, 0xBFFFF, 'BN'],\n [0xCFFFE, 0xCFFFF, 'BN'],\n [0xDFFFE, 0xE00FF, 'BN'],\n [0xE0100, 0xE01EF, 'NSM'],\n [0xE01F0, 0xE0FFF, 'BN'],\n [0xEFFFE, 0xEFFFF, 'BN'],\n [0xFFFFE, 0xFFFFF, 'BN'],\n [0x10FFFE, 0x10FFFF, 'BN'],\n];\n","// Simplified bidi metadata helper for the rich prepareWithSegments() path,\n// forked from pdf.js via Sebastian's text-layout. It classifies characters\n// into bidi types, computes embedding levels, and maps them onto prepared\n// segments for custom rendering. The line-breaking engine does not consume\n// these levels.\nimport { latin1BidiTypes, nonLatin1BidiRanges, } from './generated/bidi-data.js';\nfunction classifyCodePoint(codePoint) {\n if (codePoint <= 0x00FF)\n return latin1BidiTypes[codePoint];\n let lo = 0;\n let hi = nonLatin1BidiRanges.length - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >> 1;\n const range = nonLatin1BidiRanges[mid];\n if (codePoint < range[0]) {\n hi = mid - 1;\n continue;\n }\n if (codePoint > range[1]) {\n lo = mid + 1;\n continue;\n }\n return range[2];\n }\n return 'L';\n}\nfunction computeBidiLevels(str) {\n const len = str.length;\n if (len === 0)\n return null;\n // eslint-disable-next-line unicorn/no-new-array\n const types = new Array(len);\n let sawBidi = false;\n // Keep the resolved bidi classes aligned to UTF-16 code-unit offsets,\n // because the rich prepared segments index back into the normalized string\n // with JavaScript string offsets.\n for (let i = 0; i < len;) {\n const first = str.charCodeAt(i);\n let codePoint = first;\n let codeUnitLength = 1;\n if (first >= 0xD800 && first <= 0xDBFF && i + 1 < len) {\n const second = str.charCodeAt(i + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n codePoint = ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n codeUnitLength = 2;\n }\n }\n const t = classifyCodePoint(codePoint);\n if (t === 'R' || t === 'AL' || t === 'AN')\n sawBidi = true;\n for (let j = 0; j < codeUnitLength; j++) {\n types[i + j] = t;\n }\n i += codeUnitLength;\n }\n if (!sawBidi)\n return null;\n // Use the first strong character to pick the paragraph base direction.\n // Rich-path bidi metadata is only an approximation, but this keeps mixed\n // LTR/RTL text aligned with the common UBA paragraph rule.\n let startLevel = 0;\n for (let i = 0; i < len; i++) {\n const t = types[i];\n if (t === 'L') {\n startLevel = 0;\n break;\n }\n if (t === 'R' || t === 'AL') {\n startLevel = 1;\n break;\n }\n }\n const levels = new Int8Array(len);\n for (let i = 0; i < len; i++)\n levels[i] = startLevel;\n const e = (startLevel & 1) ? 'R' : 'L';\n const sor = e;\n // W1-W7\n let lastType = sor;\n for (let i = 0; i < len; i++) {\n if (types[i] === 'NSM')\n types[i] = lastType;\n else\n lastType = types[i];\n }\n lastType = sor;\n for (let i = 0; i < len; i++) {\n const t = types[i];\n if (t === 'EN')\n types[i] = lastType === 'AL' ? 'AN' : 'EN';\n else if (t === 'R' || t === 'L' || t === 'AL')\n lastType = t;\n }\n for (let i = 0; i < len; i++) {\n if (types[i] === 'AL')\n types[i] = 'R';\n }\n for (let i = 1; i < len - 1; i++) {\n if (types[i] === 'ES' && types[i - 1] === 'EN' && types[i + 1] === 'EN') {\n types[i] = 'EN';\n }\n if (types[i] === 'CS' &&\n (types[i - 1] === 'EN' || types[i - 1] === 'AN') &&\n types[i + 1] === types[i - 1]) {\n types[i] = types[i - 1];\n }\n }\n for (let i = 0; i < len; i++) {\n if (types[i] !== 'EN')\n continue;\n let j;\n for (j = i - 1; j >= 0 && types[j] === 'ET'; j--)\n types[j] = 'EN';\n for (j = i + 1; j < len && types[j] === 'ET'; j++)\n types[j] = 'EN';\n }\n for (let i = 0; i < len; i++) {\n const t = types[i];\n if (t === 'WS' || t === 'ES' || t === 'ET' || t === 'CS')\n types[i] = 'ON';\n }\n lastType = sor;\n for (let i = 0; i < len; i++) {\n const t = types[i];\n if (t === 'EN')\n types[i] = lastType === 'L' ? 'L' : 'EN';\n else if (t === 'R' || t === 'L')\n lastType = t;\n }\n // N1-N2\n for (let i = 0; i < len; i++) {\n if (types[i] !== 'ON')\n continue;\n let end = i + 1;\n while (end < len && types[end] === 'ON')\n end++;\n const before = i > 0 ? types[i - 1] : sor;\n const after = end < len ? types[end] : sor;\n const bDir = before !== 'L' ? 'R' : 'L';\n const aDir = after !== 'L' ? 'R' : 'L';\n if (bDir === aDir) {\n for (let j = i; j < end; j++)\n types[j] = bDir;\n }\n i = end - 1;\n }\n for (let i = 0; i < len; i++) {\n if (types[i] === 'ON')\n types[i] = e;\n }\n // I1-I2\n for (let i = 0; i < len; i++) {\n const t = types[i];\n if ((levels[i] & 1) === 0) {\n if (t === 'R')\n levels[i]++;\n else if (t === 'AN' || t === 'EN')\n levels[i] += 2;\n }\n else if (t === 'L' || t === 'AN' || t === 'EN') {\n levels[i]++;\n }\n }\n return levels;\n}\nexport function computeSegmentLevels(normalized, segStarts) {\n const bidiLevels = computeBidiLevels(normalized);\n if (bidiLevels === null)\n return null;\n const segLevels = new Int8Array(segStarts.length);\n for (let i = 0; i < segStarts.length; i++) {\n segLevels[i] = bidiLevels[segStarts[i]];\n }\n return segLevels;\n}\n","const collapsibleWhitespaceRunRe = /[ \\t\\n\\r\\f]+/g;\nconst needsWhitespaceNormalizationRe = /[\\t\\n\\r\\f]| {2,}|^ | $/;\nfunction getWhiteSpaceProfile(whiteSpace) {\n const mode = whiteSpace ?? 'normal';\n return mode === 'pre-wrap'\n ? { mode, preserveOrdinarySpaces: true, preserveHardBreaks: true }\n : { mode, preserveOrdinarySpaces: false, preserveHardBreaks: false };\n}\nexport function normalizeWhitespaceNormal(text) {\n if (!needsWhitespaceNormalizationRe.test(text))\n return text;\n let normalized = text.replace(collapsibleWhitespaceRunRe, ' ');\n if (normalized.charCodeAt(0) === 0x20) {\n normalized = normalized.slice(1);\n }\n if (normalized.length > 0 && normalized.charCodeAt(normalized.length - 1) === 0x20) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n}\nfunction normalizeWhitespacePreWrap(text) {\n if (!/[\\r\\f]/.test(text))\n return text;\n return text\n .replace(/\\r\\n/g, '\\n')\n .replace(/[\\r\\f]/g, '\\n');\n}\nlet sharedWordSegmenter = null;\nlet segmenterLocale;\nfunction getSharedWordSegmenter() {\n if (sharedWordSegmenter === null) {\n sharedWordSegmenter = new Intl.Segmenter(segmenterLocale, { granularity: 'word' });\n }\n return sharedWordSegmenter;\n}\nexport function clearAnalysisCaches() {\n sharedWordSegmenter = null;\n}\nexport function setAnalysisLocale(locale) {\n const nextLocale = locale && locale.length > 0 ? locale : undefined;\n if (segmenterLocale === nextLocale)\n return;\n segmenterLocale = nextLocale;\n sharedWordSegmenter = null;\n}\nconst arabicScriptRe = /\\p{Script=Arabic}/u;\nconst combiningMarkRe = /\\p{M}/u;\nconst decimalDigitRe = /\\p{Nd}/u;\nfunction containsArabicScript(text) {\n return arabicScriptRe.test(text);\n}\nfunction isCJKCodePoint(codePoint) {\n return ((codePoint >= 0x4E00 && codePoint <= 0x9FFF) ||\n (codePoint >= 0x3400 && codePoint <= 0x4DBF) ||\n (codePoint >= 0x20000 && codePoint <= 0x2A6DF) ||\n (codePoint >= 0x2A700 && codePoint <= 0x2B73F) ||\n (codePoint >= 0x2B740 && codePoint <= 0x2B81F) ||\n (codePoint >= 0x2B820 && codePoint <= 0x2CEAF) ||\n (codePoint >= 0x2CEB0 && codePoint <= 0x2EBEF) ||\n (codePoint >= 0x2EBF0 && codePoint <= 0x2EE5D) ||\n (codePoint >= 0x2F800 && codePoint <= 0x2FA1F) ||\n (codePoint >= 0x30000 && codePoint <= 0x3134F) ||\n (codePoint >= 0x31350 && codePoint <= 0x323AF) ||\n (codePoint >= 0x323B0 && codePoint <= 0x33479) ||\n (codePoint >= 0xF900 && codePoint <= 0xFAFF) ||\n (codePoint >= 0x3000 && codePoint <= 0x303F) ||\n (codePoint >= 0x3040 && codePoint <= 0x309F) ||\n (codePoint >= 0x30A0 && codePoint <= 0x30FF) ||\n (codePoint >= 0x3130 && codePoint <= 0x318F) ||\n (codePoint >= 0xAC00 && codePoint <= 0xD7AF) ||\n (codePoint >= 0xFF00 && codePoint <= 0xFFEF));\n}\nexport function isCJK(s) {\n for (let i = 0; i < s.length; i++) {\n const first = s.charCodeAt(i);\n if (first < 0x3000)\n continue;\n if (first >= 0xD800 && first <= 0xDBFF && i + 1 < s.length) {\n const second = s.charCodeAt(i + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n const codePoint = ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n if (isCJKCodePoint(codePoint))\n return true;\n i++;\n continue;\n }\n }\n if (isCJKCodePoint(first))\n return true;\n }\n return false;\n}\nfunction endsWithLineStartProhibitedText(text) {\n const last = getLastCodePoint(text);\n return last !== null && (kinsokuStart.has(last) || leftStickyPunctuation.has(last));\n}\nconst keepAllGlueChars = new Set([\n '\\u00A0',\n '\\u202F',\n '\\u2060',\n '\\uFEFF',\n]);\nfunction containsCJKText(text) {\n return isCJK(text);\n}\nfunction endsWithKeepAllGlueText(text) {\n const last = getLastCodePoint(text);\n return last !== null && keepAllGlueChars.has(last);\n}\nexport function canContinueKeepAllTextRun(previousText) {\n return (!endsWithLineStartProhibitedText(previousText) &&\n !endsWithKeepAllGlueText(previousText));\n}\nexport const kinsokuStart = new Set([\n '\\uFF0C',\n '\\uFF0E',\n '\\uFF01',\n '\\uFF1A',\n '\\uFF1B',\n '\\uFF1F',\n '\\u3001',\n '\\u3002',\n '\\u30FB',\n '\\uFF09',\n '\\u3015',\n '\\u3009',\n '\\u300B',\n '\\u300D',\n '\\u300F',\n '\\u3011',\n '\\u3017',\n '\\u3019',\n '\\u301B',\n '\\u30FC',\n '\\u3005',\n '\\u303B',\n '\\u309D',\n '\\u309E',\n '\\u30FD',\n '\\u30FE',\n]);\nexport const kinsokuEnd = new Set([\n '\"',\n '(', '[', '{',\n '“', '‘', '«', '‹',\n '\\uFF08',\n '\\u3014',\n '\\u3008',\n '\\u300A',\n '\\u300C',\n '\\u300E',\n '\\u3010',\n '\\u3016',\n '\\u3018',\n '\\u301A',\n]);\nconst forwardStickyGlue = new Set([\n \"'\", '’',\n]);\nexport const leftStickyPunctuation = new Set([\n '.', ',', '!', '?', ':', ';',\n '\\u060C',\n '\\u061B',\n '\\u061F',\n '\\u0964',\n '\\u0965',\n '\\u104A',\n '\\u104B',\n '\\u104C',\n '\\u104D',\n '\\u104F',\n ')', ']', '}',\n '%',\n '\"',\n '”', '’', '»', '›',\n '…',\n]);\nconst arabicNoSpaceTrailingPunctuation = new Set([\n ':',\n '.',\n '\\u060C',\n '\\u061B',\n]);\nconst myanmarMedialGlue = new Set([\n '\\u104F',\n]);\nconst closingQuoteChars = new Set([\n '”', '’', '»', '›',\n '\\u300D',\n '\\u300F',\n '\\u3011',\n '\\u300B',\n '\\u3009',\n '\\u3015',\n '\\uFF09',\n]);\nfunction isLeftStickyPunctuationSegment(segment) {\n if (isEscapedQuoteClusterSegment(segment))\n return true;\n let sawPunctuation = false;\n for (const ch of segment) {\n if (leftStickyPunctuation.has(ch)) {\n sawPunctuation = true;\n continue;\n }\n if (sawPunctuation && combiningMarkRe.test(ch))\n continue;\n return false;\n }\n return sawPunctuation;\n}\nfunction isCJKLineStartProhibitedSegment(segment) {\n for (const ch of segment) {\n if (!kinsokuStart.has(ch) && !leftStickyPunctuation.has(ch))\n return false;\n }\n return segment.length > 0;\n}\nfunction isForwardStickyClusterSegment(segment) {\n if (isEscapedQuoteClusterSegment(segment))\n return true;\n for (const ch of segment) {\n if (!kinsokuEnd.has(ch) && !forwardStickyGlue.has(ch) && !combiningMarkRe.test(ch))\n return false;\n }\n return segment.length > 0;\n}\nfunction isEscapedQuoteClusterSegment(segment) {\n let sawQuote = false;\n for (const ch of segment) {\n if (ch === '\\\\' || combiningMarkRe.test(ch))\n continue;\n if (kinsokuEnd.has(ch) || leftStickyPunctuation.has(ch) || forwardStickyGlue.has(ch)) {\n sawQuote = true;\n continue;\n }\n return false;\n }\n return sawQuote;\n}\nfunction previousCodePointStart(text, end) {\n const last = end - 1;\n if (last <= 0)\n return Math.max(last, 0);\n const lastCodeUnit = text.charCodeAt(last);\n if (lastCodeUnit < 0xDC00 || lastCodeUnit > 0xDFFF)\n return last;\n const maybeHigh = last - 1;\n if (maybeHigh < 0)\n return last;\n const highCodeUnit = text.charCodeAt(maybeHigh);\n return highCodeUnit >= 0xD800 && highCodeUnit <= 0xDBFF ? maybeHigh : last;\n}\nfunction getLastCodePoint(text) {\n if (text.length === 0)\n return null;\n const start = previousCodePointStart(text, text.length);\n return text.slice(start);\n}\nfunction splitTrailingForwardStickyCluster(text) {\n const chars = Array.from(text);\n let splitIndex = chars.length;\n while (splitIndex > 0) {\n const ch = chars[splitIndex - 1];\n if (combiningMarkRe.test(ch)) {\n splitIndex--;\n continue;\n }\n if (kinsokuEnd.has(ch) || forwardStickyGlue.has(ch)) {\n splitIndex--;\n continue;\n }\n break;\n }\n if (splitIndex <= 0 || splitIndex === chars.length)\n return null;\n return {\n head: chars.slice(0, splitIndex).join(''),\n tail: chars.slice(splitIndex).join(''),\n };\n}\nfunction getRepeatableSingleCharRunChar(text, isWordLike, kind) {\n return kind === 'text' && !isWordLike && text.length === 1 && text !== '-' && text !== '—'\n ? text\n : null;\n}\nfunction materializeDeferredSingleCharRun(texts, chars, lengths, index) {\n const ch = chars[index];\n const text = texts[index];\n if (ch == null)\n return text;\n const length = lengths[index];\n if (text.length === length)\n return text;\n const materialized = ch.repeat(length);\n texts[index] = materialized;\n return materialized;\n}\nfunction hasArabicNoSpacePunctuation(containsArabic, lastCodePoint) {\n return containsArabic && lastCodePoint !== null && arabicNoSpaceTrailingPunctuation.has(lastCodePoint);\n}\nfunction endsWithMyanmarMedialGlue(segment) {\n const lastCodePoint = getLastCodePoint(segment);\n return lastCodePoint !== null && myanmarMedialGlue.has(lastCodePoint);\n}\nfunction splitLeadingSpaceAndMarks(segment) {\n if (segment.length < 2 || segment[0] !== ' ')\n return null;\n const marks = segment.slice(1);\n if (/^\\p{M}+$/u.test(marks)) {\n return { space: ' ', marks };\n }\n return null;\n}\nexport function endsWithClosingQuote(text) {\n let end = text.length;\n while (end > 0) {\n const start = previousCodePointStart(text, end);\n const ch = text.slice(start, end);\n if (closingQuoteChars.has(ch))\n return true;\n if (!leftStickyPunctuation.has(ch))\n return false;\n end = start;\n }\n return false;\n}\nfunction classifySegmentBreakChar(ch, whiteSpaceProfile) {\n if (whiteSpaceProfile.preserveOrdinarySpaces || whiteSpaceProfile.preserveHardBreaks) {\n if (ch === ' ')\n return 'preserved-space';\n if (ch === '\\t')\n return 'tab';\n if (whiteSpaceProfile.preserveHardBreaks && ch === '\\n')\n return 'hard-break';\n }\n if (ch === ' ')\n return 'space';\n if (ch === '\\u00A0' || ch === '\\u202F' || ch === '\\u2060' || ch === '\\uFEFF') {\n return 'glue';\n }\n if (ch === '\\u200B')\n return 'zero-width-break';\n if (ch === '\\u00AD')\n return 'soft-hyphen';\n return 'text';\n}\n// All characters that classifySegmentBreakChar maps to a non-'text' kind.\nconst breakCharRe = /[\\x20\\t\\n\\xA0\\xAD\\u200B\\u202F\\u2060\\uFEFF]/;\nfunction joinTextParts(parts) {\n return parts.length === 1 ? parts[0] : parts.join('');\n}\nfunction joinReversedPrefixParts(prefixParts, tail) {\n const parts = [];\n for (let i = prefixParts.length - 1; i >= 0; i--) {\n parts.push(prefixParts[i]);\n }\n parts.push(tail);\n return joinTextParts(parts);\n}\nfunction splitSegmentByBreakKind(segment, isWordLike, start, whiteSpaceProfile) {\n if (!breakCharRe.test(segment)) {\n return [{ text: segment, isWordLike, kind: 'text', start }];\n }\n const pieces = [];\n let currentKind = null;\n let currentTextParts = [];\n let currentStart = start;\n let currentWordLike = false;\n let offset = 0;\n for (const ch of segment) {\n const kind = classifySegmentBreakChar(ch, whiteSpaceProfile);\n const wordLike = kind === 'text' && isWordLike;\n if (currentKind !== null && kind === currentKind && wordLike === currentWordLike) {\n currentTextParts.push(ch);\n offset += ch.length;\n continue;\n }\n if (currentKind !== null) {\n pieces.push({\n text: joinTextParts(currentTextParts),\n isWordLike: currentWordLike,\n kind: currentKind,\n start: currentStart,\n });\n }\n currentKind = kind;\n currentTextParts = [ch];\n currentStart = start + offset;\n currentWordLike = wordLike;\n offset += ch.length;\n }\n if (currentKind !== null) {\n pieces.push({\n text: joinTextParts(currentTextParts),\n isWordLike: currentWordLike,\n kind: currentKind,\n start: currentStart,\n });\n }\n return pieces;\n}\nfunction isTextRunBoundary(kind) {\n return (kind === 'space' ||\n kind === 'preserved-space' ||\n kind === 'zero-width-break' ||\n kind === 'hard-break');\n}\nconst urlSchemeSegmentRe = /^[A-Za-z][A-Za-z0-9+.-]*:$/;\nfunction isUrlLikeRunStart(segmentation, index) {\n const text = segmentation.texts[index];\n if (text.startsWith('www.'))\n return true;\n return (urlSchemeSegmentRe.test(text) &&\n index + 1 < segmentation.len &&\n segmentation.kinds[index + 1] === 'text' &&\n segmentation.texts[index + 1] === '//');\n}\nfunction isUrlQueryBoundarySegment(text) {\n return text.includes('?') && (text.includes('://') || text.startsWith('www.'));\n}\nfunction mergeUrlLikeRuns(segmentation) {\n const texts = segmentation.texts.slice();\n const isWordLike = segmentation.isWordLike.slice();\n const kinds = segmentation.kinds.slice();\n const starts = segmentation.starts.slice();\n for (let i = 0; i < segmentation.len; i++) {\n if (kinds[i] !== 'text' || !isUrlLikeRunStart(segmentation, i))\n continue;\n const mergedParts = [texts[i]];\n let j = i + 1;\n while (j < segmentation.len && !isTextRunBoundary(kinds[j])) {\n mergedParts.push(texts[j]);\n isWordLike[i] = true;\n const endsQueryPrefix = texts[j].includes('?');\n kinds[j] = 'text';\n texts[j] = '';\n j++;\n if (endsQueryPrefix)\n break;\n }\n texts[i] = joinTextParts(mergedParts);\n }\n let compactLen = 0;\n for (let read = 0; read < texts.length; read++) {\n const text = texts[read];\n if (text.length === 0)\n continue;\n if (compactLen !== read) {\n texts[compactLen] = text;\n isWordLike[compactLen] = isWordLike[read];\n kinds[compactLen] = kinds[read];\n starts[compactLen] = starts[read];\n }\n compactLen++;\n }\n texts.length = compactLen;\n isWordLike.length = compactLen;\n kinds.length = compactLen;\n starts.length = compactLen;\n return {\n len: compactLen,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction mergeUrlQueryRuns(segmentation) {\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n for (let i = 0; i < segmentation.len; i++) {\n const text = segmentation.texts[i];\n texts.push(text);\n isWordLike.push(segmentation.isWordLike[i]);\n kinds.push(segmentation.kinds[i]);\n starts.push(segmentation.starts[i]);\n if (!isUrlQueryBoundarySegment(text))\n continue;\n const nextIndex = i + 1;\n if (nextIndex >= segmentation.len ||\n isTextRunBoundary(segmentation.kinds[nextIndex])) {\n continue;\n }\n const queryParts = [];\n const queryStart = segmentation.starts[nextIndex];\n let j = nextIndex;\n while (j < segmentation.len && !isTextRunBoundary(segmentation.kinds[j])) {\n queryParts.push(segmentation.texts[j]);\n j++;\n }\n if (queryParts.length > 0) {\n texts.push(joinTextParts(queryParts));\n isWordLike.push(true);\n kinds.push('text');\n starts.push(queryStart);\n i = j - 1;\n }\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nconst numericJoinerChars = new Set([\n ':', '-', '/', '×', ',', '.', '+',\n '\\u2013',\n '\\u2014',\n]);\nconst asciiPunctuationChainSegmentRe = /^[A-Za-z0-9_]+[,:;]*$/;\nconst asciiPunctuationChainTrailingJoinersRe = /[,:;]+$/;\nfunction segmentContainsDecimalDigit(text) {\n for (const ch of text) {\n if (decimalDigitRe.test(ch))\n return true;\n }\n return false;\n}\nexport function isNumericRunSegment(text) {\n if (text.length === 0)\n return false;\n for (const ch of text) {\n if (decimalDigitRe.test(ch) || numericJoinerChars.has(ch))\n continue;\n return false;\n }\n return true;\n}\nfunction mergeNumericRuns(segmentation) {\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n for (let i = 0; i < segmentation.len; i++) {\n const text = segmentation.texts[i];\n const kind = segmentation.kinds[i];\n if (kind === 'text' && isNumericRunSegment(text) && segmentContainsDecimalDigit(text)) {\n const mergedParts = [text];\n let j = i + 1;\n while (j < segmentation.len &&\n segmentation.kinds[j] === 'text' &&\n isNumericRunSegment(segmentation.texts[j])) {\n mergedParts.push(segmentation.texts[j]);\n j++;\n }\n texts.push(joinTextParts(mergedParts));\n isWordLike.push(true);\n kinds.push('text');\n starts.push(segmentation.starts[i]);\n i = j - 1;\n continue;\n }\n texts.push(text);\n isWordLike.push(segmentation.isWordLike[i]);\n kinds.push(kind);\n starts.push(segmentation.starts[i]);\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction mergeAsciiPunctuationChains(segmentation) {\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n for (let i = 0; i < segmentation.len; i++) {\n const text = segmentation.texts[i];\n const kind = segmentation.kinds[i];\n const wordLike = segmentation.isWordLike[i];\n if (kind === 'text' && wordLike && asciiPunctuationChainSegmentRe.test(text)) {\n const mergedParts = [text];\n let endsWithJoiners = asciiPunctuationChainTrailingJoinersRe.test(text);\n let j = i + 1;\n while (endsWithJoiners &&\n j < segmentation.len &&\n segmentation.kinds[j] === 'text' &&\n segmentation.isWordLike[j] &&\n asciiPunctuationChainSegmentRe.test(segmentation.texts[j])) {\n const nextText = segmentation.texts[j];\n mergedParts.push(nextText);\n endsWithJoiners = asciiPunctuationChainTrailingJoinersRe.test(nextText);\n j++;\n }\n texts.push(joinTextParts(mergedParts));\n isWordLike.push(true);\n kinds.push('text');\n starts.push(segmentation.starts[i]);\n i = j - 1;\n continue;\n }\n texts.push(text);\n isWordLike.push(wordLike);\n kinds.push(kind);\n starts.push(segmentation.starts[i]);\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction splitHyphenatedNumericRuns(segmentation) {\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n for (let i = 0; i < segmentation.len; i++) {\n const text = segmentation.texts[i];\n if (segmentation.kinds[i] === 'text' && text.includes('-')) {\n const parts = text.split('-');\n let shouldSplit = parts.length > 1;\n for (let j = 0; j < parts.length; j++) {\n const part = parts[j];\n if (!shouldSplit)\n break;\n if (part.length === 0 ||\n !segmentContainsDecimalDigit(part) ||\n !isNumericRunSegment(part)) {\n shouldSplit = false;\n }\n }\n if (shouldSplit) {\n let offset = 0;\n for (let j = 0; j < parts.length; j++) {\n const part = parts[j];\n const splitText = j < parts.length - 1 ? `${part}-` : part;\n texts.push(splitText);\n isWordLike.push(true);\n kinds.push('text');\n starts.push(segmentation.starts[i] + offset);\n offset += splitText.length;\n }\n continue;\n }\n }\n texts.push(text);\n isWordLike.push(segmentation.isWordLike[i]);\n kinds.push(segmentation.kinds[i]);\n starts.push(segmentation.starts[i]);\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction mergeGlueConnectedTextRuns(segmentation) {\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n let read = 0;\n while (read < segmentation.len) {\n const textParts = [segmentation.texts[read]];\n let wordLike = segmentation.isWordLike[read];\n let kind = segmentation.kinds[read];\n let start = segmentation.starts[read];\n if (kind === 'glue') {\n const glueParts = [textParts[0]];\n const glueStart = start;\n read++;\n while (read < segmentation.len && segmentation.kinds[read] === 'glue') {\n glueParts.push(segmentation.texts[read]);\n read++;\n }\n const glueText = joinTextParts(glueParts);\n if (read < segmentation.len && segmentation.kinds[read] === 'text') {\n textParts[0] = glueText;\n textParts.push(segmentation.texts[read]);\n wordLike = segmentation.isWordLike[read];\n kind = 'text';\n start = glueStart;\n read++;\n }\n else {\n texts.push(glueText);\n isWordLike.push(false);\n kinds.push('glue');\n starts.push(glueStart);\n continue;\n }\n }\n else {\n read++;\n }\n if (kind === 'text') {\n while (read < segmentation.len && segmentation.kinds[read] === 'glue') {\n const glueParts = [];\n while (read < segmentation.len && segmentation.kinds[read] === 'glue') {\n glueParts.push(segmentation.texts[read]);\n read++;\n }\n const glueText = joinTextParts(glueParts);\n if (read < segmentation.len && segmentation.kinds[read] === 'text') {\n textParts.push(glueText, segmentation.texts[read]);\n wordLike = wordLike || segmentation.isWordLike[read];\n read++;\n continue;\n }\n textParts.push(glueText);\n }\n }\n texts.push(joinTextParts(textParts));\n isWordLike.push(wordLike);\n kinds.push(kind);\n starts.push(start);\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction carryTrailingForwardStickyAcrossCJKBoundary(segmentation) {\n const texts = segmentation.texts.slice();\n const isWordLike = segmentation.isWordLike.slice();\n const kinds = segmentation.kinds.slice();\n const starts = segmentation.starts.slice();\n for (let i = 0; i < texts.length - 1; i++) {\n if (kinds[i] !== 'text' || kinds[i + 1] !== 'text')\n continue;\n if (!isCJK(texts[i]) || !isCJK(texts[i + 1]))\n continue;\n const split = splitTrailingForwardStickyCluster(texts[i]);\n if (split === null)\n continue;\n texts[i] = split.head;\n texts[i + 1] = split.tail + texts[i + 1];\n starts[i + 1] = starts[i] + split.head.length;\n }\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nfunction buildMergedSegmentation(normalized, profile, whiteSpaceProfile) {\n const wordSegmenter = getSharedWordSegmenter();\n let mergedLen = 0;\n const mergedTexts = [];\n const mergedTextParts = [];\n const mergedWordLike = [];\n const mergedKinds = [];\n const mergedStarts = [];\n // Track repeatable single-char punctuation runs structurally so identical\n // merges stay O(1) instead of re-scanning the accumulated segment each time.\n const mergedSingleCharRunChars = [];\n const mergedSingleCharRunLengths = [];\n const mergedContainsCJK = [];\n const mergedContainsArabicScript = [];\n const mergedEndsWithClosingQuote = [];\n const mergedEndsWithMyanmarMedialGlue = [];\n const mergedHasArabicNoSpacePunctuation = [];\n for (const s of wordSegmenter.segment(normalized)) {\n for (const piece of splitSegmentByBreakKind(s.segment, s.isWordLike ?? false, s.index, whiteSpaceProfile)) {\n const isText = piece.kind === 'text';\n const repeatableSingleCharRunChar = getRepeatableSingleCharRunChar(piece.text, piece.isWordLike, piece.kind);\n const pieceContainsCJK = isCJK(piece.text);\n const pieceContainsArabicScript = containsArabicScript(piece.text);\n const pieceLastCodePoint = getLastCodePoint(piece.text);\n const pieceEndsWithClosingQuote = endsWithClosingQuote(piece.text);\n const pieceEndsWithMyanmarMedialGlue = endsWithMyanmarMedialGlue(piece.text);\n const prevIndex = mergedLen - 1;\n function appendPieceToPrevious() {\n if (mergedSingleCharRunChars[prevIndex] !== null) {\n mergedTextParts[prevIndex] = [\n materializeDeferredSingleCharRun(mergedTexts, mergedSingleCharRunChars, mergedSingleCharRunLengths, prevIndex),\n ];\n mergedSingleCharRunChars[prevIndex] = null;\n }\n mergedTextParts[prevIndex].push(piece.text);\n mergedWordLike[prevIndex] = mergedWordLike[prevIndex] || piece.isWordLike;\n mergedContainsCJK[prevIndex] = mergedContainsCJK[prevIndex] || pieceContainsCJK;\n mergedContainsArabicScript[prevIndex] =\n mergedContainsArabicScript[prevIndex] || pieceContainsArabicScript;\n mergedEndsWithClosingQuote[prevIndex] = pieceEndsWithClosingQuote;\n mergedEndsWithMyanmarMedialGlue[prevIndex] = pieceEndsWithMyanmarMedialGlue;\n mergedHasArabicNoSpacePunctuation[prevIndex] = hasArabicNoSpacePunctuation(mergedContainsArabicScript[prevIndex], pieceLastCodePoint);\n }\n // First-pass keeps: no-space script-specific joins and punctuation glue\n // that depend on the immediately preceding text run.\n if (profile.carryCJKAfterClosingQuote &&\n isText &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n pieceContainsCJK &&\n mergedContainsCJK[prevIndex] &&\n mergedEndsWithClosingQuote[prevIndex]) {\n appendPieceToPrevious();\n }\n else if (isText &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n isCJKLineStartProhibitedSegment(piece.text) &&\n mergedContainsCJK[prevIndex]) {\n appendPieceToPrevious();\n }\n else if (isText &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n mergedEndsWithMyanmarMedialGlue[prevIndex]) {\n appendPieceToPrevious();\n }\n else if (isText &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n piece.isWordLike &&\n pieceContainsArabicScript &&\n mergedHasArabicNoSpacePunctuation[prevIndex]) {\n appendPieceToPrevious();\n mergedWordLike[prevIndex] = true;\n }\n else if (repeatableSingleCharRunChar !== null &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n mergedSingleCharRunChars[prevIndex] === repeatableSingleCharRunChar) {\n mergedSingleCharRunLengths[prevIndex] = (mergedSingleCharRunLengths[prevIndex] ?? 1) + 1;\n }\n else if (isText &&\n !piece.isWordLike &&\n mergedLen > 0 &&\n mergedKinds[prevIndex] === 'text' &&\n !mergedContainsCJK[prevIndex] &&\n (isLeftStickyPunctuationSegment(piece.text) ||\n (piece.text === '-' && mergedWordLike[prevIndex]))) {\n appendPieceToPrevious();\n }\n else {\n mergedTexts[mergedLen] = piece.text;\n mergedTextParts[mergedLen] = [piece.text];\n mergedWordLike[mergedLen] = piece.isWordLike;\n mergedKinds[mergedLen] = piece.kind;\n mergedStarts[mergedLen] = piece.start;\n mergedSingleCharRunChars[mergedLen] = repeatableSingleCharRunChar;\n mergedSingleCharRunLengths[mergedLen] = repeatableSingleCharRunChar === null ? 0 : 1;\n mergedContainsCJK[mergedLen] = pieceContainsCJK;\n mergedContainsArabicScript[mergedLen] = pieceContainsArabicScript;\n mergedEndsWithClosingQuote[mergedLen] = pieceEndsWithClosingQuote;\n mergedEndsWithMyanmarMedialGlue[mergedLen] = pieceEndsWithMyanmarMedialGlue;\n mergedHasArabicNoSpacePunctuation[mergedLen] = hasArabicNoSpacePunctuation(pieceContainsArabicScript, pieceLastCodePoint);\n mergedLen++;\n }\n }\n }\n for (let i = 0; i < mergedLen; i++) {\n if (mergedSingleCharRunChars[i] !== null) {\n mergedTexts[i] = materializeDeferredSingleCharRun(mergedTexts, mergedSingleCharRunChars, mergedSingleCharRunLengths, i);\n continue;\n }\n mergedTexts[i] = joinTextParts(mergedTextParts[i]);\n }\n // Later passes operate on the merged text stream itself: contextual escaped\n // quote glue, forward-sticky carry, compaction, then the broader URL/numeric\n // and Arabic-leading-mark fixes.\n for (let i = 1; i < mergedLen; i++) {\n if (mergedKinds[i] === 'text' &&\n !mergedWordLike[i] &&\n isEscapedQuoteClusterSegment(mergedTexts[i]) &&\n mergedKinds[i - 1] === 'text' &&\n !mergedContainsCJK[i - 1]) {\n mergedTexts[i - 1] += mergedTexts[i];\n mergedWordLike[i - 1] = mergedWordLike[i - 1] || mergedWordLike[i];\n mergedTexts[i] = '';\n }\n }\n const forwardStickyPrefixParts = Array.from({ length: mergedLen }, () => null);\n let nextLiveIndex = -1;\n for (let i = mergedLen - 1; i >= 0; i--) {\n const text = mergedTexts[i];\n if (text.length === 0)\n continue;\n if (mergedKinds[i] === 'text' &&\n !mergedWordLike[i] &&\n isForwardStickyClusterSegment(text) &&\n nextLiveIndex >= 0 &&\n mergedKinds[nextLiveIndex] === 'text') {\n const prefixParts = forwardStickyPrefixParts[nextLiveIndex] ?? [];\n prefixParts.push(text);\n forwardStickyPrefixParts[nextLiveIndex] = prefixParts;\n mergedStarts[nextLiveIndex] = mergedStarts[i];\n mergedTexts[i] = '';\n continue;\n }\n nextLiveIndex = i;\n }\n for (let i = 0; i < mergedLen; i++) {\n const prefixParts = forwardStickyPrefixParts[i];\n if (prefixParts == null)\n continue;\n mergedTexts[i] = joinReversedPrefixParts(prefixParts, mergedTexts[i]);\n }\n let compactLen = 0;\n for (let read = 0; read < mergedLen; read++) {\n const text = mergedTexts[read];\n if (text.length === 0)\n continue;\n if (compactLen !== read) {\n mergedTexts[compactLen] = text;\n mergedWordLike[compactLen] = mergedWordLike[read];\n mergedKinds[compactLen] = mergedKinds[read];\n mergedStarts[compactLen] = mergedStarts[read];\n }\n compactLen++;\n }\n mergedTexts.length = compactLen;\n mergedWordLike.length = compactLen;\n mergedKinds.length = compactLen;\n mergedStarts.length = compactLen;\n const compacted = mergeGlueConnectedTextRuns({\n len: compactLen,\n texts: mergedTexts,\n isWordLike: mergedWordLike,\n kinds: mergedKinds,\n starts: mergedStarts,\n });\n const withMergedUrls = carryTrailingForwardStickyAcrossCJKBoundary(mergeAsciiPunctuationChains(splitHyphenatedNumericRuns(mergeNumericRuns(mergeUrlQueryRuns(mergeUrlLikeRuns(compacted))))));\n for (let i = 0; i < withMergedUrls.len - 1; i++) {\n const split = splitLeadingSpaceAndMarks(withMergedUrls.texts[i]);\n if (split === null)\n continue;\n if ((withMergedUrls.kinds[i] !== 'space' && withMergedUrls.kinds[i] !== 'preserved-space') ||\n withMergedUrls.kinds[i + 1] !== 'text' ||\n !containsArabicScript(withMergedUrls.texts[i + 1])) {\n continue;\n }\n withMergedUrls.texts[i] = split.space;\n withMergedUrls.isWordLike[i] = false;\n withMergedUrls.kinds[i] = withMergedUrls.kinds[i] === 'preserved-space' ? 'preserved-space' : 'space';\n withMergedUrls.texts[i + 1] = split.marks + withMergedUrls.texts[i + 1];\n withMergedUrls.starts[i + 1] = withMergedUrls.starts[i] + split.space.length;\n }\n return withMergedUrls;\n}\nfunction compileAnalysisChunks(segmentation, whiteSpaceProfile) {\n if (segmentation.len === 0)\n return [];\n if (!whiteSpaceProfile.preserveHardBreaks) {\n return [{\n startSegmentIndex: 0,\n endSegmentIndex: segmentation.len,\n consumedEndSegmentIndex: segmentation.len,\n }];\n }\n const chunks = [];\n let startSegmentIndex = 0;\n for (let i = 0; i < segmentation.len; i++) {\n if (segmentation.kinds[i] !== 'hard-break')\n continue;\n chunks.push({\n startSegmentIndex,\n endSegmentIndex: i,\n consumedEndSegmentIndex: i + 1,\n });\n startSegmentIndex = i + 1;\n }\n if (startSegmentIndex < segmentation.len) {\n chunks.push({\n startSegmentIndex,\n endSegmentIndex: segmentation.len,\n consumedEndSegmentIndex: segmentation.len,\n });\n }\n return chunks;\n}\nfunction mergeKeepAllTextSegments(segmentation) {\n if (segmentation.len <= 1)\n return segmentation;\n const texts = [];\n const isWordLike = [];\n const kinds = [];\n const starts = [];\n let pendingTextParts = null;\n let pendingWordLike = false;\n let pendingStart = 0;\n let pendingContainsCJK = false;\n let pendingCanContinue = false;\n function flushPendingText() {\n if (pendingTextParts === null)\n return;\n texts.push(joinTextParts(pendingTextParts));\n isWordLike.push(pendingWordLike);\n kinds.push('text');\n starts.push(pendingStart);\n pendingTextParts = null;\n }\n for (let i = 0; i < segmentation.len; i++) {\n const text = segmentation.texts[i];\n const kind = segmentation.kinds[i];\n const wordLike = segmentation.isWordLike[i];\n const start = segmentation.starts[i];\n if (kind === 'text') {\n const textContainsCJK = containsCJKText(text);\n const textCanContinue = canContinueKeepAllTextRun(text);\n if (pendingTextParts !== null && pendingContainsCJK && pendingCanContinue) {\n pendingTextParts.push(text);\n pendingWordLike = pendingWordLike || wordLike;\n pendingContainsCJK = pendingContainsCJK || textContainsCJK;\n pendingCanContinue = textCanContinue;\n continue;\n }\n flushPendingText();\n pendingTextParts = [text];\n pendingWordLike = wordLike;\n pendingStart = start;\n pendingContainsCJK = textContainsCJK;\n pendingCanContinue = textCanContinue;\n continue;\n }\n flushPendingText();\n texts.push(text);\n isWordLike.push(wordLike);\n kinds.push(kind);\n starts.push(start);\n }\n flushPendingText();\n return {\n len: texts.length,\n texts,\n isWordLike,\n kinds,\n starts,\n };\n}\nexport function analyzeText(text, profile, whiteSpace = 'normal', wordBreak = 'normal') {\n const whiteSpaceProfile = getWhiteSpaceProfile(whiteSpace);\n const normalized = whiteSpaceProfile.mode === 'pre-wrap'\n ? normalizeWhitespacePreWrap(text)\n : normalizeWhitespaceNormal(text);\n if (normalized.length === 0) {\n return {\n normalized,\n chunks: [],\n len: 0,\n texts: [],\n isWordLike: [],\n kinds: [],\n starts: [],\n };\n }\n const segmentation = wordBreak === 'keep-all'\n ? mergeKeepAllTextSegments(buildMergedSegmentation(normalized, profile, whiteSpaceProfile))\n : buildMergedSegmentation(normalized, profile, whiteSpaceProfile);\n return {\n normalized,\n chunks: compileAnalysisChunks(segmentation, whiteSpaceProfile),\n ...segmentation,\n };\n}\n","import { isCJK } from './analysis.js';\nlet measureContext = null;\nconst segmentMetricCaches = new Map();\nlet cachedEngineProfile = null;\n// Safari's prefix-fit policy is useful for ordinary word-sized runs, but letting\n// it measure every growing prefix of a giant segment recreates a pathological\n// superlinear prepare-time path. Past this size, switch to the cheaper\n// pair-context model and keep the public behavior linear.\nconst MAX_PREFIX_FIT_GRAPHEMES = 96;\nconst emojiPresentationRe = /\\p{Emoji_Presentation}/u;\nconst maybeEmojiRe = /[\\p{Emoji_Presentation}\\p{Extended_Pictographic}\\p{Regional_Indicator}\\uFE0F\\u20E3]/u;\nlet sharedGraphemeSegmenter = null;\nconst emojiCorrectionCache = new Map();\nexport function getMeasureContext() {\n if (measureContext !== null)\n return measureContext;\n if (typeof OffscreenCanvas !== 'undefined') {\n measureContext = new OffscreenCanvas(1, 1).getContext('2d');\n return measureContext;\n }\n if (typeof document !== 'undefined') {\n measureContext = document.createElement('canvas').getContext('2d');\n return measureContext;\n }\n throw new Error('Text measurement requires OffscreenCanvas or a DOM canvas context.');\n}\nexport function getSegmentMetricCache(font) {\n let cache = segmentMetricCaches.get(font);\n if (!cache) {\n cache = new Map();\n segmentMetricCaches.set(font, cache);\n }\n return cache;\n}\nexport function getSegmentMetrics(seg, cache) {\n let metrics = cache.get(seg);\n if (metrics === undefined) {\n const ctx = getMeasureContext();\n metrics = {\n width: ctx.measureText(seg).width,\n containsCJK: isCJK(seg),\n };\n cache.set(seg, metrics);\n }\n return metrics;\n}\nexport function getEngineProfile() {\n if (cachedEngineProfile !== null)\n return cachedEngineProfile;\n if (typeof navigator === 'undefined') {\n cachedEngineProfile = {\n lineFitEpsilon: 0.005,\n carryCJKAfterClosingQuote: false,\n preferPrefixWidthsForBreakableRuns: false,\n preferEarlySoftHyphenBreak: false,\n };\n return cachedEngineProfile;\n }\n const ua = navigator.userAgent;\n const vendor = navigator.vendor;\n const isSafari = vendor === 'Apple Computer, Inc.' &&\n ua.includes('Safari/') &&\n !ua.includes('Chrome/') &&\n !ua.includes('Chromium/') &&\n !ua.includes('CriOS/') &&\n !ua.includes('FxiOS/') &&\n !ua.includes('EdgiOS/');\n const isChromium = ua.includes('Chrome/') ||\n ua.includes('Chromium/') ||\n ua.includes('CriOS/') ||\n ua.includes('Edg/');\n cachedEngineProfile = {\n lineFitEpsilon: isSafari ? 1 / 64 : 0.005,\n carryCJKAfterClosingQuote: isChromium,\n preferPrefixWidthsForBreakableRuns: isSafari,\n preferEarlySoftHyphenBreak: isSafari,\n };\n return cachedEngineProfile;\n}\nexport function parseFontSize(font) {\n const m = font.match(/(\\d+(?:\\.\\d+)?)\\s*px/);\n return m ? parseFloat(m[1]) : 16;\n}\nfunction getSharedGraphemeSegmenter() {\n if (sharedGraphemeSegmenter === null) {\n sharedGraphemeSegmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n }\n return sharedGraphemeSegmenter;\n}\nfunction isEmojiGrapheme(g) {\n return emojiPresentationRe.test(g) || g.includes('\\uFE0F');\n}\nexport function textMayContainEmoji(text) {\n return maybeEmojiRe.test(text);\n}\nfunction getEmojiCorrection(font, fontSize) {\n let correction = emojiCorrectionCache.get(font);\n if (correction !== undefined)\n return correction;\n const ctx = getMeasureContext();\n ctx.font = font;\n const canvasW = ctx.measureText('\\u{1F600}').width;\n correction = 0;\n if (canvasW > fontSize + 0.5 &&\n typeof document !== 'undefined' &&\n document.body !== null) {\n const span = document.createElement('span');\n span.style.font = font;\n span.style.display = 'inline-block';\n span.style.visibility = 'hidden';\n span.style.position = 'absolute';\n span.textContent = '\\u{1F600}';\n document.body.appendChild(span);\n const domW = span.getBoundingClientRect().width;\n document.body.removeChild(span);\n if (canvasW - domW > 0.5) {\n correction = canvasW - domW;\n }\n }\n emojiCorrectionCache.set(font, correction);\n return correction;\n}\nfunction countEmojiGraphemes(text) {\n let count = 0;\n const graphemeSegmenter = getSharedGraphemeSegmenter();\n for (const g of graphemeSegmenter.segment(text)) {\n if (isEmojiGrapheme(g.segment))\n count++;\n }\n return count;\n}\nfunction getEmojiCount(seg, metrics) {\n if (metrics.emojiCount === undefined) {\n metrics.emojiCount = countEmojiGraphemes(seg);\n }\n return metrics.emojiCount;\n}\nexport function getCorrectedSegmentWidth(seg, metrics, emojiCorrection) {\n if (emojiCorrection === 0)\n return metrics.width;\n return metrics.width - getEmojiCount(seg, metrics) * emojiCorrection;\n}\nexport function getSegmentGraphemeWidths(seg, cache, emojiCorrection) {\n const widths = [];\n const graphemeSegmenter = getSharedGraphemeSegmenter();\n for (const gs of graphemeSegmenter.segment(seg)) {\n const graphemeMetrics = getSegmentMetrics(gs.segment, cache);\n widths.push(getCorrectedSegmentWidth(gs.segment, graphemeMetrics, emojiCorrection));\n }\n return widths.length > 1 ? widths : null;\n}\nexport function getSegmentBreakableFitAdvances(seg, metrics, cache, emojiCorrection, mode) {\n if (metrics.breakableFitAdvances !== undefined && metrics.breakableFitMode === mode) {\n return metrics.breakableFitAdvances;\n }\n metrics.breakableFitMode = mode;\n const graphemeSegmenter = getSharedGraphemeSegmenter();\n const graphemes = [];\n for (const gs of graphemeSegmenter.segment(seg)) {\n graphemes.push(gs.segment);\n }\n if (graphemes.length <= 1) {\n metrics.breakableFitAdvances = null;\n return metrics.breakableFitAdvances;\n }\n if (mode === 'sum-graphemes') {\n const advances = [];\n for (const grapheme of graphemes) {\n const graphemeMetrics = getSegmentMetrics(grapheme, cache);\n advances.push(getCorrectedSegmentWidth(grapheme, graphemeMetrics, emojiCorrection));\n }\n metrics.breakableFitAdvances = advances;\n return metrics.breakableFitAdvances;\n }\n if (mode === 'pair-context' || graphemes.length > MAX_PREFIX_FIT_GRAPHEMES) {\n const advances = [];\n let previousGrapheme = null;\n let previousWidth = 0;\n for (const grapheme of graphemes) {\n const graphemeMetrics = getSegmentMetrics(grapheme, cache);\n const currentWidth = getCorrectedSegmentWidth(grapheme, graphemeMetrics, emojiCorrection);\n if (previousGrapheme === null) {\n advances.push(currentWidth);\n }\n else {\n const pair = previousGrapheme + grapheme;\n const pairMetrics = getSegmentMetrics(pair, cache);\n advances.push(getCorrectedSegmentWidth(pair, pairMetrics, emojiCorrection) - previousWidth);\n }\n previousGrapheme = grapheme;\n previousWidth = currentWidth;\n }\n metrics.breakableFitAdvances = advances;\n return metrics.breakableFitAdvances;\n }\n const advances = [];\n let prefix = '';\n let prefixWidth = 0;\n for (const grapheme of graphemes) {\n prefix += grapheme;\n const prefixMetrics = getSegmentMetrics(prefix, cache);\n const nextPrefixWidth = getCorrectedSegmentWidth(prefix, prefixMetrics, emojiCorrection);\n advances.push(nextPrefixWidth - prefixWidth);\n prefixWidth = nextPrefixWidth;\n }\n metrics.breakableFitAdvances = advances;\n return metrics.breakableFitAdvances;\n}\nexport function getFontMeasurementState(font, needsEmojiCorrection) {\n const ctx = getMeasureContext();\n ctx.font = font;\n const cache = getSegmentMetricCache(font);\n const fontSize = parseFontSize(font);\n const emojiCorrection = needsEmojiCorrection ? getEmojiCorrection(font, fontSize) : 0;\n return { cache, fontSize, emojiCorrection };\n}\nexport function clearMeasurementCaches() {\n segmentMetricCaches.clear();\n emojiCorrectionCache.clear();\n sharedGraphemeSegmenter = null;\n}\n","import { getEngineProfile } from './measurement.js';\nfunction consumesAtLineStart(kind) {\n return kind === 'space' || kind === 'zero-width-break' || kind === 'soft-hyphen';\n}\nfunction breaksAfter(kind) {\n return (kind === 'space' ||\n kind === 'preserved-space' ||\n kind === 'tab' ||\n kind === 'zero-width-break' ||\n kind === 'soft-hyphen');\n}\nfunction normalizeLineStartSegmentIndex(prepared, segmentIndex, endSegmentIndex = prepared.widths.length) {\n while (segmentIndex < endSegmentIndex) {\n const kind = prepared.kinds[segmentIndex];\n if (!consumesAtLineStart(kind))\n break;\n segmentIndex++;\n }\n return segmentIndex;\n}\nfunction getTabAdvance(lineWidth, tabStopAdvance) {\n if (tabStopAdvance <= 0)\n return 0;\n const remainder = lineWidth % tabStopAdvance;\n if (Math.abs(remainder) <= 1e-6)\n return tabStopAdvance;\n return tabStopAdvance - remainder;\n}\nfunction getLeadingLetterSpacing(prepared, hasContent, segmentIndex) {\n return (prepared.letterSpacing !== 0 &&\n hasContent &&\n prepared.spacingGraphemeCounts[segmentIndex] > 0)\n ? prepared.letterSpacing\n : 0;\n}\nfunction getLineEndContribution(leadingSpacing, segmentContribution) {\n return segmentContribution === 0 ? 0 : leadingSpacing + segmentContribution;\n}\nfunction getTabTrailingLetterSpacing(prepared, segmentIndex) {\n return (prepared.letterSpacing !== 0 &&\n prepared.spacingGraphemeCounts[segmentIndex] > 0)\n ? prepared.letterSpacing\n : 0;\n}\nfunction getWholeSegmentFitContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth) {\n const segmentContribution = kind === 'tab'\n ? segmentWidth + getTabTrailingLetterSpacing(prepared, segmentIndex)\n : prepared.lineEndFitAdvances[segmentIndex];\n return getLineEndContribution(leadingSpacing, segmentContribution);\n}\nfunction getBreakOpportunityFitContribution(prepared, kind, segmentIndex, leadingSpacing) {\n const segmentContribution = kind === 'tab' ? 0 : prepared.lineEndFitAdvances[segmentIndex];\n return getLineEndContribution(leadingSpacing, segmentContribution);\n}\nfunction getLineEndPaintContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth) {\n const segmentContribution = kind === 'tab' ? segmentWidth : prepared.lineEndPaintAdvances[segmentIndex];\n return getLineEndContribution(leadingSpacing, segmentContribution);\n}\nfunction getBreakableGraphemeAdvance(prepared, hasContent, baseAdvance) {\n return prepared.letterSpacing !== 0 && hasContent\n ? baseAdvance + prepared.letterSpacing\n : baseAdvance;\n}\nfunction getBreakableCandidateFitWidth(prepared, candidatePaintWidth) {\n return prepared.letterSpacing === 0\n ? candidatePaintWidth\n : candidatePaintWidth + prepared.letterSpacing;\n}\nfunction fitSoftHyphenBreak(graphemeFitAdvances, initialWidth, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, letterSpacing) {\n let fitCount = 0;\n let fittedWidth = initialWidth;\n while (fitCount < graphemeFitAdvances.length) {\n const nextWidth = fittedWidth + graphemeFitAdvances[fitCount] + letterSpacing;\n const nextLineWidth = fitCount + 1 < graphemeFitAdvances.length\n ? nextWidth + discretionaryHyphenWidth\n : nextWidth;\n if (nextLineWidth > maxWidth + lineFitEpsilon)\n break;\n fittedWidth = nextWidth;\n fitCount++;\n }\n return { fitCount, fittedWidth };\n}\nfunction findChunkIndexForStart(prepared, segmentIndex) {\n let lo = 0;\n let hi = prepared.chunks.length;\n while (lo < hi) {\n const mid = Math.floor((lo + hi) / 2);\n if (segmentIndex < prepared.chunks[mid].consumedEndSegmentIndex) {\n hi = mid;\n }\n else {\n lo = mid + 1;\n }\n }\n return lo < prepared.chunks.length ? lo : -1;\n}\nfunction normalizeLineStartInChunk(prepared, chunkIndex, cursor) {\n let segmentIndex = cursor.segmentIndex;\n if (cursor.graphemeIndex > 0)\n return chunkIndex;\n const chunk = prepared.chunks[chunkIndex];\n if (chunk.startSegmentIndex === chunk.endSegmentIndex && segmentIndex === chunk.startSegmentIndex) {\n cursor.segmentIndex = segmentIndex;\n cursor.graphemeIndex = 0;\n return chunkIndex;\n }\n if (segmentIndex < chunk.startSegmentIndex)\n segmentIndex = chunk.startSegmentIndex;\n segmentIndex = normalizeLineStartSegmentIndex(prepared, segmentIndex, chunk.endSegmentIndex);\n if (segmentIndex < chunk.endSegmentIndex) {\n cursor.segmentIndex = segmentIndex;\n cursor.graphemeIndex = 0;\n return chunkIndex;\n }\n if (chunk.consumedEndSegmentIndex >= prepared.widths.length)\n return -1;\n cursor.segmentIndex = chunk.consumedEndSegmentIndex;\n cursor.graphemeIndex = 0;\n return chunkIndex + 1;\n}\nfunction normalizeLineStartChunkIndex(prepared, cursor) {\n if (cursor.segmentIndex >= prepared.widths.length)\n return -1;\n const chunkIndex = findChunkIndexForStart(prepared, cursor.segmentIndex);\n if (chunkIndex < 0)\n return -1;\n return normalizeLineStartInChunk(prepared, chunkIndex, cursor);\n}\nfunction normalizeLineStartChunkIndexFromHint(prepared, chunkIndex, cursor) {\n if (cursor.segmentIndex >= prepared.widths.length)\n return -1;\n let nextChunkIndex = chunkIndex;\n while (nextChunkIndex < prepared.chunks.length &&\n cursor.segmentIndex >= prepared.chunks[nextChunkIndex].consumedEndSegmentIndex) {\n nextChunkIndex++;\n }\n if (nextChunkIndex >= prepared.chunks.length)\n return -1;\n return normalizeLineStartInChunk(prepared, nextChunkIndex, cursor);\n}\nexport function normalizeLineStart(prepared, start) {\n const cursor = {\n segmentIndex: start.segmentIndex,\n graphemeIndex: start.graphemeIndex,\n };\n const chunkIndex = normalizeLineStartChunkIndex(prepared, cursor);\n return chunkIndex < 0 ? null : cursor;\n}\nexport function countPreparedLines(prepared, maxWidth) {\n return walkPreparedLinesRaw(prepared, maxWidth);\n}\nfunction walkPreparedLinesSimple(prepared, maxWidth, onLine) {\n const { widths, kinds, breakableFitAdvances } = prepared;\n if (widths.length === 0)\n return 0;\n const engineProfile = getEngineProfile();\n const lineFitEpsilon = engineProfile.lineFitEpsilon;\n const fitLimit = maxWidth + lineFitEpsilon;\n let lineCount = 0;\n let lineW = 0;\n let hasContent = false;\n let lineStartSegmentIndex = 0;\n let lineStartGraphemeIndex = 0;\n let lineEndSegmentIndex = 0;\n let lineEndGraphemeIndex = 0;\n let pendingBreakSegmentIndex = -1;\n let pendingBreakPaintWidth = 0;\n function clearPendingBreak() {\n pendingBreakSegmentIndex = -1;\n pendingBreakPaintWidth = 0;\n }\n function emitCurrentLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = lineW) {\n lineCount++;\n onLine?.(width, lineStartSegmentIndex, lineStartGraphemeIndex, endSegmentIndex, endGraphemeIndex);\n lineW = 0;\n hasContent = false;\n clearPendingBreak();\n }\n function startLineAtSegment(segmentIndex, width) {\n hasContent = true;\n lineStartSegmentIndex = segmentIndex;\n lineStartGraphemeIndex = 0;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n lineW = width;\n }\n function startLineAtGrapheme(segmentIndex, graphemeIndex, width) {\n hasContent = true;\n lineStartSegmentIndex = segmentIndex;\n lineStartGraphemeIndex = graphemeIndex;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = graphemeIndex + 1;\n lineW = width;\n }\n function appendWholeSegment(segmentIndex, width) {\n if (!hasContent) {\n startLineAtSegment(segmentIndex, width);\n return;\n }\n lineW += width;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n function appendBreakableSegmentFrom(segmentIndex, startGraphemeIndex) {\n const fitAdvances = breakableFitAdvances[segmentIndex];\n for (let g = startGraphemeIndex; g < fitAdvances.length; g++) {\n const gw = fitAdvances[g];\n if (!hasContent) {\n startLineAtGrapheme(segmentIndex, g, gw);\n }\n else if (lineW + gw > fitLimit) {\n emitCurrentLine();\n startLineAtGrapheme(segmentIndex, g, gw);\n }\n else {\n lineW += gw;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = g + 1;\n }\n }\n if (hasContent && lineEndSegmentIndex === segmentIndex && lineEndGraphemeIndex === fitAdvances.length) {\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n }\n let i = 0;\n while (i < widths.length) {\n if (!hasContent) {\n i = normalizeLineStartSegmentIndex(prepared, i);\n if (i >= widths.length)\n break;\n }\n const w = widths[i];\n const kind = kinds[i];\n const breakAfter = breaksAfter(kind);\n if (!hasContent) {\n if (w > fitLimit && breakableFitAdvances[i] !== null) {\n appendBreakableSegmentFrom(i, 0);\n }\n else {\n startLineAtSegment(i, w);\n }\n if (breakAfter) {\n pendingBreakSegmentIndex = i + 1;\n pendingBreakPaintWidth = lineW - w;\n }\n i++;\n continue;\n }\n const newW = lineW + w;\n if (newW > fitLimit) {\n if (breakAfter) {\n appendWholeSegment(i, w);\n emitCurrentLine(i + 1, 0, lineW - w);\n i++;\n continue;\n }\n if (pendingBreakSegmentIndex >= 0) {\n if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n emitCurrentLine();\n continue;\n }\n emitCurrentLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n continue;\n }\n if (w > fitLimit && breakableFitAdvances[i] !== null) {\n emitCurrentLine();\n appendBreakableSegmentFrom(i, 0);\n i++;\n continue;\n }\n emitCurrentLine();\n continue;\n }\n appendWholeSegment(i, w);\n if (breakAfter) {\n pendingBreakSegmentIndex = i + 1;\n pendingBreakPaintWidth = lineW - w;\n }\n i++;\n }\n if (hasContent)\n emitCurrentLine();\n return lineCount;\n}\nexport function walkPreparedLinesRaw(prepared, maxWidth, onLine) {\n if (prepared.simpleLineWalkFastPath) {\n return walkPreparedLinesSimple(prepared, maxWidth, onLine);\n }\n const { widths, kinds, breakableFitAdvances, discretionaryHyphenWidth, chunks, } = prepared;\n if (widths.length === 0 || chunks.length === 0)\n return 0;\n const engineProfile = getEngineProfile();\n const lineFitEpsilon = engineProfile.lineFitEpsilon;\n const fitLimit = maxWidth + lineFitEpsilon;\n let lineCount = 0;\n let lineW = 0;\n let hasContent = false;\n let lineStartSegmentIndex = 0;\n let lineStartGraphemeIndex = 0;\n let lineEndSegmentIndex = 0;\n let lineEndGraphemeIndex = 0;\n let pendingBreakSegmentIndex = -1;\n let pendingBreakFitWidth = 0;\n let pendingBreakPaintWidth = 0;\n let pendingBreakKind = null;\n function clearPendingBreak() {\n pendingBreakSegmentIndex = -1;\n pendingBreakFitWidth = 0;\n pendingBreakPaintWidth = 0;\n pendingBreakKind = null;\n }\n function emitCurrentLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = lineW) {\n lineCount++;\n onLine?.(width, lineStartSegmentIndex, lineStartGraphemeIndex, endSegmentIndex, endGraphemeIndex);\n lineW = 0;\n hasContent = false;\n clearPendingBreak();\n }\n function startLineAtSegment(segmentIndex, width) {\n hasContent = true;\n lineStartSegmentIndex = segmentIndex;\n lineStartGraphemeIndex = 0;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n lineW = width;\n }\n function startLineAtGrapheme(segmentIndex, graphemeIndex, width) {\n hasContent = true;\n lineStartSegmentIndex = segmentIndex;\n lineStartGraphemeIndex = graphemeIndex;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = graphemeIndex + 1;\n lineW = width;\n }\n function appendWholeSegment(segmentIndex, advance) {\n if (!hasContent) {\n startLineAtSegment(segmentIndex, advance);\n return;\n }\n lineW += advance;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n function updatePendingBreakForWholeSegment(kind, breakAfter, segmentIndex, segmentWidth, leadingSpacing, advance) {\n if (!breakAfter)\n return;\n const fitAdvance = getBreakOpportunityFitContribution(prepared, kind, segmentIndex, leadingSpacing);\n const paintAdvance = getLineEndPaintContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth);\n pendingBreakSegmentIndex = segmentIndex + 1;\n pendingBreakFitWidth = lineW - advance + fitAdvance;\n pendingBreakPaintWidth = lineW - advance + paintAdvance;\n pendingBreakKind = kind;\n }\n function appendBreakableSegmentFrom(segmentIndex, startGraphemeIndex) {\n const fitAdvances = breakableFitAdvances[segmentIndex];\n for (let g = startGraphemeIndex; g < fitAdvances.length; g++) {\n const baseGw = fitAdvances[g];\n if (!hasContent) {\n startLineAtGrapheme(segmentIndex, g, baseGw);\n }\n else {\n const gw = getBreakableGraphemeAdvance(prepared, true, baseGw);\n const candidatePaintWidth = lineW + gw;\n if (getBreakableCandidateFitWidth(prepared, candidatePaintWidth) > fitLimit) {\n emitCurrentLine();\n startLineAtGrapheme(segmentIndex, g, baseGw);\n }\n else {\n lineW = candidatePaintWidth;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = g + 1;\n }\n }\n }\n if (hasContent && lineEndSegmentIndex === segmentIndex && lineEndGraphemeIndex === fitAdvances.length) {\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n }\n function continueSoftHyphenBreakableSegment(segmentIndex) {\n if (pendingBreakKind !== 'soft-hyphen')\n return false;\n const fitWidths = breakableFitAdvances[segmentIndex];\n if (fitWidths == null)\n return false;\n const { fitCount, fittedWidth } = fitSoftHyphenBreak(fitWidths, lineW, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, prepared.letterSpacing);\n if (fitCount === 0)\n return false;\n lineW = fittedWidth;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = fitCount;\n clearPendingBreak();\n if (fitCount === fitWidths.length) {\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n return true;\n }\n emitCurrentLine(segmentIndex, fitCount, fittedWidth + discretionaryHyphenWidth);\n appendBreakableSegmentFrom(segmentIndex, fitCount);\n return true;\n }\n function emitEmptyChunk(chunk) {\n lineCount++;\n onLine?.(0, chunk.startSegmentIndex, 0, chunk.consumedEndSegmentIndex, 0);\n clearPendingBreak();\n }\n for (let chunkIndex = 0; chunkIndex < chunks.length; chunkIndex++) {\n const chunk = chunks[chunkIndex];\n if (chunk.startSegmentIndex === chunk.endSegmentIndex) {\n emitEmptyChunk(chunk);\n continue;\n }\n hasContent = false;\n lineW = 0;\n lineStartSegmentIndex = chunk.startSegmentIndex;\n lineStartGraphemeIndex = 0;\n lineEndSegmentIndex = chunk.startSegmentIndex;\n lineEndGraphemeIndex = 0;\n clearPendingBreak();\n let i = chunk.startSegmentIndex;\n while (i < chunk.endSegmentIndex) {\n if (!hasContent) {\n i = normalizeLineStartSegmentIndex(prepared, i, chunk.endSegmentIndex);\n if (i >= chunk.endSegmentIndex)\n break;\n }\n const kind = kinds[i];\n const breakAfter = breaksAfter(kind);\n const leadingSpacing = getLeadingLetterSpacing(prepared, hasContent, i);\n const w = kind === 'tab'\n ? getTabAdvance(lineW + leadingSpacing, prepared.tabStopAdvance)\n : widths[i];\n const advance = leadingSpacing + w;\n const fitAdvance = getWholeSegmentFitContribution(prepared, kind, i, leadingSpacing, w);\n if (kind === 'soft-hyphen') {\n if (hasContent) {\n lineEndSegmentIndex = i + 1;\n lineEndGraphemeIndex = 0;\n pendingBreakSegmentIndex = i + 1;\n pendingBreakFitWidth = lineW + discretionaryHyphenWidth;\n pendingBreakPaintWidth = lineW + discretionaryHyphenWidth;\n pendingBreakKind = kind;\n }\n i++;\n continue;\n }\n if (!hasContent) {\n if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n appendBreakableSegmentFrom(i, 0);\n }\n else {\n startLineAtSegment(i, w);\n }\n updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n i++;\n continue;\n }\n const newFitW = lineW + fitAdvance;\n if (newFitW > fitLimit) {\n const currentBreakFitWidth = lineW + getBreakOpportunityFitContribution(prepared, kind, i, leadingSpacing);\n const currentBreakPaintWidth = lineW + getLineEndPaintContribution(prepared, kind, i, leadingSpacing, w);\n if (pendingBreakKind === 'soft-hyphen' &&\n engineProfile.preferEarlySoftHyphenBreak &&\n pendingBreakFitWidth <= fitLimit) {\n emitCurrentLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n continue;\n }\n if (pendingBreakKind === 'soft-hyphen' && continueSoftHyphenBreakableSegment(i)) {\n i++;\n continue;\n }\n if (breakAfter && currentBreakFitWidth <= fitLimit) {\n appendWholeSegment(i, advance);\n emitCurrentLine(i + 1, 0, currentBreakPaintWidth);\n i++;\n continue;\n }\n if (pendingBreakSegmentIndex >= 0 && pendingBreakFitWidth <= fitLimit) {\n if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n emitCurrentLine();\n continue;\n }\n const nextSegmentIndex = pendingBreakSegmentIndex;\n emitCurrentLine(nextSegmentIndex, 0, pendingBreakPaintWidth);\n i = nextSegmentIndex;\n continue;\n }\n if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n emitCurrentLine();\n appendBreakableSegmentFrom(i, 0);\n i++;\n continue;\n }\n emitCurrentLine();\n continue;\n }\n appendWholeSegment(i, advance);\n updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n i++;\n }\n if (hasContent) {\n const finalPaintWidth = pendingBreakSegmentIndex === chunk.consumedEndSegmentIndex\n ? pendingBreakPaintWidth\n : lineW;\n emitCurrentLine(chunk.consumedEndSegmentIndex, 0, finalPaintWidth);\n }\n }\n return lineCount;\n}\nexport function walkPreparedLines(prepared, maxWidth, onLine) {\n if (onLine === undefined)\n return walkPreparedLinesRaw(prepared, maxWidth);\n return walkPreparedLinesRaw(prepared, maxWidth, (width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) => {\n onLine({\n startSegmentIndex,\n startGraphemeIndex,\n endSegmentIndex,\n endGraphemeIndex,\n width,\n });\n });\n}\nfunction stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth) {\n const chunk = prepared.chunks[chunkIndex];\n if (chunk.startSegmentIndex === chunk.endSegmentIndex) {\n cursor.segmentIndex = chunk.consumedEndSegmentIndex;\n cursor.graphemeIndex = 0;\n return 0;\n }\n const { widths, kinds, breakableFitAdvances, discretionaryHyphenWidth, } = prepared;\n const engineProfile = getEngineProfile();\n const lineFitEpsilon = engineProfile.lineFitEpsilon;\n const fitLimit = maxWidth + lineFitEpsilon;\n let lineW = 0;\n let hasContent = false;\n let lineEndSegmentIndex = cursor.segmentIndex;\n let lineEndGraphemeIndex = cursor.graphemeIndex;\n let pendingBreakSegmentIndex = -1;\n let pendingBreakFitWidth = 0;\n let pendingBreakPaintWidth = 0;\n let pendingBreakKind = null;\n function clearPendingBreak() {\n pendingBreakSegmentIndex = -1;\n pendingBreakFitWidth = 0;\n pendingBreakPaintWidth = 0;\n pendingBreakKind = null;\n }\n function finishLine(endSegmentIndex = lineEndSegmentIndex, endGraphemeIndex = lineEndGraphemeIndex, width = lineW) {\n if (!hasContent)\n return null;\n cursor.segmentIndex = endSegmentIndex;\n cursor.graphemeIndex = endGraphemeIndex;\n return width;\n }\n function startLineAtSegment(segmentIndex, width) {\n hasContent = true;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n lineW = width;\n }\n function startLineAtGrapheme(segmentIndex, graphemeIndex, width) {\n hasContent = true;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = graphemeIndex + 1;\n lineW = width;\n }\n function appendWholeSegment(segmentIndex, advance) {\n if (!hasContent) {\n startLineAtSegment(segmentIndex, advance);\n return;\n }\n lineW += advance;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n function updatePendingBreakForWholeSegment(kind, breakAfter, segmentIndex, segmentWidth, leadingSpacing, advance) {\n if (!breakAfter)\n return;\n const fitAdvance = getBreakOpportunityFitContribution(prepared, kind, segmentIndex, leadingSpacing);\n const paintAdvance = getLineEndPaintContribution(prepared, kind, segmentIndex, leadingSpacing, segmentWidth);\n pendingBreakSegmentIndex = segmentIndex + 1;\n pendingBreakFitWidth = lineW - advance + fitAdvance;\n pendingBreakPaintWidth = lineW - advance + paintAdvance;\n pendingBreakKind = kind;\n }\n function appendBreakableSegmentFrom(segmentIndex, startGraphemeIndex) {\n const fitAdvances = breakableFitAdvances[segmentIndex];\n for (let g = startGraphemeIndex; g < fitAdvances.length; g++) {\n const baseGw = fitAdvances[g];\n if (!hasContent) {\n startLineAtGrapheme(segmentIndex, g, baseGw);\n }\n else {\n const gw = getBreakableGraphemeAdvance(prepared, true, baseGw);\n const candidatePaintWidth = lineW + gw;\n if (getBreakableCandidateFitWidth(prepared, candidatePaintWidth) > fitLimit) {\n return finishLine();\n }\n lineW = candidatePaintWidth;\n lineEndSegmentIndex = segmentIndex;\n lineEndGraphemeIndex = g + 1;\n }\n }\n if (hasContent && lineEndSegmentIndex === segmentIndex && lineEndGraphemeIndex === fitAdvances.length) {\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n }\n return null;\n }\n function maybeFinishAtSoftHyphen(segmentIndex) {\n if (pendingBreakKind !== 'soft-hyphen' || pendingBreakSegmentIndex < 0)\n return null;\n const fitWidths = breakableFitAdvances[segmentIndex] ?? null;\n if (fitWidths !== null) {\n const { fitCount, fittedWidth } = fitSoftHyphenBreak(fitWidths, lineW, maxWidth, lineFitEpsilon, discretionaryHyphenWidth, prepared.letterSpacing);\n if (fitCount === fitWidths.length) {\n lineW = fittedWidth;\n lineEndSegmentIndex = segmentIndex + 1;\n lineEndGraphemeIndex = 0;\n clearPendingBreak();\n return null;\n }\n if (fitCount > 0) {\n return finishLine(segmentIndex, fitCount, fittedWidth + discretionaryHyphenWidth);\n }\n }\n if (pendingBreakFitWidth <= fitLimit) {\n return finishLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n }\n return null;\n }\n for (let i = cursor.segmentIndex; i < chunk.endSegmentIndex; i++) {\n const kind = kinds[i];\n const breakAfter = breaksAfter(kind);\n const startGraphemeIndex = i === cursor.segmentIndex ? cursor.graphemeIndex : 0;\n const leadingSpacing = getLeadingLetterSpacing(prepared, hasContent, i);\n const w = kind === 'tab'\n ? getTabAdvance(lineW + leadingSpacing, prepared.tabStopAdvance)\n : widths[i];\n const advance = leadingSpacing + w;\n const fitAdvance = getWholeSegmentFitContribution(prepared, kind, i, leadingSpacing, w);\n if (kind === 'soft-hyphen' && startGraphemeIndex === 0) {\n if (hasContent) {\n lineEndSegmentIndex = i + 1;\n lineEndGraphemeIndex = 0;\n pendingBreakSegmentIndex = i + 1;\n pendingBreakFitWidth = lineW + discretionaryHyphenWidth;\n pendingBreakPaintWidth = lineW + discretionaryHyphenWidth;\n pendingBreakKind = kind;\n }\n continue;\n }\n if (!hasContent) {\n if (startGraphemeIndex > 0) {\n const line = appendBreakableSegmentFrom(i, startGraphemeIndex);\n if (line !== null)\n return line;\n }\n else if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n const line = appendBreakableSegmentFrom(i, 0);\n if (line !== null)\n return line;\n }\n else {\n startLineAtSegment(i, w);\n }\n updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n continue;\n }\n const newFitW = lineW + fitAdvance;\n if (newFitW > fitLimit) {\n const currentBreakFitWidth = lineW + getBreakOpportunityFitContribution(prepared, kind, i, leadingSpacing);\n const currentBreakPaintWidth = lineW + getLineEndPaintContribution(prepared, kind, i, leadingSpacing, w);\n if (pendingBreakKind === 'soft-hyphen' &&\n engineProfile.preferEarlySoftHyphenBreak &&\n pendingBreakFitWidth <= fitLimit) {\n return finishLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n }\n const softBreakLine = maybeFinishAtSoftHyphen(i);\n if (softBreakLine !== null)\n return softBreakLine;\n if (breakAfter && currentBreakFitWidth <= fitLimit) {\n appendWholeSegment(i, advance);\n return finishLine(i + 1, 0, currentBreakPaintWidth);\n }\n if (pendingBreakSegmentIndex >= 0 && pendingBreakFitWidth <= fitLimit) {\n if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n return finishLine();\n }\n return finishLine(pendingBreakSegmentIndex, 0, pendingBreakPaintWidth);\n }\n if (fitAdvance > fitLimit && breakableFitAdvances[i] !== null) {\n const currentLine = finishLine();\n if (currentLine !== null)\n return currentLine;\n const line = appendBreakableSegmentFrom(i, 0);\n if (line !== null)\n return line;\n }\n return finishLine();\n }\n appendWholeSegment(i, advance);\n updatePendingBreakForWholeSegment(kind, breakAfter, i, w, leadingSpacing, advance);\n }\n if (pendingBreakSegmentIndex === chunk.consumedEndSegmentIndex && lineEndGraphemeIndex === 0) {\n return finishLine(chunk.consumedEndSegmentIndex, 0, pendingBreakPaintWidth);\n }\n return finishLine(chunk.consumedEndSegmentIndex, 0, lineW);\n}\nfunction stepPreparedSimpleLineGeometry(prepared, cursor, maxWidth) {\n const { widths, kinds, breakableFitAdvances } = prepared;\n const engineProfile = getEngineProfile();\n const lineFitEpsilon = engineProfile.lineFitEpsilon;\n const fitLimit = maxWidth + lineFitEpsilon;\n let lineW = 0;\n let hasContent = false;\n let lineEndSegmentIndex = cursor.segmentIndex;\n let lineEndGraphemeIndex = cursor.graphemeIndex;\n let pendingBreakSegmentIndex = -1;\n let pendingBreakPaintWidth = 0;\n for (let i = cursor.segmentIndex; i < widths.length; i++) {\n const kind = kinds[i];\n const breakAfter = breaksAfter(kind);\n const startGraphemeIndex = i === cursor.segmentIndex ? cursor.graphemeIndex : 0;\n const breakableFitAdvance = breakableFitAdvances[i];\n const w = widths[i];\n if (!hasContent) {\n if (startGraphemeIndex > 0 || (w > fitLimit && breakableFitAdvance !== null)) {\n const fitAdvances = breakableFitAdvance;\n const firstGraphemeWidth = fitAdvances[startGraphemeIndex];\n hasContent = true;\n lineW = firstGraphemeWidth;\n lineEndSegmentIndex = i;\n lineEndGraphemeIndex = startGraphemeIndex + 1;\n for (let g = startGraphemeIndex + 1; g < fitAdvances.length; g++) {\n const gw = fitAdvances[g];\n if (lineW + gw > fitLimit) {\n cursor.segmentIndex = lineEndSegmentIndex;\n cursor.graphemeIndex = lineEndGraphemeIndex;\n return lineW;\n }\n lineW += gw;\n lineEndSegmentIndex = i;\n lineEndGraphemeIndex = g + 1;\n }\n if (lineEndSegmentIndex === i && lineEndGraphemeIndex === fitAdvances.length) {\n lineEndSegmentIndex = i + 1;\n lineEndGraphemeIndex = 0;\n }\n }\n else {\n hasContent = true;\n lineW = w;\n lineEndSegmentIndex = i + 1;\n lineEndGraphemeIndex = 0;\n }\n if (breakAfter) {\n pendingBreakSegmentIndex = i + 1;\n pendingBreakPaintWidth = lineW - w;\n }\n continue;\n }\n if (lineW + w > fitLimit) {\n if (breakAfter) {\n cursor.segmentIndex = i + 1;\n cursor.graphemeIndex = 0;\n return lineW;\n }\n if (pendingBreakSegmentIndex >= 0) {\n if (lineEndSegmentIndex > pendingBreakSegmentIndex ||\n (lineEndSegmentIndex === pendingBreakSegmentIndex && lineEndGraphemeIndex > 0)) {\n cursor.segmentIndex = lineEndSegmentIndex;\n cursor.graphemeIndex = lineEndGraphemeIndex;\n return lineW;\n }\n cursor.segmentIndex = pendingBreakSegmentIndex;\n cursor.graphemeIndex = 0;\n return pendingBreakPaintWidth;\n }\n cursor.segmentIndex = lineEndSegmentIndex;\n cursor.graphemeIndex = lineEndGraphemeIndex;\n return lineW;\n }\n lineW += w;\n lineEndSegmentIndex = i + 1;\n lineEndGraphemeIndex = 0;\n if (breakAfter) {\n pendingBreakSegmentIndex = i + 1;\n pendingBreakPaintWidth = lineW - w;\n }\n }\n if (!hasContent)\n return null;\n cursor.segmentIndex = lineEndSegmentIndex;\n cursor.graphemeIndex = lineEndGraphemeIndex;\n return lineW;\n}\nexport function layoutNextLineRange(prepared, start, maxWidth) {\n const end = {\n segmentIndex: start.segmentIndex,\n graphemeIndex: start.graphemeIndex,\n };\n const chunkIndex = normalizeLineStartChunkIndex(prepared, end);\n if (chunkIndex < 0)\n return null;\n const lineStartSegmentIndex = end.segmentIndex;\n const lineStartGraphemeIndex = end.graphemeIndex;\n const width = prepared.simpleLineWalkFastPath\n ? stepPreparedSimpleLineGeometry(prepared, end, maxWidth)\n : stepPreparedChunkLineGeometry(prepared, end, chunkIndex, maxWidth);\n if (width === null)\n return null;\n return {\n startSegmentIndex: lineStartSegmentIndex,\n startGraphemeIndex: lineStartGraphemeIndex,\n endSegmentIndex: end.segmentIndex,\n endGraphemeIndex: end.graphemeIndex,\n width,\n };\n}\nexport function stepPreparedLineGeometry(prepared, cursor, maxWidth) {\n const chunkIndex = normalizeLineStartChunkIndex(prepared, cursor);\n if (chunkIndex < 0)\n return null;\n if (prepared.simpleLineWalkFastPath) {\n return stepPreparedSimpleLineGeometry(prepared, cursor, maxWidth);\n }\n return stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth);\n}\nexport function measurePreparedLineGeometry(prepared, maxWidth) {\n if (prepared.widths.length === 0) {\n return {\n lineCount: 0,\n maxLineWidth: 0,\n };\n }\n const cursor = {\n segmentIndex: 0,\n graphemeIndex: 0,\n };\n let lineCount = 0;\n let maxLineWidth = 0;\n if (!prepared.simpleLineWalkFastPath) {\n let chunkIndex = normalizeLineStartChunkIndex(prepared, cursor);\n while (chunkIndex >= 0) {\n const lineWidth = stepPreparedChunkLineGeometry(prepared, cursor, chunkIndex, maxWidth);\n if (lineWidth === null) {\n return {\n lineCount,\n maxLineWidth,\n };\n }\n lineCount++;\n if (lineWidth > maxLineWidth)\n maxLineWidth = lineWidth;\n chunkIndex = normalizeLineStartChunkIndexFromHint(prepared, chunkIndex, cursor);\n }\n return {\n lineCount,\n maxLineWidth,\n };\n }\n while (true) {\n const lineWidth = stepPreparedLineGeometry(prepared, cursor, maxWidth);\n if (lineWidth === null) {\n return {\n lineCount,\n maxLineWidth,\n };\n }\n lineCount++;\n if (lineWidth > maxLineWidth)\n maxLineWidth = lineWidth;\n }\n}\n","// Text measurement for browser environments using canvas measureText.\n//\n// Problem: DOM-based text measurement (getBoundingClientRect, offsetHeight)\n// forces synchronous layout reflow. When components independently measure text,\n// each measurement triggers a reflow of the entire document. This creates\n// read/write interleaving that can cost 30ms+ per frame for 500 text blocks.\n//\n// Solution: two-phase measurement centered around canvas measureText.\n// prepare(text, font) — segments text via Intl.Segmenter, measures each word\n// via canvas, caches widths, and does one cached DOM calibration read per\n// font when emoji correction is needed. Call once when text first appears.\n// layout(prepared, maxWidth, lineHeight) — walks cached word widths with pure\n// arithmetic to count lines and compute height. Call on every resize.\n// ~0.0002ms per text.\n//\n// i18n: Intl.Segmenter handles CJK (per-character breaking), Thai, Arabic, etc.\n// Bidi: simplified rich-path metadata for mixed LTR/RTL custom rendering.\n// Punctuation merging: \"better.\" measured as one unit (matches CSS behavior).\n// Trailing whitespace: hangs past line edge without triggering breaks (CSS behavior).\n// overflow-wrap: pre-measured grapheme widths enable character-level word breaking.\n//\n// Emoji correction: Chrome/Firefox canvas measures emoji wider than DOM at font\n// sizes <24px on macOS (Apple Color Emoji). The inflation is constant per emoji\n// grapheme at a given size, font-independent. Auto-detected by comparing canvas\n// vs actual DOM emoji width (one cached DOM read per font). Safari canvas and\n// DOM agree (both wider than fontSize), so correction = 0 there.\n//\n// Limitations:\n// - system-ui font: canvas resolves to different optical variants than DOM on macOS.\n// Use named fonts (Helvetica, Inter, etc.) for guaranteed accuracy.\n// See RESEARCH.md \"Discovery: system-ui font resolution mismatch\".\n//\n// Based on Sebastian Markbage's text-layout research (github.com/chenglou/text-layout).\nimport { computeSegmentLevels } from './bidi.js';\nimport { analyzeText, canContinueKeepAllTextRun, clearAnalysisCaches, endsWithClosingQuote, isCJK, isNumericRunSegment, kinsokuEnd, kinsokuStart, leftStickyPunctuation, setAnalysisLocale, } from './analysis.js';\nimport { clearMeasurementCaches, getCorrectedSegmentWidth, getSegmentBreakableFitAdvances, getEngineProfile, getFontMeasurementState, getSegmentMetrics, textMayContainEmoji, } from './measurement.js';\nimport { countPreparedLines, measurePreparedLineGeometry, normalizeLineStart, stepPreparedLineGeometry, walkPreparedLinesRaw, } from './line-break.js';\nimport { buildLineTextFromRange, clearLineTextCaches, getLineTextCache, } from './line-text.js';\nlet sharedGraphemeSegmenter = null;\nfunction getSharedGraphemeSegmenter() {\n if (sharedGraphemeSegmenter === null) {\n sharedGraphemeSegmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n }\n return sharedGraphemeSegmenter;\n}\n// --- Public API ---\nfunction createEmptyPrepared(includeSegments) {\n if (includeSegments) {\n return {\n widths: [],\n lineEndFitAdvances: [],\n lineEndPaintAdvances: [],\n kinds: [],\n simpleLineWalkFastPath: true,\n segLevels: null,\n breakableFitAdvances: [],\n letterSpacing: 0,\n spacingGraphemeCounts: [],\n discretionaryHyphenWidth: 0,\n tabStopAdvance: 0,\n chunks: [],\n segments: [],\n };\n }\n return {\n widths: [],\n lineEndFitAdvances: [],\n lineEndPaintAdvances: [],\n kinds: [],\n simpleLineWalkFastPath: true,\n segLevels: null,\n breakableFitAdvances: [],\n letterSpacing: 0,\n spacingGraphemeCounts: [],\n discretionaryHyphenWidth: 0,\n tabStopAdvance: 0,\n chunks: [],\n };\n}\nfunction buildBaseCjkUnits(segText, engineProfile) {\n const units = [];\n let unitParts = [];\n let unitStart = 0;\n let unitContainsCJK = false;\n let unitEndsWithClosingQuote = false;\n let unitIsSingleKinsokuEnd = false;\n function pushUnit() {\n if (unitParts.length === 0)\n return;\n units.push({\n text: unitParts.length === 1 ? unitParts[0] : unitParts.join(''),\n start: unitStart,\n });\n unitParts = [];\n unitContainsCJK = false;\n unitEndsWithClosingQuote = false;\n unitIsSingleKinsokuEnd = false;\n }\n function startUnit(grapheme, start, graphemeContainsCJK) {\n unitParts = [grapheme];\n unitStart = start;\n unitContainsCJK = graphemeContainsCJK;\n unitEndsWithClosingQuote = endsWithClosingQuote(grapheme);\n unitIsSingleKinsokuEnd = kinsokuEnd.has(grapheme);\n }\n function appendToUnit(grapheme, graphemeContainsCJK) {\n unitParts.push(grapheme);\n unitContainsCJK = unitContainsCJK || graphemeContainsCJK;\n const graphemeEndsWithClosingQuote = endsWithClosingQuote(grapheme);\n if (grapheme.length === 1 && leftStickyPunctuation.has(grapheme)) {\n unitEndsWithClosingQuote = unitEndsWithClosingQuote || graphemeEndsWithClosingQuote;\n }\n else {\n unitEndsWithClosingQuote = graphemeEndsWithClosingQuote;\n }\n unitIsSingleKinsokuEnd = false;\n }\n for (const gs of getSharedGraphemeSegmenter().segment(segText)) {\n const grapheme = gs.segment;\n const graphemeContainsCJK = isCJK(grapheme);\n if (unitParts.length === 0) {\n startUnit(grapheme, gs.index, graphemeContainsCJK);\n continue;\n }\n if (unitIsSingleKinsokuEnd ||\n kinsokuStart.has(grapheme) ||\n leftStickyPunctuation.has(grapheme) ||\n (engineProfile.carryCJKAfterClosingQuote &&\n graphemeContainsCJK &&\n unitEndsWithClosingQuote)) {\n appendToUnit(grapheme, graphemeContainsCJK);\n continue;\n }\n if (!unitContainsCJK && !graphemeContainsCJK) {\n appendToUnit(grapheme, graphemeContainsCJK);\n continue;\n }\n pushUnit();\n startUnit(grapheme, gs.index, graphemeContainsCJK);\n }\n pushUnit();\n return units;\n}\nfunction mergeKeepAllTextUnits(units) {\n if (units.length <= 1)\n return units;\n const merged = [];\n let currentTextParts = [units[0].text];\n let currentStart = units[0].start;\n let currentContainsCJK = isCJK(units[0].text);\n let currentCanContinue = canContinueKeepAllTextRun(units[0].text);\n function flushCurrent() {\n merged.push({\n text: currentTextParts.length === 1 ? currentTextParts[0] : currentTextParts.join(''),\n start: currentStart,\n });\n }\n for (let i = 1; i < units.length; i++) {\n const next = units[i];\n const nextContainsCJK = isCJK(next.text);\n const nextCanContinue = canContinueKeepAllTextRun(next.text);\n if (currentContainsCJK && currentCanContinue) {\n currentTextParts.push(next.text);\n currentContainsCJK = currentContainsCJK || nextContainsCJK;\n currentCanContinue = nextCanContinue;\n continue;\n }\n flushCurrent();\n currentTextParts = [next.text];\n currentStart = next.start;\n currentContainsCJK = nextContainsCJK;\n currentCanContinue = nextCanContinue;\n }\n flushCurrent();\n return merged;\n}\nfunction countRenderedSpacingGraphemes(text, kind) {\n if (kind === 'zero-width-break' ||\n kind === 'soft-hyphen' ||\n kind === 'hard-break') {\n return 0;\n }\n if (kind === 'tab')\n return 1;\n let count = 0;\n const graphemeSegmenter = getSharedGraphemeSegmenter();\n for (const _ of graphemeSegmenter.segment(text))\n count++;\n return count;\n}\nfunction addInternalLetterSpacing(width, graphemeCount, letterSpacing) {\n return graphemeCount > 1 ? width + (graphemeCount - 1) * letterSpacing : width;\n}\nfunction measureAnalysis(analysis, font, includeSegments, wordBreak, letterSpacing) {\n const engineProfile = getEngineProfile();\n const { cache, emojiCorrection } = getFontMeasurementState(font, textMayContainEmoji(analysis.normalized));\n const discretionaryHyphenWidth = getCorrectedSegmentWidth('-', getSegmentMetrics('-', cache), emojiCorrection) +\n (letterSpacing === 0 ? 0 : letterSpacing);\n const spaceWidth = getCorrectedSegmentWidth(' ', getSegmentMetrics(' ', cache), emojiCorrection);\n const tabStopAdvance = spaceWidth * 8;\n const hasLetterSpacing = letterSpacing !== 0;\n if (analysis.len === 0)\n return createEmptyPrepared(includeSegments);\n const widths = [];\n const lineEndFitAdvances = [];\n const lineEndPaintAdvances = [];\n const kinds = [];\n let simpleLineWalkFastPath = analysis.chunks.length <= 1 && !hasLetterSpacing;\n const segStarts = includeSegments ? [] : null;\n const breakableFitAdvances = [];\n const spacingGraphemeCounts = [];\n const segments = includeSegments ? [] : null;\n const preparedStartByAnalysisIndex = Array.from({ length: analysis.len });\n function pushMeasuredSegment(text, width, lineEndFitAdvance, lineEndPaintAdvance, kind, start, breakableFitAdvance, spacingGraphemeCount) {\n if (kind !== 'text' && kind !== 'space' && kind !== 'zero-width-break') {\n simpleLineWalkFastPath = false;\n }\n widths.push(width);\n lineEndFitAdvances.push(lineEndFitAdvance);\n lineEndPaintAdvances.push(lineEndPaintAdvance);\n kinds.push(kind);\n segStarts?.push(start);\n breakableFitAdvances.push(breakableFitAdvance);\n if (hasLetterSpacing)\n spacingGraphemeCounts.push(spacingGraphemeCount);\n if (segments !== null)\n segments.push(text);\n }\n function pushMeasuredTextSegment(text, kind, start, wordLike, allowOverflowBreaks) {\n const textMetrics = getSegmentMetrics(text, cache);\n const spacingGraphemeCount = hasLetterSpacing\n ? countRenderedSpacingGraphemes(text, kind)\n : 0;\n const width = addInternalLetterSpacing(getCorrectedSegmentWidth(text, textMetrics, emojiCorrection), spacingGraphemeCount, letterSpacing);\n const baseLineEndFitAdvance = kind === 'space' || kind === 'preserved-space' || kind === 'zero-width-break'\n ? 0\n : width;\n const lineEndFitAdvance = baseLineEndFitAdvance === 0\n ? 0\n : baseLineEndFitAdvance + (spacingGraphemeCount > 0 ? letterSpacing : 0);\n const lineEndPaintAdvance = kind === 'space' || kind === 'zero-width-break'\n ? 0\n : width;\n if (allowOverflowBreaks && wordLike && text.length > 1) {\n let fitMode = 'sum-graphemes';\n if (letterSpacing !== 0) {\n fitMode = 'segment-prefixes';\n }\n else if (isNumericRunSegment(text)) {\n fitMode = 'pair-context';\n }\n else if (engineProfile.preferPrefixWidthsForBreakableRuns) {\n fitMode = 'segment-prefixes';\n }\n const fitAdvances = getSegmentBreakableFitAdvances(text, textMetrics, cache, emojiCorrection, fitMode);\n pushMeasuredSegment(text, width, lineEndFitAdvance, lineEndPaintAdvance, kind, start, fitAdvances, spacingGraphemeCount);\n return;\n }\n pushMeasuredSegment(text, width, lineEndFitAdvance, lineEndPaintAdvance, kind, start, null, spacingGraphemeCount);\n }\n for (let mi = 0; mi < analysis.len; mi++) {\n preparedStartByAnalysisIndex[mi] = widths.length;\n const segText = analysis.texts[mi];\n const segWordLike = analysis.isWordLike[mi];\n const segKind = analysis.kinds[mi];\n const segStart = analysis.starts[mi];\n if (segKind === 'soft-hyphen') {\n pushMeasuredSegment(segText, 0, discretionaryHyphenWidth, discretionaryHyphenWidth, segKind, segStart, null, 0);\n continue;\n }\n if (segKind === 'hard-break') {\n pushMeasuredSegment(segText, 0, 0, 0, segKind, segStart, null, 0);\n continue;\n }\n if (segKind === 'tab') {\n pushMeasuredSegment(segText, 0, 0, 0, segKind, segStart, null, hasLetterSpacing ? countRenderedSpacingGraphemes(segText, segKind) : 0);\n continue;\n }\n const segMetrics = getSegmentMetrics(segText, cache);\n if (segKind === 'text' && segMetrics.containsCJK) {\n const baseUnits = buildBaseCjkUnits(segText, engineProfile);\n const measuredUnits = wordBreak === 'keep-all'\n ? mergeKeepAllTextUnits(baseUnits)\n : baseUnits;\n for (let i = 0; i < measuredUnits.length; i++) {\n const unit = measuredUnits[i];\n pushMeasuredTextSegment(unit.text, 'text', segStart + unit.start, segWordLike, wordBreak === 'keep-all' || !isCJK(unit.text));\n }\n continue;\n }\n pushMeasuredTextSegment(segText, segKind, segStart, segWordLike, true);\n }\n const chunks = mapAnalysisChunksToPreparedChunks(analysis.chunks, preparedStartByAnalysisIndex, widths.length);\n const segLevels = segStarts === null ? null : computeSegmentLevels(analysis.normalized, segStarts);\n if (segments !== null) {\n return {\n widths,\n lineEndFitAdvances,\n lineEndPaintAdvances,\n kinds,\n simpleLineWalkFastPath,\n segLevels,\n breakableFitAdvances,\n letterSpacing,\n spacingGraphemeCounts,\n discretionaryHyphenWidth,\n tabStopAdvance,\n chunks,\n segments,\n };\n }\n return {\n widths,\n lineEndFitAdvances,\n lineEndPaintAdvances,\n kinds,\n simpleLineWalkFastPath,\n segLevels,\n breakableFitAdvances,\n letterSpacing,\n spacingGraphemeCounts,\n discretionaryHyphenWidth,\n tabStopAdvance,\n chunks,\n };\n}\nfunction mapAnalysisChunksToPreparedChunks(chunks, preparedStartByAnalysisIndex, preparedEndSegmentIndex) {\n const preparedChunks = [];\n for (let i = 0; i < chunks.length; i++) {\n const chunk = chunks[i];\n const startSegmentIndex = chunk.startSegmentIndex < preparedStartByAnalysisIndex.length\n ? preparedStartByAnalysisIndex[chunk.startSegmentIndex]\n : preparedEndSegmentIndex;\n const endSegmentIndex = chunk.endSegmentIndex < preparedStartByAnalysisIndex.length\n ? preparedStartByAnalysisIndex[chunk.endSegmentIndex]\n : preparedEndSegmentIndex;\n const consumedEndSegmentIndex = chunk.consumedEndSegmentIndex < preparedStartByAnalysisIndex.length\n ? preparedStartByAnalysisIndex[chunk.consumedEndSegmentIndex]\n : preparedEndSegmentIndex;\n preparedChunks.push({\n startSegmentIndex,\n endSegmentIndex,\n consumedEndSegmentIndex,\n });\n }\n return preparedChunks;\n}\nfunction prepareInternal(text, font, includeSegments, options) {\n const wordBreak = options?.wordBreak ?? 'normal';\n const letterSpacing = options?.letterSpacing ?? 0;\n const analysis = analyzeText(text, getEngineProfile(), options?.whiteSpace, wordBreak);\n return measureAnalysis(analysis, font, includeSegments, wordBreak, letterSpacing);\n}\n// Prepare text for layout. Segments the text, measures each segment via canvas,\n// and stores the widths for fast relayout at any width. Call once per text block\n// (e.g. when a comment first appears). The result is width-independent — the\n// same PreparedText can be laid out at any maxWidth and lineHeight via layout().\n//\n// Steps:\n// 1. Normalize collapsible whitespace (CSS white-space: normal behavior)\n// 2. Segment via Intl.Segmenter (handles CJK, Thai, etc.)\n// 3. Merge punctuation into preceding word (\"better.\" as one unit)\n// 4. Split CJK words into individual graphemes (per-character line breaks)\n// 5. Measure each segment via canvas measureText, cache by (segment, font)\n// 6. Pre-measure graphemes of long words (for overflow-wrap: break-word)\n// 7. Correct emoji canvas inflation (auto-detected per font size)\n// 8. Optionally compute rich-path bidi metadata for custom renderers\nexport function prepare(text, font, options) {\n return prepareInternal(text, font, false, options);\n}\n// Rich variant used by callers that need enough information to render the\n// laid-out lines themselves.\nexport function prepareWithSegments(text, font, options) {\n return prepareInternal(text, font, true, options);\n}\nfunction getInternalPrepared(prepared) {\n return prepared;\n}\n// Layout prepared text at a given max width and caller-provided lineHeight.\n// Pure arithmetic on cached widths — no canvas calls, no DOM reads, no string\n// operations, no allocations.\n// ~0.0002ms per text block. Call on every resize.\n//\n// Line breaking rules (matching CSS white-space: normal + overflow-wrap: break-word):\n// - Break before any non-space segment that would overflow the line\n// - Trailing whitespace hangs past the line edge (doesn't trigger breaks)\n// - Segments wider than maxWidth are broken at grapheme boundaries\nexport function layout(prepared, maxWidth, lineHeight) {\n // Keep the resize hot path specialized. `layoutWithLines()` shares the same\n // break semantics but also tracks line ranges; the extra bookkeeping is too\n // expensive to pay on every hot-path `layout()` call.\n const lineCount = countPreparedLines(getInternalPrepared(prepared), maxWidth);\n return { lineCount, height: lineCount * lineHeight };\n}\nfunction createLayoutLine(prepared, cache, width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) {\n return {\n text: buildLineTextFromRange(prepared, cache, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex),\n width,\n start: {\n segmentIndex: startSegmentIndex,\n graphemeIndex: startGraphemeIndex,\n },\n end: {\n segmentIndex: endSegmentIndex,\n graphemeIndex: endGraphemeIndex,\n },\n };\n}\nfunction createLayoutLineRange(width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) {\n return {\n width,\n start: {\n segmentIndex: startSegmentIndex,\n graphemeIndex: startGraphemeIndex,\n },\n end: {\n segmentIndex: endSegmentIndex,\n graphemeIndex: endGraphemeIndex,\n },\n };\n}\nexport function materializeLineRange(prepared, line) {\n return createLayoutLine(prepared, getLineTextCache(prepared), line.width, line.start.segmentIndex, line.start.graphemeIndex, line.end.segmentIndex, line.end.graphemeIndex);\n}\n// Batch low-level line-range pass. This is the non-materializing counterpart\n// to layoutWithLines(), useful for shrinkwrap and other aggregate stats work.\nexport function walkLineRanges(prepared, maxWidth, onLine) {\n if (prepared.widths.length === 0)\n return 0;\n return walkPreparedLinesRaw(getInternalPrepared(prepared), maxWidth, (width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) => {\n onLine(createLayoutLineRange(width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex));\n });\n}\nexport function measureLineStats(prepared, maxWidth) {\n return measurePreparedLineGeometry(getInternalPrepared(prepared), maxWidth);\n}\n// Intrinsic-width helper for rich/userland layout work. This asks \"how wide is\n// the prepared text when container width is not the thing forcing wraps?\".\n// Explicit hard breaks still count, so this returns the widest forced line.\nexport function measureNaturalWidth(prepared) {\n let maxWidth = 0;\n walkPreparedLinesRaw(getInternalPrepared(prepared), Number.POSITIVE_INFINITY, width => {\n if (width > maxWidth)\n maxWidth = width;\n });\n return maxWidth;\n}\nexport function layoutNextLine(prepared, start, maxWidth) {\n const internal = getInternalPrepared(prepared);\n const normalizedStart = normalizeLineStart(internal, start);\n if (normalizedStart === null)\n return null;\n const end = {\n segmentIndex: normalizedStart.segmentIndex,\n graphemeIndex: normalizedStart.graphemeIndex,\n };\n const width = stepPreparedLineGeometry(internal, end, maxWidth);\n if (width === null)\n return null;\n return createLayoutLine(prepared, getLineTextCache(prepared), width, normalizedStart.segmentIndex, normalizedStart.graphemeIndex, end.segmentIndex, end.graphemeIndex);\n}\nexport function layoutNextLineRange(prepared, start, maxWidth) {\n const internal = getInternalPrepared(prepared);\n const normalizedStart = normalizeLineStart(internal, start);\n if (normalizedStart === null)\n return null;\n const end = {\n segmentIndex: normalizedStart.segmentIndex,\n graphemeIndex: normalizedStart.graphemeIndex,\n };\n const width = stepPreparedLineGeometry(internal, end, maxWidth);\n if (width === null)\n return null;\n return createLayoutLineRange(width, normalizedStart.segmentIndex, normalizedStart.graphemeIndex, end.segmentIndex, end.graphemeIndex);\n}\n// Rich layout API for callers that want the actual line contents and widths.\n// Caller still supplies lineHeight at layout time. Mirrors layout()'s break\n// decisions, but keeps extra per-line bookkeeping so it should stay off the\n// resize hot path.\nexport function layoutWithLines(prepared, maxWidth, lineHeight) {\n const lines = [];\n if (prepared.widths.length === 0)\n return { lineCount: 0, height: 0, lines };\n const graphemeCache = getLineTextCache(prepared);\n const lineCount = walkPreparedLinesRaw(getInternalPrepared(prepared), maxWidth, (width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex) => {\n lines.push(createLayoutLine(prepared, graphemeCache, width, startSegmentIndex, startGraphemeIndex, endSegmentIndex, endGraphemeIndex));\n });\n return { lineCount, height: lineCount * lineHeight, lines };\n}\nexport function clearCache() {\n clearAnalysisCaches();\n sharedGraphemeSegmenter = null;\n clearLineTextCaches();\n clearMeasurementCaches();\n}\nexport function setLocale(locale) {\n setAnalysisLocale(locale);\n clearCache();\n}\n","// SPDX-FileCopyrightText: © 2024 Schneider Electric\n//\n// SPDX-License-Identifier: Apache-2.0\n\nimport { layout, prepare } from '@chenglou/pretext'\nimport type {\n MiddlewareState,\n OffsetOptions as LibraryOffsetOptions,\n ReferenceElement,\n} from '@floating-ui/dom'\nimport type { Except, Replace } from 'type-fest'\n\nimport type { LinkIcon } from './components/shared'\n\nexport type Attributes = Record<string, string | undefined>\n\nconst inheritAttributes = (\n element: Element,\n attributes: string[] = [],\n): Attributes => {\n const attributeObject: Attributes = {}\n\n for (const attribute of attributes) {\n const value = element.getAttribute(attribute)\n if (value !== null) {\n attributeObject[attribute] = value\n element.removeAttribute(attribute)\n }\n }\n\n return attributeObject\n}\n\ntype ARIAAttribute =\n | Replace<Lowercase<keyof ARIAMixin>, 'aria', 'aria-'>\n | 'aria-activedescendant'\n | 'aria-braillelabel'\n | 'aria-brailleroledescription'\n | 'aria-colindextext'\n | 'aria-controls'\n | 'aria-describedby'\n | 'aria-description'\n | 'aria-details'\n | 'aria-errormessage'\n | 'aria-flowto'\n | 'aria-labelledby'\n | 'aria-owns'\n | 'aria-relevant'\n | 'aria-rowindextext'\n\nconst ariaAttributes: ARIAAttribute[] = [\n 'aria-activedescendant',\n 'aria-atomic',\n 'aria-autocomplete',\n 'aria-braillelabel',\n 'aria-brailleroledescription',\n 'aria-busy',\n 'aria-checked',\n 'aria-colcount',\n 'aria-colindex',\n 'aria-colindextext',\n 'aria-colspan',\n 'aria-controls',\n 'aria-current',\n 'aria-describedby',\n 'aria-description',\n 'aria-details',\n 'aria-disabled',\n 'aria-errormessage',\n 'aria-expanded',\n 'aria-flowto',\n 'aria-haspopup',\n 'aria-hidden',\n 'aria-invalid',\n 'aria-keyshortcuts',\n 'aria-label',\n 'aria-labelledby',\n 'aria-level',\n 'aria-live',\n 'aria-multiline',\n 'aria-multiselectable',\n 'aria-orientation',\n 'aria-owns',\n 'aria-placeholder',\n 'aria-posinset',\n 'aria-pressed',\n 'aria-readonly',\n 'aria-relevant',\n 'aria-required',\n 'aria-roledescription',\n 'aria-rowcount',\n 'aria-rowindex',\n 'aria-rowindextext',\n 'aria-rowspan',\n 'aria-selected',\n 'aria-setsize',\n 'aria-sort',\n 'aria-valuemax',\n 'aria-valuemin',\n 'aria-valuenow',\n 'aria-valuetext',\n 'role',\n]\n\n/**\n * Returns an array of aria attributes that should be copied from\n * the shadow host element to a target within the light DOM.\n *\n * @param element The element that the attributes should be copied from.\n */\nexport const inheritAriaAttributes = (\n element: Element,\n): ReturnType<typeof inheritAttributes> =>\n inheritAttributes(element, ariaAttributes)\n\nconst isProduction = process.env.NODE_ENV === 'production'\nconst prefix = 'Invariant failed'\n\n/**\n * Throws an error if the value is falsy.\n *\n * @param value Value to test.\n * @param message Optional message to display in development builds.\n */\nexport function invariant(value: unknown, message?: string): asserts value {\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (value) return\n if (isProduction) throw new Error(prefix)\n\n const error = message === undefined ? prefix : `${prefix}: ${message}`\n throw new Error(error)\n}\n\n/**\n * From an object pick a set of keys.\n *\n * @param object Object to pick from.\n * @param keys They keys to pick.\n * @returns New object with only the picked keys.\n */\nexport const pick = <T, K extends keyof T>(\n object: T,\n ...keys: K[]\n): Pick<T, K> => {\n const returnValue: Partial<Pick<T, K>> = {}\n for (const key of keys) returnValue[key] = object[key]\n return returnValue as Pick<T, K>\n}\n\nexport type QdsFocusEventDetail = Pick<FocusEvent, 'relatedTarget'>\nexport type QdsInputEventDetail = Pick<\n InputEvent,\n 'data' | 'inputType' | 'isComposing'\n>\nexport const pickFocusEventAttributes = (\n event: FocusEvent,\n): QdsFocusEventDetail => pick(event, 'relatedTarget')\nexport const pickInputEventAttributes = (\n event: InputEvent,\n): QdsInputEventDetail => pick(event, 'data', 'inputType', 'isComposing')\n\nconst getConversionFactor = (\n element: Element,\n unit: string,\n): number | undefined => {\n switch (unit) {\n case 'cm': {\n return 96 / 2.54\n }\n case 'em': {\n return Number.parseFloat(\n globalThis.getComputedStyle(\n element.parentElement ?? document.documentElement,\n ).fontSize,\n )\n }\n case 'in': {\n return 96\n }\n case 'mm': {\n return 96 / 25.4\n }\n case 'pc': {\n return 16\n }\n case 'pt': {\n return 96 / 72\n }\n case 'px': {\n return 1\n }\n case 'rem': {\n return Number.parseFloat(\n globalThis.getComputedStyle(document.documentElement).fontSize,\n )\n }\n default: {\n return undefined\n }\n }\n}\n\nexport const propertyToPx = (\n element: Element,\n property: string,\n): number | undefined => {\n const value = globalThis.getComputedStyle(element).getPropertyValue(property)\n const number = Number.parseFloat(value)\n if (Number.isNaN(number)) return undefined\n const unit = /\\s*[\\d+.-]*\\s*(.*)/.exec(value)?.[1] ?? ''\n\n const conversionFactor = getConversionFactor(element, unit) ?? 1\n return number * conversionFactor\n}\n\nexport const ignorePromise = <T>(promise: Promise<T>): void => {\n promise.catch(() => {\n invariant(false)\n })\n}\n\nexport const isTouchDevice = (): boolean =>\n 'ontouchstart' in globalThis ||\n ('maxTouchPoints' in globalThis && globalThis.navigator.maxTouchPoints > 0)\n\nconst toPretextWhiteSpace = (\n value: string,\n): NonNullable<Parameters<typeof prepare>[2]>['whiteSpace'] =>\n value === 'pre-wrap' ? 'pre-wrap' : 'normal'\n\nconst toPretextWordBreak = (\n value: string,\n): NonNullable<Parameters<typeof prepare>[2]>['wordBreak'] =>\n value === 'keep-all' ? 'keep-all' : 'normal'\n\n/**\n * Checks if an element's ellipsis is active.\n *\n * @param element The element to check.\n * @returns `true` if ellipsis is active, `false` otherwise.\n */\nexport const isEllipsisActive = (element: Element): boolean => {\n const computedStyle = globalThis.getComputedStyle(element)\n const {\n webkitLineClamp,\n lineHeight,\n font,\n fontStyle,\n fontWeight,\n fontSize,\n fontFamily,\n paddingLeft,\n paddingRight,\n borderLeftWidth,\n borderRightWidth,\n whiteSpace,\n wordBreak,\n } = computedStyle\n\n // `font` shorthand returns \"\" in Chromium/Firefox for shadow DOM elements\n // whose font was set via CSS custom properties. Build it from the individual\n // sub-properties which are always reliably populated.\n const resolvedFont =\n font === ''\n ? `${fontStyle} ${fontWeight} ${fontSize} ${fontFamily}`.trim()\n : font\n\n const parsedLineClamp = Number.parseInt(webkitLineClamp, 10)\n if (Number.isNaN(parsedLineClamp)) {\n return element.scrollWidth > element.clientWidth\n }\n\n const parsedLineHeight = Number.parseFloat(lineHeight)\n if (Number.isNaN(parsedLineHeight)) {\n return element.scrollHeight > element.clientHeight\n }\n\n const contentWidth =\n element.getBoundingClientRect().width -\n Number.parseFloat(paddingLeft) -\n Number.parseFloat(paddingRight) -\n Number.parseFloat(borderLeftWidth) -\n Number.parseFloat(borderRightWidth)\n if (contentWidth <= 0) return false\n\n const text = element.textContent ?? ''\n if (text.trim() === '') return false\n\n const parsedLetterSpacing = Number.parseFloat(computedStyle.letterSpacing)\n const letterSpacing = Number.isNaN(parsedLetterSpacing)\n ? undefined\n : parsedLetterSpacing\n\n try {\n const prepared = prepare(text, resolvedFont, {\n letterSpacing,\n whiteSpace: toPretextWhiteSpace(whiteSpace),\n wordBreak: toPretextWordBreak(wordBreak),\n })\n const { lineCount } = layout(prepared, contentWidth, parsedLineHeight)\n return lineCount > parsedLineClamp\n } catch {\n return element.scrollHeight > parsedLineClamp * parsedLineHeight\n }\n}\n\nexport const determineLinkIcon = (\n target?: string,\n // eslint-disable-next-line unicorn/prevent-abbreviations\n rel?: string,\n): LinkIcon | undefined => {\n if (!(rel?.split(' ') ?? []).includes('external')) return undefined\n return target === '_blank' ? 'external-new-tab-link' : 'external-link'\n}\n\nexport const resolveTarget = (\n target?: ReferenceElement | string | (() => ReferenceElement | string),\n): ReferenceElement | undefined => {\n const resolvedTarget = typeof target === 'function' ? target() : target\n if (typeof resolvedTarget !== 'string') return resolvedTarget\n\n const element = document.querySelector(resolvedTarget)\n if (element === null) throw new Error('String must resolve to an Element.')\n return element\n}\n\n/**\n * Patched version of requestAnimationFrame that avoids ngzone\n * Use only when you know ngzone should not run\n */\nconst raf = (h: FrameRequestCallback): number => {\n const win = window as Window & {\n ['__zone_symbol__requestAnimationFrame']?: (\n callback: FrameRequestCallback,\n ) => number\n }\n // eslint-disable-next-line no-underscore-dangle\n if (typeof win.__zone_symbol__requestAnimationFrame === 'function') {\n // eslint-disable-next-line no-underscore-dangle\n return win.__zone_symbol__requestAnimationFrame(h)\n }\n if (typeof requestAnimationFrame === 'function') {\n return requestAnimationFrame(h)\n }\n return setTimeout(h)\n}\n\n/**\n * Waits for a component to be ready for\n * both custom element and non-custom element builds.\n * If non-custom element build, el.componentOnReady\n * will be used.\n * For custom element builds, we wait a frame\n * so that the inner contents of the component\n * have a chance to render.\n *\n * Use this utility rather than calling\n * el.componentOnReady yourself.\n *\n * Reference: https://stenciljs.com/docs/api#componentonready\n */\nexport const componentOnReady = <\n T extends { componentOnReady?: () => Promise<T> },\n>(\n element: T,\n callback: (element_: T) => void,\n): void => {\n if (element.componentOnReady === undefined) {\n raf(() => {\n callback(element)\n })\n } else {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n element.componentOnReady().then((resolvedElement) => {\n callback(resolvedElement)\n })\n }\n}\n\nconst resolvePanelFromValue = (value: unknown): HTMLElement | undefined => {\n if (value instanceof HTMLElement) {\n return value\n }\n\n if (typeof value === 'string') {\n const element = document.querySelector(value)\n return element instanceof HTMLElement ? element : undefined\n }\n\n return undefined\n}\n\nexport const resolvePanelElement = (tab: {\n panel: Element | string | (() => Element | string)\n}): HTMLElement | undefined => {\n const panelValue = typeof tab.panel === 'function' ? tab.panel() : tab.panel\n return resolvePanelFromValue(panelValue)\n}\n\ntype OffsetValue = Except<\n Exclude<\n LibraryOffsetOptions,\n // eslint-disable-next-line @typescript-eslint/ban-types\n Function | number\n >,\n 'mainAxis'\n>\ntype OffsetFunction = (state: MiddlewareState) => OffsetValue\nexport type OffsetOptions = OffsetFunction | OffsetValue\n\nexport const HORIZONTAL_MOVE_KEYS: ReadonlySet<string> = new Set([\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n])\n\nexport const VERTICAL_MOVE_KEYS: ReadonlySet<string> = new Set([\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n])\n\nexport const closestElement = (\n selector: string,\n base: Element,\n): Element | undefined => {\n function closestFrom(\n element: Document | Element | typeof globalThis,\n ): Element | undefined {\n if (element === document || element === globalThis) return undefined\n const { assignedSlot } = element as Slottable\n // eslint-disable-next-line no-param-reassign\n if (assignedSlot) element = assignedSlot\n const found = (element as Element).closest(selector)\n return (\n found ??\n closestFrom(((element as Element).getRootNode() as ShadowRoot).host)\n )\n }\n return closestFrom(base)\n}\n\nexport const isRTL = (element: Element): boolean =>\n getComputedStyle(element).direction === 'rtl'\n\nexport const getSubmenuOpenKey = (element: Element): string =>\n isRTL(element) ? 'ArrowLeft' : 'ArrowRight'\n\nexport const getSubmenuCloseKey = (element: Element): string =>\n isRTL(element) ? 'ArrowRight' : 'ArrowLeft'\n\nexport const isCurrentPage = (url: string): boolean => {\n try {\n const currentUrl = new URL(window.location.href)\n const targetUrl = new URL(url)\n return (\n currentUrl.origin === targetUrl.origin &&\n currentUrl.pathname === targetUrl.pathname\n )\n } catch {\n return false\n }\n}\n"],"version":3}
|