@pdfme/schemas 6.1.13-dev.4 → 6.1.13-dev.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/barcodes/helper.d.ts +12 -2
  2. package/dist/{builtins-8En4EIAG.js → builtins-C-2wyB_3.js} +140 -83
  3. package/dist/builtins-C-2wyB_3.js.map +1 -0
  4. package/dist/builtins.js +1 -1
  5. package/dist/dynamicLayout.js +4 -4
  6. package/dist/{dynamicTemplate-DQF7c6NR.js → dynamicTemplate-CcnCXHfM.js} +2 -2
  7. package/dist/{dynamicTemplate-DQF7c6NR.js.map → dynamicTemplate-CcnCXHfM.js.map} +1 -1
  8. package/dist/{dynamicTemplate-DFk_de1Y.js → dynamicTemplate-DEwOv_DE.js} +7 -6
  9. package/dist/dynamicTemplate-DEwOv_DE.js.map +1 -0
  10. package/dist/{dynamicTemplate-CnK0nlnj.js → dynamicTemplate-DkTVIMNr.js} +2 -2
  11. package/dist/{dynamicTemplate-CnK0nlnj.js.map → dynamicTemplate-DkTVIMNr.js.map} +1 -1
  12. package/dist/graphics/orientation.d.ts +31 -0
  13. package/dist/{helper-VroN19Ci.js → helper-BR4_UZA5.js} +26 -3
  14. package/dist/helper-BR4_UZA5.js.map +1 -0
  15. package/dist/index.js +492 -123
  16. package/dist/index.js.map +1 -1
  17. package/dist/lists.js +2 -2
  18. package/dist/{measure-BC7tjAtT.js → measure-BarlRI1L.js} +71 -227
  19. package/dist/measure-BarlRI1L.js.map +1 -0
  20. package/dist/multiVariableText/helper.d.ts +8 -0
  21. package/dist/multiVariableText/types.d.ts +2 -0
  22. package/dist/pdfFont.d.ts +8 -0
  23. package/dist/splitRange-B6311Noc.js +10854 -0
  24. package/dist/splitRange-B6311Noc.js.map +1 -0
  25. package/dist/tables.js +2 -2
  26. package/dist/text/helper.d.ts +33 -1
  27. package/dist/text/lineBreak.d.ts +69 -0
  28. package/dist/text/lineBreakClasses.generated.d.ts +11 -0
  29. package/dist/text/richText.d.ts +2 -0
  30. package/dist/text/uiRender.d.ts +3 -1
  31. package/dist/text/wrap.d.ts +67 -0
  32. package/dist/texts.js +3 -3
  33. package/dist/{utils-D_sFXK0U.js → utils-CPYF2FY_.js} +18 -15
  34. package/dist/utils-CPYF2FY_.js.map +1 -0
  35. package/dist/utils.d.ts +3 -2
  36. package/dist/utils.js +3 -3
  37. package/package.json +3 -1
  38. package/dist/builtins-8En4EIAG.js.map +0 -1
  39. package/dist/dynamicTemplate-DFk_de1Y.js.map +0 -1
  40. package/dist/helper-VroN19Ci.js.map +0 -1
  41. package/dist/measure-BC7tjAtT.js.map +0 -1
  42. package/dist/splitRange-BHV0vb0Q.js +0 -504
  43. package/dist/splitRange-BHV0vb0Q.js.map +0 -1
  44. package/dist/utils-D_sFXK0U.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splitRange-B6311Noc.js","names":[],"sources":["../src/text/constants.ts","../src/box.ts","../src/text/lineBreakClasses.generated.ts","../src/text/lineBreak.ts","../src/text/wrap.ts","../src/text/helper.ts","../src/splitRange.ts"],"sourcesContent":["import {\n ALIGNMENT,\n VERTICAL_ALIGNMENT,\n DYNAMIC_FONT_SIZE_FIT,\n TEXT_FORMAT,\n TEXT_OVERFLOW,\n FONT_VARIANT_FALLBACK,\n} from './types.js';\n\nexport const DEFAULT_FONT_SIZE = 13;\n\nexport const ALIGN_LEFT = 'left' as ALIGNMENT;\nexport const ALIGN_CENTER = 'center' as ALIGNMENT;\nexport const ALIGN_RIGHT = 'right' as ALIGNMENT;\nexport const ALIGN_JUSTIFY = 'justify' as ALIGNMENT;\nexport const DEFAULT_ALIGNMENT = ALIGN_LEFT;\nexport const VERTICAL_ALIGN_TOP = 'top' as VERTICAL_ALIGNMENT;\nexport const VERTICAL_ALIGN_MIDDLE = 'middle' as VERTICAL_ALIGNMENT;\nexport const VERTICAL_ALIGN_BOTTOM = 'bottom' as VERTICAL_ALIGNMENT;\nexport const DEFAULT_VERTICAL_ALIGNMENT = VERTICAL_ALIGN_TOP;\nexport const DEFAULT_LINE_HEIGHT = 1;\nexport const DEFAULT_CHARACTER_SPACING = 0;\nexport const DEFAULT_FONT_COLOR = '#000000';\nexport const PLACEHOLDER_FONT_COLOR = '#A0A0A0';\nexport const TEXT_FORMAT_PLAIN = 'plain' as const satisfies TEXT_FORMAT;\nexport const TEXT_FORMAT_INLINE_MARKDOWN = 'inline-markdown' as const satisfies TEXT_FORMAT;\nexport const DEFAULT_TEXT_FORMAT = TEXT_FORMAT_PLAIN;\nexport const TEXT_OVERFLOW_VISIBLE = 'visible' as const satisfies TEXT_OVERFLOW;\nexport const TEXT_OVERFLOW_EXPAND = 'expand' as const satisfies TEXT_OVERFLOW;\nexport const DEFAULT_TEXT_OVERFLOW = TEXT_OVERFLOW_VISIBLE;\nexport const FONT_VARIANT_FALLBACK_SYNTHETIC = 'synthetic' as const satisfies FONT_VARIANT_FALLBACK;\nexport const FONT_VARIANT_FALLBACK_PLAIN = 'plain' as const satisfies FONT_VARIANT_FALLBACK;\nexport const FONT_VARIANT_FALLBACK_ERROR = 'error' as const satisfies FONT_VARIANT_FALLBACK;\nexport const DEFAULT_FONT_VARIANT_FALLBACK = FONT_VARIANT_FALLBACK_SYNTHETIC;\nexport const SYNTHETIC_BOLD_OFFSET_RATIO = 0.03;\nexport const SYNTHETIC_BOLD_PDF_EXTRA_DRAWS = 2;\nexport const SYNTHETIC_BOLD_CSS_TEXT_SHADOW = '0.025em 0 0 currentColor';\nexport const SYNTHETIC_ITALIC_SKEW_DEGREES = 12;\nexport const CODE_BACKGROUND_COLOR = '#f2f3f5';\nexport const CODE_HORIZONTAL_PADDING = 1.5;\nexport const DYNAMIC_FIT_VERTICAL = 'vertical' as DYNAMIC_FONT_SIZE_FIT;\nexport const DYNAMIC_FIT_HORIZONTAL = 'horizontal' as DYNAMIC_FONT_SIZE_FIT;\nexport const DEFAULT_DYNAMIC_FIT = DYNAMIC_FIT_VERTICAL;\nexport const DEFAULT_DYNAMIC_MIN_FONT_SIZE = 4;\n\nexport const DEFAULT_DYNAMIC_MAX_FONT_SIZE = 72;\nexport const FONT_SIZE_ADJUSTMENT = 0.25;\n\nexport const LINE_START_FORBIDDEN_CHARS = [\n // 句読点\n '、',\n '。',\n ',',\n '.',\n\n // 閉じカッコ類\n '」',\n '』',\n ')',\n '}',\n '】',\n '>',\n '≫',\n ']',\n\n // 記号\n '・',\n 'ー',\n '―',\n '-',\n\n // 約物\n '!',\n '!',\n '?',\n '?',\n ':',\n ':',\n ';',\n ';',\n '/',\n '/',\n\n // 繰り返し記号\n 'ゝ',\n '々',\n '〃',\n\n // 拗音・促音(小書きのかな)\n 'ぁ',\n 'ぃ',\n 'ぅ',\n 'ぇ',\n 'ぉ',\n 'っ',\n 'ゃ',\n 'ゅ',\n 'ょ',\n 'ァ',\n 'ィ',\n 'ゥ',\n 'ェ',\n 'ォ',\n 'ッ',\n 'ャ',\n 'ュ',\n 'ョ',\n];\n\nexport const LINE_END_FORBIDDEN_CHARS = [\n // 始め括弧類\n '「',\n '『',\n '(',\n '{',\n '【',\n '<',\n '≪',\n '[',\n '〘',\n '〖',\n '〝',\n '‘',\n '“',\n '⦅',\n '«',\n];\n","import type { PropPanelSchema } from '@pdfme/common';\n\nexport type BoxDimension = {\n top: number;\n right: number;\n bottom: number;\n left: number;\n};\n\nexport type BoxStyleSchema = {\n borderWidth?: Partial<BoxDimension>;\n padding?: Partial<BoxDimension>;\n};\n\nexport type BoxLikeSchema = BoxStyleSchema & {\n position: { x: number; y: number };\n width: number;\n height: number;\n};\n\nexport const createBoxDimension = (value = 0): BoxDimension => ({\n top: value,\n right: value,\n bottom: value,\n left: value,\n});\n\nexport const normalizeBoxDimension = (value?: Partial<BoxDimension>): BoxDimension => ({\n top: value?.top ?? 0,\n right: value?.right ?? 0,\n bottom: value?.bottom ?? 0,\n left: value?.left ?? 0,\n});\n\nexport const getBoxInsets = (schema: BoxStyleSchema) => ({\n borderWidth: normalizeBoxDimension(schema.borderWidth),\n padding: normalizeBoxDimension(schema.padding),\n});\n\nexport const getBoxHorizontalInset = (schema: BoxStyleSchema) => {\n const { borderWidth, padding } = getBoxInsets(schema);\n return borderWidth.left + borderWidth.right + padding.left + padding.right;\n};\n\nexport const getBoxVerticalInset = (schema: BoxStyleSchema) => {\n const { borderWidth, padding } = getBoxInsets(schema);\n return borderWidth.top + borderWidth.bottom + padding.top + padding.bottom;\n};\n\nexport const getBoxContentArea = <T extends BoxLikeSchema>(schema: T) => {\n const { borderWidth, padding } = getBoxInsets(schema);\n const leftInset = borderWidth.left + padding.left;\n const topInset = borderWidth.top + padding.top;\n const rightInset = borderWidth.right + padding.right;\n const bottomInset = borderWidth.bottom + padding.bottom;\n\n return {\n position: {\n x: schema.position.x + leftInset,\n y: schema.position.y + topInset,\n },\n width: Math.max(0, schema.width - leftInset - rightInset),\n height: Math.max(0, schema.height - topInset - bottomInset),\n leftInset,\n topInset,\n rightInset,\n bottomInset,\n };\n};\n\nexport const hasBoxDimension = (dimension?: Partial<BoxDimension>) => {\n const resolved = normalizeBoxDimension(dimension);\n return resolved.top > 0 || resolved.right > 0 || resolved.bottom > 0 || resolved.left > 0;\n};\n\nexport const getSplitBoxDimension = (\n dimension: Partial<BoxDimension> | undefined,\n range: { start: number; end?: number },\n totalUnits: number,\n): BoxDimension => {\n const resolved = normalizeBoxDimension(dimension);\n const end = range.end ?? totalUnits;\n return {\n top: range.start === 0 ? resolved.top : 0,\n right: resolved.right,\n bottom: end >= totalUnits ? resolved.bottom : 0,\n left: resolved.left,\n };\n};\n\nexport const getBoxDimensionPropPanelSchema = (step = 1): Record<string, PropPanelSchema> => {\n const getCommonProp = (): PropPanelSchema => ({\n type: 'number',\n widget: 'inputNumber',\n props: { min: 0, step },\n span: 6,\n });\n return {\n top: { title: 'Top', ...getCommonProp() },\n right: { title: 'Right', ...getCommonProp() },\n bottom: { title: 'Bottom', ...getCommonProp() },\n left: { title: 'Left', ...getCommonProp() },\n };\n};\n","/* eslint-disable */\n/**\n * Compact Unicode LineBreak ranges generated from Unicode 18.0.0 LineBreak.txt.\n * Source: https://www.unicode.org/Public/18.0.0/ucd/LineBreak.txt\n * SHA-256: 91201c52cb2f69d45543147a7e56e8700d4eb52931ae7fe32951f11273275bd3\n * Packed as [start, end, classId, ...]. Lookup is binary search.\n * Do not edit by hand — regenerate with scripts/generate-line-break-classes.mjs.\n */\nexport const LINE_BREAK_UNICODE_VERSION = '18.0.0';\nexport const LINE_BREAK_SOURCE_SHA256 =\n '91201c52cb2f69d45543147a7e56e8700d4eb52931ae7fe32951f11273275bd3';\nexport const LINE_BREAK_RANGE_DATA = new Uint32Array([\n 0, 8, 21, 9, 9, 17, 10, 10, 37, 11, 12, 34, 13, 13, 36, 14, 31, 21, 32, 32, 41, 33, 33, 6, 34, 34,\n 3, 35, 35, 12, 36, 36, 9, 37, 37, 10, 38, 38, 12, 39, 39, 3, 40, 40, 0, 41, 41, 2, 42, 42, 12, 43,\n 43, 9, 44, 44, 8, 45, 45, 16, 46, 46, 8, 47, 47, 7, 48, 57, 11, 58, 59, 8, 60, 62, 12, 63, 63, 6,\n 64, 90, 12, 91, 91, 0, 92, 92, 9, 93, 93, 2, 94, 122, 12, 123, 123, 0, 124, 124, 17, 125, 125, 1,\n 126, 126, 12, 127, 132, 21, 133, 133, 38, 134, 159, 21, 160, 160, 4, 161, 161, 0, 162, 162, 10,\n 163, 165, 9, 166, 166, 12, 167, 168, 33, 169, 169, 12, 170, 170, 33, 171, 171, 3, 172, 172, 12,\n 173, 173, 16, 174, 175, 12, 176, 176, 10, 177, 177, 9, 178, 179, 33, 180, 180, 18, 181, 181, 12,\n 182, 182, 33, 183, 183, 8, 184, 186, 33, 187, 187, 3, 188, 190, 33, 191, 191, 0, 192, 214, 12,\n 215, 215, 33, 216, 246, 12, 247, 247, 33, 248, 710, 12, 711, 711, 33, 712, 712, 18, 713, 715, 33,\n 716, 716, 18, 717, 717, 33, 718, 719, 12, 720, 720, 33, 721, 727, 12, 728, 731, 33, 732, 732, 12,\n 733, 733, 33, 734, 734, 12, 735, 735, 18, 736, 767, 12, 768, 859, 21, 860, 866, 4, 867, 879, 21,\n 880, 887, 12, 890, 893, 12, 894, 894, 8, 895, 895, 12, 900, 902, 12, 903, 903, 8, 904, 906, 12,\n 908, 908, 12, 910, 929, 12, 931, 1154, 12, 1155, 1161, 21, 1162, 1327, 12, 1329, 1366, 12, 1368,\n 1416, 12, 1417, 1417, 8, 1418, 1418, 16, 1419, 1422, 12, 1423, 1423, 9, 1425, 1469, 21, 1470,\n 1470, 16, 1471, 1471, 21, 1472, 1472, 12, 1473, 1474, 21, 1475, 1475, 12, 1476, 1477, 21, 1478,\n 1478, 6, 1479, 1481, 21, 1488, 1514, 13, 1519, 1522, 13, 1523, 1524, 12, 1536, 1541, 11, 1542,\n 1544, 12, 1545, 1547, 10, 1548, 1549, 8, 1550, 1551, 12, 1552, 1562, 21, 1563, 1563, 6, 1564,\n 1564, 21, 1565, 1567, 6, 1568, 1610, 12, 1611, 1631, 21, 1632, 1641, 11, 1642, 1642, 10, 1643,\n 1644, 11, 1645, 1647, 12, 1648, 1648, 21, 1649, 1747, 12, 1748, 1748, 6, 1749, 1749, 12, 1750,\n 1756, 21, 1757, 1757, 11, 1758, 1758, 12, 1759, 1764, 21, 1765, 1766, 12, 1767, 1768, 21, 1769,\n 1769, 12, 1770, 1773, 21, 1774, 1775, 12, 1776, 1785, 11, 1786, 1805, 12, 1807, 1808, 12, 1809,\n 1809, 21, 1810, 1839, 12, 1840, 1866, 21, 1869, 1957, 12, 1958, 1968, 21, 1969, 1969, 12, 1984,\n 1993, 11, 1994, 2026, 12, 2027, 2035, 21, 2036, 2039, 12, 2040, 2040, 8, 2041, 2041, 6, 2042,\n 2042, 12, 2045, 2045, 21, 2046, 2047, 9, 2048, 2069, 12, 2070, 2073, 21, 2074, 2074, 12, 2075,\n 2083, 21, 2084, 2084, 12, 2085, 2087, 21, 2088, 2088, 12, 2089, 2093, 21, 2096, 2110, 12, 2112,\n 2136, 12, 2137, 2139, 21, 2142, 2142, 12, 2144, 2154, 12, 2160, 2191, 12, 2192, 2193, 11, 2199,\n 2207, 21, 2208, 2249, 12, 2250, 2273, 21, 2274, 2274, 11, 2275, 2307, 21, 2308, 2361, 12, 2362,\n 2364, 21, 2365, 2365, 12, 2366, 2383, 21, 2384, 2384, 12, 2385, 2391, 21, 2392, 2401, 12, 2402,\n 2403, 21, 2404, 2405, 17, 2406, 2415, 11, 2416, 2432, 12, 2433, 2435, 21, 2437, 2444, 12, 2447,\n 2448, 12, 2451, 2472, 12, 2474, 2480, 12, 2482, 2482, 12, 2486, 2489, 12, 2492, 2492, 21, 2493,\n 2493, 12, 2494, 2500, 21, 2503, 2504, 21, 2507, 2509, 21, 2510, 2510, 12, 2519, 2519, 21, 2524,\n 2525, 12, 2527, 2529, 12, 2530, 2531, 21, 2534, 2543, 11, 2544, 2545, 12, 2546, 2547, 10, 2548,\n 2552, 12, 2553, 2553, 10, 2554, 2554, 12, 2555, 2555, 9, 2556, 2557, 12, 2558, 2558, 21, 2561,\n 2563, 21, 2565, 2570, 12, 2575, 2576, 12, 2579, 2600, 12, 2602, 2608, 12, 2610, 2611, 12, 2613,\n 2614, 12, 2616, 2617, 12, 2620, 2620, 21, 2622, 2626, 21, 2631, 2632, 21, 2635, 2637, 21, 2641,\n 2641, 21, 2649, 2652, 12, 2654, 2654, 12, 2662, 2671, 11, 2672, 2673, 21, 2674, 2676, 12, 2677,\n 2677, 21, 2678, 2678, 12, 2689, 2691, 21, 2693, 2701, 12, 2703, 2705, 12, 2707, 2728, 12, 2730,\n 2736, 12, 2738, 2739, 12, 2741, 2745, 12, 2748, 2748, 21, 2749, 2749, 12, 2750, 2757, 21, 2759,\n 2761, 21, 2763, 2765, 21, 2768, 2768, 12, 2784, 2785, 12, 2786, 2787, 21, 2790, 2799, 11, 2800,\n 2800, 12, 2801, 2801, 9, 2809, 2809, 12, 2810, 2815, 21, 2817, 2819, 21, 2821, 2828, 12, 2831,\n 2832, 12, 2835, 2856, 12, 2858, 2864, 12, 2866, 2867, 12, 2869, 2873, 12, 2876, 2876, 21, 2877,\n 2877, 12, 2878, 2884, 21, 2887, 2888, 21, 2891, 2893, 21, 2899, 2903, 21, 2908, 2909, 12, 2911,\n 2913, 12, 2914, 2915, 21, 2918, 2927, 11, 2928, 2935, 12, 2946, 2946, 21, 2947, 2947, 12, 2949,\n 2954, 12, 2958, 2960, 12, 2962, 2965, 12, 2969, 2970, 12, 2972, 2972, 12, 2974, 2975, 12, 2979,\n 2980, 12, 2984, 2986, 12, 2990, 3001, 12, 3006, 3010, 21, 3014, 3016, 21, 3018, 3021, 21, 3024,\n 3024, 12, 3031, 3031, 21, 3046, 3055, 11, 3056, 3064, 12, 3065, 3065, 9, 3066, 3066, 12, 3072,\n 3076, 21, 3077, 3084, 12, 3086, 3088, 12, 3090, 3112, 12, 3114, 3129, 12, 3132, 3132, 21, 3133,\n 3133, 12, 3134, 3140, 21, 3142, 3144, 21, 3146, 3149, 21, 3157, 3158, 21, 3160, 3162, 12, 3164,\n 3165, 12, 3168, 3169, 12, 3170, 3171, 21, 3174, 3183, 11, 3191, 3191, 18, 3192, 3200, 12, 3201,\n 3203, 21, 3204, 3204, 18, 3205, 3212, 12, 3214, 3216, 12, 3218, 3240, 12, 3242, 3251, 12, 3253,\n 3257, 12, 3260, 3260, 21, 3261, 3261, 12, 3262, 3268, 21, 3270, 3272, 21, 3274, 3277, 21, 3285,\n 3286, 21, 3292, 3294, 12, 3296, 3297, 12, 3298, 3299, 21, 3302, 3311, 11, 3313, 3314, 12, 3315,\n 3315, 21, 3328, 3331, 21, 3332, 3340, 12, 3342, 3344, 12, 3346, 3386, 12, 3387, 3388, 21, 3389,\n 3389, 12, 3390, 3396, 21, 3398, 3400, 21, 3402, 3405, 21, 3406, 3407, 12, 3412, 3414, 12, 3415,\n 3415, 21, 3416, 3425, 12, 3426, 3427, 21, 3430, 3439, 11, 3440, 3448, 12, 3449, 3449, 10, 3450,\n 3455, 12, 3457, 3459, 21, 3461, 3478, 12, 3482, 3505, 12, 3507, 3515, 12, 3517, 3517, 12, 3520,\n 3526, 12, 3530, 3530, 21, 3535, 3540, 21, 3542, 3542, 21, 3544, 3551, 21, 3558, 3567, 11, 3570,\n 3571, 21, 3572, 3572, 12, 3585, 3642, 39, 3647, 3647, 9, 3648, 3662, 39, 3663, 3663, 12, 3664,\n 3673, 11, 3674, 3675, 17, 3713, 3714, 39, 3716, 3716, 39, 3718, 3722, 39, 3724, 3747, 39, 3749,\n 3749, 39, 3751, 3773, 39, 3776, 3780, 39, 3782, 3782, 39, 3784, 3790, 39, 3792, 3801, 11, 3804,\n 3807, 39, 3840, 3840, 12, 3841, 3844, 18, 3845, 3845, 12, 3846, 3847, 18, 3848, 3848, 4, 3849,\n 3850, 18, 3851, 3851, 17, 3852, 3852, 4, 3853, 3857, 6, 3858, 3858, 4, 3859, 3859, 12, 3860, 3860,\n 6, 3861, 3863, 12, 3864, 3865, 21, 3866, 3871, 12, 3872, 3881, 11, 3882, 3891, 12, 3892, 3892, 17,\n 3893, 3893, 21, 3894, 3894, 12, 3895, 3895, 21, 3896, 3896, 12, 3897, 3897, 21, 3898, 3898, 0,\n 3899, 3899, 1, 3900, 3900, 0, 3901, 3901, 1, 3902, 3903, 21, 3904, 3911, 12, 3913, 3948, 12, 3953,\n 3966, 21, 3967, 3967, 17, 3968, 3972, 21, 3973, 3973, 17, 3974, 3975, 21, 3976, 3980, 12, 3981,\n 3991, 21, 3993, 4028, 21, 4030, 4031, 17, 4032, 4037, 12, 4038, 4038, 21, 4039, 4044, 12, 4046,\n 4047, 12, 4048, 4049, 18, 4050, 4050, 17, 4051, 4051, 18, 4052, 4056, 12, 4057, 4058, 4, 4096,\n 4159, 39, 4160, 4169, 11, 4170, 4171, 17, 4172, 4175, 12, 4176, 4239, 39, 4240, 4249, 11, 4250,\n 4255, 39, 4256, 4293, 12, 4295, 4295, 12, 4301, 4301, 12, 4304, 4351, 12, 4352, 4447, 25, 4448,\n 4519, 26, 4520, 4607, 27, 4608, 4680, 12, 4682, 4685, 12, 4688, 4694, 12, 4696, 4696, 12, 4698,\n 4701, 12, 4704, 4744, 12, 4746, 4749, 12, 4752, 4784, 12, 4786, 4789, 12, 4792, 4798, 12, 4800,\n 4800, 12, 4802, 4805, 12, 4808, 4822, 12, 4824, 4880, 12, 4882, 4885, 12, 4888, 4954, 12, 4957,\n 4959, 21, 4960, 4960, 12, 4961, 4961, 17, 4962, 4988, 12, 4992, 5017, 12, 5024, 5109, 12, 5112,\n 5117, 12, 5120, 5120, 16, 5121, 5759, 12, 5760, 5760, 17, 5761, 5786, 12, 5787, 5787, 0, 5788,\n 5788, 1, 5792, 5866, 12, 5867, 5869, 17, 5870, 5880, 12, 5888, 5905, 12, 5906, 5909, 21, 5919,\n 5937, 12, 5938, 5940, 21, 5941, 5942, 17, 5952, 5969, 12, 5970, 5971, 21, 5984, 5996, 12, 5998,\n 6000, 12, 6002, 6003, 21, 6016, 6099, 39, 6100, 6101, 17, 6102, 6102, 5, 6103, 6103, 39, 6104,\n 6104, 17, 6105, 6105, 12, 6106, 6106, 17, 6107, 6107, 9, 6108, 6109, 39, 6112, 6121, 11, 6128,\n 6137, 12, 6144, 6145, 12, 6146, 6147, 6, 6148, 6149, 17, 6150, 6150, 18, 6151, 6151, 12, 6152,\n 6153, 6, 6154, 6154, 12, 6155, 6157, 21, 6158, 6158, 4, 6159, 6159, 21, 6160, 6169, 11, 6176,\n 6264, 12, 6272, 6276, 12, 6277, 6278, 21, 6279, 6312, 12, 6313, 6313, 21, 6314, 6314, 12, 6320,\n 6389, 12, 6400, 6430, 12, 6432, 6443, 21, 6448, 6459, 21, 6464, 6464, 12, 6468, 6469, 6, 6470,\n 6479, 11, 6480, 6509, 39, 6512, 6516, 39, 6528, 6571, 39, 6576, 6601, 39, 6608, 6618, 11, 6622,\n 6623, 39, 6624, 6678, 12, 6679, 6683, 21, 6686, 6687, 12, 6688, 6750, 39, 6752, 6780, 39, 6783,\n 6783, 21, 6784, 6793, 11, 6800, 6809, 11, 6816, 6829, 39, 6832, 6890, 21, 6891, 6891, 4, 6892,\n 6896, 21, 6912, 6916, 21, 6917, 6963, 12, 6964, 6979, 21, 6980, 6988, 12, 6990, 6991, 17, 6992,\n 7001, 12, 7002, 7003, 17, 7004, 7004, 14, 7005, 7008, 17, 7009, 7018, 14, 7019, 7027, 21, 7028,\n 7036, 14, 7037, 7039, 17, 7040, 7042, 21, 7043, 7072, 12, 7073, 7085, 21, 7086, 7087, 12, 7088,\n 7097, 11, 7098, 7141, 12, 7142, 7153, 21, 7154, 7155, 12, 7164, 7203, 12, 7204, 7223, 21, 7227,\n 7231, 17, 7232, 7241, 11, 7245, 7247, 12, 7248, 7257, 11, 7258, 7293, 12, 7294, 7295, 17, 7296,\n 7306, 12, 7312, 7354, 12, 7357, 7367, 12, 7376, 7378, 21, 7379, 7379, 12, 7380, 7400, 21, 7401,\n 7404, 12, 7405, 7405, 21, 7406, 7411, 12, 7412, 7412, 21, 7413, 7414, 12, 7415, 7417, 21, 7418,\n 7418, 12, 7424, 7615, 12, 7616, 7628, 21, 7629, 7629, 4, 7630, 7675, 21, 7676, 7676, 4, 7677,\n 7679, 21, 7680, 7957, 12, 7960, 7965, 12, 7968, 8005, 12, 8008, 8013, 12, 8016, 8023, 12, 8025,\n 8025, 12, 8027, 8027, 12, 8029, 8029, 12, 8031, 8061, 12, 8064, 8116, 12, 8118, 8132, 12, 8134,\n 8147, 12, 8150, 8155, 12, 8157, 8175, 12, 8178, 8180, 12, 8182, 8188, 12, 8189, 8189, 18, 8190,\n 8190, 12, 8192, 8198, 17, 8199, 8199, 4, 8200, 8202, 17, 8203, 8203, 20, 8204, 8204, 21, 8205,\n 8205, 31, 8206, 8207, 21, 8208, 8208, 16, 8209, 8209, 4, 8210, 8211, 17, 8212, 8212, 19, 8213,\n 8214, 33, 8215, 8215, 12, 8216, 8217, 3, 8218, 8218, 0, 8219, 8221, 3, 8222, 8222, 0, 8223, 8223,\n 3, 8224, 8225, 33, 8226, 8227, 12, 8228, 8230, 15, 8231, 8231, 17, 8232, 8233, 34, 8234, 8238, 21,\n 8239, 8239, 4, 8240, 8247, 10, 8248, 8248, 12, 8249, 8250, 3, 8251, 8251, 33, 8252, 8253, 5, 8254,\n 8259, 12, 8260, 8260, 8, 8261, 8261, 0, 8262, 8262, 1, 8263, 8265, 5, 8266, 8277, 12, 8278, 8278,\n 17, 8279, 8279, 10, 8280, 8283, 17, 8284, 8284, 12, 8285, 8287, 17, 8288, 8288, 22, 8289, 8292,\n 12, 8294, 8303, 21, 8304, 8305, 12, 8308, 8308, 33, 8309, 8316, 12, 8317, 8317, 0, 8318, 8318, 1,\n 8319, 8319, 33, 8320, 8320, 12, 8321, 8324, 33, 8325, 8332, 12, 8333, 8333, 0, 8334, 8334, 1,\n 8335, 8335, 18, 8336, 8351, 12, 8352, 8358, 9, 8359, 8359, 10, 8360, 8373, 9, 8374, 8374, 10,\n 8375, 8378, 9, 8379, 8379, 10, 8380, 8381, 9, 8382, 8382, 10, 8383, 8383, 9, 8384, 8384, 10, 8385,\n 8399, 9, 8400, 8432, 21, 8448, 8450, 12, 8451, 8451, 10, 8452, 8452, 12, 8453, 8453, 33, 8454,\n 8456, 12, 8457, 8457, 10, 8458, 8466, 12, 8467, 8467, 33, 8468, 8469, 12, 8470, 8470, 9, 8471,\n 8480, 12, 8481, 8482, 33, 8483, 8490, 12, 8491, 8491, 33, 8492, 8527, 12, 8528, 8542, 33, 8543,\n 8543, 12, 8544, 8555, 33, 8556, 8559, 12, 8560, 8569, 33, 8570, 8584, 12, 8585, 8585, 33, 8586,\n 8587, 12, 8592, 8601, 33, 8602, 8657, 12, 8658, 8658, 33, 8659, 8659, 12, 8660, 8660, 33, 8661,\n 8703, 12, 8704, 8704, 33, 8705, 8705, 12, 8706, 8707, 33, 8708, 8710, 12, 8711, 8712, 33, 8713,\n 8714, 12, 8715, 8715, 33, 8716, 8718, 12, 8719, 8719, 33, 8720, 8720, 12, 8721, 8721, 33, 8722,\n 8723, 9, 8724, 8724, 12, 8725, 8725, 33, 8726, 8729, 12, 8730, 8730, 33, 8731, 8732, 12, 8733,\n 8736, 33, 8737, 8738, 12, 8739, 8739, 33, 8740, 8740, 12, 8741, 8741, 33, 8742, 8742, 12, 8743,\n 8748, 33, 8749, 8749, 12, 8750, 8750, 33, 8751, 8755, 12, 8756, 8759, 33, 8760, 8763, 12, 8764,\n 8765, 33, 8766, 8775, 12, 8776, 8776, 33, 8777, 8779, 12, 8780, 8780, 33, 8781, 8785, 12, 8786,\n 8786, 33, 8787, 8799, 12, 8800, 8801, 33, 8802, 8803, 12, 8804, 8807, 33, 8808, 8809, 12, 8810,\n 8811, 33, 8812, 8813, 12, 8814, 8815, 33, 8816, 8833, 12, 8834, 8835, 33, 8836, 8837, 12, 8838,\n 8839, 33, 8840, 8852, 12, 8853, 8853, 33, 8854, 8856, 12, 8857, 8857, 33, 8858, 8868, 12, 8869,\n 8869, 33, 8870, 8894, 12, 8895, 8895, 33, 8896, 8942, 12, 8943, 8943, 15, 8944, 8967, 12, 8968,\n 8968, 0, 8969, 8969, 1, 8970, 8970, 0, 8971, 8971, 1, 8972, 8977, 12, 8978, 8978, 33, 8979, 8985,\n 12, 8986, 8987, 14, 8988, 9000, 12, 9001, 9001, 0, 9002, 9002, 1, 9003, 9199, 12, 9200, 9203, 14,\n 9204, 9257, 12, 9280, 9290, 12, 9312, 9470, 33, 9471, 9471, 12, 9472, 9547, 33, 9548, 9551, 12,\n 9552, 9588, 33, 9589, 9599, 12, 9600, 9615, 33, 9616, 9617, 12, 9618, 9621, 33, 9622, 9631, 12,\n 9632, 9633, 33, 9634, 9634, 12, 9635, 9641, 33, 9642, 9649, 12, 9650, 9651, 33, 9652, 9653, 12,\n 9654, 9655, 33, 9656, 9659, 12, 9660, 9661, 33, 9662, 9663, 12, 9664, 9665, 33, 9666, 9669, 12,\n 9670, 9672, 33, 9673, 9674, 12, 9675, 9675, 33, 9676, 9677, 12, 9678, 9681, 33, 9682, 9697, 12,\n 9698, 9701, 33, 9702, 9710, 12, 9711, 9711, 33, 9712, 9727, 12, 9728, 9731, 14, 9732, 9732, 12,\n 9733, 9734, 33, 9735, 9736, 12, 9737, 9737, 33, 9738, 9741, 12, 9742, 9743, 33, 9744, 9747, 12,\n 9748, 9749, 14, 9750, 9751, 33, 9752, 9752, 14, 9753, 9753, 12, 9754, 9756, 14, 9757, 9757, 29,\n 9758, 9759, 14, 9760, 9784, 12, 9785, 9787, 14, 9788, 9791, 12, 9792, 9792, 33, 9793, 9793, 12,\n 9794, 9794, 33, 9795, 9823, 12, 9824, 9825, 33, 9826, 9826, 12, 9827, 9829, 33, 9830, 9830, 12,\n 9831, 9831, 33, 9832, 9832, 14, 9833, 9834, 33, 9835, 9835, 12, 9836, 9837, 33, 9838, 9838, 12,\n 9839, 9839, 33, 9840, 9854, 12, 9855, 9855, 14, 9856, 9885, 12, 9886, 9887, 33, 9888, 9916, 12,\n 9917, 9928, 14, 9929, 9932, 33, 9933, 9933, 14, 9934, 9934, 12, 9935, 9937, 14, 9938, 9938, 33,\n 9939, 9940, 14, 9941, 9943, 33, 9944, 9945, 14, 9946, 9947, 33, 9948, 9948, 14, 9949, 9950, 33,\n 9951, 9953, 14, 9954, 9954, 12, 9955, 9955, 33, 9956, 9959, 12, 9960, 9961, 33, 9962, 9962, 14,\n 9963, 9968, 33, 9969, 9973, 14, 9974, 9974, 33, 9975, 9976, 14, 9977, 9977, 29, 9978, 9978, 14,\n 9979, 9980, 33, 9981, 9988, 14, 9989, 9991, 12, 9992, 9993, 14, 9994, 9997, 29, 9998, 10070, 12,\n 10071, 10071, 33, 10072, 10074, 12, 10075, 10080, 3, 10081, 10081, 12, 10082, 10083, 6, 10084,\n 10084, 14, 10085, 10087, 12, 10088, 10088, 0, 10089, 10089, 1, 10090, 10090, 0, 10091, 10091, 1,\n 10092, 10092, 0, 10093, 10093, 1, 10094, 10094, 0, 10095, 10095, 1, 10096, 10096, 0, 10097, 10097,\n 1, 10098, 10098, 0, 10099, 10099, 1, 10100, 10100, 0, 10101, 10101, 1, 10102, 10131, 33, 10132,\n 10180, 12, 10181, 10181, 0, 10182, 10182, 1, 10183, 10213, 12, 10214, 10214, 0, 10215, 10215, 1,\n 10216, 10216, 0, 10217, 10217, 1, 10218, 10218, 0, 10219, 10219, 1, 10220, 10220, 0, 10221, 10221,\n 1, 10222, 10222, 0, 10223, 10223, 1, 10224, 10239, 12, 10240, 10240, 17, 10241, 10626, 12, 10627,\n 10627, 0, 10628, 10628, 1, 10629, 10629, 0, 10630, 10630, 1, 10631, 10631, 0, 10632, 10632, 1,\n 10633, 10633, 0, 10634, 10634, 1, 10635, 10635, 0, 10636, 10636, 1, 10637, 10637, 0, 10638, 10638,\n 1, 10639, 10639, 0, 10640, 10640, 1, 10641, 10641, 0, 10642, 10642, 1, 10643, 10643, 0, 10644,\n 10644, 1, 10645, 10645, 0, 10646, 10646, 1, 10647, 10647, 0, 10648, 10648, 1, 10649, 10711, 12,\n 10712, 10712, 0, 10713, 10713, 1, 10714, 10714, 0, 10715, 10715, 1, 10716, 10747, 12, 10748,\n 10748, 0, 10749, 10749, 1, 10750, 11092, 12, 11093, 11097, 33, 11098, 11123, 12, 11126, 11502, 12,\n 11503, 11505, 21, 11506, 11507, 12, 11513, 11513, 6, 11514, 11516, 17, 11517, 11517, 12, 11518,\n 11518, 6, 11519, 11519, 17, 11520, 11557, 12, 11559, 11559, 12, 11565, 11565, 12, 11568, 11623,\n 12, 11631, 11631, 12, 11632, 11632, 17, 11647, 11647, 21, 11648, 11670, 12, 11680, 11686, 12,\n 11688, 11694, 12, 11696, 11702, 12, 11704, 11710, 12, 11712, 11718, 12, 11720, 11726, 12, 11728,\n 11734, 12, 11736, 11742, 12, 11744, 11775, 21, 11776, 11789, 3, 11790, 11797, 17, 11798, 11798,\n 12, 11799, 11799, 16, 11800, 11800, 0, 11801, 11801, 17, 11802, 11803, 12, 11804, 11805, 3, 11806,\n 11807, 12, 11808, 11809, 3, 11810, 11810, 0, 11811, 11811, 1, 11812, 11812, 0, 11813, 11813, 1,\n 11814, 11814, 0, 11815, 11815, 1, 11816, 11816, 0, 11817, 11817, 1, 11818, 11821, 17, 11822,\n 11822, 6, 11823, 11823, 12, 11824, 11825, 17, 11826, 11826, 12, 11827, 11828, 17, 11829, 11833,\n 12, 11834, 11835, 19, 11836, 11838, 17, 11839, 11839, 12, 11840, 11840, 16, 11841, 11841, 17,\n 11842, 11842, 0, 11843, 11850, 17, 11851, 11851, 12, 11852, 11852, 17, 11853, 11853, 12, 11854,\n 11855, 17, 11856, 11858, 12, 11859, 11860, 6, 11861, 11861, 0, 11862, 11862, 2, 11863, 11863, 0,\n 11864, 11864, 2, 11865, 11865, 0, 11866, 11866, 2, 11867, 11867, 0, 11868, 11868, 2, 11869, 11869,\n 16, 11872, 11873, 6, 11874, 11874, 0, 11875, 11875, 1, 11904, 11929, 14, 11931, 12019, 14, 12032,\n 12245, 14, 12272, 12287, 14, 12288, 12288, 17, 12289, 12290, 1, 12291, 12292, 14, 12293, 12293, 5,\n 12294, 12295, 14, 12296, 12296, 0, 12297, 12297, 1, 12298, 12298, 0, 12299, 12299, 1, 12300,\n 12300, 0, 12301, 12301, 1, 12302, 12302, 0, 12303, 12303, 1, 12304, 12304, 0, 12305, 12305, 1,\n 12306, 12307, 14, 12308, 12308, 0, 12309, 12309, 1, 12310, 12310, 0, 12311, 12311, 1, 12312,\n 12312, 0, 12313, 12313, 1, 12314, 12314, 0, 12315, 12315, 1, 12316, 12316, 5, 12317, 12317, 0,\n 12318, 12319, 1, 12320, 12329, 14, 12330, 12335, 21, 12336, 12340, 14, 12341, 12341, 21, 12342,\n 12346, 14, 12347, 12348, 5, 12349, 12351, 14, 12353, 12353, 35, 12354, 12354, 14, 12355, 12355,\n 35, 12356, 12356, 14, 12357, 12357, 35, 12358, 12358, 14, 12359, 12359, 35, 12360, 12360, 14,\n 12361, 12361, 35, 12362, 12386, 14, 12387, 12387, 35, 12388, 12418, 14, 12419, 12419, 35, 12420,\n 12420, 14, 12421, 12421, 35, 12422, 12422, 14, 12423, 12423, 35, 12424, 12429, 14, 12430, 12430,\n 35, 12431, 12436, 14, 12437, 12438, 35, 12441, 12442, 21, 12443, 12446, 5, 12447, 12447, 14,\n 12448, 12448, 5, 12449, 12449, 35, 12450, 12450, 14, 12451, 12451, 35, 12452, 12452, 14, 12453,\n 12453, 35, 12454, 12454, 14, 12455, 12455, 35, 12456, 12456, 14, 12457, 12457, 35, 12458, 12482,\n 14, 12483, 12483, 35, 12484, 12514, 14, 12515, 12515, 35, 12516, 12516, 14, 12517, 12517, 35,\n 12518, 12518, 14, 12519, 12519, 35, 12520, 12525, 14, 12526, 12526, 35, 12527, 12532, 14, 12533,\n 12534, 35, 12535, 12538, 14, 12539, 12539, 5, 12540, 12540, 35, 12541, 12542, 5, 12543, 12543, 14,\n 12549, 12591, 14, 12593, 12686, 14, 12688, 12773, 14, 12783, 12783, 14, 12784, 12799, 35, 12800,\n 12830, 14, 12832, 12871, 14, 12872, 12879, 33, 12880, 19903, 14, 19904, 19967, 12, 19968, 40980,\n 14, 40981, 40981, 5, 40982, 42124, 14, 42128, 42182, 14, 42192, 42237, 12, 42238, 42239, 17,\n 42240, 42508, 12, 42509, 42509, 17, 42510, 42510, 6, 42511, 42511, 17, 42512, 42527, 12, 42528,\n 42537, 11, 42538, 42539, 12, 42560, 42606, 12, 42607, 42610, 21, 42611, 42611, 12, 42612, 42621,\n 21, 42622, 42653, 12, 42654, 42655, 21, 42656, 42735, 12, 42736, 42737, 21, 42738, 42738, 12,\n 42739, 42743, 17, 42752, 42973, 12, 42978, 42978, 12, 42993, 43009, 12, 43010, 43010, 21, 43011,\n 43013, 12, 43014, 43014, 21, 43015, 43018, 12, 43019, 43019, 21, 43020, 43042, 12, 43043, 43047,\n 21, 43048, 43051, 12, 43052, 43052, 21, 43056, 43063, 12, 43064, 43064, 10, 43065, 43065, 12,\n 43072, 43123, 12, 43124, 43125, 18, 43126, 43127, 6, 43136, 43137, 21, 43138, 43187, 12, 43188,\n 43205, 21, 43214, 43215, 17, 43216, 43225, 11, 43232, 43249, 21, 43250, 43259, 12, 43260, 43260,\n 18, 43261, 43262, 12, 43263, 43263, 21, 43264, 43273, 11, 43274, 43301, 12, 43302, 43309, 21,\n 43310, 43311, 17, 43312, 43334, 12, 43335, 43347, 21, 43359, 43359, 12, 43360, 43388, 25, 43392,\n 43395, 21, 43396, 43442, 12, 43443, 43455, 21, 43456, 43456, 12, 43457, 43462, 14, 43463, 43465,\n 17, 43466, 43469, 14, 43471, 43471, 17, 43472, 43481, 12, 43486, 43487, 14, 43488, 43503, 39,\n 43504, 43513, 11, 43514, 43518, 39, 43520, 43560, 12, 43561, 43574, 21, 43584, 43586, 17, 43587,\n 43587, 21, 43588, 43595, 17, 43596, 43597, 21, 43600, 43609, 12, 43612, 43612, 14, 43613, 43615,\n 17, 43616, 43714, 39, 43739, 43743, 39, 43744, 43754, 12, 43755, 43759, 21, 43760, 43761, 17,\n 43762, 43764, 12, 43765, 43766, 21, 43777, 43782, 12, 43785, 43790, 12, 43793, 43798, 12, 43808,\n 43814, 12, 43816, 43822, 12, 43824, 43885, 12, 43888, 44002, 12, 44003, 44010, 21, 44011, 44011,\n 17, 44012, 44013, 21, 44016, 44025, 11, 44032, 44032, 23, 44033, 44059, 24, 44060, 44060, 23,\n 44061, 44087, 24, 44088, 44088, 23, 44089, 44115, 24, 44116, 44116, 23, 44117, 44143, 24, 44144,\n 44144, 23, 44145, 44171, 24, 44172, 44172, 23, 44173, 44199, 24, 44200, 44200, 23, 44201, 44227,\n 24, 44228, 44228, 23, 44229, 44255, 24, 44256, 44256, 23, 44257, 44283, 24, 44284, 44284, 23,\n 44285, 44311, 24, 44312, 44312, 23, 44313, 44339, 24, 44340, 44340, 23, 44341, 44367, 24, 44368,\n 44368, 23, 44369, 44395, 24, 44396, 44396, 23, 44397, 44423, 24, 44424, 44424, 23, 44425, 44451,\n 24, 44452, 44452, 23, 44453, 44479, 24, 44480, 44480, 23, 44481, 44507, 24, 44508, 44508, 23,\n 44509, 44535, 24, 44536, 44536, 23, 44537, 44563, 24, 44564, 44564, 23, 44565, 44591, 24, 44592,\n 44592, 23, 44593, 44619, 24, 44620, 44620, 23, 44621, 44647, 24, 44648, 44648, 23, 44649, 44675,\n 24, 44676, 44676, 23, 44677, 44703, 24, 44704, 44704, 23, 44705, 44731, 24, 44732, 44732, 23,\n 44733, 44759, 24, 44760, 44760, 23, 44761, 44787, 24, 44788, 44788, 23, 44789, 44815, 24, 44816,\n 44816, 23, 44817, 44843, 24, 44844, 44844, 23, 44845, 44871, 24, 44872, 44872, 23, 44873, 44899,\n 24, 44900, 44900, 23, 44901, 44927, 24, 44928, 44928, 23, 44929, 44955, 24, 44956, 44956, 23,\n 44957, 44983, 24, 44984, 44984, 23, 44985, 45011, 24, 45012, 45012, 23, 45013, 45039, 24, 45040,\n 45040, 23, 45041, 45067, 24, 45068, 45068, 23, 45069, 45095, 24, 45096, 45096, 23, 45097, 45123,\n 24, 45124, 45124, 23, 45125, 45151, 24, 45152, 45152, 23, 45153, 45179, 24, 45180, 45180, 23,\n 45181, 45207, 24, 45208, 45208, 23, 45209, 45235, 24, 45236, 45236, 23, 45237, 45263, 24, 45264,\n 45264, 23, 45265, 45291, 24, 45292, 45292, 23, 45293, 45319, 24, 45320, 45320, 23, 45321, 45347,\n 24, 45348, 45348, 23, 45349, 45375, 24, 45376, 45376, 23, 45377, 45403, 24, 45404, 45404, 23,\n 45405, 45431, 24, 45432, 45432, 23, 45433, 45459, 24, 45460, 45460, 23, 45461, 45487, 24, 45488,\n 45488, 23, 45489, 45515, 24, 45516, 45516, 23, 45517, 45543, 24, 45544, 45544, 23, 45545, 45571,\n 24, 45572, 45572, 23, 45573, 45599, 24, 45600, 45600, 23, 45601, 45627, 24, 45628, 45628, 23,\n 45629, 45655, 24, 45656, 45656, 23, 45657, 45683, 24, 45684, 45684, 23, 45685, 45711, 24, 45712,\n 45712, 23, 45713, 45739, 24, 45740, 45740, 23, 45741, 45767, 24, 45768, 45768, 23, 45769, 45795,\n 24, 45796, 45796, 23, 45797, 45823, 24, 45824, 45824, 23, 45825, 45851, 24, 45852, 45852, 23,\n 45853, 45879, 24, 45880, 45880, 23, 45881, 45907, 24, 45908, 45908, 23, 45909, 45935, 24, 45936,\n 45936, 23, 45937, 45963, 24, 45964, 45964, 23, 45965, 45991, 24, 45992, 45992, 23, 45993, 46019,\n 24, 46020, 46020, 23, 46021, 46047, 24, 46048, 46048, 23, 46049, 46075, 24, 46076, 46076, 23,\n 46077, 46103, 24, 46104, 46104, 23, 46105, 46131, 24, 46132, 46132, 23, 46133, 46159, 24, 46160,\n 46160, 23, 46161, 46187, 24, 46188, 46188, 23, 46189, 46215, 24, 46216, 46216, 23, 46217, 46243,\n 24, 46244, 46244, 23, 46245, 46271, 24, 46272, 46272, 23, 46273, 46299, 24, 46300, 46300, 23,\n 46301, 46327, 24, 46328, 46328, 23, 46329, 46355, 24, 46356, 46356, 23, 46357, 46383, 24, 46384,\n 46384, 23, 46385, 46411, 24, 46412, 46412, 23, 46413, 46439, 24, 46440, 46440, 23, 46441, 46467,\n 24, 46468, 46468, 23, 46469, 46495, 24, 46496, 46496, 23, 46497, 46523, 24, 46524, 46524, 23,\n 46525, 46551, 24, 46552, 46552, 23, 46553, 46579, 24, 46580, 46580, 23, 46581, 46607, 24, 46608,\n 46608, 23, 46609, 46635, 24, 46636, 46636, 23, 46637, 46663, 24, 46664, 46664, 23, 46665, 46691,\n 24, 46692, 46692, 23, 46693, 46719, 24, 46720, 46720, 23, 46721, 46747, 24, 46748, 46748, 23,\n 46749, 46775, 24, 46776, 46776, 23, 46777, 46803, 24, 46804, 46804, 23, 46805, 46831, 24, 46832,\n 46832, 23, 46833, 46859, 24, 46860, 46860, 23, 46861, 46887, 24, 46888, 46888, 23, 46889, 46915,\n 24, 46916, 46916, 23, 46917, 46943, 24, 46944, 46944, 23, 46945, 46971, 24, 46972, 46972, 23,\n 46973, 46999, 24, 47000, 47000, 23, 47001, 47027, 24, 47028, 47028, 23, 47029, 47055, 24, 47056,\n 47056, 23, 47057, 47083, 24, 47084, 47084, 23, 47085, 47111, 24, 47112, 47112, 23, 47113, 47139,\n 24, 47140, 47140, 23, 47141, 47167, 24, 47168, 47168, 23, 47169, 47195, 24, 47196, 47196, 23,\n 47197, 47223, 24, 47224, 47224, 23, 47225, 47251, 24, 47252, 47252, 23, 47253, 47279, 24, 47280,\n 47280, 23, 47281, 47307, 24, 47308, 47308, 23, 47309, 47335, 24, 47336, 47336, 23, 47337, 47363,\n 24, 47364, 47364, 23, 47365, 47391, 24, 47392, 47392, 23, 47393, 47419, 24, 47420, 47420, 23,\n 47421, 47447, 24, 47448, 47448, 23, 47449, 47475, 24, 47476, 47476, 23, 47477, 47503, 24, 47504,\n 47504, 23, 47505, 47531, 24, 47532, 47532, 23, 47533, 47559, 24, 47560, 47560, 23, 47561, 47587,\n 24, 47588, 47588, 23, 47589, 47615, 24, 47616, 47616, 23, 47617, 47643, 24, 47644, 47644, 23,\n 47645, 47671, 24, 47672, 47672, 23, 47673, 47699, 24, 47700, 47700, 23, 47701, 47727, 24, 47728,\n 47728, 23, 47729, 47755, 24, 47756, 47756, 23, 47757, 47783, 24, 47784, 47784, 23, 47785, 47811,\n 24, 47812, 47812, 23, 47813, 47839, 24, 47840, 47840, 23, 47841, 47867, 24, 47868, 47868, 23,\n 47869, 47895, 24, 47896, 47896, 23, 47897, 47923, 24, 47924, 47924, 23, 47925, 47951, 24, 47952,\n 47952, 23, 47953, 47979, 24, 47980, 47980, 23, 47981, 48007, 24, 48008, 48008, 23, 48009, 48035,\n 24, 48036, 48036, 23, 48037, 48063, 24, 48064, 48064, 23, 48065, 48091, 24, 48092, 48092, 23,\n 48093, 48119, 24, 48120, 48120, 23, 48121, 48147, 24, 48148, 48148, 23, 48149, 48175, 24, 48176,\n 48176, 23, 48177, 48203, 24, 48204, 48204, 23, 48205, 48231, 24, 48232, 48232, 23, 48233, 48259,\n 24, 48260, 48260, 23, 48261, 48287, 24, 48288, 48288, 23, 48289, 48315, 24, 48316, 48316, 23,\n 48317, 48343, 24, 48344, 48344, 23, 48345, 48371, 24, 48372, 48372, 23, 48373, 48399, 24, 48400,\n 48400, 23, 48401, 48427, 24, 48428, 48428, 23, 48429, 48455, 24, 48456, 48456, 23, 48457, 48483,\n 24, 48484, 48484, 23, 48485, 48511, 24, 48512, 48512, 23, 48513, 48539, 24, 48540, 48540, 23,\n 48541, 48567, 24, 48568, 48568, 23, 48569, 48595, 24, 48596, 48596, 23, 48597, 48623, 24, 48624,\n 48624, 23, 48625, 48651, 24, 48652, 48652, 23, 48653, 48679, 24, 48680, 48680, 23, 48681, 48707,\n 24, 48708, 48708, 23, 48709, 48735, 24, 48736, 48736, 23, 48737, 48763, 24, 48764, 48764, 23,\n 48765, 48791, 24, 48792, 48792, 23, 48793, 48819, 24, 48820, 48820, 23, 48821, 48847, 24, 48848,\n 48848, 23, 48849, 48875, 24, 48876, 48876, 23, 48877, 48903, 24, 48904, 48904, 23, 48905, 48931,\n 24, 48932, 48932, 23, 48933, 48959, 24, 48960, 48960, 23, 48961, 48987, 24, 48988, 48988, 23,\n 48989, 49015, 24, 49016, 49016, 23, 49017, 49043, 24, 49044, 49044, 23, 49045, 49071, 24, 49072,\n 49072, 23, 49073, 49099, 24, 49100, 49100, 23, 49101, 49127, 24, 49128, 49128, 23, 49129, 49155,\n 24, 49156, 49156, 23, 49157, 49183, 24, 49184, 49184, 23, 49185, 49211, 24, 49212, 49212, 23,\n 49213, 49239, 24, 49240, 49240, 23, 49241, 49267, 24, 49268, 49268, 23, 49269, 49295, 24, 49296,\n 49296, 23, 49297, 49323, 24, 49324, 49324, 23, 49325, 49351, 24, 49352, 49352, 23, 49353, 49379,\n 24, 49380, 49380, 23, 49381, 49407, 24, 49408, 49408, 23, 49409, 49435, 24, 49436, 49436, 23,\n 49437, 49463, 24, 49464, 49464, 23, 49465, 49491, 24, 49492, 49492, 23, 49493, 49519, 24, 49520,\n 49520, 23, 49521, 49547, 24, 49548, 49548, 23, 49549, 49575, 24, 49576, 49576, 23, 49577, 49603,\n 24, 49604, 49604, 23, 49605, 49631, 24, 49632, 49632, 23, 49633, 49659, 24, 49660, 49660, 23,\n 49661, 49687, 24, 49688, 49688, 23, 49689, 49715, 24, 49716, 49716, 23, 49717, 49743, 24, 49744,\n 49744, 23, 49745, 49771, 24, 49772, 49772, 23, 49773, 49799, 24, 49800, 49800, 23, 49801, 49827,\n 24, 49828, 49828, 23, 49829, 49855, 24, 49856, 49856, 23, 49857, 49883, 24, 49884, 49884, 23,\n 49885, 49911, 24, 49912, 49912, 23, 49913, 49939, 24, 49940, 49940, 23, 49941, 49967, 24, 49968,\n 49968, 23, 49969, 49995, 24, 49996, 49996, 23, 49997, 50023, 24, 50024, 50024, 23, 50025, 50051,\n 24, 50052, 50052, 23, 50053, 50079, 24, 50080, 50080, 23, 50081, 50107, 24, 50108, 50108, 23,\n 50109, 50135, 24, 50136, 50136, 23, 50137, 50163, 24, 50164, 50164, 23, 50165, 50191, 24, 50192,\n 50192, 23, 50193, 50219, 24, 50220, 50220, 23, 50221, 50247, 24, 50248, 50248, 23, 50249, 50275,\n 24, 50276, 50276, 23, 50277, 50303, 24, 50304, 50304, 23, 50305, 50331, 24, 50332, 50332, 23,\n 50333, 50359, 24, 50360, 50360, 23, 50361, 50387, 24, 50388, 50388, 23, 50389, 50415, 24, 50416,\n 50416, 23, 50417, 50443, 24, 50444, 50444, 23, 50445, 50471, 24, 50472, 50472, 23, 50473, 50499,\n 24, 50500, 50500, 23, 50501, 50527, 24, 50528, 50528, 23, 50529, 50555, 24, 50556, 50556, 23,\n 50557, 50583, 24, 50584, 50584, 23, 50585, 50611, 24, 50612, 50612, 23, 50613, 50639, 24, 50640,\n 50640, 23, 50641, 50667, 24, 50668, 50668, 23, 50669, 50695, 24, 50696, 50696, 23, 50697, 50723,\n 24, 50724, 50724, 23, 50725, 50751, 24, 50752, 50752, 23, 50753, 50779, 24, 50780, 50780, 23,\n 50781, 50807, 24, 50808, 50808, 23, 50809, 50835, 24, 50836, 50836, 23, 50837, 50863, 24, 50864,\n 50864, 23, 50865, 50891, 24, 50892, 50892, 23, 50893, 50919, 24, 50920, 50920, 23, 50921, 50947,\n 24, 50948, 50948, 23, 50949, 50975, 24, 50976, 50976, 23, 50977, 51003, 24, 51004, 51004, 23,\n 51005, 51031, 24, 51032, 51032, 23, 51033, 51059, 24, 51060, 51060, 23, 51061, 51087, 24, 51088,\n 51088, 23, 51089, 51115, 24, 51116, 51116, 23, 51117, 51143, 24, 51144, 51144, 23, 51145, 51171,\n 24, 51172, 51172, 23, 51173, 51199, 24, 51200, 51200, 23, 51201, 51227, 24, 51228, 51228, 23,\n 51229, 51255, 24, 51256, 51256, 23, 51257, 51283, 24, 51284, 51284, 23, 51285, 51311, 24, 51312,\n 51312, 23, 51313, 51339, 24, 51340, 51340, 23, 51341, 51367, 24, 51368, 51368, 23, 51369, 51395,\n 24, 51396, 51396, 23, 51397, 51423, 24, 51424, 51424, 23, 51425, 51451, 24, 51452, 51452, 23,\n 51453, 51479, 24, 51480, 51480, 23, 51481, 51507, 24, 51508, 51508, 23, 51509, 51535, 24, 51536,\n 51536, 23, 51537, 51563, 24, 51564, 51564, 23, 51565, 51591, 24, 51592, 51592, 23, 51593, 51619,\n 24, 51620, 51620, 23, 51621, 51647, 24, 51648, 51648, 23, 51649, 51675, 24, 51676, 51676, 23,\n 51677, 51703, 24, 51704, 51704, 23, 51705, 51731, 24, 51732, 51732, 23, 51733, 51759, 24, 51760,\n 51760, 23, 51761, 51787, 24, 51788, 51788, 23, 51789, 51815, 24, 51816, 51816, 23, 51817, 51843,\n 24, 51844, 51844, 23, 51845, 51871, 24, 51872, 51872, 23, 51873, 51899, 24, 51900, 51900, 23,\n 51901, 51927, 24, 51928, 51928, 23, 51929, 51955, 24, 51956, 51956, 23, 51957, 51983, 24, 51984,\n 51984, 23, 51985, 52011, 24, 52012, 52012, 23, 52013, 52039, 24, 52040, 52040, 23, 52041, 52067,\n 24, 52068, 52068, 23, 52069, 52095, 24, 52096, 52096, 23, 52097, 52123, 24, 52124, 52124, 23,\n 52125, 52151, 24, 52152, 52152, 23, 52153, 52179, 24, 52180, 52180, 23, 52181, 52207, 24, 52208,\n 52208, 23, 52209, 52235, 24, 52236, 52236, 23, 52237, 52263, 24, 52264, 52264, 23, 52265, 52291,\n 24, 52292, 52292, 23, 52293, 52319, 24, 52320, 52320, 23, 52321, 52347, 24, 52348, 52348, 23,\n 52349, 52375, 24, 52376, 52376, 23, 52377, 52403, 24, 52404, 52404, 23, 52405, 52431, 24, 52432,\n 52432, 23, 52433, 52459, 24, 52460, 52460, 23, 52461, 52487, 24, 52488, 52488, 23, 52489, 52515,\n 24, 52516, 52516, 23, 52517, 52543, 24, 52544, 52544, 23, 52545, 52571, 24, 52572, 52572, 23,\n 52573, 52599, 24, 52600, 52600, 23, 52601, 52627, 24, 52628, 52628, 23, 52629, 52655, 24, 52656,\n 52656, 23, 52657, 52683, 24, 52684, 52684, 23, 52685, 52711, 24, 52712, 52712, 23, 52713, 52739,\n 24, 52740, 52740, 23, 52741, 52767, 24, 52768, 52768, 23, 52769, 52795, 24, 52796, 52796, 23,\n 52797, 52823, 24, 52824, 52824, 23, 52825, 52851, 24, 52852, 52852, 23, 52853, 52879, 24, 52880,\n 52880, 23, 52881, 52907, 24, 52908, 52908, 23, 52909, 52935, 24, 52936, 52936, 23, 52937, 52963,\n 24, 52964, 52964, 23, 52965, 52991, 24, 52992, 52992, 23, 52993, 53019, 24, 53020, 53020, 23,\n 53021, 53047, 24, 53048, 53048, 23, 53049, 53075, 24, 53076, 53076, 23, 53077, 53103, 24, 53104,\n 53104, 23, 53105, 53131, 24, 53132, 53132, 23, 53133, 53159, 24, 53160, 53160, 23, 53161, 53187,\n 24, 53188, 53188, 23, 53189, 53215, 24, 53216, 53216, 23, 53217, 53243, 24, 53244, 53244, 23,\n 53245, 53271, 24, 53272, 53272, 23, 53273, 53299, 24, 53300, 53300, 23, 53301, 53327, 24, 53328,\n 53328, 23, 53329, 53355, 24, 53356, 53356, 23, 53357, 53383, 24, 53384, 53384, 23, 53385, 53411,\n 24, 53412, 53412, 23, 53413, 53439, 24, 53440, 53440, 23, 53441, 53467, 24, 53468, 53468, 23,\n 53469, 53495, 24, 53496, 53496, 23, 53497, 53523, 24, 53524, 53524, 23, 53525, 53551, 24, 53552,\n 53552, 23, 53553, 53579, 24, 53580, 53580, 23, 53581, 53607, 24, 53608, 53608, 23, 53609, 53635,\n 24, 53636, 53636, 23, 53637, 53663, 24, 53664, 53664, 23, 53665, 53691, 24, 53692, 53692, 23,\n 53693, 53719, 24, 53720, 53720, 23, 53721, 53747, 24, 53748, 53748, 23, 53749, 53775, 24, 53776,\n 53776, 23, 53777, 53803, 24, 53804, 53804, 23, 53805, 53831, 24, 53832, 53832, 23, 53833, 53859,\n 24, 53860, 53860, 23, 53861, 53887, 24, 53888, 53888, 23, 53889, 53915, 24, 53916, 53916, 23,\n 53917, 53943, 24, 53944, 53944, 23, 53945, 53971, 24, 53972, 53972, 23, 53973, 53999, 24, 54000,\n 54000, 23, 54001, 54027, 24, 54028, 54028, 23, 54029, 54055, 24, 54056, 54056, 23, 54057, 54083,\n 24, 54084, 54084, 23, 54085, 54111, 24, 54112, 54112, 23, 54113, 54139, 24, 54140, 54140, 23,\n 54141, 54167, 24, 54168, 54168, 23, 54169, 54195, 24, 54196, 54196, 23, 54197, 54223, 24, 54224,\n 54224, 23, 54225, 54251, 24, 54252, 54252, 23, 54253, 54279, 24, 54280, 54280, 23, 54281, 54307,\n 24, 54308, 54308, 23, 54309, 54335, 24, 54336, 54336, 23, 54337, 54363, 24, 54364, 54364, 23,\n 54365, 54391, 24, 54392, 54392, 23, 54393, 54419, 24, 54420, 54420, 23, 54421, 54447, 24, 54448,\n 54448, 23, 54449, 54475, 24, 54476, 54476, 23, 54477, 54503, 24, 54504, 54504, 23, 54505, 54531,\n 24, 54532, 54532, 23, 54533, 54559, 24, 54560, 54560, 23, 54561, 54587, 24, 54588, 54588, 23,\n 54589, 54615, 24, 54616, 54616, 23, 54617, 54643, 24, 54644, 54644, 23, 54645, 54671, 24, 54672,\n 54672, 23, 54673, 54699, 24, 54700, 54700, 23, 54701, 54727, 24, 54728, 54728, 23, 54729, 54755,\n 24, 54756, 54756, 23, 54757, 54783, 24, 54784, 54784, 23, 54785, 54811, 24, 54812, 54812, 23,\n 54813, 54839, 24, 54840, 54840, 23, 54841, 54867, 24, 54868, 54868, 23, 54869, 54895, 24, 54896,\n 54896, 23, 54897, 54923, 24, 54924, 54924, 23, 54925, 54951, 24, 54952, 54952, 23, 54953, 54979,\n 24, 54980, 54980, 23, 54981, 55007, 24, 55008, 55008, 23, 55009, 55035, 24, 55036, 55036, 23,\n 55037, 55063, 24, 55064, 55064, 23, 55065, 55091, 24, 55092, 55092, 23, 55093, 55119, 24, 55120,\n 55120, 23, 55121, 55147, 24, 55148, 55148, 23, 55149, 55175, 24, 55176, 55176, 23, 55177, 55203,\n 24, 55216, 55238, 26, 55243, 55291, 27, 55296, 57343, 40, 57344, 63743, 42, 63744, 64255, 14,\n 64256, 64262, 12, 64275, 64279, 12, 64285, 64285, 13, 64286, 64286, 21, 64287, 64296, 13, 64297,\n 64297, 12, 64298, 64310, 13, 64312, 64316, 13, 64318, 64318, 13, 64320, 64321, 13, 64323, 64324,\n 13, 64326, 64335, 13, 64336, 64829, 12, 64830, 64830, 1, 64831, 64831, 0, 64832, 64975, 12, 65008,\n 65019, 12, 65020, 65020, 10, 65021, 65023, 12, 65024, 65039, 21, 65040, 65042, 1, 65043, 65044, 5,\n 65045, 65046, 6, 65047, 65047, 0, 65048, 65048, 1, 65049, 65049, 15, 65056, 65056, 4, 65057,\n 65057, 21, 65058, 65058, 4, 65059, 65059, 21, 65060, 65060, 4, 65061, 65061, 21, 65062, 65063, 4,\n 65064, 65064, 21, 65065, 65065, 4, 65066, 65066, 21, 65067, 65067, 4, 65068, 65068, 21, 65069,\n 65070, 4, 65071, 65071, 21, 65072, 65076, 14, 65077, 65077, 0, 65078, 65078, 1, 65079, 65079, 0,\n 65080, 65080, 1, 65081, 65081, 0, 65082, 65082, 1, 65083, 65083, 0, 65084, 65084, 1, 65085, 65085,\n 0, 65086, 65086, 1, 65087, 65087, 0, 65088, 65088, 1, 65089, 65089, 0, 65090, 65090, 1, 65091,\n 65091, 0, 65092, 65092, 1, 65093, 65094, 14, 65095, 65095, 0, 65096, 65096, 1, 65097, 65103, 14,\n 65104, 65106, 1, 65108, 65109, 5, 65110, 65111, 6, 65112, 65112, 14, 65113, 65113, 0, 65114,\n 65114, 1, 65115, 65115, 0, 65116, 65116, 1, 65117, 65117, 0, 65118, 65118, 1, 65119, 65126, 14,\n 65128, 65128, 14, 65129, 65129, 9, 65130, 65130, 10, 65131, 65131, 14, 65136, 65140, 12, 65142,\n 65276, 12, 65279, 65279, 22, 65281, 65281, 6, 65282, 65283, 14, 65284, 65284, 9, 65285, 65285, 10,\n 65286, 65287, 14, 65288, 65288, 0, 65289, 65289, 1, 65290, 65291, 14, 65292, 65292, 1, 65293,\n 65293, 14, 65294, 65294, 1, 65295, 65305, 14, 65306, 65307, 5, 65308, 65310, 14, 65311, 65311, 6,\n 65312, 65338, 14, 65339, 65339, 0, 65340, 65340, 14, 65341, 65341, 1, 65342, 65370, 14, 65371,\n 65371, 0, 65372, 65372, 14, 65373, 65373, 1, 65374, 65374, 14, 65375, 65375, 0, 65376, 65377, 1,\n 65378, 65378, 0, 65379, 65380, 1, 65381, 65381, 5, 65382, 65382, 14, 65383, 65392, 35, 65393,\n 65437, 14, 65438, 65439, 5, 65440, 65470, 14, 65474, 65479, 14, 65482, 65487, 14, 65490, 65495,\n 14, 65498, 65500, 14, 65504, 65504, 10, 65505, 65505, 9, 65506, 65508, 14, 65509, 65510, 9, 65512,\n 65518, 12, 65529, 65531, 21, 65532, 65532, 32, 65533, 65533, 33, 65536, 65547, 12, 65549, 65574,\n 12, 65576, 65594, 12, 65596, 65597, 12, 65599, 65613, 12, 65616, 65629, 12, 65664, 65786, 12,\n 65792, 65794, 17, 65799, 65843, 12, 65847, 65934, 12, 65936, 65948, 12, 65952, 65952, 12, 66000,\n 66044, 12, 66045, 66045, 21, 66176, 66204, 12, 66208, 66256, 12, 66272, 66272, 21, 66273, 66299,\n 12, 66304, 66339, 12, 66349, 66378, 12, 66384, 66421, 12, 66422, 66426, 21, 66432, 66461, 12,\n 66463, 66463, 17, 66464, 66499, 12, 66504, 66511, 12, 66512, 66512, 17, 66513, 66517, 12, 66560,\n 66717, 12, 66720, 66729, 11, 66736, 66771, 12, 66776, 66811, 12, 66816, 66855, 12, 66864, 66915,\n 12, 66927, 66938, 12, 66940, 66954, 12, 66956, 66962, 12, 66964, 66965, 12, 66967, 66977, 12,\n 66979, 66993, 12, 66995, 67001, 12, 67003, 67004, 12, 67008, 67059, 12, 67072, 67382, 12, 67392,\n 67413, 12, 67424, 67431, 12, 67456, 67461, 12, 67463, 67504, 12, 67506, 67519, 12, 67584, 67589,\n 12, 67592, 67592, 12, 67594, 67637, 12, 67639, 67640, 12, 67644, 67644, 12, 67647, 67669, 12,\n 67671, 67671, 17, 67672, 67742, 12, 67751, 67759, 12, 67808, 67826, 12, 67828, 67829, 12, 67835,\n 67867, 12, 67871, 67871, 17, 67872, 67897, 12, 67903, 67929, 12, 67968, 68023, 12, 68028, 68047,\n 12, 68050, 68096, 12, 68097, 68099, 21, 68101, 68102, 21, 68108, 68111, 21, 68112, 68115, 12,\n 68117, 68119, 12, 68121, 68149, 12, 68152, 68154, 21, 68159, 68159, 21, 68160, 68168, 12, 68176,\n 68183, 17, 68184, 68184, 12, 68192, 68255, 12, 68288, 68324, 12, 68325, 68326, 21, 68331, 68335,\n 12, 68336, 68341, 17, 68342, 68342, 15, 68352, 68405, 12, 68409, 68415, 17, 68416, 68437, 12,\n 68440, 68466, 12, 68472, 68497, 12, 68505, 68508, 12, 68521, 68527, 12, 68608, 68680, 12, 68736,\n 68786, 12, 68800, 68850, 12, 68858, 68899, 12, 68900, 68903, 21, 68912, 68921, 11, 68928, 68937,\n 11, 68938, 68965, 12, 68969, 68973, 21, 68974, 68974, 16, 68975, 68997, 12, 69006, 69007, 12,\n 69216, 69246, 12, 69248, 69289, 12, 69291, 69292, 21, 69293, 69293, 16, 69296, 69297, 12, 69314,\n 69319, 12, 69321, 69322, 12, 69323, 69327, 21, 69328, 69328, 17, 69329, 69358, 12, 69360, 69375,\n 21, 69376, 69415, 12, 69424, 69445, 12, 69446, 69456, 21, 69457, 69465, 12, 69488, 69505, 12,\n 69506, 69509, 21, 69510, 69513, 12, 69552, 69579, 12, 69600, 69622, 12, 69632, 69634, 21, 69635,\n 69687, 12, 69688, 69701, 21, 69702, 69702, 12, 69703, 69704, 17, 69705, 69709, 14, 69714, 69733,\n 14, 69734, 69743, 12, 69744, 69744, 21, 69745, 69746, 12, 69747, 69748, 21, 69749, 69749, 12,\n 69759, 69759, 4, 69760, 69762, 21, 69763, 69807, 12, 69808, 69818, 21, 69819, 69820, 12, 69821,\n 69821, 11, 69822, 69825, 17, 69826, 69826, 21, 69837, 69837, 11, 69840, 69864, 12, 69872, 69881,\n 11, 69888, 69890, 21, 69891, 69926, 12, 69927, 69940, 21, 69942, 69951, 11, 69952, 69955, 17,\n 69956, 69956, 12, 69957, 69958, 21, 69959, 69959, 12, 69968, 70002, 12, 70003, 70003, 21, 70004,\n 70004, 12, 70005, 70005, 18, 70006, 70006, 12, 70016, 70018, 21, 70019, 70066, 12, 70067, 70080,\n 21, 70081, 70084, 12, 70085, 70086, 17, 70087, 70087, 12, 70088, 70088, 17, 70089, 70092, 21,\n 70093, 70093, 12, 70094, 70095, 21, 70096, 70105, 11, 70106, 70106, 12, 70107, 70107, 18, 70108,\n 70108, 12, 70109, 70111, 17, 70113, 70132, 12, 70144, 70161, 12, 70163, 70187, 12, 70188, 70199,\n 21, 70200, 70201, 17, 70202, 70202, 12, 70203, 70204, 17, 70205, 70205, 12, 70206, 70206, 21,\n 70207, 70208, 12, 70209, 70209, 21, 70272, 70278, 12, 70280, 70280, 12, 70282, 70285, 12, 70287,\n 70301, 12, 70303, 70312, 12, 70313, 70313, 17, 70320, 70366, 12, 70367, 70378, 21, 70384, 70393,\n 11, 70400, 70403, 21, 70405, 70412, 12, 70415, 70416, 12, 70419, 70440, 12, 70442, 70448, 12,\n 70450, 70451, 12, 70453, 70457, 12, 70459, 70460, 21, 70461, 70461, 17, 70462, 70468, 21, 70471,\n 70472, 21, 70475, 70476, 21, 70477, 70477, 12, 70480, 70480, 12, 70487, 70487, 21, 70493, 70493,\n 17, 70494, 70497, 12, 70498, 70499, 21, 70502, 70508, 21, 70512, 70516, 21, 70528, 70537, 12,\n 70539, 70539, 12, 70542, 70542, 12, 70544, 70581, 12, 70583, 70583, 14, 70584, 70592, 21, 70594,\n 70594, 21, 70597, 70597, 21, 70599, 70602, 21, 70604, 70607, 21, 70608, 70609, 12, 70610, 70610,\n 21, 70611, 70613, 14, 70615, 70616, 14, 70625, 70626, 21, 70656, 70708, 12, 70709, 70726, 21,\n 70727, 70730, 12, 70731, 70734, 17, 70735, 70735, 12, 70736, 70745, 11, 70746, 70747, 17, 70749,\n 70749, 12, 70750, 70750, 21, 70751, 70753, 12, 70784, 70831, 12, 70832, 70851, 21, 70852, 70855,\n 12, 70864, 70873, 11, 71040, 71086, 12, 71087, 71093, 21, 71096, 71104, 21, 71105, 71105, 18,\n 71106, 71107, 17, 71108, 71109, 6, 71110, 71112, 12, 71113, 71127, 17, 71128, 71131, 12, 71132,\n 71133, 21, 71168, 71215, 12, 71216, 71232, 21, 71233, 71234, 17, 71235, 71236, 12, 71248, 71257,\n 11, 71264, 71276, 18, 71296, 71338, 12, 71339, 71351, 21, 71352, 71353, 12, 71360, 71369, 11,\n 71376, 71395, 11, 71424, 71450, 39, 71453, 71467, 39, 71472, 71481, 11, 71482, 71483, 39, 71484,\n 71486, 17, 71487, 71494, 39, 71680, 71723, 12, 71724, 71738, 21, 71739, 71739, 12, 71840, 71903,\n 12, 71904, 71913, 11, 71914, 71922, 12, 71935, 71942, 12, 71945, 71945, 12, 71948, 71955, 12,\n 71957, 71958, 12, 71960, 71983, 12, 71984, 71989, 21, 71991, 71992, 21, 71995, 71997, 21, 71998,\n 71999, 12, 72000, 72000, 21, 72001, 72001, 12, 72002, 72003, 21, 72004, 72006, 17, 72016, 72025,\n 12, 72096, 72103, 12, 72106, 72144, 12, 72145, 72151, 21, 72154, 72160, 21, 72161, 72161, 12,\n 72162, 72162, 18, 72163, 72163, 12, 72164, 72164, 21, 72192, 72192, 12, 72193, 72202, 21, 72203,\n 72242, 12, 72243, 72249, 21, 72250, 72250, 12, 72251, 72254, 21, 72255, 72255, 18, 72256, 72256,\n 12, 72257, 72260, 17, 72261, 72261, 18, 72262, 72262, 12, 72263, 72263, 21, 72272, 72272, 12,\n 72273, 72283, 21, 72284, 72329, 12, 72330, 72345, 21, 72346, 72348, 17, 72349, 72349, 12, 72350,\n 72352, 18, 72353, 72354, 17, 72368, 72440, 12, 72448, 72457, 18, 72458, 72458, 12, 72544, 72551,\n 21, 72640, 72673, 12, 72688, 72697, 11, 72704, 72712, 12, 72714, 72750, 12, 72751, 72758, 21,\n 72760, 72767, 21, 72768, 72768, 12, 72769, 72773, 17, 72784, 72793, 11, 72794, 72812, 12, 72816,\n 72816, 18, 72817, 72817, 6, 72818, 72847, 12, 72850, 72871, 21, 72873, 72886, 21, 72960, 72966,\n 12, 72968, 72969, 12, 72971, 73008, 12, 73009, 73014, 21, 73018, 73018, 21, 73020, 73021, 21,\n 73023, 73029, 21, 73030, 73030, 12, 73031, 73031, 21, 73040, 73049, 11, 73056, 73061, 12, 73063,\n 73064, 12, 73066, 73097, 12, 73098, 73102, 21, 73104, 73105, 21, 73107, 73111, 21, 73112, 73112,\n 12, 73120, 73129, 11, 73136, 73179, 12, 73184, 73193, 11, 73200, 73200, 21, 73201, 73201, 12,\n 73440, 73457, 12, 73458, 73458, 17, 73459, 73462, 21, 73463, 73464, 17, 73472, 73473, 21, 73474,\n 73474, 12, 73475, 73475, 21, 73476, 73488, 12, 73490, 73523, 12, 73524, 73530, 21, 73534, 73537,\n 21, 73538, 73538, 12, 73539, 73540, 17, 73541, 73551, 14, 73552, 73561, 12, 73562, 73562, 21,\n 73648, 73648, 12, 73664, 73692, 12, 73693, 73696, 10, 73697, 73713, 12, 73727, 73727, 17, 73728,\n 74649, 12, 74752, 74863, 12, 74864, 74868, 17, 74869, 75075, 12, 75088, 75398, 12, 77712, 77810,\n 12, 77824, 78423, 12, 78424, 78426, 0, 78427, 78429, 1, 78430, 78465, 12, 78466, 78466, 1, 78467,\n 78469, 12, 78470, 78470, 0, 78471, 78471, 1, 78472, 78472, 0, 78473, 78473, 1, 78474, 78712, 12,\n 78713, 78713, 0, 78714, 78715, 1, 78716, 78894, 12, 78895, 78895, 0, 78896, 78902, 4, 78903,\n 78903, 0, 78904, 78904, 1, 78905, 78907, 4, 78908, 78908, 0, 78909, 78909, 1, 78910, 78910, 0,\n 78911, 78911, 1, 78912, 78912, 21, 78913, 78918, 12, 78919, 78933, 21, 78944, 82938, 12, 82944,\n 83405, 12, 83406, 83406, 0, 83407, 83407, 1, 83408, 83526, 12, 90368, 90397, 12, 90398, 90415, 21,\n 90416, 90425, 12, 92160, 92728, 12, 92736, 92766, 12, 92768, 92777, 11, 92782, 92783, 17, 92784,\n 92862, 12, 92864, 92873, 11, 92880, 92909, 12, 92912, 92916, 21, 92917, 92917, 17, 92928, 92975,\n 12, 92976, 92982, 21, 92983, 92985, 17, 92986, 92995, 12, 92996, 92996, 17, 92997, 92997, 12,\n 93008, 93017, 11, 93019, 93025, 12, 93027, 93047, 12, 93053, 93071, 12, 93504, 93549, 12, 93550,\n 93551, 17, 93552, 93561, 11, 93760, 93846, 12, 93847, 93848, 17, 93849, 93850, 12, 93856, 93880,\n 12, 93883, 93907, 12, 93952, 94026, 12, 94031, 94031, 21, 94032, 94032, 12, 94033, 94087, 21,\n 94095, 94098, 21, 94099, 94111, 12, 94176, 94179, 5, 94180, 94180, 4, 94192, 94193, 21, 94194,\n 94195, 5, 94196, 94198, 14, 94208, 101119, 14, 101120, 101594, 12, 101631, 101631, 12, 101632,\n 101664, 14, 101760, 101874, 14, 101888, 102801, 14, 102816, 102866, 14, 110576, 110579, 12,\n 110581, 110587, 12, 110589, 110590, 12, 110592, 110888, 14, 110898, 110898, 35, 110928, 110930,\n 35, 110933, 110933, 35, 110948, 110952, 35, 110960, 111355, 14, 113664, 113770, 12, 113776,\n 113788, 12, 113792, 113800, 12, 113808, 113817, 12, 113820, 113820, 12, 113821, 113822, 21,\n 113823, 113823, 17, 113824, 113827, 21, 117760, 117999, 12, 118000, 118009, 11, 118010, 118012,\n 12, 118016, 118451, 12, 118458, 118480, 12, 118482, 118484, 12, 118493, 118525, 12, 118528,\n 118573, 21, 118576, 118598, 21, 118608, 118723, 12, 118784, 119029, 12, 119040, 119078, 12,\n 119079, 119080, 21, 119081, 119140, 12, 119141, 119145, 21, 119146, 119148, 12, 119149, 119170,\n 21, 119171, 119172, 12, 119173, 119179, 21, 119180, 119209, 12, 119210, 119213, 21, 119214,\n 119361, 12, 119362, 119364, 21, 119365, 119365, 12, 119376, 119378, 21, 119379, 119386, 12,\n 119387, 119388, 21, 119389, 119390, 12, 119391, 119391, 21, 119392, 119423, 12, 119424, 119425,\n 21, 119488, 119507, 12, 119520, 119539, 12, 119552, 119638, 12, 119648, 119672, 12, 119808,\n 119892, 12, 119894, 119964, 12, 119966, 119967, 12, 119970, 119970, 12, 119973, 119974, 12,\n 119977, 119980, 12, 119982, 119993, 12, 119995, 119995, 12, 119997, 120003, 12, 120005, 120069,\n 12, 120071, 120074, 12, 120077, 120084, 12, 120086, 120092, 12, 120094, 120121, 12, 120123,\n 120126, 12, 120128, 120132, 12, 120134, 120134, 12, 120138, 120144, 12, 120146, 120486, 12,\n 120488, 120779, 12, 120782, 120831, 11, 120832, 121343, 12, 121344, 121398, 21, 121399, 121402,\n 12, 121403, 121452, 21, 121453, 121460, 12, 121461, 121461, 21, 121462, 121475, 12, 121476,\n 121476, 21, 121477, 121478, 12, 121479, 121482, 17, 121483, 121483, 12, 121499, 121503, 21,\n 121505, 121519, 21, 121600, 121628, 12, 122624, 122753, 12, 122768, 122774, 12, 122829, 122879,\n 12, 122880, 122886, 21, 122888, 122904, 21, 122907, 122913, 21, 122915, 122916, 21, 122918,\n 122922, 21, 122928, 122989, 12, 123023, 123023, 21, 123136, 123180, 12, 123184, 123190, 21,\n 123191, 123197, 12, 123200, 123209, 11, 123214, 123215, 12, 123536, 123565, 12, 123566, 123566,\n 21, 123584, 123627, 12, 123628, 123631, 21, 123632, 123641, 11, 123647, 123647, 9, 124112, 124139,\n 12, 124140, 124143, 21, 124144, 124153, 11, 124368, 124397, 12, 124398, 124399, 21, 124400,\n 124400, 12, 124401, 124410, 11, 124415, 124415, 12, 124608, 124638, 12, 124640, 124642, 12,\n 124643, 124643, 21, 124644, 124645, 12, 124646, 124646, 21, 124647, 124653, 12, 124654, 124655,\n 21, 124656, 124660, 12, 124661, 124661, 21, 124670, 124671, 12, 124896, 124902, 12, 124904,\n 124907, 12, 124909, 124910, 12, 124912, 124926, 12, 124928, 125124, 12, 125127, 125135, 12,\n 125136, 125142, 21, 125184, 125251, 12, 125252, 125258, 21, 125259, 125259, 12, 125264, 125273,\n 11, 125278, 125279, 0, 126065, 126123, 12, 126124, 126124, 10, 126125, 126127, 12, 126128, 126128,\n 10, 126129, 126132, 12, 126209, 126269, 12, 126464, 126467, 12, 126469, 126495, 12, 126497,\n 126498, 12, 126500, 126500, 12, 126503, 126503, 12, 126505, 126514, 12, 126516, 126519, 12,\n 126521, 126521, 12, 126523, 126523, 12, 126530, 126530, 12, 126535, 126535, 12, 126537, 126537,\n 12, 126539, 126539, 12, 126541, 126543, 12, 126545, 126546, 12, 126548, 126548, 12, 126551,\n 126551, 12, 126553, 126553, 12, 126555, 126555, 12, 126557, 126557, 12, 126559, 126559, 12,\n 126561, 126562, 12, 126564, 126564, 12, 126567, 126570, 12, 126572, 126578, 12, 126580, 126583,\n 12, 126585, 126588, 12, 126590, 126590, 12, 126592, 126601, 12, 126603, 126619, 12, 126625,\n 126627, 12, 126629, 126633, 12, 126635, 126651, 12, 126704, 126705, 12, 126976, 127231, 14,\n 127232, 127244, 33, 127245, 127247, 12, 127248, 127277, 33, 127278, 127279, 12, 127280, 127337,\n 33, 127338, 127343, 12, 127344, 127404, 33, 127405, 127405, 12, 127406, 127461, 14, 127462,\n 127487, 28, 127488, 127876, 14, 127877, 127877, 29, 127878, 127899, 14, 127900, 127901, 12,\n 127902, 127924, 14, 127925, 127926, 12, 127927, 127931, 14, 127932, 127932, 12, 127933, 127937,\n 14, 127938, 127940, 29, 127941, 127942, 14, 127943, 127943, 29, 127944, 127945, 14, 127946,\n 127948, 29, 127949, 127994, 14, 127995, 127999, 30, 128000, 128065, 14, 128066, 128067, 29,\n 128068, 128069, 14, 128070, 128080, 29, 128081, 128101, 14, 128102, 128120, 29, 128121, 128123,\n 14, 128124, 128124, 29, 128125, 128128, 14, 128129, 128131, 29, 128132, 128132, 14, 128133,\n 128135, 29, 128136, 128142, 14, 128143, 128143, 29, 128144, 128144, 14, 128145, 128145, 29,\n 128146, 128159, 14, 128160, 128160, 12, 128161, 128161, 14, 128162, 128162, 12, 128163, 128163,\n 14, 128164, 128164, 12, 128165, 128169, 14, 128170, 128170, 29, 128171, 128174, 14, 128175,\n 128175, 12, 128176, 128176, 14, 128177, 128178, 12, 128179, 128255, 14, 128256, 128262, 12,\n 128263, 128278, 14, 128279, 128292, 12, 128293, 128305, 14, 128306, 128329, 12, 128330, 128371,\n 14, 128372, 128373, 29, 128374, 128377, 14, 128378, 128378, 29, 128379, 128399, 14, 128400,\n 128400, 29, 128401, 128404, 14, 128405, 128406, 29, 128407, 128467, 14, 128468, 128475, 12,\n 128476, 128499, 14, 128500, 128505, 12, 128506, 128580, 14, 128581, 128583, 29, 128584, 128586,\n 14, 128587, 128591, 29, 128592, 128629, 12, 128630, 128632, 3, 128633, 128635, 5, 128636, 128639,\n 12, 128640, 128674, 14, 128675, 128675, 29, 128676, 128691, 14, 128692, 128694, 29, 128695,\n 128703, 14, 128704, 128704, 29, 128705, 128715, 14, 128716, 128716, 29, 128717, 128767, 14,\n 128768, 128883, 12, 128884, 128886, 14, 128887, 128890, 12, 128891, 128895, 14, 128896, 128980,\n 12, 128981, 128986, 14, 128987, 128987, 12, 128988, 129008, 14, 129009, 129035, 12, 129040,\n 129095, 12, 129104, 129113, 12, 129120, 129159, 12, 129168, 129197, 12, 129200, 129211, 12,\n 129216, 129217, 12, 129232, 129240, 12, 129280, 129291, 12, 129292, 129292, 29, 129293, 129294,\n 14, 129295, 129295, 29, 129296, 129303, 14, 129304, 129311, 29, 129312, 129317, 14, 129318,\n 129318, 29, 129319, 129327, 14, 129328, 129337, 29, 129338, 129339, 14, 129340, 129342, 29,\n 129343, 129398, 14, 129399, 129399, 29, 129400, 129460, 14, 129461, 129462, 29, 129463, 129463,\n 14, 129464, 129465, 29, 129466, 129466, 14, 129467, 129467, 29, 129468, 129484, 14, 129485,\n 129487, 29, 129488, 129488, 14, 129489, 129501, 29, 129502, 129535, 14, 129536, 129623, 12,\n 129624, 129730, 14, 129731, 129733, 29, 129734, 129775, 14, 129776, 129786, 29, 129787, 129791,\n 14, 129792, 129938, 12, 129940, 130031, 12, 130032, 130041, 11, 130042, 130042, 12, 130048,\n 131069, 14, 131072, 196605, 14, 196608, 262141, 14, 917505, 917505, 21, 917536, 917631, 21,\n 917760, 917999, 21, 983040, 1048573, 42, 1048576, 1114109, 42,\n]);\nexport const LINE_BREAK_RANGE_COUNT = 2939;\n","/**\n * UAX #14 pair-table engine (foliojs linebreak algorithm) plus a UCD class\n * lookup. foliojs `linebreak` is not a runtime dependency: its published\n * package loads the class trie via Node `fs` / brfs, which is unacceptable\n * for the browser Viewer path. The pair table and LB1/LB8a/LB21a/LB30a\n * handling below follow foliojs/linebreak (MIT); classes come from a\n * UCD-generated range table (LineBreak.txt).\n *\n * LB1 remaps used here:\n * AI, SA, SG, XX → AL\n * CJ → NS (CSS `line-break: strict` / Japanese kinsoku starters)\n *\n * SA (Thai / Lao / Khmer) is remapped to AL for the pair table, then wrap.ts\n * injects extra break opportunities from `Intl.Segmenter` word dictionaries.\n */\n\nimport { LINE_BREAK_RANGE_COUNT, LINE_BREAK_RANGE_DATA } from './lineBreakClasses.generated.js';\n\nexport const OP = 0;\nexport const CL = 1;\nexport const CP = 2;\nexport const QU = 3;\nexport const GL = 4;\nexport const NS = 5;\nexport const EX = 6;\nexport const SY = 7;\nexport const IS = 8;\nexport const PR = 9;\nexport const PO = 10;\nexport const NU = 11;\nexport const AL = 12;\nexport const HL = 13;\nexport const ID = 14;\nexport const IN = 15;\nexport const HY = 16;\nexport const BA = 17;\nexport const BB = 18;\nexport const B2 = 19;\nexport const ZW = 20;\nexport const CM = 21;\nexport const WJ = 22;\nexport const H2 = 23;\nexport const H3 = 24;\nexport const JL = 25;\nexport const JV = 26;\nexport const JT = 27;\nexport const RI = 28;\nexport const EB = 29;\nexport const EM = 30;\nexport const ZWJ = 31;\nexport const CB = 32;\nexport const AI = 33;\nexport const BK = 34;\nexport const CJ = 35;\nexport const CR = 36;\nexport const LF = 37;\nexport const NL = 38;\nexport const SA = 39;\nexport const SG = 40;\nexport const SP = 41;\nexport const XX = 42;\n\nconst DI_BRK = 0;\nconst IN_BRK = 1;\nconst CI_BRK = 2;\nconst CP_BRK = 3;\nconst PR_BRK = 4;\n\n// foliojs/linebreak pair table (UAX #14 example Table 2 + LB8a / LB20 / LB22).\nconst PAIR_TABLE: number[][] = [\n [\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n CP_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n ],\n [\n IN_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n IN_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n IN_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n IN_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n IN_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n IN_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n IN_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n PR_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n ],\n [\n IN_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n IN_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n IN_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n IN_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n [\n DI_BRK,\n PR_BRK,\n PR_BRK,\n IN_BRK,\n IN_BRK,\n DI_BRK,\n PR_BRK,\n PR_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n PR_BRK,\n CI_BRK,\n PR_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n DI_BRK,\n IN_BRK,\n DI_BRK,\n ],\n];\n\nexport type LineBreakOpportunity = {\n position: number;\n required: boolean;\n};\n\nexport const getRawLineBreakClass = (codePoint: number): number => {\n let low = 0;\n let high = LINE_BREAK_RANGE_COUNT - 1;\n while (low <= high) {\n const mid = (low + high) >> 1;\n const offset = mid * 3;\n const start = LINE_BREAK_RANGE_DATA[offset];\n const end = LINE_BREAK_RANGE_DATA[offset + 1];\n if (codePoint < start) {\n high = mid - 1;\n } else if (codePoint > end) {\n low = mid + 1;\n } else {\n return LINE_BREAK_RANGE_DATA[offset + 2];\n }\n }\n return XX;\n};\n\nconst mapClass = (lineBreakClass: number): number => {\n switch (lineBreakClass) {\n case AI:\n case SA:\n case SG:\n case XX:\n return AL;\n case CJ:\n return NS;\n default:\n return lineBreakClass;\n }\n};\n\nconst mapFirst = (lineBreakClass: number): number => {\n switch (lineBreakClass) {\n case LF:\n case NL:\n return BK;\n case SP:\n return WJ;\n default:\n return lineBreakClass;\n }\n};\n\nconst nextCodePoint = (text: string, index: { value: number }): number => {\n const code = text.charCodeAt(index.value++);\n const next = text.charCodeAt(index.value);\n if (code >= 0xd800 && code <= 0xdbff && next >= 0xdc00 && next <= 0xdfff) {\n index.value += 1;\n return (code - 0xd800) * 0x400 + (next - 0xdc00) + 0x10000;\n }\n return code;\n};\n\n/**\n * UAX #14 break opportunities using the foliojs pair-table engine.\n * Positions are string indexes (UTF-16) at the start of the next unit.\n */\nexport const collectUax14Breaks = (text: string): LineBreakOpportunity[] => {\n const breaks: LineBreakOpportunity[] = [];\n const index = { value: 0 };\n let lastPos = 0;\n let curClass: number | null = null;\n let nextClass = 0;\n let lb8a = false;\n let lb21a = false;\n let lb30a = 0;\n\n const nextCharClass = () => mapClass(getRawLineBreakClass(nextCodePoint(text, index)));\n\n const getSimpleBreak = (): boolean | null => {\n switch (nextClass) {\n case SP:\n return false;\n case BK:\n case LF:\n case NL:\n curClass = BK;\n return false;\n case CR:\n curClass = CR;\n return false;\n default:\n return null;\n }\n };\n\n const getPairTableBreak = (lastClass: number): boolean => {\n if (curClass === null) return false;\n const pairRow = PAIR_TABLE[curClass];\n const pair = pairRow ? pairRow[nextClass] : undefined;\n let shouldBreak = false;\n\n switch (pair) {\n case DI_BRK:\n shouldBreak = true;\n break;\n case IN_BRK:\n shouldBreak = lastClass === SP;\n break;\n case CI_BRK:\n shouldBreak = lastClass === SP;\n if (!shouldBreak) {\n return false;\n }\n break;\n case CP_BRK:\n if (lastClass !== SP) {\n return false;\n }\n break;\n case PR_BRK:\n break;\n default:\n shouldBreak = true;\n break;\n }\n\n if (lb8a) {\n shouldBreak = false;\n }\n\n if (lb21a && (curClass === HY || curClass === BA)) {\n shouldBreak = false;\n lb21a = false;\n } else {\n lb21a = curClass === HL;\n }\n\n if (curClass === RI) {\n lb30a += 1;\n if (lb30a === 2 && nextClass === RI) {\n shouldBreak = true;\n lb30a = 0;\n }\n } else {\n lb30a = 0;\n }\n\n curClass = nextClass;\n return shouldBreak;\n };\n\n if (text.length === 0) {\n return [{ position: 0, required: true }];\n }\n\n const firstClass = nextCharClass();\n curClass = mapFirst(firstClass);\n nextClass = firstClass;\n lb8a = firstClass === ZWJ;\n\n while (index.value < text.length) {\n lastPos = index.value;\n const lastClass = nextClass;\n nextClass = nextCharClass();\n\n if (curClass === BK || (curClass === CR && nextClass !== LF)) {\n curClass = mapFirst(mapClass(nextClass));\n breaks.push({ position: lastPos, required: true });\n continue;\n }\n\n let shouldBreak = getSimpleBreak();\n if (shouldBreak === null) {\n shouldBreak = getPairTableBreak(lastClass);\n }\n\n lb8a = nextClass === ZWJ;\n\n if (shouldBreak) {\n breaks.push({ position: lastPos, required: false });\n }\n }\n\n breaks.push({ position: text.length, required: true });\n return breaks;\n};\n\nexport const isSaCodePoint = (codePoint: number): boolean => getRawLineBreakClass(codePoint) === SA;\n","import { collectUax14Breaks, isSaCodePoint, type LineBreakOpportunity } from './lineBreak.js';\n\n/**\n * One visual line produced by the shared wrap engine.\n *\n * `hardBreak` is true for the last line of a source paragraph (including a\n * blank paragraph). Soft-wrapped continuation lines are `hardBreak: false`.\n *\n * Viewer must draw these objects with `white-space: pre` and must not feed\n * `splitTextToSize` facade strings into `pre`: the facade suffixes hard lines\n * with `\\n`, which would render as an extra blank line.\n */\nexport type WrapLine = {\n text: string;\n hardBreak: boolean;\n};\n\nexport type MeasureTextWidth = (text: string) => number;\n\nexport type StyledRunInput<T> = {\n text: string;\n measure: (text: string) => number;\n style: T;\n};\n\nexport type StyledLayoutSpan<T> = {\n text: string;\n width: number;\n style: T;\n};\n\nexport type StyledLayoutLine<T> = {\n spans: StyledLayoutSpan<T>[];\n text: string;\n width: number;\n hardBreak: boolean;\n};\n\nexport type AlignedLayoutLine<T> = StyledLayoutLine<T> & {\n x: number;\n extraLetterSpacing: number;\n};\n\ntype WrapAtom = {\n text: string;\n required: boolean;\n};\n\ntype LineRange = {\n start: number;\n end: number;\n hardBreak: boolean;\n};\n\ntype RunRange<T> = {\n start: number;\n end: number;\n run: StyledRunInput<T>;\n};\n\nexport const PARAGRAPH_SPLIT = /\\r\\n|\\r|\\n|\\f|\\v/g;\n\nexport const splitParagraphs = (value: string): string[] => value.split(PARAGRAPH_SPLIT);\n\nconst splitParagraphsWithOffsets = (value: string): { start: number; end: number }[] => {\n const result: { start: number; end: number }[] = [];\n let previous = 0;\n for (const match of value.matchAll(PARAGRAPH_SPLIT)) {\n result.push({ start: previous, end: match.index });\n previous = match.index + match[0].length;\n }\n result.push({ start: previous, end: value.length });\n return result;\n};\n\nlet wordSegmenter: Intl.Segmenter | undefined;\nlet graphemeSegmenter: Intl.Segmenter | undefined;\n\nconst getWordSegmenter = (): Intl.Segmenter | undefined => {\n if (typeof Intl === 'undefined' || typeof Intl.Segmenter === 'undefined') {\n return undefined;\n }\n wordSegmenter ??= new Intl.Segmenter(undefined, { granularity: 'word' });\n return wordSegmenter;\n};\n\nconst getGraphemeSegmenter = (): Intl.Segmenter | undefined => {\n if (typeof Intl === 'undefined' || typeof Intl.Segmenter === 'undefined') {\n return undefined;\n }\n graphemeSegmenter ??= new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n return graphemeSegmenter;\n};\n\nexport const splitGraphemes = (text: string): string[] => {\n const segmenter = getGraphemeSegmenter();\n if (!segmenter) {\n return Array.from(text);\n }\n return Array.from(segmenter.segment(text), ({ segment }) => segment);\n};\n\nexport const countGraphemes = (text: string): number => splitGraphemes(text).length;\n\nconst collectSaDictionaryBreaks = (text: string): LineBreakOpportunity[] => {\n const segmenter = getWordSegmenter();\n if (!segmenter) return [];\n\n const breaks: LineBreakOpportunity[] = [];\n let index = 0;\n while (index < text.length) {\n const codePoint = text.codePointAt(index);\n if (codePoint === undefined) break;\n const unitLength = codePoint > 0xffff ? 2 : 1;\n if (!isSaCodePoint(codePoint)) {\n index += unitLength;\n continue;\n }\n\n const start = index;\n index += unitLength;\n while (index < text.length) {\n const next = text.codePointAt(index);\n if (next === undefined || !isSaCodePoint(next)) break;\n index += next > 0xffff ? 2 : 1;\n }\n\n let offset = start;\n for (const { segment } of segmenter.segment(text.slice(start, index))) {\n offset += segment.length;\n if (offset > start && offset < index) {\n breaks.push({ position: offset, required: false });\n }\n }\n }\n return breaks;\n};\n\nconst mergeBreaks = (\n primary: LineBreakOpportunity[],\n extra: LineBreakOpportunity[],\n): LineBreakOpportunity[] => {\n const requiredByPosition = new Map<number, boolean>();\n for (const item of primary) {\n requiredByPosition.set(item.position, item.required);\n }\n for (const item of extra) {\n if (!requiredByPosition.has(item.position)) {\n requiredByPosition.set(item.position, item.required);\n }\n }\n return [...requiredByPosition.entries()]\n .map(([position, required]) => ({ position, required }))\n .sort((left, right) => left.position - right.position);\n};\n\nconst getAtoms = (text: string): WrapAtom[] => {\n const breaks = mergeBreaks(collectUax14Breaks(text), collectSaDictionaryBreaks(text));\n const atoms: WrapAtom[] = [];\n let previous = 0;\n for (const item of breaks) {\n if (item.position <= previous) continue;\n atoms.push({\n text: text.slice(previous, item.position),\n required: item.required,\n });\n previous = item.position;\n }\n if (previous < text.length) {\n atoms.push({ text: text.slice(previous), required: true });\n }\n return atoms;\n};\n\nconst trimEndIndex = (source: string, start: number, end: number): number => {\n let index = end;\n while (index > start && /\\s/.test(source[index - 1] ?? '')) {\n index -= 1;\n }\n return index;\n};\n\nconst skipLeadingSpace = (source: string, start: number, end: number): number => {\n let index = start;\n while (index < end && /\\s/.test(source[index] ?? '')) {\n index += 1;\n }\n return index;\n};\n\nconst isSpaceOnly = (source: string, start: number, end: number): boolean =>\n source.slice(start, end).trim() === '';\n\nconst splitOverflowByGraphemeRange = (\n source: string,\n start: number,\n end: number,\n measure: (from: number, to: number) => number,\n maxWidth: number,\n): { start: number; end: number }[] => {\n const graphemes = splitGraphemes(source.slice(start, end));\n if (graphemes.length === 0) return [{ start, end }];\n\n const pieces: { start: number; end: number }[] = [];\n let pieceStart = start;\n let position = start;\n for (const grapheme of graphemes) {\n const next = position + grapheme.length;\n if (position !== pieceStart && measure(pieceStart, next) > maxWidth) {\n pieces.push({ start: pieceStart, end: position });\n pieceStart = position;\n }\n position = next;\n }\n if (position > pieceStart || pieces.length === 0) {\n pieces.push({ start: pieceStart, end: position });\n }\n return pieces;\n};\n\n/**\n * Wrap one paragraph (already split on hard breaks, trailing whitespace trimmed).\n *\n * Style boundaries are not break opportunities: callers pass a measure that\n * walks styled runs, but atoms come from UAX #14 + SA on the concatenated text.\n *\n * A word that still fits on a full line stays together on the next line. A word\n * wider than the box fills the remaining width of the current line first, then\n * splits at grapheme boundaries — never “move wholly, then split”.\n */\nconst wrapParagraphRanges = (\n source: string,\n measureRaw: (start: number, end: number) => number,\n maxWidth: number,\n): LineRange[] => {\n if (source === '') {\n return [{ start: 0, end: 0, hardBreak: true }];\n }\n\n const measure = (start: number, end: number) => {\n const trimmed = trimEndIndex(source, start, end);\n if (trimmed <= start) return 0;\n return measureRaw(start, trimmed);\n };\n\n const lines: LineRange[] = [];\n let currentStart = 0;\n let currentEnd = 0;\n let hasCurrent = false;\n\n const emit = (start: number, end: number, hardBreak: boolean) => {\n const trimmed = trimEndIndex(source, start, end);\n if (trimmed <= start) {\n if (!hardBreak) return;\n if (lines.length === 0) {\n lines.push({ start: 0, end: 0, hardBreak: true });\n return;\n }\n const last = lines[lines.length - 1];\n if (last) lines[lines.length - 1] = { ...last, hardBreak: true };\n return;\n }\n lines.push({ start, end: trimmed, hardBreak });\n };\n\n const flush = (hardBreak: boolean) => {\n if (!hasCurrent) {\n if (!hardBreak) return;\n if (lines.length === 0) {\n lines.push({ start: 0, end: 0, hardBreak: true });\n return;\n }\n const last = lines[lines.length - 1];\n if (last) lines[lines.length - 1] = { ...last, hardBreak: true };\n return;\n }\n emit(currentStart, currentEnd, hardBreak);\n hasCurrent = false;\n };\n\n const appendOverflow = (start: number, end: number) => {\n let position = start;\n if (hasCurrent) {\n const graphemes = splitGraphemes(source.slice(start, end));\n let takenEnd = start;\n for (const grapheme of graphemes) {\n const next = takenEnd + grapheme.length;\n if (measure(currentStart, next) > maxWidth) break;\n takenEnd = next;\n }\n if (takenEnd > start) {\n currentEnd = takenEnd;\n flush(false);\n position = takenEnd;\n } else {\n flush(false);\n }\n }\n\n if (position >= end) return;\n\n const pieces = splitOverflowByGraphemeRange(source, position, end, measure, maxWidth);\n for (let index = 0; index < pieces.length - 1; index += 1) {\n const piece = pieces[index];\n if (!piece) continue;\n const trimmed = trimEndIndex(source, piece.start, piece.end);\n if (trimmed <= piece.start) continue;\n lines.push({ start: piece.start, end: trimmed, hardBreak: false });\n }\n const remainder = pieces[pieces.length - 1];\n if (!remainder || isSpaceOnly(source, remainder.start, remainder.end)) {\n hasCurrent = false;\n return;\n }\n currentStart = remainder.start;\n currentEnd = remainder.end;\n hasCurrent = true;\n };\n\n const startLine = (start: number, end: number) => {\n if (start >= end) {\n hasCurrent = false;\n return;\n }\n if (measure(start, end) <= maxWidth) {\n currentStart = start;\n currentEnd = end;\n hasCurrent = true;\n } else {\n hasCurrent = false;\n appendOverflow(start, end);\n }\n };\n\n let cursor = 0;\n for (const atom of getAtoms(source)) {\n const atomStart = cursor;\n const atomEnd = cursor + atom.text.length;\n cursor = atomEnd;\n\n if (!hasCurrent) {\n startLine(atomStart, atomEnd);\n } else if (measure(currentStart, atomEnd) <= maxWidth) {\n currentEnd = atomEnd;\n } else if (measure(atomStart, atomEnd) <= maxWidth) {\n flush(false);\n startLine(skipLeadingSpace(source, atomStart, atomEnd), atomEnd);\n } else {\n appendOverflow(atomStart, atomEnd);\n }\n\n if (atom.required) {\n flush(true);\n }\n }\n\n if (hasCurrent) {\n flush(true);\n } else if (lines.length === 0) {\n lines.push({ start: 0, end: 0, hardBreak: true });\n } else {\n const last = lines[lines.length - 1];\n if (last) lines[lines.length - 1] = { ...last, hardBreak: true };\n }\n\n return lines;\n};\n\nconst measureStyledSlice = <T>(\n runRanges: RunRange<T>[],\n start: number,\n end: number,\n characterSpacing: number,\n): number => {\n let width = 0;\n let hasText = false;\n for (const { start: runStart, end: runEnd, run } of runRanges) {\n const sliceStart = Math.max(start, runStart);\n const sliceEnd = Math.min(end, runEnd);\n if (sliceStart >= sliceEnd) continue;\n const text = run.text.slice(sliceStart - runStart, sliceEnd - runStart);\n if (!text) continue;\n if (hasText) width += characterSpacing;\n width += run.measure(text);\n hasText = true;\n }\n return width;\n};\n\nconst sliceStyledSpans = <T>(\n runRanges: RunRange<T>[],\n start: number,\n end: number,\n): StyledLayoutSpan<T>[] => {\n const spans: StyledLayoutSpan<T>[] = [];\n for (const { start: runStart, end: runEnd, run } of runRanges) {\n const sliceStart = Math.max(start, runStart);\n const sliceEnd = Math.min(end, runEnd);\n if (sliceStart >= sliceEnd) continue;\n const text = run.text.slice(sliceStart - runStart, sliceEnd - runStart);\n if (!text) continue;\n spans.push({\n text,\n width: run.measure(text),\n style: run.style,\n });\n }\n return spans;\n};\n\nconst lineWidthFromSpans = <T>(spans: StyledLayoutSpan<T>[], characterSpacing: number): number => {\n let width = 0;\n spans.forEach((span, index) => {\n if (index > 0) width += characterSpacing;\n width += span.width;\n });\n return width;\n};\n\n/**\n * Shared wrap for plain text (one style) and inline Markdown (many styles).\n * Break opportunities come from the concatenated visual text; each span is\n * measured with its own font/style.\n */\nexport const layoutStyledRuns = <T>(\n runs: StyledRunInput<T>[],\n maxWidth: number,\n options?: { characterSpacing?: number },\n): StyledLayoutLine<T>[] => {\n const characterSpacing = options?.characterSpacing ?? 0;\n const runRanges: RunRange<T>[] = [];\n let offset = 0;\n for (const run of runs) {\n runRanges.push({ start: offset, end: offset + run.text.length, run });\n offset += run.text.length;\n }\n const fullText = runs.map((run) => run.text).join('');\n const lines: StyledLayoutLine<T>[] = [];\n\n for (const paragraph of splitParagraphsWithOffsets(fullText)) {\n const raw = fullText.slice(paragraph.start, paragraph.end);\n const source = raw.trimEnd();\n const origin = paragraph.start;\n const ranges = wrapParagraphRanges(\n source,\n (start, end) => measureStyledSlice(runRanges, origin + start, origin + end, characterSpacing),\n maxWidth,\n );\n for (const range of ranges) {\n const spans = sliceStyledSpans(runRanges, origin + range.start, origin + range.end);\n const text = source.slice(range.start, range.end);\n lines.push({\n spans,\n text,\n width: lineWidthFromSpans(spans, characterSpacing),\n hardBreak: range.hardBreak,\n });\n }\n }\n\n return lines.length > 0 ? lines : [{ spans: [], text: '', width: 0, hardBreak: true }];\n};\n\nexport const getLineAlignment = (\n line: { text: string; width: number; hardBreak: boolean },\n boxWidth: number,\n alignment: string,\n): { x: number; extraLetterSpacing: number; usedWidth: number } => {\n let extraLetterSpacing = 0;\n let usedWidth = line.width;\n if (alignment === 'justify' && !line.hardBreak) {\n const graphemeCount = countGraphemes(line.text);\n if (graphemeCount > 0) {\n extraLetterSpacing = (boxWidth - line.width) / graphemeCount;\n usedWidth = boxWidth;\n }\n }\n let x = 0;\n if (alignment === 'center') {\n x = (boxWidth - usedWidth) / 2;\n } else if (alignment === 'right') {\n x = boxWidth - usedWidth;\n }\n return { x, extraLetterSpacing, usedWidth };\n};\n\nexport const alignLayoutLines = <T>(\n lines: StyledLayoutLine<T>[],\n boxWidth: number,\n alignment: string,\n): AlignedLayoutLine<T>[] =>\n lines.map((line) => {\n const { x, extraLetterSpacing } = getLineAlignment(line, boxWidth, alignment);\n return { ...line, x, extraLetterSpacing };\n });\n\nexport const wrapText = (value: string, measure: MeasureTextWidth, maxWidth: number): WrapLine[] =>\n layoutStyledRuns([{ text: value, measure, style: undefined }], maxWidth).map((line) => ({\n text: line.text,\n hardBreak: line.hardBreak,\n }));\n\n/**\n * Legacy `splitTextToSize` shape: hard (paragraph-ending) lines are suffixed\n * with `\\n` so PDF justify can skip them. Empty hard lines stay `''` — not\n * `'\\n'` — matching historical output.\n *\n * Do not join these strings into a `white-space: pre` Viewer. Use `WrapLine`\n * objects instead; the suffix would paint an extra blank line.\n */\nexport const toLegacySplitLines = (lines: WrapLine[]): string[] =>\n lines.map((line) => {\n if (line.text === '') return '';\n return line.hardBreak ? `${line.text}\\n` : line.text;\n });\n","import * as fontkit from 'fontkit';\nimport type { Font as FontKitFont } from 'fontkit';\nimport {\n b64toUint8Array,\n mm2pt,\n pt2mm,\n pt2px,\n Font,\n getFallbackFontName,\n getDefaultFont,\n DEFAULT_FONT_NAME,\n isUrlSafeToFetch,\n} from '@pdfme/common';\nimport { Buffer } from 'buffer';\nimport type { DYNAMIC_FONT_SIZE_FIT, TextSchema, FontWidthCalcValues } from './types.js';\nimport { getBoxContentArea } from '../box.js';\nimport { splitParagraphs, toLegacySplitLines, wrapText, type WrapLine } from './wrap.js';\nimport {\n DEFAULT_FONT_SIZE,\n DEFAULT_CHARACTER_SPACING,\n DEFAULT_LINE_HEIGHT,\n FONT_SIZE_ADJUSTMENT,\n DEFAULT_DYNAMIC_FIT,\n DYNAMIC_FIT_HORIZONTAL,\n DYNAMIC_FIT_VERTICAL,\n VERTICAL_ALIGN_TOP,\n LINE_END_FORBIDDEN_CHARS,\n LINE_START_FORBIDDEN_CHARS,\n} from './constants.js';\n\nexport const getBrowserVerticalFontAdjustments = (\n fontKitFont: FontKitFont,\n fontSize: number,\n lineHeight: number,\n verticalAlignment: string,\n) => {\n const { ascent, descent, unitsPerEm } = fontKitFont;\n\n // Fonts have a designed line height that the browser renders when using `line-height: normal`\n const fontBaseLineHeight = (ascent - descent) / unitsPerEm;\n\n // For vertical alignment top\n // To achieve consistent positioning between browser and PDF, we apply the difference between\n // the font's actual height and the font size in pixels.\n // Browsers middle the font within this height, so we only need half of it to apply to the top.\n // This means the font renders a bit lower in the browser, but achieves PDF alignment\n const topAdjustment = (fontBaseLineHeight * fontSize - fontSize) / 2;\n\n if (verticalAlignment === VERTICAL_ALIGN_TOP) {\n return { topAdj: pt2px(topAdjustment), bottomAdj: 0 };\n }\n\n // For vertical alignment bottom and middle\n // When browsers render text in a non-form element (such as a <div>), some of the text may be\n // lowered below and outside the containing element if the line height used is less than\n // the base line-height of the font.\n // This behaviour does not happen in a <textarea> though, so we need to adjust the positioning\n // for consistency between editing and viewing to stop text jumping up and down.\n // This portion of text is half of the difference between the base line height and the used\n // line height. If using the same or higher line-height than the base font, then line-height\n // takes over in the browser and this adjustment is not needed.\n // Unlike the top adjustment - this is only driven by browser behaviour, not PDF alignment.\n let bottomAdjustment = 0;\n if (lineHeight < fontBaseLineHeight) {\n bottomAdjustment = ((fontBaseLineHeight - lineHeight) * fontSize) / 2;\n }\n\n return { topAdj: 0, bottomAdj: pt2px(bottomAdjustment) };\n};\n\nexport const getFontDescentInPt = (fontKitFont: FontKitFont, fontSize: number) => {\n const { descent, unitsPerEm } = fontKitFont;\n\n return (descent / unitsPerEm) * fontSize;\n};\n\nexport const heightOfFontAtSize = (fontKitFont: FontKitFont, fontSize: number) => {\n const { ascent, descent, bbox, unitsPerEm } = fontKitFont;\n\n const scale = 1000 / unitsPerEm;\n const yTop = (ascent || bbox.maxY) * scale;\n const yBottom = (descent || bbox.minY) * scale;\n\n let height = yTop - yBottom;\n height -= Math.abs(descent * scale) || 0;\n\n return (height / 1000) * fontSize;\n};\n\n/**\n * First-line height uses font metrics (including empty leading lines).\n * Later lines use the nominal font size. Shared by plain and Markdown.\n */\nexport const getLineBoxHeightPt = (\n fontSize: number,\n isFirstLine: boolean,\n lineFonts: readonly FontKitFont[],\n fallbackFont: FontKitFont,\n) => {\n if (!isFirstLine) return fontSize;\n const fonts = lineFonts.length > 0 ? lineFonts : [fallbackFont];\n return Math.max(...fonts.map((font) => heightOfFontAtSize(font, fontSize)));\n};\n\nexport const fitDynamicFontSize = ({\n startSize,\n setting,\n boxWidth,\n boxHeight,\n calculateConstraints,\n}: {\n startSize: number;\n setting: { min: number; max: number; fit?: DYNAMIC_FONT_SIZE_FIT };\n boxWidth: number;\n boxHeight: number;\n calculateConstraints: (size: number) => { totalWidthInMm: number; totalHeightInMm: number };\n}) => {\n if (setting.max < setting.min) return startSize;\n\n let dynamicFontSize = startSize;\n if (dynamicFontSize < setting.min) {\n dynamicFontSize = setting.min;\n } else if (dynamicFontSize > setting.max) {\n dynamicFontSize = setting.max;\n }\n\n const dynamicFontFit = setting.fit ?? DEFAULT_DYNAMIC_FIT;\n\n const shouldFontGrowToFit = (totalWidthInMm: number, totalHeightInMm: number) => {\n if (dynamicFontSize >= setting.max) {\n return false;\n }\n if (dynamicFontFit === DYNAMIC_FIT_HORIZONTAL) {\n return totalWidthInMm < boxWidth;\n }\n return totalHeightInMm < boxHeight;\n };\n\n const shouldFontShrinkToFit = (totalWidthInMm: number, totalHeightInMm: number) => {\n if (dynamicFontSize <= setting.min || dynamicFontSize <= 0) {\n return false;\n }\n return totalWidthInMm > boxWidth || totalHeightInMm > boxHeight;\n };\n\n let { totalWidthInMm, totalHeightInMm } = calculateConstraints(dynamicFontSize);\n\n while (shouldFontGrowToFit(totalWidthInMm, totalHeightInMm)) {\n dynamicFontSize += FONT_SIZE_ADJUSTMENT;\n const { totalWidthInMm: newWidth, totalHeightInMm: newHeight } =\n calculateConstraints(dynamicFontSize);\n\n if (newHeight < boxHeight) {\n totalWidthInMm = newWidth;\n totalHeightInMm = newHeight;\n } else {\n dynamicFontSize -= FONT_SIZE_ADJUSTMENT;\n break;\n }\n }\n\n while (shouldFontShrinkToFit(totalWidthInMm, totalHeightInMm)) {\n dynamicFontSize -= FONT_SIZE_ADJUSTMENT;\n ({ totalWidthInMm, totalHeightInMm } = calculateConstraints(dynamicFontSize));\n }\n\n return dynamicFontSize;\n};\n\nconst calculateCharacterSpacing = (textContent: string, textCharacterSpacing: number) => {\n return (textContent.length - 1) * textCharacterSpacing;\n};\n\nconst TEXT_WIDTH_CACHE_LIMIT = 5000;\nconst textWidthCache = new WeakMap<FontKitFont, Map<string, number>>();\n\nconst getTextWidthCache = (fontKitFont: FontKitFont) => {\n let cache = textWidthCache.get(fontKitFont);\n if (!cache) {\n cache = new Map<string, number>();\n textWidthCache.set(fontKitFont, cache);\n }\n return cache;\n};\n\nexport const widthOfTextAtSize = (\n text: string,\n fontKitFont: FontKitFont,\n fontSize: number,\n characterSpacing: number,\n) => {\n const cache = getTextWidthCache(fontKitFont);\n const cacheKey = `${fontSize}\\0${characterSpacing}\\0${text}`;\n const cachedWidth = cache.get(cacheKey);\n if (cachedWidth !== undefined) {\n return cachedWidth;\n }\n\n const { glyphs } = fontKitFont.layout(text);\n const scale = 1000 / fontKitFont.unitsPerEm;\n const standardWidth =\n glyphs.reduce((totalWidth, glyph) => totalWidth + glyph.advanceWidth * scale, 0) *\n (fontSize / 1000);\n const width = standardWidth + calculateCharacterSpacing(text, characterSpacing);\n\n if (cache.size >= TEXT_WIDTH_CACHE_LIMIT) {\n cache.clear();\n }\n cache.set(cacheKey, width);\n\n return width;\n};\n\nconst getFallbackFont = (font: Font) => {\n const fallbackFontName = getFallbackFontName(font);\n return font[fallbackFontName];\n};\n\nconst getCacheKey = (fontName: string) => `getFontKitFont-${fontName}`;\ntype FontKitFontCacheValue = fontkit.Font | Promise<fontkit.Font>;\n\nexport const fetchRemoteFontData = async (url: string): Promise<ArrayBuffer> => {\n if (!isUrlSafeToFetch(url)) {\n throw Error(\n '[@pdfme/schemas] Invalid or unsafe URL for font data. Only http: and https: URLs pointing to public hosts are allowed.',\n );\n }\n\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n\n return await response.arrayBuffer();\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw Error(`[@pdfme/schemas] Failed to fetch remote font data from ${url}. ${reason}`);\n }\n};\n\nexport const getFontKitFont = async (\n fontName: string | undefined,\n font: Font,\n _cache: Map<string | number, fontkit.Font>,\n) => {\n const fntNm = fontName || getFallbackFontName(font);\n const cacheKey = getCacheKey(fntNm);\n const fontCache = _cache as Map<string | number, FontKitFontCacheValue>;\n const cachedFont = fontCache.get(cacheKey);\n if (cachedFont) {\n return await cachedFont;\n }\n\n const currentFont = font[fntNm] || getFallbackFont(font) || getDefaultFont()[DEFAULT_FONT_NAME];\n const fontKitFontPromise = (async () => {\n let fontData = currentFont.data;\n if (typeof fontData === 'string') {\n if (fontData.startsWith('http')) {\n fontData = await fetchRemoteFontData(fontData);\n } else {\n fontData = b64toUint8Array(fontData);\n }\n }\n\n // Convert fontData to Buffer if it's not already a Buffer\n let fontDataBuffer: Buffer;\n if (fontData instanceof Buffer) {\n fontDataBuffer = fontData;\n } else {\n fontDataBuffer = Buffer.from(fontData as ArrayBufferLike);\n }\n return fontkit.create(fontDataBuffer) as fontkit.Font;\n })();\n fontCache.set(cacheKey, fontKitFontPromise);\n\n try {\n const fontKitFont = await fontKitFontPromise;\n fontCache.set(cacheKey, fontKitFont);\n return fontKitFont;\n } catch (error) {\n if (fontCache.get(cacheKey) === fontKitFontPromise) {\n fontCache.delete(cacheKey);\n }\n throw error;\n }\n};\n\nconst isTextExceedingBoxWidth = (text: string, calcValues: FontWidthCalcValues) => {\n const { font, fontSize, characterSpacing, boxWidthInPt } = calcValues;\n const textWidth = widthOfTextAtSize(text, font, fontSize, characterSpacing);\n return textWidth > boxWidthInPt;\n};\n\n/**\n * Incrementally checks the current line for its real length\n * and returns the position where it exceeds the box width.\n * Returns `null` to indicate if textLine is shorter than the available box.\n */\nconst getOverPosition = (textLine: string, calcValues: FontWidthCalcValues) => {\n for (let i = 0; i <= textLine.length; i++) {\n if (isTextExceedingBoxWidth(textLine.slice(0, i + 1), calcValues)) {\n return i;\n }\n }\n\n return null;\n};\n\n/**\n * Line breakable chars depend on the language and writing system.\n * Western writing systems typically use spaces and hyphens as line breakable chars.\n * Other writing systems often break on word boundaries so the following\n * does not negatively impact them.\n * However, this might need to be revisited for broader language support.\n */\nconst isLineBreakableChar = (char: string) => {\n const lineBreakableChars = [' ', '-', '\\u2014', '\\u2013'];\n return lineBreakableChars.includes(char);\n};\n\n/**\n * Gets the position of the split. Splits the exceeding line at\n * the last breakable char prior to it exceeding the bounding box width.\n */\nconst getSplitPosition = (textLine: string, calcValues: FontWidthCalcValues) => {\n const overPos = getOverPosition(textLine, calcValues);\n if (overPos === null) return textLine.length; // input line is shorter than the available space\n\n if (textLine[overPos] === ' ') {\n // if the character immediately beyond the boundary is a space, split\n return overPos;\n }\n\n let overPosTmp = overPos - 1;\n while (overPosTmp >= 0) {\n if (isLineBreakableChar(textLine[overPosTmp])) {\n return overPosTmp + 1;\n }\n overPosTmp--;\n }\n\n // For very long lines with no breakable chars use the original overPos\n return overPos;\n};\n\n/**\n * Recursively splits the line at getSplitPosition.\n * If there is some leftover, split the rest again in the same manner.\n */\nexport const getSplittedLines = (textLine: string, calcValues: FontWidthCalcValues): string[] => {\n const splitPos = getSplitPosition(textLine, calcValues);\n const splittedLine = textLine.substring(0, splitPos).trimEnd();\n const rest = textLine.substring(splitPos).trimStart();\n\n if (rest === textLine) {\n // if we went so small that we want to split on the first char\n // then end recursion to avoid infinite loop\n return [textLine];\n }\n\n if (rest.length === 0) {\n // end recursion if there is no leftover\n return [splittedLine];\n }\n\n return [splittedLine, ...getSplittedLines(rest, calcValues)];\n};\n\n/**\n * If using dynamic font size, iteratively increment or decrement the\n * font size to fit the containing box.\n * Calculating space usage involves splitting lines where they exceed\n * the box width based on the proposed size.\n */\nexport const calculateDynamicFontSize = ({\n textSchema,\n fontKitFont,\n value,\n startingFontSize,\n}: {\n textSchema: TextSchema;\n fontKitFont: FontKitFont;\n value: string;\n startingFontSize?: number | undefined;\n}) => {\n const {\n fontSize: schemaFontSize,\n dynamicFontSize: dynamicFontSizeSetting,\n characterSpacing: schemaCharacterSpacing,\n lineHeight = DEFAULT_LINE_HEIGHT,\n } = textSchema;\n const { width: boxWidth, height: boxHeight } = getBoxContentArea(textSchema);\n const fontSize = startingFontSize || schemaFontSize || DEFAULT_FONT_SIZE;\n if (!dynamicFontSizeSetting) return fontSize;\n if (dynamicFontSizeSetting.max < dynamicFontSizeSetting.min) return fontSize;\n\n const characterSpacing = schemaCharacterSpacing ?? DEFAULT_CHARACTER_SPACING;\n const paragraphs = splitParagraphs(value);\n const dynamicFontFit = dynamicFontSizeSetting.fit ?? DEFAULT_DYNAMIC_FIT;\n\n return fitDynamicFontSize({\n startSize: fontSize,\n setting: dynamicFontSizeSetting,\n boxWidth,\n boxHeight,\n calculateConstraints: (size) => {\n let totalWidthInMm = 0;\n let totalHeightInMm = 0;\n const boxWidthInPt = mm2pt(boxWidth);\n const lines = wrapText(\n value,\n (text) =>\n text.length === 0 ? 0 : widthOfTextAtSize(text, fontKitFont, size, characterSpacing),\n boxWidthInPt,\n );\n\n lines.forEach((line, lineIndex) => {\n if (dynamicFontFit === DYNAMIC_FIT_VERTICAL) {\n const textWidth = widthOfTextAtSize(line.text, fontKitFont, size, characterSpacing);\n totalWidthInMm = Math.max(totalWidthInMm, pt2mm(textWidth));\n }\n\n totalHeightInMm += pt2mm(\n getLineBoxHeightPt(size, lineIndex === 0, [fontKitFont], fontKitFont) * lineHeight,\n );\n });\n\n if (dynamicFontFit === DYNAMIC_FIT_HORIZONTAL) {\n paragraphs.forEach((paragraph) => {\n const textWidth = widthOfTextAtSize(paragraph, fontKitFont, size, characterSpacing);\n totalWidthInMm = Math.max(totalWidthInMm, pt2mm(textWidth));\n });\n }\n\n return { totalWidthInMm, totalHeightInMm };\n },\n });\n};\n\nconst measureTextWidth = (\n text: string,\n fontKitFont: fontkit.Font,\n fontSize: number,\n characterSpacing: number,\n) => (text.length === 0 ? 0 : widthOfTextAtSize(text, fontKitFont, fontSize, characterSpacing));\n\nexport const wrapTextToSize = (arg: {\n value: string;\n characterSpacing: number;\n boxWidthInPt: number;\n fontSize: number;\n fontKitFont: fontkit.Font;\n}): WrapLine[] => {\n const { value, characterSpacing, fontSize, fontKitFont, boxWidthInPt } = arg;\n return wrapText(\n value,\n (text) => measureTextWidth(text, fontKitFont, fontSize, characterSpacing),\n boxWidthInPt,\n );\n};\n\n/**\n * Facade over the shared wrap engine. Converts structured `{ text, hardBreak }`\n * lines into the historical `\\n`-suffixed strings used by PDF / tables / lists.\n * Viewer should call `wrapTextToSize` instead — see `toLegacySplitLines`.\n */\nexport const splitTextToSize = (arg: {\n value: string;\n characterSpacing: number;\n boxWidthInPt: number;\n fontSize: number;\n fontKitFont: fontkit.Font;\n}) => toLegacySplitLines(wrapTextToSize(arg));\nexport const isFirefox = () => navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n//\n// 日本語禁則処理\n//\n// https://www.morisawa.co.jp/blogs/MVP/8760\n//\n// 行頭禁則\nexport const filterStartJP = (lines: string[]): string[] => {\n const filtered: string[] = [];\n let charToAppend: string | null = null;\n\n lines\n .slice()\n .reverse()\n .forEach((line) => {\n if (line.trim().length === 0) {\n filtered.push('');\n } else {\n const charAtStart: string = line.charAt(0);\n if (LINE_START_FORBIDDEN_CHARS.includes(charAtStart)) {\n if (line.trim().length === 1) {\n filtered.push(line);\n charToAppend = null;\n } else {\n if (charToAppend) {\n filtered.push(line.slice(1) + charToAppend);\n } else {\n filtered.push(line.slice(1));\n }\n charToAppend = charAtStart;\n }\n } else {\n if (charToAppend) {\n filtered.push(line + charToAppend);\n charToAppend = null;\n } else {\n filtered.push(line);\n }\n }\n }\n });\n\n if (charToAppend) {\n // Handle the case where filtered might be empty\n const firstItem = filtered.length > 0 ? filtered[0] : '';\n // Ensure we're concatenating strings\n const combinedItem = String(charToAppend) + String(firstItem);\n return [combinedItem, ...filtered.slice(1)].reverse();\n } else {\n return filtered.reverse();\n }\n};\n\n// 行末禁則\nexport const filterEndJP = (lines: string[]): string[] => {\n const filtered: string[] = [];\n let charToPrepend: string | null = null;\n\n lines.forEach((line) => {\n if (line.trim().length === 0) {\n filtered.push('');\n } else {\n const chartAtEnd = line.slice(-1);\n\n if (LINE_END_FORBIDDEN_CHARS.includes(chartAtEnd)) {\n if (line.trim().length === 1) {\n filtered.push(line);\n charToPrepend = null;\n } else {\n if (charToPrepend) {\n filtered.push(charToPrepend + line.slice(0, -1));\n } else {\n filtered.push(line.slice(0, -1));\n }\n charToPrepend = chartAtEnd;\n }\n } else {\n if (charToPrepend) {\n filtered.push(charToPrepend + line);\n charToPrepend = null;\n } else {\n filtered.push(line);\n }\n }\n }\n });\n\n if (charToPrepend) {\n // Handle the case where filtered might be empty\n const lastItem = filtered.length > 0 ? filtered[filtered.length - 1] : '';\n // Ensure we're concatenating strings\n const combinedItem = String(lastItem) + String(charToPrepend);\n return [...filtered.slice(0, -1), combinedItem];\n } else {\n return filtered;\n }\n};\n","import {\n createDynamicLayoutSplitRange,\n getDynamicLayoutSplitRange,\n type DynamicLayoutRange,\n type DynamicLayoutSplitRange,\n type Schema,\n} from '@pdfme/common';\n\n// Keep the common schema open for external plugin units while exposing the built-in units as\n// typed constants for pdfme's bundled dynamic layout schemas.\nexport const BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS = {\n tableBody: 'tableBody',\n listItem: 'listItem',\n textLine: 'textLine',\n} as const;\n\nexport type BuiltInDynamicLayoutSplitUnit =\n (typeof BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS)[keyof typeof BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS];\n\nexport const TABLE_BODY_SPLIT_UNIT = BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS.tableBody;\nexport const LIST_ITEM_SPLIT_UNIT = BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS.listItem;\nexport const TEXT_LINE_SPLIT_UNIT = BUILT_IN_DYNAMIC_LAYOUT_SPLIT_UNITS.textLine;\n\nexport const createTableBodySplitRange = (start: number, end?: number): DynamicLayoutSplitRange =>\n createDynamicLayoutSplitRange(TABLE_BODY_SPLIT_UNIT, start, end);\n\nexport const createListItemSplitRange = (start: number, end?: number): DynamicLayoutSplitRange =>\n createDynamicLayoutSplitRange(LIST_ITEM_SPLIT_UNIT, start, end);\n\nexport const createTextLineSplitRange = (start: number, end?: number): DynamicLayoutSplitRange =>\n createDynamicLayoutSplitRange(TEXT_LINE_SPLIT_UNIT, start, end);\n\nexport const getTableBodyRange = (schema: Schema): DynamicLayoutRange | undefined =>\n getDynamicLayoutSplitRange(schema, TABLE_BODY_SPLIT_UNIT);\n\nexport const getListItemRange = (schema: Schema): DynamicLayoutRange | undefined =>\n getDynamicLayoutSplitRange(schema, LIST_ITEM_SPLIT_UNIT);\n\nexport const getTextLineRange = (schema: Schema): DynamicLayoutRange | undefined =>\n getDynamicLayoutSplitRange(schema, TEXT_LINE_SPLIT_UNIT);\n"],"mappings":"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AAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CACxF;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CACxF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAC7F;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC/F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC7F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CACzF;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACxF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CACxF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAC5F;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC/F;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAC7F;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAC5F;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAC1F;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAC/F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAC3F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAC1F;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAC7F;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CACzF;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAC1F;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAC5F;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAG;CAAM;CAAM;CAAG;CAAM;CAAM;CAAI;CAAM;CAAM;CAC9F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAC5F;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAM;CAAI;CAAM;CAAO;CAC7F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CACxF;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAC9F;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAC5F;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CACzF;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAC9F;CAAO;CAAO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AAI;CAAO;CACzF;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CACzF;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CACzF;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAC/F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CACzF;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CACzF;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CACzF;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAA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;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CACzF;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CACzF;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CACzF;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAC3F;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAC7F;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CACtF;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAC5F;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CACzF;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC/F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAC1F;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAC1F;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAC1F;CAAO;CAAO;CAAI;CAAO;CAAO;CAAI;CAAO;CAAO;CAAG;CAAO;CAAO;CAAG;CAAO;CAAO;CAAI;CACxF;CAAO;CAAG;CAAO;CAAO;CAAI;CAAO;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACvF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAG;CAAQ;CAC3F;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAG;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAC3F;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAG;CAAQ;CAAQ;CAAG;CAAQ;CAC1F;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CACxF;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CACpF;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CAAI;CAAQ;CAAQ;CACxF;CAAQ;CAAQ;CAAI;CAAQ;CAAS;CAAI;CAAS;CAAS;AAC7D,CAAC;AACD,IAAa,yBAAyB;ACvetC,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,SAAS;AAGf,IAAM,aAAyB;CAC7B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAOA,IAAa,wBAAwB,cAA8B;CACjE,IAAI,MAAM;CACV,IAAI,OAAO,yBAAyB;CACpC,OAAO,OAAO,MAAM;EAClB,MAAM,MAAO,MAAM,QAAS;EAC5B,MAAM,SAAS,MAAM;EACrB,MAAM,QAAQ,sBAAsB;EACpC,MAAM,MAAM,sBAAsB,SAAS;EAC3C,IAAI,YAAY,OACd,OAAO,MAAM;OACR,IAAI,YAAY,KACrB,MAAM,MAAM;OAEZ,OAAO,sBAAsB,SAAS;CAE1C;CACA,OAAA;AACF;AAEA,IAAM,YAAY,mBAAmC;CACnD,QAAQ,gBAAR;EACE,KAAA;EACA,KAAA;EACA,KAAA;EACA,KAAA,IACE,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"}
package/dist/tables.js CHANGED
@@ -1,3 +1,3 @@
1
- import { l as getTableBodyRange, o as createTableBodySplitRange, r as TABLE_BODY_SPLIT_UNIT } from "./splitRange-BHV0vb0Q.js";
2
- import { n as getDynamicLayoutForTable, t as getDynamicHeightsForTable } from "./dynamicTemplate-CnK0nlnj.js";
1
+ import { l as getTableBodyRange, o as createTableBodySplitRange, r as TABLE_BODY_SPLIT_UNIT } from "./splitRange-B6311Noc.js";
2
+ import { n as getDynamicLayoutForTable, t as getDynamicHeightsForTable } from "./dynamicTemplate-DkTVIMNr.js";
3
3
  export { TABLE_BODY_SPLIT_UNIT, createTableBodySplitRange, getDynamicHeightsForTable, getDynamicLayoutForTable, getTableBodyRange };
@@ -1,13 +1,33 @@
1
1
  import * as fontkit from 'fontkit';
2
2
  import type { Font as FontKitFont } from 'fontkit';
3
3
  import { Font } from '@pdfme/common';
4
- import type { TextSchema, FontWidthCalcValues } from './types.js';
4
+ import type { DYNAMIC_FONT_SIZE_FIT, TextSchema, FontWidthCalcValues } from './types.js';
5
+ import { type WrapLine } from './wrap.js';
5
6
  export declare const getBrowserVerticalFontAdjustments: (fontKitFont: FontKitFont, fontSize: number, lineHeight: number, verticalAlignment: string) => {
6
7
  topAdj: number;
7
8
  bottomAdj: number;
8
9
  };
9
10
  export declare const getFontDescentInPt: (fontKitFont: FontKitFont, fontSize: number) => number;
10
11
  export declare const heightOfFontAtSize: (fontKitFont: FontKitFont, fontSize: number) => number;
12
+ /**
13
+ * First-line height uses font metrics (including empty leading lines).
14
+ * Later lines use the nominal font size. Shared by plain and Markdown.
15
+ */
16
+ export declare const getLineBoxHeightPt: (fontSize: number, isFirstLine: boolean, lineFonts: readonly FontKitFont[], fallbackFont: FontKitFont) => number;
17
+ export declare const fitDynamicFontSize: ({ startSize, setting, boxWidth, boxHeight, calculateConstraints, }: {
18
+ startSize: number;
19
+ setting: {
20
+ min: number;
21
+ max: number;
22
+ fit?: DYNAMIC_FONT_SIZE_FIT;
23
+ };
24
+ boxWidth: number;
25
+ boxHeight: number;
26
+ calculateConstraints: (size: number) => {
27
+ totalWidthInMm: number;
28
+ totalHeightInMm: number;
29
+ };
30
+ }) => number;
11
31
  export declare const widthOfTextAtSize: (text: string, fontKitFont: FontKitFont, fontSize: number, characterSpacing: number) => number;
12
32
  export declare const fetchRemoteFontData: (url: string) => Promise<ArrayBuffer>;
13
33
  export declare const getFontKitFont: (fontName: string | undefined, font: Font, _cache: Map<string | number, fontkit.Font>) => Promise<FontKitFont>;
@@ -28,6 +48,18 @@ export declare const calculateDynamicFontSize: ({ textSchema, fontKitFont, value
28
48
  value: string;
29
49
  startingFontSize?: number | undefined;
30
50
  }) => number;
51
+ export declare const wrapTextToSize: (arg: {
52
+ value: string;
53
+ characterSpacing: number;
54
+ boxWidthInPt: number;
55
+ fontSize: number;
56
+ fontKitFont: fontkit.Font;
57
+ }) => WrapLine[];
58
+ /**
59
+ * Facade over the shared wrap engine. Converts structured `{ text, hardBreak }`
60
+ * lines into the historical `\n`-suffixed strings used by PDF / tables / lists.
61
+ * Viewer should call `wrapTextToSize` instead — see `toLegacySplitLines`.
62
+ */
31
63
  export declare const splitTextToSize: (arg: {
32
64
  value: string;
33
65
  characterSpacing: number;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * UAX #14 pair-table engine (foliojs linebreak algorithm) plus a UCD class
3
+ * lookup. foliojs `linebreak` is not a runtime dependency: its published
4
+ * package loads the class trie via Node `fs` / brfs, which is unacceptable
5
+ * for the browser Viewer path. The pair table and LB1/LB8a/LB21a/LB30a
6
+ * handling below follow foliojs/linebreak (MIT); classes come from a
7
+ * UCD-generated range table (LineBreak.txt).
8
+ *
9
+ * LB1 remaps used here:
10
+ * AI, SA, SG, XX → AL
11
+ * CJ → NS (CSS `line-break: strict` / Japanese kinsoku starters)
12
+ *
13
+ * SA (Thai / Lao / Khmer) is remapped to AL for the pair table, then wrap.ts
14
+ * injects extra break opportunities from `Intl.Segmenter` word dictionaries.
15
+ */
16
+ export declare const OP = 0;
17
+ export declare const CL = 1;
18
+ export declare const CP = 2;
19
+ export declare const QU = 3;
20
+ export declare const GL = 4;
21
+ export declare const NS = 5;
22
+ export declare const EX = 6;
23
+ export declare const SY = 7;
24
+ export declare const IS = 8;
25
+ export declare const PR = 9;
26
+ export declare const PO = 10;
27
+ export declare const NU = 11;
28
+ export declare const AL = 12;
29
+ export declare const HL = 13;
30
+ export declare const ID = 14;
31
+ export declare const IN = 15;
32
+ export declare const HY = 16;
33
+ export declare const BA = 17;
34
+ export declare const BB = 18;
35
+ export declare const B2 = 19;
36
+ export declare const ZW = 20;
37
+ export declare const CM = 21;
38
+ export declare const WJ = 22;
39
+ export declare const H2 = 23;
40
+ export declare const H3 = 24;
41
+ export declare const JL = 25;
42
+ export declare const JV = 26;
43
+ export declare const JT = 27;
44
+ export declare const RI = 28;
45
+ export declare const EB = 29;
46
+ export declare const EM = 30;
47
+ export declare const ZWJ = 31;
48
+ export declare const CB = 32;
49
+ export declare const AI = 33;
50
+ export declare const BK = 34;
51
+ export declare const CJ = 35;
52
+ export declare const CR = 36;
53
+ export declare const LF = 37;
54
+ export declare const NL = 38;
55
+ export declare const SA = 39;
56
+ export declare const SG = 40;
57
+ export declare const SP = 41;
58
+ export declare const XX = 42;
59
+ export type LineBreakOpportunity = {
60
+ position: number;
61
+ required: boolean;
62
+ };
63
+ export declare const getRawLineBreakClass: (codePoint: number) => number;
64
+ /**
65
+ * UAX #14 break opportunities using the foliojs pair-table engine.
66
+ * Positions are string indexes (UTF-16) at the start of the next unit.
67
+ */
68
+ export declare const collectUax14Breaks: (text: string) => LineBreakOpportunity[];
69
+ export declare const isSaCodePoint: (codePoint: number) => boolean;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Compact Unicode LineBreak ranges generated from Unicode 18.0.0 LineBreak.txt.
3
+ * Source: https://www.unicode.org/Public/18.0.0/ucd/LineBreak.txt
4
+ * SHA-256: 91201c52cb2f69d45543147a7e56e8700d4eb52931ae7fe32951f11273275bd3
5
+ * Packed as [start, end, classId, ...]. Lookup is binary search.
6
+ * Do not edit by hand — regenerate with scripts/generate-line-break-classes.mjs.
7
+ */
8
+ export declare const LINE_BREAK_UNICODE_VERSION = "18.0.0";
9
+ export declare const LINE_BREAK_SOURCE_SHA256 = "91201c52cb2f69d45543147a7e56e8700d4eb52931ae7fe32951f11273275bd3";
10
+ export declare const LINE_BREAK_RANGE_DATA: Uint32Array<ArrayBuffer>;
11
+ export declare const LINE_BREAK_RANGE_COUNT = 2939;
@@ -28,6 +28,7 @@ export declare const resolveRichTextRuns: (arg: {
28
28
  font: Font;
29
29
  _cache: Map<string | number, unknown>;
30
30
  }) => Promise<ResolvedRichTextRun[]>;
31
+ export declare const measureRunText: (run: ResolvedRichTextRun, text: string, fontSize: number, characterSpacing: number) => number;
31
32
  export declare const countRichTextLineGraphemes: (line: RichTextLine) => number;
32
33
  export declare const getRichTextLineText: (line: RichTextLine) => string;
33
34
  export declare const layoutRichTextLines: (arg: {
@@ -36,6 +37,7 @@ export declare const layoutRichTextLines: (arg: {
36
37
  characterSpacing: number;
37
38
  boxWidthInPt: number;
38
39
  }) => RichTextLine[];
40
+ export declare const getRichTextLineBoxHeightPt: (line: RichTextLine, fontSize: number, isFirstLine: boolean, fallbackFont: FontKitFont) => number;
39
41
  export declare const calculateDynamicRichTextFontSize: (arg: {
40
42
  value: string;
41
43
  schema: TextSchema;
@@ -2,7 +2,9 @@ import type { Font as FontKitFont } from 'fontkit';
2
2
  import { UIRenderProps } from '@pdfme/common';
3
3
  import type { TextSchema } from './types.js';
4
4
  export declare const uiRender: (arg: UIRenderProps<TextSchema>) => Promise<void>;
5
- export declare const buildStyledTextContainer: (arg: UIRenderProps<TextSchema>, fontKitFont: FontKitFont, value: string, resolvedDynamicFontSize?: number) => HTMLDivElement;
5
+ export declare const buildStyledTextContainer: (arg: UIRenderProps<TextSchema>, fontKitFont: FontKitFont, value: string, resolvedDynamicFontSize?: number, display?: {
6
+ useComputedWrapLines?: boolean;
7
+ }) => HTMLDivElement;
6
8
  /**
7
9
  * Firefox doesn't support 'plaintext-only' contentEditable mode, which we want to avoid mark-up.
8
10
  * This function adds a workaround for Firefox to make the contentEditable element behave like 'plaintext-only'.