{"version":3,"sources":["../src/dictionary.ts","../data/component-normalize.ts","../data/component-style.ts","../data/homoglyph.ts","../data/override.ts","../data/renderable.ts","../src/generated/legible.ts","../src/kanji/ids.ts","../src/generated/structure.ts","../src/generated/variant.ts","../src/kanji/engine.ts","../data/digit.ts","../data/hiragana.ts","../data/katakana.ts","../data/latin.ts","../data/symbol.ts","../src/layers/char.ts","../src/protect.ts","../src/random.ts","../src/segment.ts","../src/types.ts","../src/converter.ts","../src/generated/meta.ts","../src/cli/program.ts","../src/cli/run.ts","../src/cli.ts"],"names":["PACKED","table","SPLIT_POLICIES","InvalidArgumentError","Command","Option","io","CommanderError"],"mappings":"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EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,GAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,EACH,CAAA,EAAG,IAAA;AAAA,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","file":"cli.cjs","sourcesContent":["import type { Picker } from './random';\nimport type { Segment } from './segment';\n\n/**\n * User-supplied literal replacements.\n *\n * Keys are matched as plain text, longest first — never compiled to a regex.\n * v4 passed dictionary keys straight to `new RegExp(...)`, so any key\n * containing a metacharacter changed meaning or threw.\n *\n * This replaces v4's built-in `word.json`, which is gone: one of its five\n * entries was reproducible from the character tables and the rest disagreed\n * with them (it rendered し as ι where the kana table says Ｕ).\n */\nexport interface DictionaryRule {\n  key: string;\n  candidates: readonly string[];\n}\n\nexport function compileDictionary(\n  dictionary: Readonly<Record<string, string | readonly string[]>> | undefined,\n): DictionaryRule[] {\n  if (!dictionary) return [];\n  return Object.entries(dictionary)\n    .filter(([key]) => key.length > 0)\n    .map(([key, value]) => ({\n      key,\n      candidates: typeof value === 'string' ? [value] : value,\n    }))\n    .sort((a, b) => b.key.length - a.key.length);\n}\n\n/**\n * Apply dictionary rules over the segment list, sealing whatever they write so\n * no later layer can convert the replacement a second time.\n */\nexport function applyDictionary(\n  segments: Segment[],\n  rules: readonly DictionaryRule[],\n  pick: Picker,\n): void {\n  if (rules.length === 0) return;\n\n  for (let i = 0; i < segments.length; i++) {\n    if (segments[i]!.sealed) continue;\n\n    for (const rule of rules) {\n      let matchedSegments = 0;\n      let matchedText = '';\n      while (matchedText.length < rule.key.length && i + matchedSegments < segments.length) {\n        const seg = segments[i + matchedSegments]!;\n        if (seg.sealed) break;\n        matchedText += seg.source;\n        matchedSegments++;\n      }\n      if (matchedText !== rule.key) continue;\n\n      segments[i]!.output = pick(rule.candidates);\n      segments[i]!.sealed = true;\n      for (let k = 1; k < matchedSegments; k++) {\n        segments[i + k]!.output = '';\n        segments[i + k]!.sealed = true;\n      }\n      i += matchedSegments - 1;\n      break;\n    }\n  }\n}\n","/**\n * Component aliases.\n *\n * KanjiVG spells the same radical more than one way (both 辶 U+8FB6 and ⻌\n * U+2ECC occur, ~56 and ~49 times). Folding them here keeps the style map from\n * needing duplicate entries, and stops the same radical being rendered two\n * different ways — the class of inconsistency that produced v4's 部→立ﾛ卩.\n */\nexport const componentAlias: Readonly<Record<string, string>> = {\n  // Radical block -> unified ideograph, so the style map has one key each.\n  '⻌': '辶',\n  '⺅': '亻',\n  '⺡': '氵',\n  '⺘': '扌',\n  '⺮': '竹',\n  '⺾': '艹',\n\n  // Rare radical forms folded onto their legible equivalents.\n  '⻞': '飠',\n  '⺶': '羊',\n  '⺫': '罒',\n};\n","/**\n * Component -> galmoji.\n *\n * This is the heart of the library. Everything else is mechanical: the\n * structure table says *where* a kanji splits, and this table says *how* each\n * piece is written. Changing one line here changes every kanji that uses that\n * component — `亻` alone reaches ~190 characters.\n *\n * Keys are either a bare component or `component@position`. The position forms\n * only exist for components whose shape depends on where they sit; lookup\n * falls back to the bare key. Values are candidate lists — with no `seed` the\n * first is always chosen, so single-element lists are fully deterministic.\n *\n * The core rules below were recovered empirically by aligning galjp v4's\n * hand-written output against KanjiVG's decomposition: every one of them held\n * for 100% of the characters where both sources agreed on the split.\n */\nexport const componentStyle: Readonly<Record<string, readonly string[]>> = {\n  // ---- 偏 (left-hand radicals) — the highest-impact entries ----\n  氵: ['ｼ'], // さんずい   ~288 kanji\n  扌: ['ｵ'], // てへん     ~201\n  亻: ['ｲ'], // にんべん   ~188\n  礻: ['ﾈ'], // しめすへん\n  冫: ['ﾝ'], // にすい\n\n  // ---- 旁 (right-hand radicals) ----\n  刂: ['ﾘ'], // りっとう\n  力: ['ｶ'],\n  又: ['ﾇ'],\n  卜: ['ﾄ'],\n\n  // ---- 冠・脚 (top/bottom) — newly reachable now that vertical splits are\n  //      allowed (docs/DESIGN.md §6.3.1). v4 could never use these.\n  艹: ['ﾅﾅ'], // くさかんむり ~233 kanji\n  竹: ['ｹｹ'], // たけかんむり ~103. v4 had 竹→ｹｹ for the *standalone* character\n  //               only, so 笑 箱 節 算 never benefited.\n  宀: ['ウ'], // うかんむり   ~50\n  冖: ['ワ'], // わかんむり\n\n  // ---- 繞 (wrap-around) ----\n  辶: ['ぇ'], // しんにょう\n\n  // ---- Position-independent small parts ----\n  口: ['ﾛ'], // ~195 kanji\n  夕: ['ﾀ'],\n  匕: ['ﾋ'],\n  厶: ['ﾑ'],\n  乂: ['ﾒ'],\n  才: ['ｵ'],\n};\n\n/**\n * Components deliberately left alone, recorded so the decision is visible.\n * See docs/DESIGN.md D5 — styling any of these is a one-line change here.\n *\n *   木 (~323)  糸 (~152)  忄 (~124)  月 (~121)  衤 (~55)  頁 (~41)  彳 (~28)\n */\nexport const UNSTYLED_BY_CHOICE: readonly string[] = ['木', '糸', '忄', '月', '衤', '頁', '彳'];\n","/**\n * Whole-character look-alike substitution.\n *\n * These are not decompositions — the character is swapped for a different\n * character that reads as the same shape. Checked before decomposition so that\n * e.g. 中 becomes ㊥ rather than being split.\n */\nexport const homoglyph: Readonly<Record<string, readonly string[]>> = {\n  上: ['㊤'],\n  下: ['㊦'],\n  中: ['㊥'],\n  左: ['㊧'],\n  右: ['㊨'],\n  亜: ['亞'],\n  // '悪': ['惡'],\n  本: ['夲'],\n  事: ['亊'],\n  丁: ['Ｔ'],\n  乙: ['Ｚ'],\n  犬: ['尤'],\n  子: ['孑'],\n};\n","/**\n * Hand-written exceptions, checked before every other route.\n *\n * Only things the algorithm cannot reach belong here. KanjiVG (like IDS)\n * describes a character down to its *components* and stops; it never goes to\n * the stroke level, so 川→丿丨丨 can only ever be written by hand.\n *\n * Deliberately NOT listed, because the engine now derives them:\n *   多 = ⿱夕夕 → ﾀﾀ      外 = ⿰夕卜 → ﾀﾄ      双 = ⿰又又 → ﾇﾇ\n *   竹 → ｹｹ   (single-component styling, docs/DESIGN.md route 5)\n *\n * v4's 火 → \"'人'\" is not carried over: the ASCII apostrophes look like a typo\n * and premise 4 removes any obligation to keep it (docs/DESIGN.md D4).\n */\nexport const override: Readonly<Record<string, readonly string[]>> = {\n  // Stroke-level splits — unreachable from component data.\n  川: ['丿丨丨'],\n  小: ['ﾉ丨ヽ'],\n  北: ['ﾆ丨ﾋ'],\n  水: ['ﾌＫ'],\n  氷: ['ﾗＫ'],\n  以: ['ﾚ丶人'],\n  比: ['ﾋﾋ'],\n  死: ['ﾀﾋ'],\n  玉: ['王､'],\n\n  // 友 is ⿴𠂇又 (an enclosure), which the default split policy declines.\n  友: ['ﾅﾇ'],\n};\n","/**\n * Components that display fine but are not JIS X 0208 kanji.\n *\n * The legible set (JIS X 0208) answers \"would a reader recognise this as a\n * character?\", which is the right question for deciding how deep to recurse.\n * It is the wrong question for deciding whether a top/bottom split is safe:\n * 疒 and 灬 are not JIS X 0208 kanji, yet every Japanese font draws them and\n * every reader knows the shape. Without this list, 病 and 熱 stay unconverted.\n *\n * Only add characters that render in ordinary Japanese fonts. Obscure or\n * non-BMP parts (𠂊, 𡗗, 龶) are deliberately absent — splitting into something\n * that shows up as tofu helps nobody.\n */\nexport const renderableExtra: readonly string[] = [\n  // Radicals encoded as unified ideographs.\n  '疒', // やまいだれ  病 症 痛 疲 …\n  '灬', // れっか      熱 点 無 焦 …\n  '罒', // あみがしら  置 罰 署 …\n  '覀', // にし\n  '耂', // おいかんむり 考 者 老 …\n  '龰', // あしへん\n\n  // CJK Radicals Supplement / Kangxi radicals.\n  '⺌',\n  '⺍',\n  '⺤',\n  '⺕',\n  '⺗',\n  '⺇',\n  '⺜',\n  '⺈',\n\n  // Katakana shapes KanjiVG uses as components (予 = ⿱マ丁).\n  'マ',\n  'ヨ',\n  'ユ',\n];\n","/**\n * Readable components (JIS X 0208 characters reachable as an operand).\n *\n * GENERATED FILE — do not edit. Rebuild with: npm run data:build\n *\n * Derived from the Unicode Character Database (c) Unicode, Inc.\n * https://www.unicode.org/copyright.html\n */\nconst PACKED =\n  \"一丁七万丈三上下不与丑且丕世丘丙丞両並中串丶丸主丿乂乃久之乍乎乏乕乗乘乙九乞也亀了予争二于云互五井亘亙亜亞亟亠亡亢交亥亦亨享京亭亮亶人仄今介付代令以任伏伐休会位何余作佰來侖侯便保修倉備僉僕儿兀允元兄充兆先光克兌免兎兒兔入全兩兪八公六兮共兵其具典兼冀内冉冊再冏冒冓冖冠冢冥冫冬几凡処凵凶出函刀刃刄分切刈刑列別利到制則剌前劉力加助劵勃勇動務勞勤勺勾勿包匆匈匍匐匕化北匡匪匱匹区医匿區十千卆升午卉半卑卒卓南単卜卞占卦卩卯危即却卵卷卸厂厄厘原厥厭厳厶去参參又叉及友反叔取受叟口古句只召可台史右号司各合吉吊同名后吏向君吝否含吾呂呆呈呉告呑周命和咢咨咸咼品員哥唐善喜喬單嗇嚴囚回因困固国國園土在圭坐垂執堂堅堯士壬壮壯声売壹壽夂夏夐夕外多夜夢大天太夫夬夭央失夲夷夸夾奄奇奈奉奏奐契奚奠奥奧女奴如妄妥妻妾委威娚婁嬰子孔存孚孛孝孟季孤孫孰孱宀它宅守安完宏宗官定宛宜客宣室宰害家容宿寅密寉察寧審寫寸寺寿封射将將專尉尊尋小少尓尚尤尨尭就尸尹尺尼尽尾局居屈屋屎屏展属屬屯山岡島崔崩嵒巛川州工左巨巫差己巳巴巵巷巻巽巾市布希帚帛帝師帯帶常幕干平幵并幸幹幺幼幾广広庄府度座庶康庸廉廛廣廴延廷建廾弁弄弋式弓引弗弘弟弯弱張強彌彎彑当彖彗彡彦彫彭彳律従從御復微徴心必忍志忝念忽思怱恣息恵悉惟惠惡愈意愛感慮憂應戈戉戊戎成我戒戔或戚戸戻扁扇扈手才折拑拜擧支攴攵攸放故效敏敕敖敝敞敢散敦敬数數斂文斉斌斗斛斤斥斬斯新方於施旁旅族旗旡既日旦旧旨早旬旱昆昌明昏易昔昜星春昭是時晃晉普景晶暴曇曲曳更曷曹曼曽替最會月有朋服朔朝木未末本札朮朱朶朿杉束来東松析林果某柔柬査栗桀梁條棘楙楚楽榮樂樊欠次欣欲歇止正此武歩歯歳歴歹死殄殳段殷殿毀毋母毎比毛毳氏民气氣水永氾求江沓沙沛沾泉泊法泙泡波洛浦海涌淫温湯溥滕滿潘澡火灰炎為烏烝焉無焦然熊熏燕爪爭爰爲爵父爻爾爿片牙牛牟物犀犬狂狄猪猶獄玄率玉王瓜瓦甘甚甜生用甫甬田由甲申男界畏留畜畢番畫異當疋疏疑疾癶癸発登發白百皀皃皆皇皐皮皿盈益盍盡監盧目直相盾眇眉県眞真睿瞿矍矛矢矣知石示神票祭禀禁禹禺禽禾禿秀秋科秦稜稟積穴空窄窒立竒竜竟章童竹筑筮算箭節米粛粥粲糸系約累絹維縁縢縣縵缶罔署罷羅羊美羔義羲羽翁習翕翰老考者耆而耒耳耶聖聚聴聶聽聿肅肉肋肖肴胃胡胥能脊臣臧自至致臺臼臾與舌舍舎舛舜舟般艮良色芒花芳芻苗苛苟若英茲荅荒莫莽菫華萃萬著葛蒙蒿蔑蔵蕩蕭薛薜藏藝藺虍虎虐虚號虫蚤蚩蜀蜜蟲血行衍衣表衰袁袞裁襄西要覃見規覚親覺覽觀角觜解言討許諸謁谷豆豈豊豐豕豚象豪豬豸貌貍貝貞貢貫責貳貴賁賈賓賛賞賣賤質贈贊赤赦赫走足路身躬車軍載轉辛辟辰辱農迷追退送通造逢連逮遂道達遣遷邑那郎部郭郷鄭酉酋釆采里重野量金長門閏閑間閔閣閭闌阜阿陏陰隆隊隋隶隹隻雁集雇雉雋雍雜離難雨雪雲零雷需霍霜青静非面革韋韭音頁頃須預頓領頡頻頼顛風飛食養首香馬馮骨高髟鬲鬼魏魚魯鮮鳥鹵鹿麗麥麦麻黄黍黎黒黨黹黽鼓鼠鼡鼻齊齒齧龍龜龠\";\n\nexport const LEGIBLE_SIZE = 1177;\n\nlet set: Set<string> | null = null;\n\nexport function getLegible(): Set<string> {\n  if (!set) set = new Set([...PACKED]);\n  return set;\n}\n","/**\n * Ideographic Description Sequences.\n *\n * The structure table stores each entry as an operator followed by its\n * operands (`信` -> `⿰亻言`). Because every operator has a fixed arity the\n * encoding is self-delimiting, which is what lets the generated table be one\n * flat string with no separators.\n */\n\nexport type IdsOperator = '⿰' | '⿲' | '⿱' | '⿳' | '⿸' | '⿺' | '⿴';\n\n/** Where an operand sits, used for position-sensitive style lookup. */\nexport type Position = 'left' | 'right' | 'top' | 'bottom' | 'other';\n\n/**\n * How a structure interacts with {@link SplitPolicy}.\n *\n * - `always`      — reads left-to-right already; never needs permission.\n *                   ⿺ is here because a 繞 radical (辶, 廴) linearises the same\n *                   way a left-hand radical does.\n * - `conditional` — stacked; allowed from `balanced` up, and only when every\n *                   piece stays readable on its own.\n * - `enclose`     — one part wraps the other; only `aggressive` unwraps it.\n */\nexport type SplitClass = 'always' | 'conditional' | 'enclose';\n\ninterface OperatorInfo {\n  arity: number;\n  positions: readonly Position[];\n  splitClass: SplitClass;\n}\n\nconst OPERATORS: Readonly<Record<IdsOperator, OperatorInfo>> = {\n  '⿰': { arity: 2, positions: ['left', 'right'], splitClass: 'always' },\n  '⿲': { arity: 3, positions: ['left', 'other', 'right'], splitClass: 'always' },\n  '⿺': { arity: 2, positions: ['left', 'other'], splitClass: 'always' },\n  '⿱': { arity: 2, positions: ['top', 'bottom'], splitClass: 'conditional' },\n  '⿳': { arity: 3, positions: ['top', 'other', 'bottom'], splitClass: 'conditional' },\n  '⿸': { arity: 2, positions: ['top', 'other'], splitClass: 'conditional' },\n  '⿴': { arity: 2, positions: ['other', 'other'], splitClass: 'enclose' },\n};\n\nexport interface Ids {\n  operator: IdsOperator;\n  operands: readonly string[];\n  positions: readonly Position[];\n  splitClass: SplitClass;\n}\n\nexport function isIdsOperator(ch: string): ch is IdsOperator {\n  return Object.prototype.hasOwnProperty.call(OPERATORS, ch);\n}\n\nexport function arityOf(op: IdsOperator): number {\n  return OPERATORS[op].arity;\n}\n\n/** Parse one `⿰亻言`-style entry. Returns null if malformed. */\nexport function parseIds(raw: string): Ids | null {\n  const cps = [...raw];\n  const op = cps[0];\n  if (!op || !isIdsOperator(op)) return null;\n\n  const info = OPERATORS[op];\n  const operands = cps.slice(1);\n  if (operands.length !== info.arity) return null;\n\n  return {\n    operator: op,\n    operands,\n    positions: info.positions,\n    splitClass: info.splitClass,\n  };\n}\n","/**\n * Kanji structure table (char -> IDS).\n *\n * GENERATED FILE — do not edit. Rebuild with: npm run data:build\n *\n * Derived from KanjiVG (c) Ulrich Apel, licensed CC BY-SA 3.0.\n * https://kanjivg.tagaini.net/\n */\nimport { arityOf, isIdsOperator } from '../kanji/ids';\n\nconst PACKED =\n  \"㐭⿱亠回㓁⿱冖儿㕣⿱八口㝵⿱旦寸䍃⿱月缶䏍⿱厶月䙳⿱覀火䩗⿰革月䩻⿰革馬三⿱一手丕⿱不一个⿱人丨主⿱亠王乏⿱丿之乢⿰山乙乱⿰舌乙乳⿰孚乙乾⿰𠦝乞亀⿱𠂊电予⿱マ了云⿱二厶亘⿱二旦亚⿱一业些⿱此二亢⿱亠几交⿱亠父亥⿱亠人亩⿱亠田亶⿱㐭旦什⿰亻十仁⿰亻二仂⿰亻力仄⿸厂人仆⿰亻卜仇⿰亻九仍⿰亻乃从⿰人人仏⿰亻厶仔⿰亻子仕⿰亻士他⿰亻也仗⿰亻丈付⿰亻寸仙⿰亻山仝⿱人工仟⿰亻千代⿰亻弋仭⿰亻刄仮⿰亻反仰⿰亻卬仲⿰亻中件⿰亻牛价⿰亻介任⿰亻壬企⿱人止伉⿰亻亢伊⿰亻尹伍⿰亻五伎⿰亻支伏⿰亻犬伐⿰亻戈休⿰亻木会⿱人云伜⿰亻卆伝⿰亻云伯⿰亻白估⿰亻古伴⿰亻半伶⿰亻令伸⿰亻申伺⿰亻司似⿰亻以伽⿰亻加佃⿰亻田但⿰亻旦佇⿰亻宁位⿰亻立住⿰亻主佐⿰亻左佑⿰亻右体⿰亻本何⿰亻可佗⿰亻它佚⿰亻失佛⿰亻弗作⿰亻乍佝⿰亻句佯⿰亻羊佰⿰亻百佳⿰亻圭併⿰亻并佶⿰亻吉佻⿰亻兆佼⿰亻交使⿰亻吏侈⿰亻多例⿰亻列侍⿰亻寺侏⿰亻朱侑⿰亻有侘⿰亻宅供⿰亻共依⿰亻衣侠⿰亻夾価⿰亻覀侫⿰亻妄侭⿰亻尽侮⿰亻毎侶⿰亻呂便⿰亻更係⿰亻系促⿰亻足俄⿰亻我俊⿰亻夋俐⿰亻利俑⿰亻甬俔⿰亻見俗⿰亻谷俘⿰亻孚俚⿰亻里俛⿰亻免保⿰亻呆俟⿰亻矣信⿰亻言俤⿰亻弟俥⿰亻車俯⿰亻府俱⿰亻具俳⿰亻非俵⿰亻表俶⿰亻叔俸⿰亻奉俺⿰亻奄倅⿰亻卒倆⿰亻兩個⿰亻固倍⿰亻咅們⿰亻門倒⿰亻到倔⿰亻屈倖⿰亻幸倚⿰亻奇借⿰亻昔倠⿰亻隹倡⿰亻昌倣⿰亻放値⿰亻直倥⿰亻空倦⿰亻卷倨⿰亻居倩⿰亻青倪⿰亻兒倫⿰亻侖倬⿰亻卓倭⿰亻委倶⿰亻具倹⿰亻㑒假⿰亻叚偈⿰亻曷偉⿰亻韋偏⿰亻扁偐⿰亻彦偕⿰亻皆偖⿰亻者做⿰亻故停⿰亻亭健⿰亻建偬⿰亻怱偲⿰亻思側⿰亻則偵⿰亻貞偶⿰亻禺偸⿰亻兪偽⿰亻為傀⿰亻鬼傅⿰亻尃傍⿰亻旁傑⿰亻桀傚⿰亻效催⿰亻崔傭⿰亻庸傲⿰亻敖傳⿰亻專傴⿰亻區債⿰亻責傷⿰亻𬀷傾⿰亻頃僂⿰亻婁働⿰亻動像⿰亻象僑⿰亻喬僕⿰亻菐僖⿰亻喜僚⿰亻尞僞⿰亻爲僣⿰亻替僥⿰亻堯僧⿰亻曽僮⿰亻童僵⿰亻畺價⿰亻賈僻⿰亻辟儀⿰亻義儁⿰亻雋儂⿰亻農億⿰亻意儉⿰亻僉儒⿰亻需儔⿰亻壽儕⿰亻齊儖⿰亻監儘⿰亻盡儚⿰亻夢償⿰亻賞優⿰亻憂儲⿰亻諸儷⿰亻麗儺⿰亻難儻⿰亻黨儼⿰亻嚴兀⿱一儿允⿱厶儿元⿱二儿兄⿱口儿兇⿱凶儿光⿱⺌兀克⿱古兄兌⿱八兄児⿱旧儿兒⿱臼儿党⿱尚兄兢⿰克克全⿱人王公⿱八厶六⿱亠八共⿱龷八关⿱丷天兵⿱丘八典⿱曲八冀⿱北異冐⿱日月冑⿱由月冒⿱日目冓⿱三再冕⿱日免冗⿱冖几写⿱冖与冢⿱冖豕冤⿱冖兔冨⿱冖畐冪⿱冖幕冫⿱丶丶冬⿱夂冫冰⿰冫水冱⿰冫互冲⿰冫中决⿰冫夬冴⿰冫牙况⿰冫兄冶⿰冫台冷⿰冫令冽⿰冫列凄⿰冫妻凅⿰冫固准⿰冫隹凉⿰冫京凋⿰冫周凍⿰冫東凛⿰冫禀凜⿰冫稟凝⿰冫疑処⿺夂几凪⿴几止凭⿱任几凱⿰豈几凶⿴凵乂分⿱八刀切⿰七刀刈⿰乂刂刊⿰干刂刋⿰千刂刎⿰勿刂刑⿰开刂刔⿰夬刂列⿰歹刂初⿰衤刀判⿰半刂刧⿰去刀利⿰禾刂刪⿰冊刂刮⿰舌刂到⿰至刂刳⿰夸刂券⿱𠔉刀刺⿰朿刂刻⿰亥刂剃⿰弟刂剄⿰巠刂則⿰貝刂削⿰肖刂剋⿺克刂剌⿰束刂剏⿰并刄剔⿰易刂剖⿰咅刂剛⿰岡刂剞⿰奇刂剣⿰㑒刂剤⿰斉刂剩⿰乘刂剪⿱前刀副⿰畐刂剰⿰乗刂剱⿰㑒刄割⿰害刂剳⿰荅刂剴⿰豈刂創⿰倉刂剽⿰票刂剿⿰巢刂劃⿰畫刂劇⿰豦刂劈⿱辟刀劍⿰僉刂劑⿰齊刂劔⿰僉刄功⿰工力加⿰力口劣⿱少力助⿰且力努⿱奴力劫⿰去力劬⿰句力劭⿰召力劵⿱𠔉氺効⿰交力劼⿰吉力劾⿰亥力勁⿰巠力勃⿰孛力勅⿰束力勇⿱マ男勉⿺免力勍⿰京力勒⿰革力動⿰重力勗⿱日助勘⿰甚力勝⿰月劵勞⿱𤇾力募⿱莫力勠⿰翏力勢⿱埶力勣⿰責力勤⿰菫力勦⿰巢力勲⿱動灬勳⿰熏力匏⿰夸包化⿰亻匕匙⿺是匕千⿱丿十卆⿱九十卉⿱十廾卓⿱卜早協⿰十劦単⿱⺍甲博⿰十尃卞⿱亠下占⿱卜口卦⿰圭卜危⿱𠂊厄即⿰艮卩却⿰去卩卻⿰谷卩厄⿸厂卩厓⿸厂圭厖⿸厂尨厘⿸厂里厠⿸厂則厦⿸厂夏厩⿸厂既厮⿸厂斯厰⿸厂敞去⿱土厶參⿱𠫯彡友⿴𠂇又双⿰又又叔⿰尗又取⿰耳又叙⿰余又叛⿰半反叟⿱申又叡⿰睿又古⿱十口叨⿰口刀叩⿰口卩只⿱口八叫⿰口丩召⿱刀口叭⿰口八叮⿰口丁台⿱厶口叱⿰口七叶⿰口十叺⿰口入吁⿰口于吃⿰口乞各⿱夂口吉⿱士口吊⿱口巾吋⿰口寸名⿱夕口吐⿰口土君⿸尹口吝⿱文口吞⿱夭口吟⿰口今吠⿰口犬否⿱不口吩⿰口分含⿱今口听⿰口斤吭⿰口亢吮⿰口允吶⿰口内吸⿰口及吹⿰口欠吻⿰口勿吼⿰口孔吽⿰口牛吾⿱五口呀⿰口牙呆⿱口木呈⿱口王告⿱牛口呎⿰口尺呑⿱夭口呟⿰口玄呪⿰口兄呰⿱此口呱⿰口瓜味⿰口未呵⿰口可呶⿰口奴呷⿰口甲呻⿰口申呼⿰口乎咀⿰口且咄⿰口出咅⿱立口咆⿰口包咋⿰口乍和⿰禾口咏⿰口永咐⿰口付咠⿱口耳咤⿰口宅咥⿰口至咨⿱次口咫⿺尺只咬⿰口交咯⿰口各咲⿰口关咳⿰口亥咼⿴冎口咽⿰口因咾⿰口老品⿰口口哂⿰口西哄⿰口共哇⿰口圭哈⿰口合哘⿰口行員⿱口貝哢⿰口弄哥⿱可可哦⿰口我哨⿰口肖哩⿰口里哮⿰口孝哲⿱折口哺⿰口甫哽⿰口更唄⿰口貝唆⿰口夋唇⿱辰口唏⿰口希唔⿰口吾唖⿰口亜售⿱隹口唯⿰口隹唱⿰口昌唳⿰口戻唸⿰口念唹⿰口於唾⿰口垂啀⿰口厓啄⿰口豕啅⿰口卓商⿱立冏啌⿰口空啖⿰口炎啗⿰口臽啝⿰口和啣⿰口卸啻⿱帝口啼⿰口帝啾⿰口秋喀⿰口客喃⿰口南喇⿰口剌喉⿰口侯喊⿰口咸喋⿰口枼喘⿰口耑喙⿰口彖喚⿰口奐喝⿰口曷喞⿰口即喟⿰口胃喧⿰口宣喨⿰口亮喩⿰口兪喫⿰口契喬⿱呑冋喰⿰口食喻⿰口兪喿⿱品木嗄⿰口夏嗇⿱巫回嗔⿰口眞嗚⿰口烏嗜⿰口耆嗟⿰口差嗤⿰口蚩嗷⿰口敖嗹⿰口連嗾⿰口族嘔⿰口區嘖⿰口責嘗⿱尚旨嘘⿰口虚嘛⿰口麻嘩⿰口華嘯⿰口肅嘱⿰口属嘲⿰口朝嘴⿰口觜嘶⿰口斯嘸⿰口無噂⿰口尊噌⿰口曽噎⿰口壹噓⿰口虚噛⿰口歯噤⿰口禁噪⿰口喿噫⿰口意噬⿰口筮噴⿰口賁噸⿰口頓噺⿰口新嚀⿰口寧嚆⿰口蒿嚇⿰口赫嚊⿰口鼻嚔⿰口𤴡嚠⿰口劉嚥⿰口燕嚮⿱郷向嚶⿰口嬰嚼⿰口爵囀⿰口轉囁⿰口聶囃⿰口雜囈⿰口藝囎⿰口贈囑⿰口屬囓⿰口齧圣⿱又土圦⿰土入圧⿸厂土圭⿱土土地⿰土也圷⿰土下圸⿰土山圻⿰土斤址⿰土止坂⿰土反均⿰土匀坊⿰土方坎⿰土欠坏⿰土不坑⿰土亢坡⿰土皮坤⿰土申坦⿰土旦坩⿰土甘坪⿰土平坿⿰土付垈⿱代土垉⿰土包型⿱刑土垓⿰土亥垔⿱覀土垠⿰土艮垢⿰土后垣⿰土亘垤⿰土至垪⿰土并垳⿰土行埃⿰土矣埆⿰土角埋⿰土里城⿰土成埔⿰土甫埖⿰土花埜⿱林土域⿰土或埠⿰土阜埣⿰土卒埴⿰土直埵⿰土垂執⿰幸丸培⿰土咅基⿱其土埼⿰土奇堀⿰土屈堂⿱尚土堆⿰土隹堊⿱亞土堋⿰土朋堕⿱陏土堙⿰土垔堝⿰土咼堡⿱保土堤⿰土是堪⿰土甚場⿰土昜堵⿰土者堺⿰土界塀⿰土屏塊⿰土鬼塋⿱𤇾土塑⿱朔土塒⿰土時塔⿰土荅塗⿱涂土塘⿰土唐塙⿰土高塚⿰土冢塡⿰土眞塢⿰土烏填⿰土真塰⿱海土塲⿰土𬀷塵⿸鹿土塹⿱斬土塾⿱孰土境⿰土竟墅⿱野土墓⿱莫土増⿰土曽墜⿱隊土墟⿰土虚墨⿱黒土墫⿰土尊墮⿱隋土墳⿰土賁墸⿰土著墹⿰土間墺⿰土奧墻⿰土嗇壁⿱辟土壅⿱雍土壇⿰土亶壌⿰土㐮壑⿱㕡土壓⿱厭土壕⿰土豪壗⿰土盡壙⿰土廣壜⿰土曇壟⿱龍土壤⿰土襄壮⿰⺦士壯⿰爿士壺⿱士亞壻⿰士胥处⿰夂人夆⿱夂丰変⿱亦夂夋⿱允夂复⿳𠂉日夂外⿰夕卜夗⿰夕卩夘⿰夕卩夙⿴几歹多⿱夕夕夛⿱⺕夕夥⿰果多天⿱一大太⿱大丶夲⿱大十奄⿱大电奇⿱大可奈⿱大示奎⿱大圭奏⿱𡗗天奔⿱大卉奕⿱亦大套⿱大長奘⿱壯大奞⿱大隹奠⿱酋大奢⿱大者奨⿱将大奩⿱大區奪⿱奞寸奬⿱將大奮⿱奞田奴⿰女又奸⿰女干好⿰女子妁⿰女勺如⿰女口妃⿰女己妄⿱亡女妊⿰女壬妍⿰女开妓⿰女支妖⿰女夭妙⿰女少妝⿰爿女妣⿰女比妥⿱⺤女妨⿰女方妬⿰女石妲⿰女旦妹⿰女未妾⿱立女姆⿰女母姉⿰女市始⿰女台姐⿰女且姑⿰女古姓⿰女生委⿱禾女姙⿰女任姚⿰女兆姜⿱羊女姥⿰女老姨⿰女夷姪⿰女至姫⿰女臣姶⿰女合姻⿰女因姿⿱次女娃⿰女圭娄⿱米女娉⿰女甹娑⿱沙女娘⿰女良娚⿰女男娜⿰女那娟⿰女肙娠⿰女辰娥⿰女我娩⿰女免娯⿰女呉娵⿰女取娶⿱取女娼⿰女昌婀⿰女阿婆⿱波女婉⿰女宛婚⿰女昏婦⿰女帚婪⿱林女婿⿰女胥媒⿰女某媚⿰女眉媛⿰女爰媼⿰女𥁕媽⿰女馬媾⿰女冓嫁⿰女家嫂⿰女叟嫉⿰女疾嫋⿰女弱嫌⿰女兼嫐⿰娚女嫖⿰女票嫗⿰女區嫡⿰女啇嫣⿰女焉嫦⿰女常嫩⿰女敕嫺⿰女間嫻⿰女閑嬉⿰女喜嬋⿰女單嬌⿰女喬嬖⿱辟女嬢⿰女㐮嬪⿰女賓嬬⿰女需嬲⿰男娚嬶⿰女鼻嬾⿰女頼孀⿰女霜孃⿰女襄孅⿰女韱孔⿰子乙孕⿱乃子字⿱宀子孚⿱⺤子孜⿰子攵孟⿱子皿季⿱禾子孤⿰子瓜孥⿱奴子孩⿰子亥孫⿰子系孰⿰享丸孳⿱茲子孵⿰卵孚學⿱𦥯子孺⿰子需宁⿱宀丁它⿱宀匕宅⿱宀乇宇⿱宀于守⿱宀寸安⿱宀女宋⿱宀木完⿱宀元宍⿱宀六宕⿱宀石宗⿱宀示宙⿱宀由定⿱宀疋宛⿱宀夗宜⿱宀且宝⿱宀玉実⿱宀𡗗客⿱宀各宣⿱宀亘室⿱宀至宥⿱宀有宦⿱宀臣宮⿱宀呂宰⿱宀辛宵⿱宀肖家⿱宀豕宸⿱宀辰容⿱宀谷宿⿱宀佰寂⿱宀叔寃⿱宀兔寄⿱宀奇密⿱宓山寉⿱宀隹富⿱宀畐寓⿱宀禺寔⿱宀是寛⿱宀莧寞⿱宀莫察⿱宀祭寤⿱宀𤕻寥⿱宀翏實⿱宀貫寧⿱寍丁審⿱宀番寫⿱宀舄寮⿱宀尞寰⿱宀睘寵⿱宀龍寺⿱土寸対⿰文寸封⿰圭寸射⿰身寸尅⿺克寸尊⿱酋寸導⿱道寸尓⿱𠂉小尖⿱小大尗⿱上小尚⿱⺌冋尠⿰甚少就⿰京尤尻⿸尸九尼⿸尸匕尽⿱尺冫尾⿸尸毛尿⿸尸水局⿸尸句屁⿸尸比居⿸尸古屈⿸尸出届⿸尸由屋⿸尸至屍⿸尸死屎⿸尸米屏⿸尸并屑⿸尸肖屓⿸尸貝属⿸尸禹屠⿸尸者屡⿸屎娄層⿸尸曽履⿸尸復屶⿱山刀屹⿰山乞岌⿱山及岐⿰山支岑⿱山今岔⿱分山岨⿰山且岩⿱山石岫⿰山由岬⿰山甲岱⿱代山岳⿱丘山岶⿰山白岷⿰山民岼⿰山平岾⿰山占峅⿰山弁峇⿱山合峙⿰山寺峡⿰山夹峨⿰山我峩⿱山我峪⿰山谷峭⿰山肖峯⿱山夆峰⿰山夆峺⿰山更峻⿰山夋峽⿰山夾崇⿱山宗崎⿰山奇崑⿱山昆崔⿱山隹崖⿱山厓崗⿱山岡崘⿰山侖崙⿱山侖崛⿰山屈崟⿱山金崢⿰山爭崩⿱山朋嵋⿰山眉嵎⿰山禺嵐⿱山風嵒⿱品山嵜⿱山竒嵩⿱山高嵬⿱山鬼嵯⿰山差嵳⿱山差嵶⿰山弱嶂⿰山章嶄⿱山斬嶇⿰山區嶋⿰山鳥嶌⿱山鳥嶐⿱山隆嶝⿰山登嶢⿰山堯嶬⿰山義嶮⿰山僉嶷⿱山疑嶺⿱山領嶼⿰山與嶽⿱山獄巂⿱崔冏巉⿰山毚巌⿱山厳巍⿱山魏巒⿱䜌山巓⿱山顛巖⿱山嚴巡⿺⻌巛巣⿱⺍果巧⿰工丂巷⿱共己巸⿰𦣝巳巻⿱𠔉己市⿱亠巾帆⿰巾凡帋⿱氏巾希⿱乂布帑⿱奴巾帖⿰巾占帙⿰巾失帛⿱白巾帰⿰刂帚帳⿰巾長帷⿰巾隹常⿱尚吊帽⿰巾冒幀⿰巾貞幃⿰巾韋幄⿰巾屋幅⿰巾畐幇⿱封巾幌⿰巾晃幎⿰巾冥幔⿰巾曼幕⿱莫巾幗⿰巾國幡⿰巾番幢⿰巾童幣⿱敝巾幤⿱敞巾幵⿰干干幼⿰幺力庁⿸广丁広⿸广厶庄⿸广土庇⿸广比床⿸广木序⿸广予底⿸广氐庖⿸广包店⿸广占府⿸广付庠⿸广羊座⿸广坐庫⿸广車庭⿸广廷庵⿸广奄康⿸广隶廁⿸广則廂⿸广相廃⿸广発廈⿸广夏廉⿸广兼廊⿸广郎廏⿸广𣪘廓⿸广郭廖⿸广翏廝⿸广斯廟⿸广朝廠⿸广敞廡⿸广無廢⿸广發廣⿸广黃廨⿸广解廩⿸广稟廬⿸广盧廰⿸广聴廱⿸广雝廳⿸广聽延⿺廴正廷⿺廴壬廸⿺廴由建⿺廴聿廻⿺廴回廼⿺廴西弁⿱厶廾弃⿱亠弁弄⿱王廾弉⿱壯廾弊⿱敝廾引⿰弓丨弖⿱弓一弘⿰弓厶弛⿰弓也弥⿰弓尓弦⿰弓玄弧⿰弓瓜弩⿱奴弓弭⿰弓耳弯⿱亦弓張⿰弓長弸⿰弓朋弾⿰弓単彁⿰弓哥彈⿰弓單彊⿰弓畺彌⿰弓爾彎⿱䜌弓当⿱⺌⺕彖⿱彑豕彜⿱彑𪪷形⿰开彡彩⿰采彡彪⿺虎彡彫⿰周彡彬⿰林杉彭⿰壴彡彰⿰章彡影⿰景彡彷⿰彳方役⿰彳殳彼⿰彳皮彿⿰彳弗往⿰彳主征⿰彳正徂⿰彳且徃⿰彳生径⿰彳圣待⿰彳寺徇⿰彳旬很⿰彳艮徊⿰彳回律⿰彳聿徐⿰彳余徑⿰彳巠徒⿰彳走得⿰彳㝵徘⿰彳非徙⿰彳歨徠⿰彳來御⿰彳卸徨⿰彳皇復⿰彳复循⿰彳盾徭⿰彳䍃徼⿰彳敫忌⿱己心忍⿱刃心忖⿰忄寸志⿱士心忘⿱亡心忙⿰忄亡応⿸广心忝⿱夭⺗忠⿱中心忤⿰忄午忩⿱公心快⿰忄夬忰⿰忄卆忱⿰忄冘念⿱今心忸⿰忄丑忻⿰忄斤忽⿱勿心忿⿱分心怎⿱乍心怏⿰忄央怐⿰忄句怒⿱奴心怕⿰忄白怖⿰忄布怙⿰忄古怛⿰忄旦怜⿰忄令思⿱田心怠⿱台心怡⿰忄台怦⿰忄平性⿰忄生怨⿱夗心怩⿰忄尼怪⿰忄圣怫⿰忄弗怯⿰忄去怱⿱匆心怺⿰忄永恁⿱任心恂⿰忄旬恃⿰忄寺恆⿰忄亙恊⿰忄劦恋⿱亦心恍⿰忄光恒⿰忄亘恕⿱如心恙⿱羊心恚⿱圭心恟⿰忄匈恠⿰忄在恢⿰忄灰恣⿱次心恤⿰忄血恥⿰耳心恨⿰忄艮恩⿱因心恪⿰忄各恫⿰忄同恬⿰忄舌恭⿱共⺗息⿱自心恰⿰忄合恷⿱休心悁⿰忄肙悃⿰忄困悄⿰忄肖悉⿱釆心悋⿰忄吝悌⿰忄弟悍⿰忄旱悒⿰忄邑悔⿰忄毎悖⿰忄孛悗⿰忄免悚⿰忄束悛⿰忄夋悟⿰忄吾悠⿱攸心患⿱串心悦⿰忄兌悧⿰忄利悪⿱亜心悲⿱非心悳⿱直心悴⿰忄卒悵⿰忄長悸⿰忄季悼⿰忄卓悽⿰忄妻情⿰忄青惆⿰忄周惇⿰忄享惑⿱或心惓⿰忄卷惘⿰忄罔惚⿰忄忽惜⿰忄昔惟⿰忄隹惡⿱亞心惣⿱物心惧⿰忄具惨⿰忄参想⿱相心惴⿰忄耑惶⿰忄皇惷⿱春心惹⿱若心惺⿰忄星惻⿰忄則愀⿰忄秋愁⿱秋心愃⿰忄宣愆⿱衍心愈⿱兪心愉⿰忄兪愎⿰忄复意⿱音心愕⿰忄咢愚⿱禺心感⿱咸心愡⿰忄怱愧⿰忄鬼愬⿱朔心愴⿰忄倉愼⿰忄眞愽⿰忄尃愾⿰忄氣愿⿱原心慂⿱涌心慄⿰忄栗慇⿱殷心慈⿱兹心慊⿰忄兼態⿱能心慌⿰忄荒慍⿰忄𥁕慎⿰忄真慓⿰忄票慕⿱莫⺗慘⿰忄參慙⿱斬心慚⿰忄斬慝⿱匿心慟⿰忄動慢⿰忄曼慣⿰忄貫慥⿰忄造慧⿱彗心慨⿰忄既慫⿱從心慮⿸虍思慯⿰忄𬀷慰⿱尉心慱⿰忄專慳⿰忄堅慴⿰忄習慵⿰忄庸慷⿰忄康慾⿱欲心憇⿱甜心憊⿱備心憎⿰忄曽憐⿰忄粦憑⿱馮心憔⿰忄焦憙⿱喜心憚⿰忄單憤⿰忄賁憧⿰忄童憫⿰忄閔憬⿰忄景憮⿰忄無憶⿰忄意憺⿰忄詹憾⿰忄感懃⿱勤心懆⿰忄喿懈⿰忄解懊⿰忄奧懋⿱楙心懌⿰忄睪懍⿰忄稟懣⿱滿心懦⿰忄需懲⿱徴心懶⿰忄頼懸⿱縣心懺⿰忄韱懼⿰忄瞿懾⿰忄聶懿⿰壹恣戀⿱䜌心戔⿱戈戈戝⿰貝戈戟⿰𠦝戈戡⿰甚戈戦⿰単戈戮⿰翏戈戯⿰虚戈戰⿰單戈戳⿰翟戈房⿸戸方所⿰戸斤扁⿸戸冊扇⿸戸羽扈⿸戸邑扉⿸戸非扎⿰扌乙打⿰扌丁払⿰扌厶扛⿰扌工扞⿰扌干扠⿰扌叉扣⿰扌口扨⿰扌刄扮⿰扌分扱⿰扌及扶⿰扌夫批⿰扌比扼⿰扌厄找⿰扌戈技⿰扌支抂⿰扌王抃⿰扌卞抄⿰扌少抉⿰扌夬把⿰扌巴抒⿰扌予抓⿰扌爪抔⿰扌不投⿰扌殳抖⿰扌斗抗⿰扌亢折⿰扌斤抜⿰扌友択⿰扌尺披⿰扌皮抬⿰扌台抱⿰扌包抵⿰扌氐抹⿰扌末抻⿰扌申押⿰扌甲抽⿰扌由拂⿰扌弗担⿰扌旦拆⿰扌斥拇⿰扌母拈⿰扌占拉⿰扌立拊⿰扌付拌⿰扌半拍⿰扌白拏⿱奴手拑⿰扌甘拒⿰扌巨拓⿰扌石拔⿰扌犮拗⿰扌幼拘⿰扌句拙⿰扌出招⿰扌召拠⿰扌処拡⿰扌広括⿰扌舌拭⿰扌式拮⿰扌吉拯⿰扌丞拱⿰扌共拵⿰扌存拷⿰扌考拾⿰扌合拿⿱合手持⿰扌寺挂⿰扌圭指⿰扌旨按⿰扌安挌⿰扌各挑⿰扌兆挟⿰扌夹挧⿰扌羽挨⿰扌矣挫⿰扌坐振⿰扌辰挺⿰扌廷挽⿰扌免挾⿰扌夾捉⿰扌足捌⿰扌別捍⿰扌旱捐⿰扌肙捕⿰扌甫捗⿰扌歩捜⿰扌叟捧⿰扌奉捨⿰扌舎捩⿰扌戻捫⿰扌門据⿰扌居捲⿰扌巻捶⿰扌垂捺⿰扌奈捻⿰扌念掀⿰扌欣掃⿰扌帚授⿰扌受掉⿰扌卓掌⿱尚手掎⿰扌奇排⿰扌非掖⿰扌夜掘⿰扌屈掛⿰扌卦掟⿰扌定掠⿰扌京採⿰扌采掣⿱制手接⿰扌妾控⿰扌空推⿰扌隹掩⿰扌奄措⿰扌昔掫⿰扌取掬⿰扌匊掲⿰扌曷掴⿰扌国掵⿰扌命掾⿰扌彖揀⿰扌柬揃⿰扌前揄⿰扌兪揆⿰扌癸揉⿰扌柔描⿰扌苗提⿰扌是插⿰扌臿揖⿰扌咠揚⿰扌昜換⿰扌奐握⿰扌屋揣⿰扌耑揩⿰扌皆揮⿰扌軍援⿰扌爰揶⿰扌耶揺⿰扌䍃搆⿰扌冓損⿰扌員搏⿰扌尃搓⿰扌差搖⿰扌䍃搗⿰扌島搜⿰扌叟搦⿰扌弱搬⿰扌般搭⿰扌荅搶⿰扌倉携⿰扌隽搾⿰扌窄摎⿰扌翏摑⿰扌國摘⿰扌啇摧⿰扌崔摩⿸麻手摯⿱執手摶⿰扌專摸⿰扌莫摺⿰扌習撈⿰扌勞撒⿰扌散撓⿰扌堯撕⿰扌斯撚⿰扌然撞⿰扌童撥⿰扌發撩⿰扌尞撫⿰扌無播⿰扌番撮⿰扌最撰⿰扌巽撲⿰扌菐撹⿰扌覚撻⿰扌達撼⿰扌感擁⿰扌雍擂⿰扌雷擅⿰扌亶擇⿰扌睪操⿰扌喿擒⿰扌禽擔⿰扌詹擘⿱辟手據⿰扌豦擠⿰扌齊擡⿰扌臺擢⿰扌翟擣⿰扌壽擦⿰扌察擧⿱與手擬⿰扌疑擯⿰扌賓擱⿰扌閣擲⿰扌鄭擴⿰扌廣擶⿰扌箭擺⿰扌罷擽⿰扌樂擾⿰扌憂攀⿱樊手攅⿰扌賛攘⿰扌襄攜⿰扌巂攝⿰扌聶攣⿱䜌手攤⿰扌難攪⿰扌覺攫⿰扌矍攬⿰扌覽支⿱十又攴⿱卜又攵⿱𠂉乂攸⿰亻丨改⿰己攵攻⿰工攵放⿰方攵政⿰正攵敄⿰矛攵故⿰古攵效⿰交攵敍⿰余攴敏⿰毎攵救⿰求攵敕⿰束攵敗⿰貝攵敘⿰余攵教⿰孝攵敞⿰尚攵敦⿰享攵敬⿰苟攵数⿰娄攵敲⿰高攴整⿱敕正敵⿰啇攵敷⿰旉攵數⿰婁攵斂⿰僉攵斃⿱敝死文⿱亠乂斈⿱文子斌⿰文武斐⿱非文料⿰米斗斛⿰角斗斜⿰余斗斟⿰甚斗斧⿱父斤斫⿰石斤斬⿰車斤斯⿰其斤斷⿰㡭斤旉⿱甫方旙⿰方番既⿰艮旡旦⿱日一旧⿰丨日旨⿱匕日早⿱日十旭⿺九日旱⿱日干旺⿰日王旻⿱日文昃⿱日仄昆⿱日比昇⿱日升昊⿱日天昌⿱日日明⿰日月昏⿱氏日易⿱日勿昜⿱旦勿星⿱日生映⿰日央春⿱𡗗日昧⿰日未昨⿰日乍昭⿰日召是⿱日疋昴⿱日卯昵⿰日尼昶⿺永日昷⿱日皿显⿱日业昿⿰日広晁⿱日兆時⿰日寺晃⿱日光晄⿰日光晋⿱亚日晏⿱日安晒⿰日西晝⿱聿旦晞⿰日希晟⿱日成晢⿱折日晤⿰日吾晦⿰日毎晧⿰日告晨⿱日辰晩⿰日免普⿱並日景⿱日京晰⿰日析晴⿰日青智⿱知日暁⿰日尭暃⿱日非暄⿰日宣暇⿰日叚暈⿱日軍暉⿰日軍暎⿰日英暑⿱日者暖⿰日爰暗⿰日音暘⿰日昜暝⿰日冥暢⿰申昜暫⿱斬日暮⿱莫日暴⿱日㳟暼⿱敝日暾⿰日敦曄⿰日華曇⿱日雲曉⿰日堯曖⿰日愛曙⿰日署曚⿰日蒙曜⿰日翟曝⿰日暴曠⿰日廣曦⿰日羲曩⿱日襄曷⿱日匃書⿱聿日最⿱日取朋⿰月月朏⿰月出朔⿰屰月朕⿰月关朖⿰月良朗⿰良月朝⿰𠦝月朞⿱其月期⿰其月朦⿰月蒙朧⿰月龍札⿰木乙朴⿰木卜朶⿱乃木朷⿰木刀朸⿰木力机⿰木几朽⿰木丂杁⿰木入杆⿰木干杉⿰木彡李⿱木子杏⿱木口材⿰木才村⿰木寸杓⿰木勺杖⿰木丈杙⿰木弋杜⿰木土杞⿰木己杠⿰木工条⿱夂木杢⿱木工杣⿰木山杤⿰木万杪⿰木少杭⿰木亢杯⿰木不杰⿱木灬杲⿱日木杳⿱木日杵⿰木午杷⿰木巴杼⿰木予松⿰木公板⿰木反枅⿰木开枇⿰木比枉⿰木王枋⿰木方枌⿰木分析⿰木斤枕⿰木冘林⿰木木枚⿰木攵枝⿰木支枠⿰木卆枡⿰木升枢⿰木区枦⿰木戸枩⿱木公枯⿰木古枳⿰木只架⿱加木枷⿰木加枸⿰木句枹⿰木包枼⿱世木柁⿰木它柄⿰木丙柆⿰木立柊⿰木冬柎⿰木付柏⿰木白某⿱甘木柑⿰木甘柔⿱矛木柘⿰木石柚⿰木由柝⿰木斥柞⿰木乍柤⿰木且柧⿰木瓜柮⿰木出柯⿰木可柱⿰木主柳⿰木卯柴⿱此木柵⿰木冊査⿱木且柾⿰木正柿⿰木市栂⿰木母栓⿰木全栖⿰木西栗⿱覀木栞⿱幵木校⿰木交栢⿰木百栩⿰木羽株⿰木朱栫⿰木存栲⿰木考核⿰木亥根⿰木艮格⿰木各桀⿱舛木桁⿰木行桂⿰木圭桃⿰木兆框⿰木匡案⿱安木桍⿰木夸桎⿰木至桐⿰木同桓⿰木亘桔⿰木吉桙⿰木牟桝⿰木舛桟⿰木戋档⿰木当桧⿰木会桴⿰木孚桶⿰木甬桷⿰木角桾⿰木君桿⿰木旱梃⿰木廷梅⿰木毎梍⿰木皀梏⿰木告梓⿰木辛梔⿰木巵梗⿰木更梛⿰木那梟⿱鳥木梠⿰木呂梢⿰木肖梦⿱林夕梧⿰木吾梨⿱利木梭⿰木夋梯⿰木弟械⿰木戒梱⿰木困梳⿰木㐬梵⿱林凡梶⿰木尾梹⿰木兵梺⿱林下梼⿰木寿棆⿰木侖棉⿰木帛棊⿱其木棋⿰木其棍⿰木昆棒⿰木奉棔⿰木昏棕⿰木宗棗⿱朿朿棘⿰朿朿棚⿰木朋棟⿰木東棠⿱尚呆棡⿰木岡棣⿰木隶棧⿰木戔森⿱木林棯⿰木念棲⿰木妻棹⿰木卓棺⿰木官椀⿰木宛椁⿰木享椄⿰木妾椅⿰木奇椈⿰木匊椋⿰木京椌⿰木空植⿰木直椎⿰木隹椏⿰木亞椒⿰木叔椙⿰木昌椚⿰木門椛⿰木花検⿰木㑒椡⿰木到椢⿰木国椣⿰木典椥⿰木知椦⿰木劵椨⿰木府椪⿰木並椰⿰木耶椴⿰木段椹⿰木甚椽⿰木彖椿⿰木春楊⿰木昜楓⿰木風楔⿰木契楚⿱林疋楜⿰木胡楝⿰木柬楠⿰木南楡⿰木兪楢⿰木酋楪⿰木枼楫⿰木咠楮⿰木者楯⿰木盾楳⿰木某楴⿰木帝極⿰木亟楷⿰木皆楸⿰木秋楹⿰木盈楼⿰木娄楾⿰木泉榁⿰木室概⿰木既榊⿰木神榎⿰木夏榑⿰木尃榔⿰木郎榕⿰木容榛⿰木秦榜⿰木旁榠⿰木冥榧⿰木匪榮⿱𤇾木榱⿰木衰榲⿰木𥁕榴⿰木留榾⿰木骨榿⿰木豈槁⿰木高槃⿱般木槇⿰木眞槊⿱朔木構⿰木冓槌⿰木追槍⿰木倉槎⿰木差槐⿰木鬼槓⿰木貢槙⿰木真槝⿰木島槞⿰木竜槧⿱斬木槨⿰木郭槫⿰木專槭⿰木戚槲⿰木斛槹⿰木皐槻⿰木規槽⿰木曹槿⿰木堇樅⿰木從樊⿱棥大樋⿰木通樌⿰木貫樒⿰木密樓⿰木婁樔⿰木巢樗⿰木雩標⿰木票樛⿰木翏樞⿰木區樟⿰木章模⿰木莫樢⿰木鳥横⿰木黄樫⿰木堅樮⿰木䙳樵⿰木焦樶⿰木最樸⿰木菐樺⿰木華樽⿰木尊橄⿰木敢橇⿰木毳橈⿰木堯橋⿰木喬橘⿰木矞橙⿰木登機⿰木幾橡⿰木象橢⿰木隋橦⿰木童橲⿰木喜橸⿰木晶橿⿰木畺檀⿰木亶檄⿰木敫檍⿰木意檎⿰木禽檐⿰木詹檗⿱辟木檜⿰木會檠⿱敬木檢⿰木僉檣⿰木嗇檪⿰木楽檬⿰木蒙檮⿰木壽檳⿰木賓檸⿰木寧檻⿰木監櫁⿰木蜜櫂⿰木翟櫃⿰木匱櫓⿰木魯櫚⿰木閭櫛⿰木節櫞⿰木縁櫟⿰木樂櫨⿰木盧櫪⿰木歴櫻⿰木嬰欄⿰木闌欅⿰木擧欒⿱䜌木欖⿰木覽欟⿰木觀次⿰冫欠欣⿰斤欠欧⿰区欠欲⿰谷欠欷⿰希欠欸⿰矣欠欹⿰奇欠欺⿰其欠欽⿰金欠歃⿰臿欠歇⿰曷欠歉⿰兼欠歐⿰區欠歔⿰虚欠歙⿰翕欠歛⿰僉欠歟⿰與欠此⿰止匕歩⿱止少歪⿱丕正殀⿰歹夭殃⿰歹央殆⿰歹台殉⿰歹旬殊⿰歹朱残⿰歹戋殍⿰歹孚殕⿰歹咅殖⿰歹直殘⿰歹戔殞⿰歹員殤⿰歹𬀷殪⿰歹壹殫⿰歹單殯⿰歹賓殱⿰歹裁殲⿰歹韱殳⿱几又殴⿰区殳殸⿰声殳殹⿰医殳殻⿰壳殳毆⿰區殳毎⿱𠂉毋毒⿱龶毋毓⿰毎㐬毘⿱田比毚⿱㲋兔毟⿱少毛毬⿺毛求毯⿺毛炎氈⿰亶毛氐⿱氏一氓⿰亡民永⿱丶水氾⿰氵卩汀⿰氵丁汁⿰氵十汎⿰氵凡汐⿰氵夕汕⿰氵山汗⿰氵干汝⿰氵女汞⿱工水江⿰氵工池⿰氵也汢⿰氵土汨⿰氵日汪⿰氵王汰⿰氵太汲⿰氵及汳⿰氵反決⿰氵夬汽⿰氵气汾⿰氵分沁⿰氵心沂⿰氵斤沃⿰氵夭沈⿰氵冘沌⿰氵屯沍⿰氵互沐⿰氵木沓⿱水日沖⿰氵中沙⿰氵少沚⿰氵止沛⿰氵市没⿰氵殳沢⿰氵尺沫⿰氵末沮⿰氵且沱⿰氵它河⿰氵可沸⿰氵弗油⿰氵由沺⿰氵田治⿰氵台沼⿰氵召沽⿰氵古沾⿰氵占沿⿰氵㕣況⿰氵兄泄⿰氵世泅⿰氵囚泉⿱白水泊⿰氵白泌⿰氵必泓⿰氵弘法⿰氵去泙⿰氵平泛⿰氵乏泝⿰氵斥泡⿰氵包波⿰氵皮泣⿰氵立泥⿰氵尼注⿰氵主泪⿰氵目泯⿰氵民泰⿱𡗗氺泱⿰氵央泳⿰氵永洋⿰氵羊洌⿰氵列洒⿰氵西洗⿰氵先洙⿰氵朱洛⿰氵各洞⿰氵同洟⿰氵夷津⿰氵聿洩⿰氵曳洪⿰氵共洫⿰氵血洲⿰氵州洳⿰氵如洵⿰氵旬洶⿰氵匈洸⿰氵光活⿰氵舌洽⿰氵合派⿰氵𠂢流⿰氵㐬浄⿰氵争浅⿰氵戋浙⿰氵折浚⿰氵夋浜⿰氵兵浣⿰氵完浤⿰氵宏浦⿰氵甫浩⿰氵告浪⿰氵良浬⿰氵里浮⿰氵孚浴⿰氵谷海⿰氵毎浹⿰氵夾涂⿰氵余消⿰氵肖涌⿰氵甬涎⿰氵延涓⿰氵肙涕⿰氵弟涙⿰氵戻涛⿰氵寿涜⿰氵売液⿰氵夜涵⿰氵函涸⿰氵固涼⿰氵京淀⿰氵定淅⿰氵析淆⿰氵肴淇⿰氵其淋⿰氵林淌⿰氵尚淑⿰氵叔淒⿰氵妻淙⿰氵宗淞⿰氵松淡⿰氵炎淤⿰氵於淦⿰氵金淨⿰氵爭淪⿰氵侖淬⿰氵卒淮⿰氵隹淳⿰氵享淵⿰氵𣶒混⿰氵昆淹⿰氵奄淺⿰氵戔添⿰氵忝清⿰氵青渇⿰氵曷済⿰氵斉渉⿰氵歩渓⿰氵奚渙⿰氵奐渚⿰氵者減⿰氵咸渝⿰氵兪渟⿰氵亭渡⿰氵度渣⿰氵査渤⿰氵勃渥⿰氵屋渦⿰氵咼温⿰氵昷渫⿰氵枼測⿰氵則渭⿰氵胃渮⿰氵苛港⿰氵巷渺⿰氵眇渾⿰氵軍湃⿰氵拜湊⿰氵奏湍⿰氵耑湎⿰氵面湖⿰氵胡湘⿰氵相湛⿰氵甚湟⿰氵皇湧⿰氵勇湫⿰氵秋湮⿰氵垔湯⿰氵昜湲⿰氵爰湶⿰氵泉湾⿰氵弯溂⿰氵剌溌⿰氵発溏⿰氵唐源⿰氵原溘⿰氵盍溜⿰氵留溝⿰氵冓溟⿰氵冥溢⿰氵益溥⿰氵尃溪⿰氵奚溯⿰氵朔溲⿰氵叟溶⿰氵容溺⿰氵弱溽⿰氵辱滂⿰氵旁滄⿰氵倉滉⿰氵晃滋⿰氵兹滌⿰氵條滑⿰氵骨滓⿰氵宰滔⿰氵舀滕⿰月劵滝⿰氵竜滞⿰氵帯滬⿰氵扈滯⿰氵帶滲⿰氵參滴⿰氵啇滷⿰氵鹵滸⿰氵許滾⿰氵袞漁⿰氵魚漂⿰氵票漆⿰氵桼漉⿰氵鹿漑⿰氵既漓⿰氵离演⿰氵寅漕⿰氵曹漠⿰氵莫漣⿰氵連漫⿰氵曼漬⿰氵責漲⿰氵張漸⿰氵斬漿⿱將水潔⿰氵絜潘⿰氵番潜⿰氵替潟⿰氵舄潤⿰氵閏潦⿰氵尞潭⿰氵覃潮⿰氵朝潯⿰氵尋潰⿰氵貴潴⿰氵猪潺⿰氵孱潼⿰氵童澀⿰氵歰澄⿰氵登澆⿰氵堯澎⿰氵彭澑⿰氵畱澗⿰氵間澡⿰氵喿澣⿰氵幹澤⿰氵睪澪⿰氵零澱⿰氵殿澳⿰氵奧澹⿰氵詹激⿰氵敫濁⿰氵蜀濂⿰氵廉濃⿰氵農濆⿰氵賁濔⿰氵爾濕⿰氵㬎濘⿰氵寧濛⿰氵蒙濟⿰氵齊濠⿰氵豪濡⿰氵需濤⿰氵壽濫⿰氵監濬⿰氵睿濮⿰氵僕濯⿰氵翟濱⿰氵賓濺⿰氵賤濾⿰氵慮瀁⿰氵養瀆⿰氵𧶠瀉⿰氵寫瀋⿰氵審瀏⿰氵劉瀑⿰氵暴瀕⿰氵頻瀘⿰氵盧瀚⿰氵翰瀝⿰氵歴瀞⿰氵静瀟⿰氵蕭瀦⿰氵豬瀧⿰氵龍瀬⿰氵頼瀰⿰氵彌瀲⿰氵斂瀾⿰氵闌灑⿰氵麗灘⿰氵難灣⿰氵彎灯⿰火丁灰⿸厂火灸⿱久火灼⿰火勺災⿱巛火炉⿰火戸炊⿰火欠炎⿱火火炏⿰火火炒⿰火少炙⿱月火炬⿰火巨炭⿱山灰炮⿰火包炯⿰火冋炳⿰火丙炸⿰火乍点⿱占灬烈⿱列灬烋⿱休灬烙⿰火各烟⿰火因烱⿰火冏烹⿱亨灬烽⿰火夆焙⿰火咅焚⿱林火焜⿰火昆焦⿱隹灬焰⿰火臽焼⿰火尭煉⿰火東煌⿰火皇煎⿱前灬煕⿱巸灬煖⿰火爰煙⿰火垔煤⿰火某煥⿰火奐照⿱昭灬煩⿰火頁煬⿰火昜煮⿱者灬煽⿰火扇熄⿰火息熊⿱能灬熔⿰火容熕⿰火貢熟⿱孰灬熨⿱尉火熬⿱敖灬熱⿱埶灬熹⿱喜灬燃⿰火然燈⿰火登燉⿰火敦燎⿰火尞燐⿰火粦燒⿰火堯燔⿰火番燗⿰火間營⿱𤇾呂燠⿰火奧燥⿰火喿燦⿰火粲燧⿰火遂燬⿰火毀燭⿰火蜀燵⿰火達燻⿰火熏燼⿰火盡燿⿰火翟爆⿰火暴爍⿰火樂爐⿰火盧爛⿰火闌爬⿺爪巴爺⿱父耶爻⿱乂乂爼⿰爻且牀⿰爿木牆⿰爿嗇版⿰片反牋⿰片戔牌⿰片卑牒⿰片枼牘⿰片賣牝⿰牛匕牟⿱厶牛牡⿰牛土牢⿱宀牛牧⿰牛攵物⿰牛勿牲⿰牛生特⿰牛寺牽⿱玄牛牾⿰牛吾犁⿱利牛犒⿰牛高犖⿱𤇾牛犠⿰牛義犢⿰牛賣犧⿰牛羲犯⿰⺨㔾犲⿰⺨才状⿰⺦犬犹⿰⺨尤狂⿰⺨王狃⿰⺨丑狄⿰⺨火狆⿰⺨中狎⿰⺨甲狐⿰⺨瓜狒⿰⺨弗狗⿰⺨句狙⿰⺨且狛⿰⺨白狠⿰⺨艮狡⿰⺨交狢⿰⺨各狩⿰⺨守独⿰⺨虫狭⿰⺨夹狷⿰⺨肙狸⿰⺨里狹⿰⺨夾狼⿰⺨良狽⿰⺨貝猊⿰⺨兒猖⿰⺨昌猗⿰⺨奇猛⿰⺨孟猜⿰⺨青猝⿰⺨卒猟⿰⺨鼡猥⿰⺨畏猩⿰⺨星猪⿰⺨者猫⿰⺨苗献⿰南犬猯⿰⺨耑猴⿰⺨侯猶⿰⺨酋猷⿰酋犬猾⿰⺨骨猿⿰⺨袁獅⿰⺨師獎⿱將犬獏⿰⺨莫獗⿰⺨厥獨⿰⺨蜀獪⿰⺨會獰⿰⺨寧獲⿰⺨蒦獺⿰⺨頼玄⿱亠幺玖⿰王久玩⿰王元玲⿰王令玳⿰王代玻⿰王皮珀⿰王白珂⿰王可珈⿰王加珊⿰王冊珎⿰王尓珞⿰王各珠⿰王朱珥⿰王耳珪⿰王圭珸⿰王吾現⿰王見球⿰王求琅⿰王良理⿰王里琉⿰王㐬琢⿰王豕琥⿰王虎琲⿰王非琳⿰王林琺⿰王法琿⿰王軍瑁⿰王冒瑕⿰王叚瑚⿰王胡瑛⿰王英瑜⿰王兪瑞⿰王耑瑠⿰王留瑤⿰王䍃瑩⿱𤇾玉瑪⿰王馬瑯⿰王郎瑰⿰王鬼瑳⿰王差瑶⿰王䍃瑾⿰王堇璃⿰王离璋⿰王章璞⿰王菐璢⿰王畱璧⿱辟玉環⿰王睘璽⿱爾玉瓊⿰王夐瓏⿰王龍瓔⿰王嬰瓠⿰夸瓜瓢⿰票瓜瓧⿺瓦十瓩⿺瓦千瓮⿱公瓦瓰⿺瓦分瓱⿺瓦毛瓲⿺瓦屯瓶⿰并瓦瓷⿱次瓦瓸⿺瓦百甃⿱秋瓦甄⿰垔瓦甅⿺瓦厘甌⿰區瓦甎⿰專瓦甑⿰曽瓦甓⿱辟瓦甕⿱雍瓦甚⿱甘匹甜⿰舌甘甞⿱尚甘甥⿰生男甦⿺更生甬⿱マ用男⿱田力町⿰田丁甼⿱田丁甾⿱巛田畄⿱⺍田畆⿰亩厶畉⿰田夫畊⿰田井畋⿰田攵界⿱田介畍⿰田介畑⿰火田畔⿰田半留⿱卯田畜⿱玄田畝⿰亩久畠⿱白田畤⿰田寺略⿰田各畦⿰田圭畧⿱田各畩⿰田衣番⿱釆田畭⿰田余異⿱田共畱⿱丣田畴⿰田寿當⿱尚田畸⿰田奇疇⿰田壽疎⿰疋束疏⿰疋㐬疔⿸疒丁疚⿸疒久疝⿸疒山疣⿸疒尤疥⿸疒介疫⿸疒殳疱⿸疒包疲⿸疒皮疳⿸疒甘疵⿸疒此疸⿸疒旦疼⿸疒冬疽⿸疒且疾⿸疒矢痂⿸疒加痃⿸疒玄病⿸疒丙症⿸疒正痊⿸疒全痍⿸疒夷痒⿸疒羊痔⿸疒寺痕⿸疒艮痘⿸疒豆痙⿸疒巠痛⿸疒甬痞⿸疒否痢⿸疒利痣⿸疒志痩⿸疒叟痰⿸疒炎痲⿸疒林痳⿸疒林痴⿸疒知痺⿸疒卑痼⿸疒固痾⿸疒阿痿⿸疒委瘁⿸疒卒瘉⿸疒兪瘋⿸疒風瘍⿸疒昜瘟⿸疒𥁕瘠⿸疒脊瘡⿸疒倉瘢⿸疒般瘤⿸疒留瘧⿸疒虐瘰⿸疒累瘴⿸疒章瘻⿸疒婁療⿸疒尞癆⿸疒勞癇⿸疒閒癈⿸疒發癌⿸疒嵒癒⿸疒愈癖⿸疒辟癘⿸疒萬癜⿸疒殿癡⿸疒疑癢⿸疒養癧⿸疒歴癨⿸疒霍癩⿸疒頼癪⿸疒積癬⿸疒鮮癰⿸疒雝癲⿸疒顛癸⿱癶天登⿱癶豆百⿱一白皀⿱白匕皃⿱白儿的⿰白勺皅⿰白巴皆⿱比白皇⿱白王皈⿰白反皋⿱白夲皎⿰白交皓⿰白告皖⿰白完皙⿱析白皚⿰白豈皰⿰皮包皴⿰夋皮皸⿰軍皮皹⿰皮軍皺⿰芻皮盂⿱于皿盃⿱不皿盆⿱分皿盈⿱夃皿盍⿱去皿盒⿱合皿盖⿱羊皿盗⿱次皿盛⿱成皿盞⿱戔皿盟⿱明皿盤⿱般皿盪⿱湯皿盲⿱亡目相⿰木目盻⿰目兮省⿱少目眄⿰目正眇⿰目少眈⿰目冘眛⿰目未眞⿱匕具真⿱十具眠⿰目民眤⿰目尼眥⿱此目眦⿰目此眩⿰目玄眸⿰目牟眺⿰目兆眼⿰目艮睇⿰目弟睚⿰目厓睛⿰目青睡⿰目垂督⿱叔目睨⿰目兒睪⿱罒幸睫⿰目疌睹⿰目者睾⿱血幸瞋⿰目眞瞎⿰目害瞑⿰目冥瞠⿰目堂瞥⿱敝目瞬⿰目舜瞭⿰目尞瞰⿰目敢瞳⿰目童瞶⿰目貴瞹⿰目愛瞻⿰目詹瞼⿰目僉瞽⿱鼓目矇⿰目蒙矍⿱瞿隻矚⿰目屬矜⿰矛今矞⿱矛冏矣⿱厶矢知⿰矢口矧⿰矢引矩⿰矢巨短⿰矢豆矮⿰矢委矯⿰矢喬矼⿰石工砂⿰石少砌⿰石切砒⿰石比研⿰石开砕⿰石卆砠⿰石且砦⿱此石砧⿰石占砲⿰石包破⿰石皮砿⿰石広硅⿰石圭硝⿰石肖硫⿰石㐬硬⿰石更硯⿰石見硲⿰石谷硴⿰石花硼⿰石朋碁⿱其石碆⿱波石碇⿰石定碍⿰石㝵碎⿰石卒碑⿰石卑碓⿰石隹碕⿰石奇碗⿰石宛碚⿰石咅碣⿰石曷碩⿰石頁碪⿰石甚碵⿰石貞確⿰石寉碼⿰石馬碾⿰石展磁⿰石兹磅⿰石旁磆⿰石骨磋⿰石差磐⿱般石磑⿰石豈磔⿰石桀磚⿰石專磧⿰石責磨⿸麻石磬⿱殸石磯⿰石幾磴⿰石登磽⿰石堯礁⿰石焦礇⿰石奧礎⿰石楚礑⿰石當礒⿰石義礙⿰石疑礦⿰石廣礫⿰石樂礬⿱樊石礼⿰礻乙社⿰礻土祀⿰示巳祁⿰示⻏祇⿰示氏祈⿰礻斤祉⿰礻止祐⿰礻右祓⿰示犮祕⿰示必祖⿰礻且祚⿰示乍祝⿰礻兄神⿰礻申祟⿱出示祠⿰示司祢⿰礻尓祥⿰礻羊票⿱覀示祷⿰礻寿祺⿰示其禀⿱㐭示禁⿱林示禅⿰礻単禊⿰示契禍⿰礻咼禎⿰礻貞福⿰礻畐禦⿱御示禧⿰示喜禪⿰示單禮⿰示豊禰⿰示爾禱⿰示壽禳⿰示襄离⿱㐫禸禽⿱人离禾⿱丿木禿⿱禾儿秀⿱禾乃私⿰禾厶秋⿰禾火科⿰禾斗秒⿰禾少秕⿰禾比秘⿰禾必租⿰禾且秡⿰禾犮秣⿰禾末秤⿰禾平秦⿱𡗗禾秧⿰禾央秩⿰禾失秬⿰禾巨称⿰禾尓移⿰禾多稀⿰禾希稈⿰禾旱程⿰禾呈稍⿰禾肖税⿰禾兌稔⿰禾念稗⿰禾卑稘⿰禾其稙⿰禾直稚⿰禾隹稟⿱㐭禾稠⿰禾周種⿰禾重稻⿰禾舀稼⿰禾家稾⿱高禾稿⿰禾高穂⿰禾恵穃⿰禾容穉⿰禾犀積⿰禾責穐⿰禾亀穗⿰禾惠穡⿰禾嗇穢⿰禾歳穣⿰禾㐮穫⿰禾蒦穰⿰禾襄穴⿱宀八究⿱穴九穹⿱穴弓空⿱穴工穽⿱穴井穿⿱穴牙突⿱穴大窃⿱穴切窄⿱穴乍窈⿱穴幼窒⿱穴至窕⿱穴兆窖⿱穴告窘⿱穴君窟⿱穴屈窩⿱穴咼窮⿱穴躬窯⿱穴羔窰⿱穴䍃窶⿱穴婁窺⿱穴規窿⿱穴隆竄⿱穴鼠竅⿱穴敫竇⿱穴賣立⿱亠厶竍⿰立十竏⿰立千竒⿱立可竓⿰立毛竕⿰立分站⿰立占竚⿰立宁竝⿰立立竟⿱音儿章⿱音早竡⿰立百竢⿰立矣竣⿰立夋童⿱立里竦⿰立束竭⿰立曷端⿰立耑竰⿰立厘竸⿰竟竟竺⿱竹二竿⿱竹干笂⿱竹丸笄⿱竹开笆⿱竹巴笈⿱竹及笊⿱竹爪笋⿱竹尹笏⿱竹勿笑⿱竹夭笘⿱竹占笙⿱竹生笛⿱竹由笞⿱竹台笠⿱竹立笥⿱竹司符⿱竹付笨⿱竹本笳⿱竹加笵⿱竹氾笶⿱竹矢笹⿱竹世筅⿱竹先筆⿱竹聿筈⿱竹舌等⿱竹寺筋⿱竹肋筌⿱竹全筍⿱竹旬筏⿱竹伐筐⿱竹匡筒⿱竹同答⿱竹合策⿱竹朿筝⿱竹争筥⿱竹呂筧⿱竹見筬⿱竹成筮⿱竹巫筰⿱竹作筱⿱竹攸筴⿱竹夾筵⿱竹延筺⿱竹匡箇⿱竹固箋⿱竹戔箏⿱竹爭箒⿱竹帚箔⿱竹泊箕⿱竹其箙⿱竹服箜⿱竹空箝⿱竹拑箟⿱竹昆管⿱竹官箪⿱竹単箭⿱竹前箱⿱竹相箴⿱竹咸箸⿱竹者節⿱竹即篁⿱竹皇篆⿱竹彖篇⿱竹扁築⿱筑木篌⿱竹侯篝⿱竹冓篠⿱竹條篤⿱竹馬篥⿱竹栗篦⿱竹𣬉篩⿱竹師篭⿱竹竜篳⿱竹畢篶⿱竹焉篷⿱竹逢簀⿱竹責簇⿱竹族簍⿱竹婁簑⿱竹衰簓⿱竹彫簔⿱竹衰簗⿱竹梁簞⿱竹單簟⿱竹覃簡⿱竹間簣⿱竹貴簧⿱竹黃簫⿱竹肅簷⿱竹詹簽⿱竹僉簾⿱竹廉簿⿱竹溥籃⿱竹監籌⿱竹壽籏⿱竹旗籐⿱竹滕籔⿱竹數籘⿱竹縢籟⿱竹頼籠⿱竹龍籤⿱竹韱籥⿱竹龠籬⿱竹離籵⿰米十籾⿰米刃粁⿰米千粂⿱久米粃⿰米比粉⿰米分粋⿰米卆粍⿰米毛粐⿰米戸粒⿰米立粕⿰米白粗⿰米且粘⿰米占粟⿱覀米粡⿰米同粢⿱次米粦⿱米舛粧⿰米庄粨⿰米百粫⿰米而粭⿰米合粮⿰米良粳⿰米更粹⿰米卒粽⿰米宗精⿰米青糀⿰米花糂⿰米甚糅⿰米柔糊⿰米胡糎⿰米厘糖⿰米唐糘⿰米家糜⿸麻米糞⿱米異糟⿰米曹糠⿰米康糢⿰米莫糧⿰米量糯⿰米需糺⿰糸乙系⿱丿糸糾⿰糸丩紀⿰糸己紂⿰糸寸約⿰糸勺紅⿰糸工紆⿰糸于紊⿱文糸紋⿰糸文納⿰糸内紐⿰糸丑純⿰糸屯紕⿰糸比紗⿰糸少紙⿰糸氏級⿰糸及紛⿰糸分紜⿰糸云素⿱龶糸紡⿰糸方紫⿱此糸紬⿰糸由紮⿱札糸累⿱田糸細⿰糸田紲⿰糸世紳⿰糸申紵⿰糸宁紹⿰糸召紺⿰糸甘紿⿰糸台終⿰糸冬絃⿰糸玄組⿰糸且絅⿰糸冋絆⿰糸半絋⿰糸広経⿰糸圣絎⿰糸行絏⿰糸曳結⿰糸吉絖⿰糸光絞⿰糸交絡⿰糸各絢⿰糸旬絣⿰糸并給⿰糸合絨⿰糸戎絮⿱如糸統⿰糸充絲⿰糸糸絵⿰糸会絶⿰糸色絹⿰糸肙絽⿰糸呂綉⿰糸秀綏⿰糸妥經⿰糸巠続⿰糸売綛⿰糸忍綜⿰糸宗綟⿰糸戻綢⿰糸周綣⿰糸卷綫⿰糸戔綬⿰糸受維⿰糸隹綰⿰糸官綱⿰糸岡網⿰糸罔綵⿰糸采綸⿰糸侖綺⿰糸奇綻⿰糸定綽⿰糸卓綿⿰糸帛緇⿰糸甾緋⿰糸非総⿰糸忩緑⿰糸彔緒⿰糸者緕⿰糸斉緘⿰糸咸線⿰糸泉緜⿰帛系緝⿰糸咠緞⿰糸段締⿰糸帝緤⿰糸枼編⿰糸扁緩⿰糸爰緬⿰糸面緯⿰糸韋緲⿰糸眇練⿰糸東緻⿰糸致縁⿰糸彖縄⿰糸电縅⿰糸威縉⿰糸晉縊⿰糸益縋⿰糸追縒⿰糸差縛⿰糸尃縞⿰糸高縟⿰糸辱縡⿰糸宰縣⿰県系縦⿰糸従縫⿰糸逢縮⿰糸宿縱⿰糸從縲⿰糸累縵⿰糸曼縷⿰糸婁縹⿰糸票縺⿰糸連縻⿸麻糸績⿰糸責繁⿱敏糸繃⿰糸崩繆⿰糸翏繍⿰糸粛織⿰糸戠繕⿰糸善繖⿰糸散繙⿰糸番繚⿰糸尞繝⿰糸間繞⿰糸堯繡⿰糸肅繦⿰糸強繧⿰糸雲繩⿰糸黽繪⿰糸會繰⿰糸喿繹⿰糸睪繻⿰糸需繼⿰糸㡭繽⿰糸賓繿⿰糸監纂⿱算糸纃⿰糸齊纈⿰糸頡纉⿰糸賛續⿰糸賣纎⿰糸裁纏⿰糸廛纓⿰糸嬰纔⿰糸毚纖⿰糸韱纜⿰糸覽缸⿰缶工缺⿰缶夬罎⿰缶曇罕⿱罒干罘⿱罒不罟⿱罒古罠⿱罒民罣⿱罒圭罧⿱罒林罨⿱罒奄罩⿱罒卓罪⿱罒非罫⿱罒卦置⿱罒直罰⿱罒䚯署⿱罒者罵⿱罒馬罷⿱罒能罸⿱罒討罹⿱罒惟羂⿱罒絹羃⿱罒幕羅⿱罒維羆⿱罷熊羈⿱罒䩻羌⿱羊儿美⿱⺷大羔⿱羊灬羚⿰⺶令羣⿱君羊群⿰君羊義⿱羊我羯⿰羊曷羲⿱⺷我羶⿰羊亶羹⿱羔美翁⿱公羽翅⿺支羽翆⿱羽卆翊⿰立羽翌⿱羽立習⿱羽白翔⿰羊羽翕⿱合羽翟⿱羽隹翠⿱羽卒翡⿱非羽翦⿱前羽翩⿰扁羽翫⿰習元翳⿱殹羽翹⿺堯羽翻⿰番羽翼⿱羽異耀⿰光翟老⿸耂匕考⿸耂丂耄⿱老毛者⿸耂日耆⿱老日耋⿱老至耐⿰而寸耑⿱山而耕⿰耒井耗⿰耒毛耘⿰耒云耙⿰耒巴耡⿰耒助耨⿰耒辱耶⿰耳⻏耻⿰耳止耽⿰耳冘耿⿰耳火聆⿰耳令聊⿰耳卯聒⿰耳舌聘⿰耳甹聟⿱知耳聢⿰耳定聲⿱殸耳聳⿱從耳職⿰耳戠聹⿰耳寧聾⿱龍耳肆⿰長聿肋⿰月力肌⿰月几肓⿱亡月肖⿱⺌月肘⿰月寸肙⿱口月肚⿰月土肛⿰月工肝⿰月干股⿰月殳肢⿰月支肥⿰月巴肩⿸戸月肪⿰月方肬⿰月尤肭⿰月内肯⿱止月肴⿱乂有肺⿰月市胃⿱田月胄⿱由月胆⿰月旦背⿱北月胎⿰月台胖⿰月半胙⿰月乍胚⿰月丕胛⿰月甲胞⿰月包胡⿰古月胥⿱疋月胯⿰月夸胱⿰月光胴⿰月同胸⿰月匈胼⿰月并脂⿰月旨脅⿱劦月脆⿰月危脇⿰月劦脈⿰月𠂢脉⿰月永脚⿰月却脛⿰月巠脣⿱辰月脯⿰月甫脱⿰月兌脹⿰月長脾⿰月卑腆⿰月典腋⿰月夜腐⿸府肉腑⿰月府腓⿰月非腔⿰月空腕⿰月宛腟⿰月室腥⿰月星腫⿰月重腮⿰月思腰⿰月要腱⿰月建腴⿰月臾腸⿰月昜腹⿰月复腺⿰月泉腿⿰月退膀⿰月旁膂⿱旅月膃⿰月𥁕膈⿰月鬲膊⿰月尃膏⿱高月膓⿰月𬀷膕⿰月國膚⿸虍胃膜⿰月莫膠⿰月翏膣⿰月窒膤⿰月雪膨⿰月彭膩⿰月貳膰⿰月番膳⿰月善膵⿰月萃膽⿰月詹膾⿰月會膿⿰月農臀⿱殿月臂⿱辟月臆⿰月意臈⿰月葛臉⿰月僉臍⿰月齊臑⿰月需臓⿰月蔵臙⿰月燕臚⿰月盧臟⿰月藏臠⿱䜌肉臥⿰臣人臭⿱自大致⿰至攵臻⿰至秦臽⿱𠂊臼舀⿱⺤臼舁⿱臼廾舂⿱𡗗臼舅⿱臼男舌⿱千口舍⿱人舌舎⿱人吉舐⿰舌氏舒⿰舍予舖⿰舍甫舘⿰舍官舛⿰夕㐄舩⿰舟公航⿰舟亢舫⿰舟方般⿰舟殳舮⿰舟戸舳⿰舟由舵⿰舟它舶⿰舟白舷⿰舟玄舸⿰舟可船⿰舟㕣艀⿰舟孚艇⿰舟廷艘⿰舟叟艙⿰舟倉艚⿰舟曹艝⿰舟雪艟⿰舟童艢⿰舟嗇艤⿰舟義艦⿰舟監艨⿰舟蒙艪⿰舟魯艫⿰舟盧色⿱𠂊巴艶⿰豊色艷⿰豐色艾⿱艹乂芋⿱艹于芍⿱艹勺芒⿱艹亡芙⿱艹夫芝⿱艹之芟⿱艹殳芥⿱艹介芦⿱艹戸芫⿱艹元芬⿱艹分芭⿱艹巴芯⿱艹心花⿱艹化芳⿱艹方芸⿱艹云芹⿱艹斤芽⿱艹牙苅⿱艹刈苑⿱艹夗苒⿱艹冉苓⿱艹令苔⿱艹台苗⿱艹田苙⿱艹立苛⿱艹可苜⿱艹目苞⿱艹包苟⿱艹句苡⿱艹以苣⿱艹巨若⿱艹右苦⿱艹古苧⿱艹宁苫⿱艹占英⿱艹央苳⿱艹冬苴⿱艹且苹⿱艹平苺⿱艹母苻⿱艹付茂⿱艹戊范⿱艹氾茄⿱艹加茅⿱艹矛茆⿱艹卯茉⿱艹末茎⿱艹圣茖⿱艹各茗⿱艹名茜⿱艹西茣⿱艹呉茨⿱艹次茯⿱艹伏茱⿱艹朱茴⿱艹回茵⿱艹因茸⿱艹耳茹⿱艹如荀⿱艹旬荅⿱艹合草⿱艹早荊⿱艹刑荏⿱艹任荐⿱艹存荘⿱艹壮荳⿱艹豆荵⿱艹忍荷⿱艹何荻⿱艹狄荼⿱艹余莅⿱艹位莇⿱艹助莉⿱艹利莊⿱艹壯莎⿱艹沙莓⿱艹毎莖⿱艹巠莚⿱艹延莞⿱艹完莟⿱艹含莠⿱艹秀莢⿱艹夾莨⿱艹良莪⿱艹我莱⿱艹来莵⿱艹兎菁⿱艹青菅⿱艹官菊⿱艹匊菎⿱艹昆菓⿱艹果菖⿱艹昌菘⿱艹松菜⿱艹采菠⿱艹波菩⿱艹咅菰⿱艹孤菲⿱艹非菴⿱艹奄菷⿱艹帚菻⿱艹林菽⿱艹叔萃⿱艹卒萇⿱艹長萊⿱艹來萋⿱艹妻萌⿱艹明萍⿱艹泙萎⿱艹委萓⿱艹宜萠⿱艹朋萢⿱艹泡萪⿱艹科萬⿱艹禺萱⿱艹宣萵⿱艹咼萸⿱艹臾萼⿱艹咢落⿱艹洛葆⿱艹保葉⿱艹枼葎⿱艹律著⿱艹者葡⿱艹匍董⿱艹重葦⿱艹韋葩⿱艹皅葫⿱艹胡葭⿱艹叚葮⿱艹段葯⿱艹約葱⿱艹怱葵⿱艹癸葷⿱艹軍葹⿱艹施葺⿱艹咠蒂⿱艹帝蒄⿱艹冠蒋⿱艹将蒐⿱艹鬼蒔⿱艹時蒡⿱艹旁蒦⿱艹隻蒭⿱艹芻蒲⿱艹浦蒸⿱艹烝蒹⿱艹兼蒻⿱艹弱蒼⿱艹倉蒿⿱艹高蓁⿱艹秦蓄⿱艹畜蓉⿱艹容蓊⿱艹翁蓋⿱艹盍蓍⿱艹耆蓐⿱艹辱蓑⿱艹衰蓖⿱艹𣬉蓙⿱艹座蓚⿱艹修蓬⿱艹逢蓮⿱艹連蓴⿱艹專蓼⿱艹翏蓿⿱艹宿蔀⿱艹部蔓⿱艹曼蔔⿱艹匐蔕⿱艹帶蔗⿱艹庶蔘⿱艹參蔚⿱艹尉蔟⿱艹族蔡⿱艹祭蔣⿱艹將蔦⿱艹鳥蔬⿱艹疏蔭⿱艹陰蔽⿱艹敝蕀⿱艹棘蕁⿱艹尋蕃⿱艹番蕈⿱艹覃蕉⿱艹焦蕎⿱艹喬蕕⿱艹猶蕗⿱艹路蕘⿱艹堯蕣⿱艹舜蕨⿱艹厥蕩⿱艹湯蕪⿱艹無蕭⿱艹肅蕷⿱艹預蕾⿱艹雷薀⿱艹温薄⿱艹溥薇⿱艹微薈⿱艹會薐⿱艹稜薑⿱艹畺薔⿱艹嗇薗⿱艹園薙⿱艹雉薜⿱艹辟薪⿱艹新薬⿱艹楽薮⿱艹数薯⿱艹署薹⿱艹臺薺⿱艹齊藁⿱蒿木藍⿱艹監藏⿱艹臧藐⿱艹貌藜⿱艹黎藤⿱艹滕藥⿱艹樂藩⿱艹潘藪⿱艹數藷⿱艹諸藹⿱艹謁藻⿱艹澡藾⿱艹頼蘆⿱艹盧蘋⿱艹頻蘖⿱薛木蘗⿱薜木蘚⿱艹鮮蘢⿱艹龍蘭⿱艹闌蘯⿱蕩皿蘰⿱艹縵蘿⿱艹羅虎⿸虍儿虒⿸厂虎虔⿸虍文處⿸虍処虚⿸虍业虜⿸虍男虞⿸虍呉號⿰号虎虱⿴⺄䖝虹⿰虫工虻⿰虫亡蚊⿰虫文蚋⿰虫内蚌⿰虫丰蚓⿰虫引蚕⿱天虫蚣⿰虫公蚤⿱叉虫蚪⿰虫斗蚫⿰虫包蚯⿰虫丘蚰⿰虫由蚶⿰虫甘蛄⿰虫古蛆⿰虫且蛇⿰虫它蛉⿰虫令蛋⿱疋虫蛔⿰虫回蛙⿰虫圭蛛⿰虫朱蛞⿰虫舌蛟⿰虫交蛤⿰虫合蛬⿱共虫蛭⿰虫至蛮⿱亦虫蛯⿰虫老蛸⿰虫肖蛹⿰虫甬蛻⿰虫兌蛾⿰虫我蜂⿰虫夆蜃⿱辰虫蜆⿰虫見蜈⿰虫呉蜉⿰虫孚蜊⿰虫利蜍⿰虫余蜑⿱延虫蜒⿰虫延蜘⿰虫知蜚⿱非虫蜜⿱宓虫蜥⿰虫析蜩⿰虫周蜴⿰虫易蜷⿰虫卷蜻⿰虫青蜿⿰虫宛蝉⿰虫単蝋⿰虫鼡蝌⿰虫科蝎⿰虫曷蝓⿰虫兪蝕⿰⻞虫蝗⿰虫皇蝙⿰虫扁蝟⿰虫胃蝠⿰虫畐蝦⿰虫叚蝪⿰虫昜蝮⿰虫复蝴⿰虫胡蝶⿰虫枼蝸⿰虫咼蝿⿰虫电螂⿰虫郎融⿰鬲虫螟⿰虫冥螢⿱𤇾虫螫⿱赦虫螯⿱敖虫螳⿰虫堂螺⿰虫累螻⿰虫婁蟀⿰虫率蟄⿱執虫蟆⿰虫莫蟇⿱莫虫蟋⿰虫悉蟐⿰虫常蟒⿰虫莽蟠⿰虫番蟬⿰虫單蟯⿰虫堯蟶⿰虫聖蟷⿰虫當蟹⿱解虫蟻⿰虫義蟾⿰虫詹蠅⿰虫黽蠍⿰虫歇蠏⿰虫解蠑⿰虫榮蠕⿰虫需蠖⿰虫蒦蠱⿱蟲皿蠻⿱䜌虫衂⿰血刄衄⿰血丑衫⿰衤彡衲⿰衤内衵⿰衤日衽⿰衤壬衾⿱今衣衿⿰衤今袂⿰衤夬袈⿱加衣袋⿱代衣袍⿰衤包袒⿰衤旦袖⿰衤由袙⿰衤白袢⿰衤半被⿰衤皮袮⿰衤尓袰⿱母衣袱⿰衤伏袴⿰衤夸袵⿰衤任袷⿰衤合袿⿰衤圭裂⿱列衣裄⿰衤行装⿱壮衣裔⿱衣冏裕⿰衤谷裘⿱求衣裙⿰衤君補⿰衤甫裝⿱壯衣裟⿱沙衣裡⿰衤里裲⿰衤兩裳⿱尚衣裴⿱非衣裸⿰衤果裼⿰衤易製⿱制衣裾⿰衤居褂⿰衤卦褄⿰衤妻複⿰衤复褊⿰衤扁褌⿰衤軍褐⿰衤曷褓⿰衤保褝⿰衤単褞⿰衤𥁕褥⿰衤辱褪⿰衤退褫⿰衤虒褶⿰衤習褸⿰衤婁襁⿰衤強襌⿰衤單襍⿰衤集襖⿰衤奥襞⿱辟衣襟⿰衤禁襠⿰衤當襤⿰衤監襦⿰衤需襪⿰衤蔑襭⿰衤頡襯⿰衤親襲⿱龍衣襴⿰衤闌襷⿰衤擧要⿱覀女覃⿱覀早覆⿱覀復覇⿱覀䩗覈⿱覀敫見⿱目儿規⿰夫見覓⿱⺤見視⿰礻見覗⿰司見覘⿰占見覡⿰巫見覦⿰兪見覩⿰者見覬⿰豈見覯⿰冓見覲⿰堇見覺⿱𦥯見覿⿰賣見觚⿰角瓜觜⿱此角触⿰角虫觧⿰角羊觴⿰角𬀷觸⿰角蜀訂⿰言丁訃⿰言卜計⿰言十訌⿰言工討⿰言寸訐⿰言干訓⿰言川訖⿰言乞託⿰言乇記⿰言己訛⿰言化訝⿰言牙訟⿰言公訣⿰言夬訥⿰言内訪⿰言方設⿰言殳許⿰言午訳⿰言尺訴⿰言斥訶⿰言可註⿰言主証⿰言正詁⿰言古詈⿱罒言詐⿰言乍詑⿰言它詒⿰言台詔⿰言召評⿰言平詛⿰言且詞⿰言司詠⿰言永詢⿰言旬詣⿰言旨試⿰言式詩⿰言寺詫⿰言宅詬⿰言后詭⿰言危詮⿰言全詰⿰言吉話⿰言舌該⿰言亥詳⿰言羊詼⿰言灰誂⿰言兆誄⿰言耒誅⿰言朱誇⿰言夸誌⿰言志認⿰言忍誑⿰言狂誓⿱折言誕⿰言延誘⿰言秀誚⿰言肖語⿰言吾誠⿰言成誡⿰言戒誣⿰言巫誤⿰言呉誥⿰言告誦⿰言甬誨⿰言毎説⿰言兌読⿰言売誰⿰言隹課⿰言果誹⿰言非誼⿰言宜調⿰言周諂⿰言臽諄⿰言享談⿰言炎請⿰言青諌⿰言東諍⿰言爭諏⿰言取諒⿰言京論⿰言侖諚⿰言定諛⿰言臾諜⿰言枼諞⿰言扁諠⿰言宣諢⿰言軍諤⿰言咢諦⿰言帝諧⿰言皆諫⿰言柬諭⿰言兪諮⿰言咨諱⿰言韋諳⿰言音諷⿰言風諸⿰言者諺⿰言彦諾⿰言若謀⿰言某謁⿰言曷謂⿰言胃謌⿰言哥謎⿰言迷謔⿰言虐謗⿰言旁謙⿰言兼謚⿰言益講⿰言冓謝⿰言射謠⿰言䍃謡⿰言䍃謦⿱殸言謨⿰言莫謫⿰言啇謬⿰言翏謳⿰言區謹⿰言堇謾⿰言曼譁⿰言華證⿰言登譌⿰言爲譎⿰言矞譏⿰言幾識⿰言戠譚⿰言覃譛⿰言替譜⿰言普譟⿰言喿警⿱敬言譫⿰言詹譬⿱辟言譯⿰言睪議⿰言義譲⿰言㐮譴⿰言遣護⿰言蒦譽⿱與言讀⿰言賣讃⿰言賛變⿱䜌攵讌⿰言燕讒⿰言毚讓⿰言襄讖⿰言韱讚⿰言贊谺⿰谷牙谿⿰奚谷豁⿰害谷豈⿱山豆豊⿱曲豆豌⿰豆宛豚⿰月豕豦⿸虍豕豫⿰予象豬⿰豕者豹⿰豸勺豺⿰豸才豼⿰豸比貂⿰豸召貅⿰豸休貉⿰豸各貊⿰豸百貌⿰豸皃貍⿰豸里貎⿰豸兒貔⿰豸𣬉貘⿰豸莫貝⿱目八貞⿱卜貝負⿱𠂊貝財⿰貝才貢⿱工貝貧⿱分貝貨⿱化貝販⿰貝反貪⿱今貝貫⿱毋貝責⿱龶貝貯⿰貝宁貰⿱世貝貲⿱此貝貶⿰貝乏買⿱罒貝貸⿱代貝費⿱弗貝貼⿰貝占貽⿰貝台貿⿱卯貝賀⿱加貝賁⿱卉貝賂⿰貝各賃⿱任貝賄⿰貝有資⿱次貝賈⿱覀貝賊⿰貝戎賍⿰貝庄賎⿰貝戔賑⿰貝辰賚⿱來貝賜⿰貝易賞⿱尚貝賠⿰貝咅賤⿰貝戔賦⿰貝武賭⿰貝者賺⿰貝兼賻⿰貝尃購⿰貝冓贄⿱執貝贅⿱敖貝贇⿱斌貝贈⿰貝曽贋⿸雁貝贍⿰貝詹贐⿰貝盡贓⿰貝臧贖⿰貝賣赦⿰赤攵赫⿰赤赤赭⿰赤者走⿱土龰赴⿺走卜起⿺走己超⿺走召越⿺走戉趙⿺走肖趣⿺走取趨⿺走芻足⿱口龰趺⿰足夫趾⿰足止跂⿰足支跋⿰足犮跌⿰足失跏⿰足加跖⿰足石跚⿰足冊跛⿰足皮距⿰足巨跟⿰足艮跡⿰足亦跣⿰足先跨⿰足夸跪⿰足危路⿰足各跳⿰足兆践⿰足戋跼⿰足局跿⿰足走踈⿰足束踉⿰足良踊⿰足甬踏⿰足沓踐⿰足戔踝⿰足果踞⿰足居踟⿰足知踪⿰足宗踰⿰足兪踴⿰足勇踵⿰足重蹂⿰足柔蹄⿰足帝蹈⿰足舀蹉⿰足差蹊⿰足奚蹌⿰足倉蹐⿰足脊蹕⿰足畢蹙⿱戚足蹟⿰足責蹠⿰足庶蹤⿰足從蹲⿰足尊蹴⿰足就蹶⿰足厥蹼⿰足菐躁⿰足喿躄⿱辟足躅⿰足蜀躇⿰足著躊⿰足壽躋⿰足齊躍⿰足翟躑⿰足鄭躓⿰足質躔⿰足廛躡⿰足聶躪⿰足藺躬⿰身弓躯⿰身区躰⿰身本躱⿰身朶躾⿰身美軅⿰身雁軆⿰身豊軈⿰身應軋⿰車乙軌⿰車九軍⿱冖車軒⿰車干軛⿰車厄軟⿰車欠転⿰車云軸⿰車由軻⿰車可軼⿰車失軽⿰車圣軾⿰車式較⿰車交輅⿰車各輊⿰車至輌⿰車両輒⿰車𦔮輓⿰車免輔⿰車甫輕⿰車巠輙⿰車取輛⿰車兩輜⿰車甾輝⿰光軍輩⿱非車輪⿰車侖輯⿰車咠輳⿰車奏輸⿰車兪輹⿰車复輻⿰車畐輾⿰車展轄⿰車害轅⿰車袁轆⿰車鹿轉⿰車專轌⿰車雪轎⿰車喬轗⿰車感轜⿰車需轢⿰車樂轣⿰車歴轤⿰車盧辛⿱立十辜⿱古辛辞⿰舌辛辟⿰𡰪辛辣⿰辛束辱⿱辰寸農⿱曲辰辷⿺辶一辺⿺⻌刀辻⿺辶十込⿺⻌入辿⿺辶山迂⿺辶于迄⿺辶乞迅⿺⻌卂迎⿺⻌卬近⿺⻌斤返⿺⻌反迚⿺辶中迢⿺辶召迥⿺辶冋迦⿺辶加迩⿺⻌尓迪⿺⻌由迫⿺⻌白迭⿺⻌失迯⿺辶外述⿺⻌朮迴⿺辶回迷⿺⻌米迸⿺辶并迹⿺辶亦迺⿺辶西追⿺⻌𠂤退⿺⻌艮送⿺⻌关逃⿺⻌兆逅⿺辶后逆⿺⻌屰逋⿺辶甫逍⿺辶肖逎⿺辶酉透⿺⻌秀逐⿺⻌豕逑⿺辶求逓⿺⻌乕途⿺⻌余逕⿺辶巠逖⿺辶狄逗⿺辶豆這⿺辶言通⿺⻌甬逝⿺⻌折逞⿺辶呈速⿺⻌束造⿺⻌告逡⿺辶夋逢⿺辶夆連⿺⻌車逧⿺辶谷逮⿺⻌隶週⿺⻌周進⿺⻌隹逶⿺辶委逸⿺⻌免逹⿺辶幸逼⿺辶畐逾⿺辶兪遀⿺辶隋遁⿺辶盾遇⿺⻌禺遉⿺辶貞遊⿺⻌斿運⿺⻌軍遍⿺⻌扁過⿺⻌咼遏⿺辶曷遐⿺辶叚遑⿺辶皇遒⿺辶酋道⿺⻌首達⿺辶𦍒違⿺⻌韋遖⿺辶南遘⿺辶冓遙⿺辶䍃遜⿺辶孫遞⿺辶虒遠⿺⻌袁遡⿺辶朔遥⿺⻌䍃遨⿺辶敖適⿺⻌啇遭⿺⻌曹遮⿺⻌庶遯⿺辶豚遲⿺辶犀遵⿺⻌尊遶⿺辶堯選⿺⻌巽遺⿺⻌貴遼⿺⻌尞遽⿺辶豦避⿺⻌辟邀⿺辶敫邁⿺辶萬邂⿺辶解還⿺⻌睘邇⿺辶爾邏⿺辶羅邑⿱口巴邦⿰丰⻏邨⿰屯⻏邪⿰牙⻏邯⿰甘⻏邱⿰丘⻏邵⿰召⻏邸⿰氐⻏郁⿰有⻏郊⿰交⻏郎⿰良⻏郛⿰孚⻏郡⿰君⻏郢⿰呈⻏郤⿰谷⻏部⿰咅⻏郭⿰享⻏郵⿰垂⻏都⿰者⻏鄂⿰咢⻏鄒⿰芻⻏鄭⿰奠⻏鄰⿰粦⻏鄲⿰單⻏酊⿰酉丁酋⿱八酉酌⿰酉勺配⿰酉己酎⿰酉寸酒⿰氵酉酔⿰酉卆酖⿰酉冘酘⿰酉殳酢⿰酉乍酣⿰酉甘酥⿰酉禾酩⿰酉名酪⿰酉各酬⿰酉州酲⿰酉呈酵⿰酉孝酷⿰酉告酸⿰酉夋醂⿰酉林醇⿰酉享醉⿰酉卒醋⿰酉昔醍⿰酉是醐⿰酉胡醒⿰酉星醗⿰酉発醜⿰酉鬼醤⿱将酉醪⿰酉翏醫⿱殹酉醬⿱將酉醴⿰酉豊醵⿰酉豦醸⿰酉㐮醺⿰酉熏釀⿰酉襄釆⿱丿米采⿱⺤木釈⿰釆尺釉⿰釆由釋⿰釆睪野⿰里予量⿱旦里釐⿸𠩺里釖⿰金刀釘⿰金丁釛⿰金力釜⿱父金針⿰金十釟⿰金八釡⿱八金釣⿰金勺釦⿰金口釧⿰金川釵⿰金叉釶⿰金也釼⿰金刄釿⿰金斤鈍⿰金屯鈎⿰金勾鈑⿰金反鈔⿰金少鈕⿰金丑鈞⿰金匀鈩⿰金戸鈬⿰金尺鈴⿰金令鈷⿰金古鈿⿰金田鉄⿰金失鉅⿰金巨鉈⿰金它鉉⿰金玄鉋⿰金包鉐⿰金石鉗⿰金甘鉚⿰金卯鉛⿰金㕣鉞⿰金戉鉢⿰金本鉤⿰金句鉦⿰金正鉱⿰金広鉾⿰金牟銀⿰金艮銃⿰金充銅⿰金同銑⿰金先銓⿰金全銕⿰金夷銖⿰金朱銘⿰金名銚⿰金兆銛⿰金舌銭⿰金戋銷⿰金肖銹⿰金秀鋏⿰金夾鋒⿰金夆鋤⿰金助鋩⿰金芒鋪⿰金甫鋭⿰金兌鋲⿰金兵鋳⿰金寿鋸⿰金居鋺⿰金宛鋼⿰金岡錆⿰金青錏⿰金亞錐⿰金隹錘⿰金垂錙⿰金甾錚⿰金爭錠⿰金定錢⿰金戔錦⿰金帛錨⿰金苗錫⿰金易錬⿰金東錮⿰金固錯⿰金昔録⿰金彔錵⿰金花錺⿰金芳錻⿰金武鍄⿰金京鍋⿰金咼鍍⿰金度鍔⿰金咢鍖⿰金甚鍛⿰金段鍜⿰金叚鍠⿰金皇鍬⿰金秋鍮⿰金兪鍵⿰金建鍼⿰金咸鍾⿰金重鎌⿰金兼鎔⿰金容鎗⿰金倉鎚⿰金追鎧⿰金豈鎬⿰金高鎭⿰金眞鎮⿰金真鎰⿰金益鎹⿰金送鏃⿰金族鏈⿰金連鏐⿰金翏鏑⿰金啇鏖⿱鹿金鏗⿰金堅鏘⿰金將鏝⿰金曼鏡⿰金竟鏤⿰金婁鏥⿰金宿鏨⿱斬金鐃⿰金堯鐇⿰金番鐐⿰金尞鐓⿰金敦鐔⿰金覃鐘⿰金童鐙⿰金登鐚⿰金惡鐡⿰金載鐫⿰金雋鐵⿰金載鐶⿰金睘鐸⿰金睪鐺⿰金當鑁⿰金𡕰鑄⿰金壽鑑⿰金監鑓⿰金遣鑚⿰金賛鑛⿰金廣鑠⿰金樂鑢⿰金慮鑪⿰金盧鑰⿰金龠鑷⿰金聶鑼⿰金羅鑽⿰金贊鑾⿱䜌金钁⿰金矍阜⿱𠂤十阡⿰⻖千阨⿰⻖厄阪⿰⻖反阮⿰⻖元阯⿰⻖止防⿰⻖方阻⿰⻖且阿⿰⻖可陀⿰⻖它陂⿰⻖皮附⿰⻖付陌⿰⻖百降⿰⻖夅陏⿰⻖有限⿰⻖艮陜⿰⻖夾陟⿰⻖歩院⿰⻖完陣⿰⻖車除⿰⻖余陦⿰⻖寿陪⿰⻖咅陬⿰⻖取陲⿰⻖垂陳⿰⻖東陵⿰⻖夌陷⿰⻖臽陸⿰⻖坴険⿰⻖㑒陽⿰⻖昜隅⿰⻖禺隈⿰⻖畏隋⿱左月隍⿰⻖皇階⿰⻖皆隔⿰⻖鬲隕⿰⻖員隗⿰⻖鬼際⿰⻖祭障⿰⻖章隣⿰⻖粦隧⿰⻖遂險⿰⻖僉隰⿰⻖㬎隴⿰⻖龍隻⿱隹又隼⿱隹十隽⿱隹乃雁⿸厂倠雄⿰厷隹雅⿰牙隹集⿱隹木雇⿸戸隹雉⿰矢隹雌⿰此隹雎⿰且隹雕⿰周隹雛⿰芻隹離⿰离隹雪⿱雨⺕雫⿱雨下雰⿱雨分雲⿱雨云零⿱雨令雷⿱雨田雹⿱雨包需⿱雨而霄⿱雨肖霆⿱雨廷震⿱雨辰霈⿱雨沛霊⿳雨一亚霍⿱雨隹霎⿱雨妾霏⿱雨非霑⿱雨沾霓⿱雨兒霖⿱雨林霙⿱雨英霜⿱雨相霞⿱雨叚霤⿱雨留霧⿱雨務霪⿱雨淫霰⿱雨散露⿱雨路霸⿱雨䩗霹⿱雨辟霽⿱雨齊霾⿱雨貍靂⿱雨歴靄⿱雨謁靆⿰雲逮靉⿰雲愛青⿱龶月靖⿰立青静⿰青争靜⿰青爭靠⿱告非靡⿸麻非靤⿰面包靦⿰面見靨⿱厭面靫⿰革叉靭⿰革刃靱⿰革刄靴⿰革化靹⿰革内靺⿰革末靼⿰革旦鞁⿰革皮鞄⿰革包鞅⿰革央鞆⿰革丙鞋⿰革圭鞍⿰革安鞘⿰革肖鞜⿰革沓鞠⿰革匊鞣⿰革柔鞦⿰革秋鞨⿰革曷鞭⿰革便鞳⿰革荅韃⿰革達韆⿰革遷韈⿰革蔑韓⿰𠦝韋韜⿰韋舀韮⿱艹韭韲⿱齊韭音⿱立日韵⿰音匀韶⿰音召韻⿰音員響⿱郷音頂⿰丁頁頃⿰匕頁項⿰工頁順⿰川頁須⿰彡頁頌⿰公頁頏⿰亢頁預⿰予頁頑⿰元頁頒⿰分頁頓⿰屯頁頗⿰皮頁領⿰令頁頡⿰吉頁頬⿰夾頁頭⿰豆頁頰⿰夾頁頷⿰含頁頸⿰巠頁頻⿰歩頁頼⿰束頁頽⿰禿頁顆⿰果頁顋⿰思頁題⿺是頁額⿰客頁顎⿰咢頁顏⿰彦頁顔⿰彦頁顕⿰显頁願⿰原頁顚⿰眞頁顛⿰真頁顧⿰雇頁顫⿰亶頁顯⿰㬎頁顱⿰盧頁顳⿰聶頁颪⿱下風颯⿰立風颱⿺風台颶⿺風具飃⿺風票飄⿰票風飆⿰猋風飜⿰番飛飢⿰飠几飩⿰⻞屯飫⿰⻞夭飮⿰⻞欠飯⿰飠反飲⿰飠欠飴⿰⻞台飼⿰飠司飽⿰飠包餃⿰⻞交餅⿰⻞并餉⿰⻞向養⿱羊食餌⿰⻞耳餒⿰⻞妥餓⿰飠我餔⿰⻞甫餘⿰⻞余餝⿰⻞芳餞⿰⻞戔餠⿰⻞并餡⿰⻞臽餤⿰⻞炎館⿰飠官餬⿰⻞胡餮⿱殄食餽⿰⻞鬼餾⿰⻞留饂⿰⻞𥁕饅⿰⻞曼饉⿰⻞堇饋⿰⻞貴饌⿰⻞巽饐⿰⻞壹饑⿰⻞幾饒⿰⻞堯饕⿱號食饗⿱郷食馗⿺九首馘⿰首或香⿱禾日馥⿰香复馨⿱殸香馭⿰馬又馮⿰冫馬馳⿰馬也馴⿰馬川馼⿰馬文駁⿰馬爻駄⿰馬太駅⿰馬尺駆⿰馬区駈⿰馬丘駐⿰馬主駑⿱奴馬駒⿰馬句駕⿱加馬駘⿰馬台駛⿰馬史駝⿰馬它駢⿰馬并駦⿱龹馬駭⿰馬亥駮⿰馬交駱⿰馬各駲⿰馬州駻⿰馬旱駿⿰馬夋騁⿰馬甹騅⿰馬隹騎⿰馬奇騏⿰馬其験⿰馬㑒騙⿰馬扁騨⿰馬単騰⿰月駦騷⿰馬蚤騾⿰馬累驀⿱莫馬驂⿰馬參驃⿰馬票驅⿰馬區驍⿰馬堯驕⿰馬喬驗⿰馬僉驚⿱敬馬驛⿰馬睪驟⿰馬聚驢⿰馬盧驤⿰馬襄驥⿰馬冀驪⿰馬麗骭⿰骨干骰⿰骨殳骸⿰骨亥骼⿰骨各髀⿰骨卑髏⿰骨婁髑⿰骨蜀體⿰骨豊髞⿰高喿髟⿰長彡髢⿱髟也髣⿱髟方髦⿱髟毛髪⿱髟友髫⿱髟召髭⿱髟此髮⿱髟犮髯⿱髟冉髱⿱髟包髴⿱髟弗髷⿱髟曲髻⿱髟吉鬆⿱髟松鬘⿱髟曼鬚⿱髟須鬟⿱髟睘鬢⿱髟賓鬻⿱粥鬲魁⿺鬼斗魂⿰云鬼魃⿺鬼犮魄⿰白鬼魅⿺鬼未魍⿺鬼罔魎⿺鬼兩魏⿰委鬼魑⿺鬼离魔⿸麻鬼魘⿸厭鬼魯⿱魚日魴⿰魚方鮃⿰魚平鮎⿰魚占鮑⿰魚包鮒⿰魚付鮓⿰魚乍鮖⿰魚石鮗⿰魚冬鮟⿰魚安鮠⿰魚危鮨⿰魚旨鮪⿰魚有鮫⿰魚交鮭⿰魚圭鮮⿰魚羊鮴⿰魚休鮹⿰魚肖鯀⿰魚系鯆⿰魚甫鯉⿰魚里鯊⿱沙魚鯏⿰魚利鯑⿰魚希鯒⿰魚甬鯔⿰魚甾鯖⿰魚青鯛⿰魚周鯡⿰魚非鯢⿰魚兒鯣⿰魚易鯤⿰魚昆鯨⿰魚京鯰⿰魚念鯱⿰魚虎鯲⿰魚於鯵⿰魚参鰄⿰魚威鰆⿰魚春鰈⿰魚枼鰉⿰魚皇鰊⿰魚柬鰌⿰魚酋鰍⿰魚秋鰐⿰魚咢鰒⿰魚复鰓⿰魚思鰔⿰魚咸鰕⿰魚叚鰛⿰魚昷鰡⿰魚留鰤⿰魚師鰥⿰魚眔鰭⿰魚耆鰮⿰魚𥁕鰯⿰魚弱鰰⿰魚神鰲⿱敖魚鰹⿰魚堅鰺⿰魚參鰻⿰魚曼鰾⿰魚票鱆⿰魚章鱇⿰魚康鱈⿰魚雪鱒⿰魚尊鱗⿰魚粦鱚⿰魚喜鱠⿰魚會鱧⿰魚豊鱶⿰魚養鱸⿰魚盧鳧⿱鳥几鳩⿰九鳥鳫⿸厂鳥鳬⿱鳥几鳰⿰入鳥鳳⿴几𩾏鳴⿰口鳥鳶⿱弋鳥鴃⿰鳥夬鴆⿰冘鳥鴉⿰牙鳥鴎⿰区鳥鴒⿰令鳥鴕⿰鳥它鴛⿱夗鳥鴣⿰古鳥鴦⿱央鳥鴨⿰甲鳥鴪⿰穴鳥鴫⿰田鳥鴻⿰江鳥鴾⿰牟鳥鴿⿰合鳥鵁⿰交鳥鵄⿰至鳥鵈⿰耳鳥鵐⿰巫鳥鵑⿰肙鳥鵙⿰貝鳥鵜⿰弟鳥鵝⿰我鳥鵞⿱我鳥鵠⿰告鳥鵡⿰武鳥鵤⿰角鳥鵬⿰朋鳥鵯⿰卑鳥鵲⿰昔鳥鵺⿰夜鳥鶇⿰東鳥鶉⿰享鳥鶏⿰奚鳥鶚⿰咢鳥鶤⿰軍鳥鶩⿱敄鳥鶫⿰柬鳥鶯⿱𤇾鳥鶲⿰翁鳥鶴⿰寉鳥鶸⿰弱鳥鶺⿰脊鳥鶻⿰骨鳥鷁⿰益鳥鷂⿰䍃鳥鷄⿰奚鳥鷆⿰眞鳥鷏⿰真鳥鷓⿰庶鳥鷗⿰區鳥鷙⿱執鳥鷦⿰焦鳥鷭⿰番鳥鷯⿰尞鳥鷲⿱就鳥鷸⿰矞鳥鷺⿱路鳥鷽⿱𦥯鳥鸚⿰嬰鳥鸞⿱䜌鳥鹸⿰鹵㑒鹹⿰鹵咸麁⿱𠂊鹿麈⿸鹿主麋⿸鹿米麌⿱鹿呉麑⿱鹿兒麒⿰鹿其麓⿱林鹿麝⿱鹿射麟⿰鹿粦麥⿱來夂麦⿱龶夂麩⿺麥夫麪⿺麥正麭⿺麥包麸⿺麦夫麹⿺麦匊麺⿺麦面麻⿸广林麼⿸麻幺麾⿸麻毛麿⿸麻呂黄⿳龷由八黌⿱𦥯黃黏⿰黍占黐⿰黍离黑⿱里灬黒⿱里灬黔⿰黑今默⿰黑犬黛⿱代黒黜⿰黑出黝⿰黑幼點⿰黑占黠⿰黑吉黥⿰黑京黨⿱尚黑黯⿰黑音黶⿱厭黑黷⿰黑𧶠黻⿰黹犮黼⿰黹甫鼇⿱敖黽鼈⿱敝黽鼓⿰壴支鼕⿱鼓冬鼡⿱臼用鼬⿺鼠由鼻⿱自畀鼾⿰鼻干齔⿰齒匕齟⿰齒且齠⿰齒召齡⿰齒令齢⿰歯令齣⿰齒句齦⿰齒艮齪⿰齒足齬⿰齒吾齲⿰齒禹齶⿰齒咢齷⿰齒屋龕⿱合龍龝⿰禾龜龶⿱三三冷⿰冫令嶺⿱山領玲⿰王令羚⿰羊令聆⿰耳令鈴⿰金令零⿱雨令領⿰令頁𠂤⿱丿㠯𠦝⿱十早𠮟⿰口七𡰪⿸尸口𢆶⿰幺幺𣪘⿰皀殳𤕻⿰爿吾𥁕⿱囚皿𧒑⿰虫鼠\";\n\nexport const STRUCTURE_SIZE = 5129;\n\nlet table: Map<string, string> | null = null;\n\n/** Built on first use so text with no kanji never pays for it. */\nexport function getStructure(): Map<string, string> {\n  if (table) return table;\n  const m = new Map<string, string>();\n  const cps = [...PACKED];\n  let i = 0;\n  while (i < cps.length) {\n    const key = cps[i++]!;\n    const op = cps[i++]!;\n    if (!isIdsOperator(op)) throw new Error(`corrupt structure table at ${i}`);\n    const n = arityOf(op);\n    m.set(key, op + cps.slice(i, i + n).join(''));\n    i += n;\n  }\n  table = m;\n  return table;\n}\n","/**\n * Kanji -> traditional/variant form (学 -> 學).\n *\n * GENERATED FILE — do not edit. Rebuild with: npm run data:build\n *\n * Derived from the Unicode Character Database (c) Unicode, Inc.\n * https://www.unicode.org/copyright.html\n */\nconst PACKED =\n  \"万萬与與乱亂争爭会會体體余餘党黨写寫励勵区區医醫却卻厘釐参參双雙叙敘号號嘱囑国國堕墮壮壯声聲奥奧奨奬学學宝寶寝寢寿壽将將属屬峡峽径徑恋戀惧懼惨慘担擔挟挾携攜数數断斷旧舊昼晝条條来來枢樞楼樓欧歐残殘殴毆浅淺湾灣湿濕滞滯灯燈炉爐点點独獨狭狹献獻画畫盗盜礼禮禅禪称稱窃竊胆膽茎莖虫蟲蚕蠶蛮蠻装裝触觸誉譽践踐踊踴踪蹤辞辭随隨静靜麦麥\";\n\nexport const VARIANT_SIZE = 81;\n\nlet table: Map<string, string> | null = null;\n\nexport function getVariant(): Map<string, string> {\n  if (table) return table;\n  const m = new Map<string, string>();\n  const cps = [...PACKED];\n  for (let i = 0; i + 1 < cps.length; i += 2) m.set(cps[i]!, cps[i + 1]!);\n  table = m;\n  return table;\n}\n","import { componentAlias } from '../../data/component-normalize';\nimport { componentStyle } from '../../data/component-style';\nimport { homoglyph } from '../../data/homoglyph';\nimport { override } from '../../data/override';\nimport { renderableExtra } from '../../data/renderable';\nimport { getLegible } from '../generated/legible';\nimport { getStructure } from '../generated/structure';\nimport { getVariant } from '../generated/variant';\nimport type { KanjiRoute, SplitPolicy } from '../types';\nimport { parseIds, type Ids, type Position } from './ids';\n\nexport interface EngineOptions {\n  variant: boolean;\n  splitPolicy: SplitPolicy;\n  styleStandalone: boolean;\n  maxDepth: number;\n  /** Chooses among candidate renderings. */\n  pick: (candidates: readonly string[]) => string;\n}\n\nexport interface EngineResult {\n  route: KanjiRoute;\n  result: string;\n  steps: string[];\n}\n\nconst POLICY_RANK: Readonly<Record<SplitPolicy, number>> = {\n  horizontal: 0,\n  balanced: 1,\n  aggressive: 2,\n};\n\n/** Fold radical-block spellings onto a single canonical component. */\nexport function normalizeComponent(component: string): string {\n  return componentAlias[component] ?? component;\n}\n\nfunction styleOf(component: string, position: Position, opts: EngineOptions): string | undefined {\n  const c = normalizeComponent(component);\n  const candidates = componentStyle[`${c}@${position}`] ?? componentStyle[c];\n  return candidates ? opts.pick(candidates) : undefined;\n}\n\nconst RENDERABLE_EXTRA = new Set(renderableExtra);\n\n/**\n * Will this component survive being dropped into the output on its own?\n *\n * Broader than \"is a JIS X 0208 kanji\": 疒 and 灬 are not kanji but every\n * Japanese font draws them, so a split that produces them is still readable.\n */\nfunction isRenderable(component: string): boolean {\n  const c = normalizeComponent(component);\n  return getLegible().has(c) || RENDERABLE_EXTRA.has(c) || componentStyle[c] !== undefined;\n}\n\n/**\n * Should we break a component down further?\n *\n * Two reasons to keep going:\n *\n *  1. The component is not readable on its own. 咅 is not in JIS X 0208, so\n *     倍 becomes ｲ立ﾛ rather than the unreadable ｲ咅 — whereas 吾 *is*, so 語\n *     stops at 言吾.\n *  2. The component itself reads left-to-right. Splitting it again costs the\n *     reader nothing, so 例 becomes ｲ歹ﾘ instead of ｲ列.\n *\n * Checked against galjp v4's hand-written table: this pair of conditions\n * reproduces 3150 of the 3286 characters both sources decompose (95.9%),\n * against 3037 for legibility alone.\n */\nfunction shouldRecurse(component: string): boolean {\n  if (!isRenderable(component)) return true;\n\n  const c = normalizeComponent(component);\n  const raw = getStructure().get(c) ?? getStructure().get(component);\n  if (!raw) return false;\n  return parseIds(raw)?.splitClass === 'always';\n}\n\nfunction isLinearizable(ids: Ids, depth: number, opts: EngineOptions): boolean {\n  const rank = POLICY_RANK[opts.splitPolicy];\n\n  switch (ids.splitClass) {\n    case 'always':\n      return true;\n\n    case 'conditional':\n      // Nested parts are already inside a split the reader has accepted.\n      if (depth >= 1) return true;\n      if (rank >= POLICY_RANK.aggressive) return true;\n      if (rank < POLICY_RANK.balanced) return false;\n      return ids.operands.every(isRenderable);\n\n    case 'enclose':\n      return rank >= POLICY_RANK.aggressive;\n  }\n}\n\nfunction decompose(char: string, depth: number, opts: EngineOptions): string | null {\n  if (depth > opts.maxDepth) return null;\n\n  const raw = getStructure().get(char);\n  if (!raw) return null;\n\n  const ids = parseIds(raw);\n  if (!ids) return null;\n  if (!isLinearizable(ids, depth, opts)) return null;\n\n  const parts: string[] = [];\n  for (let i = 0; i < ids.operands.length; i++) {\n    const operand = ids.operands[i]!;\n    const position = ids.positions[i] ?? 'other';\n    const sub = shouldRecurse(operand) ? decompose(operand, depth + 1, opts) : null;\n    parts.push(sub ?? styleOf(operand, position, opts) ?? operand);\n  }\n  return parts.join('');\n}\n\n/**\n * Convert a single kanji, trying each route in order.\n *\n * 1. override   — hand-written exceptions (stroke splits)\n * 2. homoglyph  — whole-character look-alikes\n * 3. variant    — swap in the traditional form, then keep going\n * 4. decompose  — split into components\n * 5. style      — decorate a single-component kanji\n */\nexport function convertKanji(char: string, opts: EngineOptions): EngineResult {\n  const steps: string[] = [char];\n\n  const ov = override[char];\n  if (ov) {\n    const result = opts.pick(ov);\n    return { route: 'override', result, steps: [...steps, result] };\n  }\n\n  const hg = homoglyph[char];\n  if (hg) {\n    const result = opts.pick(hg);\n    return { route: 'homoglyph', result, steps: [...steps, result] };\n  }\n\n  let base = char;\n  let usedVariant = false;\n  if (opts.variant) {\n    const v = getVariant().get(char);\n    if (v && v !== char) {\n      base = v;\n      usedVariant = true;\n      steps.push(base);\n    }\n  }\n\n  const decomposed = decompose(base, 0, opts);\n  if (decomposed && decomposed !== base) {\n    return { route: 'decompose', result: decomposed, steps: [...steps, decomposed] };\n  }\n\n  if (opts.styleStandalone) {\n    const styled = styleOf(base, 'other', opts);\n    if (styled && styled !== base) {\n      return { route: 'style', result: styled, steps: [...steps, styled] };\n    }\n  }\n\n  return usedVariant\n    ? { route: 'variant', result: base, steps }\n    : { route: 'none', result: char, steps };\n}\n\n/** Every rendering this configuration could produce for one kanji. */\nexport function kanjiCandidates(char: string, opts: EngineOptions): string[] {\n  const seen = new Set<string>();\n  const collect = (pick: EngineOptions['pick']): void => {\n    const r = convertKanji(char, { ...opts, pick });\n    if (r.result !== char) seen.add(r.result);\n  };\n  collect((c) => c[0]!);\n  collect((c) => c[c.length - 1]!);\n  return [...seen];\n}\n","/**\n * Digits -> galmoji.\n *\n * Ported verbatim from galjp v4 (lib/chars/number.json). The values are intentionally\n * unchanged — see docs/DESIGN.md premise 3. Regenerate with:\n *   npm run data:port\n */\nexport const digit: Readonly<Record<string, string>> = {\n  '0': 'Θ',\n  '1': '｜',\n  '2': 'ｚ',\n  '3': 'З',\n  '4': '〆',\n  '5': 'ｓ',\n  '6': 'б',\n  '7': 'ﾌ',\n  '8': '∞',\n  '9': 'q',\n};\n","/**\n * Hiragana -> galmoji.\n *\n * Ported verbatim from galjp v4 (lib/chars/hiragana.json). The values are intentionally\n * unchanged — see docs/DESIGN.md premise 3. Regenerate with:\n *   npm run data:port\n */\nexport const hiragana: Readonly<Record<string, string>> = {\n  あ: 'क॑',\n  い: 'ﾚヽ',\n  う: 'כֿ',\n  え: '之',\n  お: 'ょゝ',\n  か: 'ｶゝ',\n  き: '(≠',\n  く: '＜',\n  け: 'ﾚﾅ',\n  こ: '⊇',\n  さ: '±',\n  し: 'Ｕ',\n  す: '￡',\n  せ: '世',\n  そ: 'ƺ',\n  た: 'ﾅﾆ',\n  ち: 'ㄘ',\n  つ: '⊃',\n  て: 'τ',\n  と: '｀⊂',\n  な: 'ﾅょ',\n  に: 'ﾚﾆ',\n  ぬ: 'йu',\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  ぱ: 'ﾚ￡o',\n  ぴ: 'ひo',\n  ぷ: '､ζ,o',\n  ぺ: '∧o',\n  ぽ: 'ﾚまo',\n  ぁ: 'क॑',\n  ぃ: 'ﾚヽ',\n  ぅ: 'כֿ',\n  ぇ: '之',\n  ぉ: 'ょゝ',\n  っ: '⊃',\n  ゃ: '兯',\n  ゅ: 'ゅ',\n  ょ: 'ょ',\n  ゎ: 'ゎ',\n  ー: '→',\n};\n","/**\n * Katakana -> galmoji.\n *\n * Ported verbatim from galjp v4 (lib/chars/katakana.json). The values are intentionally\n * unchanged — see docs/DESIGN.md premise 3. Regenerate with:\n *   npm run data:port\n */\nexport const katakana: Readonly<Record<string, string>> = {\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  ヅ: '〃ﾉ”',\n  デ: '〒”',\n  ド: '├”',\n  バ: '/ヽ”',\n  ビ: '匕”',\n  ブ: '┐”',\n  ベ: '∧”',\n  ボ: '木”',\n  パ: '/ヽo',\n  ピ: '匕o',\n  プ: '┐o',\n  ペ: '∧o',\n  ポ: '木o',\n  ァ: '了',\n  ィ: 'ィ',\n  ゥ: '宀',\n  ェ: 'ヱ',\n  ォ: '才',\n  ッ: '〃ﾉ',\n  ャ: '兯',\n  ュ: 'ュ',\n  ョ: '∋',\n  ヮ: 'ヮ',\n  ー: '→',\n};\n","/**\n * Latin letters (keys are upper case; lookup upper-cases first) -> galmoji.\n *\n * Ported verbatim from galjp v4 (lib/chars/alphabet.json). The values are intentionally\n * unchanged — see docs/DESIGN.md premise 3. Regenerate with:\n *   npm run data:port\n */\nexport const latin: Readonly<Record<string, string>> = {\n  A: '∀',\n  B: '♭',\n  C: '⊂',\n  D: '囙',\n  E: 'ヨ',\n  F: '下',\n  G: '⊂┐',\n  H: '丩',\n  I: '工',\n  J: 'し',\n  K: '|く',\n  L: '└',\n  M: '从',\n  N: '冂',\n  O: '口',\n  P: '尸',\n  Q: '电',\n  R: '尺',\n  S: '丂',\n  T: '丁',\n  U: '凵',\n  V: 'レ',\n  W: '山',\n  X: '乂',\n  Y: 'ソ',\n  Z: '乙',\n};\n","/**\n * Symbols -> galmoji.\n *\n * Ported verbatim from galjp v4 (lib/chars/other.json). The values are intentionally\n * unchanged — see docs/DESIGN.md premise 3. Regenerate with:\n *   npm run data:port\n */\nexport const symbol: Readonly<Record<string, string>> = {\n  '!': '.ᐟ',\n  '！': '.ᐟ',\n};\n","import { digit } from '../../data/digit';\nimport { hiragana } from '../../data/hiragana';\nimport { katakana } from '../../data/katakana';\nimport { latin } from '../../data/latin';\nimport { symbol } from '../../data/symbol';\nimport type { LayerId } from '../types';\n\nconst FULLWIDTH_START = 0xff01;\nconst FULLWIDTH_END = 0xff5e;\nconst ASCII_OFFSET = 0xfee0;\n\n/** Ａ -> A, ７ -> 7. Leaves everything else alone. */\nexport function foldFullwidth(ch: string): string {\n  const cp = ch.codePointAt(0);\n  if (cp === undefined || cp < FULLWIDTH_START || cp > FULLWIDTH_END) return ch;\n  return String.fromCodePoint(cp - ASCII_OFFSET);\n}\n\n/**\n * Decide which layer owns a character.\n *\n * Classification always reads the *original* character. That is the single\n * invariant that stops v4's cascade, where `E` became `ヨ` in the latin table\n * and was then re-read by the katakana table into `∋`.\n */\nexport function classify(ch: string): LayerId | null {\n  const folded = foldFullwidth(ch);\n  const cp = folded.codePointAt(0);\n  if (cp === undefined) return null;\n\n  if ((cp >= 0x41 && cp <= 0x5a) || (cp >= 0x61 && cp <= 0x7a)) return 'latin';\n  if (cp >= 0x30 && cp <= 0x39) return 'digit';\n\n  const raw = ch.codePointAt(0)!;\n  if (raw >= 0x3041 && raw <= 0x309f) return 'hiragana';\n  if (raw >= 0x30a0 && raw <= 0x30ff) return 'katakana';\n  if (isHan(ch)) return 'kanji';\n  if (symbol[ch] !== undefined) return 'symbol';\n  return null;\n}\n\nconst HAN = /\\p{Script=Han}/u;\n\nexport function isHan(ch: string): boolean {\n  return HAN.test(ch);\n}\n\n/**\n * Look up a non-kanji character. Returns undefined when the layer has no entry,\n * which leaves the character untouched.\n */\nexport function lookupChar(layer: LayerId, ch: string): string | undefined {\n  switch (layer) {\n    case 'latin':\n      return latin[foldFullwidth(ch).toUpperCase()];\n    case 'digit':\n      return digit[foldFullwidth(ch)];\n    case 'hiragana':\n      return hiragana[ch];\n    case 'katakana':\n      return katakana[ch];\n    case 'symbol':\n      return symbol[ch];\n    case 'kanji':\n      return undefined;\n  }\n}\n","import type { Segment } from './segment';\n\n/**\n * Ranges that must survive untouched.\n *\n * v4 happily mangled URLs (`https://example.com/A` came out as\n * `丩ＴＴ尸丂://∋乂∀…`), which made it unusable on anything containing a link.\n */\nexport const DEFAULT_PRESERVE: readonly RegExp[] = [\n  // URLs and bare domains with a scheme.\n  /[a-zA-Z][a-zA-Z0-9+.-]*:\\/\\/[^\\s]+/gu,\n  // Emoji, including ZWJ sequences and skin-tone modifiers.\n  /\\p{Extended_Pictographic}(️|‍\\p{Extended_Pictographic}|\\p{Emoji_Modifier})*/gu,\n];\n\nexport type PreserveOption = readonly RegExp[] | ((text: string) => boolean) | false;\n\ninterface Range {\n  start: number;\n  end: number;\n}\n\nfunction matchRanges(input: string, patterns: readonly RegExp[]): Range[] {\n  const ranges: Range[] = [];\n  for (const pattern of patterns) {\n    // Clone so a caller-supplied regex never has its lastIndex mutated.\n    const re = new RegExp(\n      pattern.source,\n      pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g',\n    );\n    let m: RegExpExecArray | null;\n    while ((m = re.exec(input))) {\n      if (m[0].length === 0) {\n        re.lastIndex++;\n        continue;\n      }\n      ranges.push({ start: m.index, end: m.index + m[0].length });\n    }\n  }\n  return ranges;\n}\n\n/** Seal every segment that falls inside a preserved range. */\nexport function applyPreserve(input: string, segments: Segment[], preserve: PreserveOption): void {\n  if (preserve === false) return;\n\n  if (typeof preserve === 'function') {\n    for (const s of segments) {\n      if (preserve(s.source)) s.sealed = true;\n    }\n    return;\n  }\n\n  const ranges = matchRanges(input, preserve);\n  if (ranges.length === 0) return;\n\n  for (const s of segments) {\n    const end = s.start + s.source.length;\n    for (const r of ranges) {\n      if (s.start < r.end && end > r.start) {\n        s.sealed = true;\n        break;\n      }\n    }\n  }\n}\n","/**\n * Deterministic candidate selection.\n *\n * Without a seed we always take the first candidate, so output is stable and\n * reproducible. With one, mulberry32 gives the same sequence everywhere —\n * no reliance on the host's Math.random.\n */\n\nfunction hashSeed(seed: number | string): number {\n  if (typeof seed === 'number') return seed >>> 0;\n  let h = 2166136261 >>> 0;\n  for (let i = 0; i < seed.length; i++) {\n    h ^= seed.charCodeAt(i);\n    h = Math.imul(h, 16777619);\n  }\n  return h >>> 0;\n}\n\nexport type Picker = (candidates: readonly string[]) => string;\n\n/** Always returns the first candidate. */\nexport const firstPicker: Picker = (candidates) => candidates[0] ?? '';\n\nexport function createPicker(seed: number | string | undefined): Picker {\n  if (seed === undefined) return firstPicker;\n\n  let state = hashSeed(seed);\n  const next = (): number => {\n    state = (state + 0x6d2b79f5) >>> 0;\n    let t = state;\n    t = Math.imul(t ^ (t >>> 15), t | 1);\n    t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n    return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n  };\n\n  return (candidates) => {\n    if (candidates.length === 0) return '';\n    if (candidates.length === 1) return candidates[0]!;\n    return candidates[Math.floor(next() * candidates.length)] ?? candidates[0]!;\n  };\n}\n","/**\n * Text splitting.\n *\n * A segment is a grapheme cluster where the runtime can tell us (Intl.Segmenter\n * is in every modern browser, Node 16+, Deno, Bun and Workers) and a code point\n * otherwise. Either way we never split a surrogate pair, which is what v4's\n * `split('')` did.\n */\n\nexport interface Segment {\n  /** The original text. Every conversion decision reads this, never `output`. */\n  readonly source: string;\n  /** Byte offset of `source` within the input. */\n  readonly start: number;\n  /** Converted text; equal to `source` until a layer replaces it. */\n  output: string;\n  /** Once true, no further stage may touch this segment. */\n  sealed: boolean;\n}\n\ntype SegmenterCtor = new (\n  locales?: string,\n  options?: { granularity?: 'grapheme' | 'word' | 'sentence' },\n) => { segment(input: string): Iterable<{ segment: string; index: number }> };\n\nfunction getSegmenter(): InstanceType<SegmenterCtor> | null {\n  const intl = (globalThis as { Intl?: { Segmenter?: SegmenterCtor } }).Intl;\n  if (!intl?.Segmenter) return null;\n  try {\n    return new intl.Segmenter(undefined, { granularity: 'grapheme' });\n  } catch {\n    return null;\n  }\n}\n\nconst segmenter = getSegmenter();\n\nexport function segment(input: string): Segment[] {\n  const out: Segment[] = [];\n\n  if (segmenter) {\n    for (const { segment: s, index } of segmenter.segment(input)) {\n      out.push({ source: s, start: index, output: s, sealed: false });\n    }\n    return out;\n  }\n\n  let i = 0;\n  for (const cp of input) {\n    out.push({ source: cp, start: i, output: cp, sealed: false });\n    i += cp.length;\n  }\n  return out;\n}\n\nexport function render(segments: readonly Segment[]): string {\n  let out = '';\n  for (const s of segments) out += s.output;\n  return out;\n}\n","/** The character classes galjp converts. */\nexport type LayerId = 'latin' | 'digit' | 'hiragana' | 'katakana' | 'kanji' | 'symbol';\n\nexport const LAYER_IDS: readonly LayerId[] = [\n  'latin',\n  'digit',\n  'hiragana',\n  'katakana',\n  'kanji',\n  'symbol',\n];\n\n/**\n * How aggressively a kanji may be taken apart.\n *\n * - `horizontal` — left/right splits only. Closest to galjp v4.\n * - `balanced`   — also splits top/bottom when every piece stays readable.\n * - `aggressive` — also unwraps enclosures (国 → 囗玉).\n */\nexport type SplitPolicy = 'horizontal' | 'balanced' | 'aggressive';\n\n/** Which route produced a conversion. Surfaced by {@link Converter.explain}. */\nexport type KanjiRoute = 'override' | 'homoglyph' | 'variant' | 'decompose' | 'style' | 'none';\n\nexport interface GaljpOptions {\n  /** Enable/disable individual layers. Every layer is on by default. */\n  layers?: Partial<Record<LayerId, boolean>>;\n  /** Replace a kanji with its traditional/variant form (学 → 學). Default true. */\n  variant?: boolean;\n  /** How far a kanji may be split apart. Default `'balanced'`. */\n  splitPolicy?: SplitPolicy;\n  /** Style single-component kanji that cannot be split (口 → ﾛ). Default true. */\n  styleStandalone?: boolean;\n  /** Maximum recursion depth when decomposing. Default 2. */\n  maxDepth?: number;\n  /** Seed for candidate selection. Without one, the first candidate always wins. */\n  seed?: number | string;\n  /**\n   * Text to leave untouched. Defaults to URLs and emoji.\n   * Pass `false` to convert everything.\n   */\n  preserve?: RegExp | readonly RegExp[] | ((text: string) => boolean) | false;\n  /** Literal (never regex) replacements applied before any layer. */\n  dictionary?: Readonly<Record<string, string | readonly string[]>>;\n}\n\nexport type ResolvedOptions = Required<Omit<GaljpOptions, 'layers' | 'preserve'>> & {\n  layers: Record<LayerId, boolean>;\n  preserve: readonly RegExp[] | ((text: string) => boolean) | false;\n};\n\nexport interface Explanation {\n  route: KanjiRoute;\n  result: string;\n  /** Intermediate forms, e.g. `['沢', '澤', 'ｼ睪']`. */\n  steps: readonly string[];\n}\n\nexport interface Converter {\n  convert(input: string): string;\n  /** Every rendering this converter could produce for a single character. */\n  candidates(char: string): readonly string[];\n  /** How a single character is converted, and by which route. */\n  explain(char: string): Explanation;\n  readonly options: Readonly<ResolvedOptions>;\n}\n","import { applyDictionary, compileDictionary, type DictionaryRule } from './dictionary';\nimport { convertKanji, kanjiCandidates, type EngineOptions } from './kanji/engine';\nimport { classify, lookupChar } from './layers/char';\nimport { applyPreserve, DEFAULT_PRESERVE, type PreserveOption } from './protect';\nimport { createPicker, firstPicker, type Picker } from './random';\nimport { render, segment } from './segment';\nimport {\n  LAYER_IDS,\n  type Converter,\n  type Explanation,\n  type GaljpOptions,\n  type LayerId,\n  type ResolvedOptions,\n  type SplitPolicy,\n} from './types';\n\nconst SPLIT_POLICIES: readonly SplitPolicy[] = ['horizontal', 'balanced', 'aggressive'];\n\nfunction fail(message: string): never {\n  throw new TypeError(`galjp: ${message}`);\n}\n\nfunction resolvePreserve(value: GaljpOptions['preserve']): PreserveOption {\n  if (value === undefined) return DEFAULT_PRESERVE;\n  if (value === false) return false;\n  if (typeof value === 'function') return value;\n  if (value instanceof RegExp) return [value];\n  if (Array.isArray(value)) {\n    for (const r of value) {\n      if (!(r instanceof RegExp)) fail('options.preserve must contain RegExp values');\n    }\n    return value as readonly RegExp[];\n  }\n  return fail('options.preserve must be a RegExp, RegExp[], function, or false');\n}\n\nexport function resolveOptions(options: GaljpOptions = {}): ResolvedOptions {\n  if (options === null || typeof options !== 'object') fail('options must be an object');\n\n  const layers = {} as Record<LayerId, boolean>;\n  for (const id of LAYER_IDS) layers[id] = true;\n\n  if (options.layers !== undefined) {\n    if (options.layers === null || typeof options.layers !== 'object') {\n      fail('options.layers must be an object');\n    }\n    for (const [key, value] of Object.entries(options.layers)) {\n      if (!LAYER_IDS.includes(key as LayerId)) {\n        fail(`unknown layer \"${key}\" (expected one of ${LAYER_IDS.join(', ')})`);\n      }\n      if (typeof value !== 'boolean') fail(`options.layers.${key} must be a boolean`);\n      layers[key as LayerId] = value;\n    }\n  }\n\n  if (options.variant !== undefined && typeof options.variant !== 'boolean') {\n    fail('options.variant must be a boolean');\n  }\n  if (options.styleStandalone !== undefined && typeof options.styleStandalone !== 'boolean') {\n    fail('options.styleStandalone must be a boolean');\n  }\n  if (options.splitPolicy !== undefined && !SPLIT_POLICIES.includes(options.splitPolicy)) {\n    fail(`options.splitPolicy must be one of ${SPLIT_POLICIES.join(', ')}`);\n  }\n  if (\n    options.maxDepth !== undefined &&\n    (typeof options.maxDepth !== 'number' ||\n      !Number.isInteger(options.maxDepth) ||\n      options.maxDepth < 0)\n  ) {\n    fail('options.maxDepth must be a non-negative integer');\n  }\n  if (\n    options.seed !== undefined &&\n    typeof options.seed !== 'number' &&\n    typeof options.seed !== 'string'\n  ) {\n    fail('options.seed must be a number or string');\n  }\n  if (\n    options.dictionary !== undefined &&\n    (options.dictionary === null || typeof options.dictionary !== 'object')\n  ) {\n    fail('options.dictionary must be an object');\n  }\n\n  return {\n    layers,\n    variant: options.variant ?? true,\n    splitPolicy: options.splitPolicy ?? 'balanced',\n    styleStandalone: options.styleStandalone ?? true,\n    maxDepth: options.maxDepth ?? 2,\n    seed: options.seed as number | string,\n    preserve: resolvePreserve(options.preserve),\n    dictionary: options.dictionary ?? {},\n  };\n}\n\nclass GaljpConverter implements Converter {\n  readonly options: ResolvedOptions;\n\n  readonly #pick: Picker;\n  readonly #rules: DictionaryRule[];\n  readonly #engine: EngineOptions;\n  readonly #cache = new Map<string, string>();\n\n  constructor(options: ResolvedOptions) {\n    this.options = options;\n    this.#pick = createPicker(options.seed);\n    this.#rules = compileDictionary(options.dictionary);\n    this.#engine = {\n      variant: options.variant,\n      splitPolicy: options.splitPolicy,\n      styleStandalone: options.styleStandalone,\n      maxDepth: options.maxDepth,\n      pick: this.#pick,\n    };\n  }\n\n  convert(input: string): string {\n    if (typeof input !== 'string') fail('input must be a string');\n    if (input.length === 0) return '';\n\n    const segments = segment(input);\n    applyPreserve(input, segments, this.options.preserve);\n    applyDictionary(segments, this.#rules, this.#pick);\n\n    for (const seg of segments) {\n      if (seg.sealed) continue;\n\n      const layer = classify(seg.source);\n      if (layer === null || !this.options.layers[layer]) {\n        seg.sealed = true;\n        continue;\n      }\n\n      seg.output =\n        layer === 'kanji' ? this.#kanji(seg.source) : (lookupChar(layer, seg.source) ?? seg.source);\n      seg.sealed = true;\n    }\n\n    return render(segments);\n  }\n\n  candidates(char: string): readonly string[] {\n    if (typeof char !== 'string') fail('char must be a string');\n    const layer = classify(char);\n    if (layer === null || !this.options.layers[layer]) return [];\n    if (layer === 'kanji') return kanjiCandidates(char, this.#engine);\n    const value = lookupChar(layer, char);\n    return value === undefined ? [] : [value];\n  }\n\n  explain(char: string): Explanation {\n    if (typeof char !== 'string') fail('char must be a string');\n    const layer = classify(char);\n    if (layer === null || !this.options.layers[layer]) {\n      return { route: 'none', result: char, steps: [char] };\n    }\n    if (layer === 'kanji') {\n      const r = convertKanji(char, this.#engine);\n      return { route: r.route, result: r.result, steps: r.steps };\n    }\n    const value = lookupChar(layer, char);\n    return value === undefined\n      ? { route: 'none', result: char, steps: [char] }\n      : { route: 'style', result: value, steps: [char, value] };\n  }\n\n  /** Kanji conversion is the expensive path, so memoise per converter. */\n  #kanji(char: string): string {\n    const hit = this.#cache.get(char);\n    if (hit !== undefined) return hit;\n    const value = convertKanji(char, this.#engine).result;\n    this.#cache.set(char, value);\n    return value;\n  }\n}\n\nexport function createConverter(options?: GaljpOptions): Converter {\n  return new GaljpConverter(resolveOptions(options));\n}\n\nconst defaultConverter = createConverter();\n\nexport function galjp(input: string, options?: GaljpOptions): string {\n  if (options === undefined) return defaultConverter.convert(input);\n  return createConverter(options).convert(input);\n}\n\nexport { firstPicker };\n","/**\n * Build metadata.\n *\n * GENERATED FILE — do not edit. Rebuild with: npm run data:build\n *\n * See structure.ts / legible.ts for data attribution.\n */\nexport const DATA_META = {\n  structureEntries: 5129,\n  legibleEntries: 1177,\n  variantEntries: 81,\n  hash: \"248ce2764477ecec\",\n} as const;\n","import { Command, InvalidArgumentError, Option } from 'commander';\nimport { LAYER_IDS, type GaljpOptions, type LayerId, type SplitPolicy } from '../types';\nimport { DATA_META } from '../generated/meta';\n\nexport const VERSION = '5.0.0';\n\nconst SPLIT_POLICIES: readonly SplitPolicy[] = ['horizontal', 'balanced', 'aggressive'];\n\nfunction parseMaxDepth(value: string): number {\n  const n = Number(value);\n  if (!Number.isInteger(n) || n < 0) {\n    throw new InvalidArgumentError('must be a non-negative integer.');\n  }\n  return n;\n}\n\nfunction parseLayerList(value: string): LayerId[] {\n  const ids: LayerId[] = [];\n  for (const name of value.split(',')) {\n    const id = name.trim();\n    if (!LAYER_IDS.includes(id as LayerId)) {\n      throw new InvalidArgumentError(`unknown layer \"${id}\". Expected: ${LAYER_IDS.join(', ')}.`);\n    }\n    ids.push(id as LayerId);\n  }\n  return ids;\n}\n\n/** Shape commander produces from the flags below. */\nexport interface CliOptions {\n  splitPolicy: SplitPolicy;\n  seed?: string;\n  maxDepth?: number;\n  only?: LayerId[];\n  explain?: boolean;\n  variant: boolean;\n  styleStandalone: boolean;\n  preserve: boolean;\n  latin: boolean;\n  digit: boolean;\n  hiragana: boolean;\n  katakana: boolean;\n  kanji: boolean;\n  symbol: boolean;\n}\n\n/**\n * Build the command definition.\n *\n * Kept separate from execution so the tests can drive it without touching the\n * real process, and so `--help` output can be rendered anywhere.\n */\nexport function buildProgram(): Command {\n  const program = new Command();\n\n  program\n    .name('galjp')\n    // Commander wraps help text to `process.stdout.columns`, which makes the\n    // output depend on the terminal it happens to run in (a wide PowerShell\n    // window wraps differently from CI's non-TTY 80). Pin it so `--help` is\n    // identical everywhere, including the copy embedded in the README.\n    .configureHelp({ helpWidth: 80 })\n    .description(\n      'ギャル文字 (galmoji) converter.\\n\\nReads stdin when given no text, so it composes with pipes.',\n    )\n    .version(VERSION, '-v, --version', 'output the version number')\n    .helpOption('-h, --help', 'display help for command')\n    .argument('[text...]', 'text to convert')\n    .addOption(\n      new Option('-p, --split-policy <policy>', 'how far a kanji may be taken apart')\n        .choices(SPLIT_POLICIES)\n        .default('balanced'),\n    )\n    .option('-s, --seed <seed>', 'seed for candidate selection (deterministic without one)')\n    .option('-d, --max-depth <n>', 'kanji decomposition recursion limit', parseMaxDepth)\n    .option(\n      '--only <layers>',\n      `convert only these layers (${LAYER_IDS.join(', ')})`,\n      parseLayerList,\n    )\n    .option('-e, --explain', 'show the route and steps for each character')\n    .option('--no-variant', 'do not substitute traditional forms (学 → 學)')\n    .option('--no-style-standalone', 'do not decorate single-component kanji (口 → ﾛ)')\n    .option('--no-preserve', 'also convert URLs and emoji')\n    .option('--no-latin', 'skip the latin layer')\n    .option('--no-digit', 'skip the digit layer')\n    .option('--no-hiragana', 'skip the hiragana layer')\n    .option('--no-katakana', 'skip the katakana layer')\n    .option('--no-kanji', 'skip the kanji layer')\n    .option('--no-symbol', 'skip the symbol layer')\n    .addHelpText(\n      'after',\n      `\nExamples:\n  $ galjp 信頼してる                       ｲ言束頁Ｕτゑ\n  $ galjp 学校                             學木交\n  $ galjp -p aggressive 男女               田ｶ女\n  $ echo 信頼してる | galjp\n  $ galjp --explain 湾                     湾  decompose  湾 → 灣 → ｼ彎\n\nData: ${DATA_META.structureEntries} kanji structures, ${DATA_META.variantEntries} traditional-form pairs.`,\n    );\n\n  return program;\n}\n\n/** Translate commander's flat option bag into library options. */\nexport function toGaljpOptions(cli: CliOptions): GaljpOptions {\n  const options: GaljpOptions = { splitPolicy: cli.splitPolicy };\n\n  if (cli.seed !== undefined) options.seed = cli.seed;\n  if (cli.maxDepth !== undefined) options.maxDepth = cli.maxDepth;\n  if (!cli.variant) options.variant = false;\n  if (!cli.styleStandalone) options.styleStandalone = false;\n  if (!cli.preserve) options.preserve = false;\n\n  const layers: Partial<Record<LayerId, boolean>> = {};\n  if (cli.only) {\n    for (const id of LAYER_IDS) layers[id] = cli.only.includes(id);\n  }\n  // Applied after --only so `--only kanji --no-kanji` resolves the obvious way.\n  for (const id of LAYER_IDS) {\n    if (cli[id] === false) layers[id] = false;\n  }\n  if (Object.keys(layers).length > 0) options.layers = layers;\n\n  return options;\n}\n","import { CommanderError } from 'commander';\nimport { createConverter } from '../converter';\nimport type { GaljpOptions } from '../types';\nimport { buildProgram, toGaljpOptions, VERSION, type CliOptions } from './program';\n\nexport { VERSION };\n\n/** Injected so tests can drive the CLI without touching the real process. */\nexport interface CliIo {\n  stdout(text: string): void;\n  stderr(text: string): void;\n  readStdin(): Promise<string>;\n  /** True when there is no piped input, i.e. nothing to read. */\n  isInteractive: boolean;\n}\n\nfunction explainText(input: string, options: GaljpOptions): string {\n  const converter = createConverter(options);\n  const rows: string[] = [];\n  for (const char of input) {\n    if (/\\s/u.test(char)) continue;\n    const { route, steps } = converter.explain(char);\n    rows.push(`${char}  ${route.padEnd(10)}  ${steps.join(' → ')}`);\n  }\n  return rows.join('\\n');\n}\n\nexport async function run(argv: readonly string[], io: CliIo): Promise<number> {\n  const program = buildProgram();\n\n  // Commander would otherwise write straight to the real streams and call\n  // process.exit, which makes it untestable and steals our exit codes.\n  program.exitOverride().configureOutput({\n    writeOut: (s) => io.stdout(s),\n    writeErr: (s) => io.stderr(s),\n  });\n\n  let text: string[];\n  let cli: CliOptions;\n  try {\n    program.parse(argv, { from: 'user' });\n    text = program.processedArgs[0] as string[];\n    cli = program.opts<CliOptions>();\n  } catch (error) {\n    if (!(error instanceof CommanderError)) throw error;\n    // --help and --version are reported as errors with exit code 0.\n    return error.exitCode;\n  }\n\n  let input: string;\n  if (text.length > 0) {\n    input = text.join(' ');\n  } else if (io.isInteractive) {\n    // Nothing piped and nothing to convert: show help instead of hanging.\n    // outputHelp rather than helpInformation, so this matches `--help` exactly\n    // — helpInformation omits the text added with addHelpText.\n    program.outputHelp();\n    return 0;\n  } else {\n    input = await io.readStdin();\n  }\n\n  try {\n    const options = toGaljpOptions(cli);\n\n    if (cli.explain) {\n      const report = explainText(input, options);\n      if (report.length > 0) io.stdout(`${report}\\n`);\n      return 0;\n    }\n\n    const converter = createConverter(options);\n    // Convert line by line so `preserve` patterns cannot span a newline, and\n    // keep the input's trailing-newline shape.\n    const trailing = input.endsWith('\\n') ? '' : '\\n';\n    const output = input\n      .split('\\n')\n      .map((line) => converter.convert(line))\n      .join('\\n');\n    io.stdout(output + trailing);\n    return 0;\n  } catch (error) {\n    io.stderr(`galjp: ${(error as Error).message}\\n`);\n    return 1;\n  }\n}\n","#!/usr/bin/env node\n/**\n * Executable entry point.\n *\n * The only file in the package that touches Node APIs — everything under\n * src/cli/ is pure so it can be tested directly, and the library itself stays\n * on Web standards so it runs in browsers and Workers.\n */\nimport { run, type CliIo } from './cli/run';\n\nconst io: CliIo = {\n  stdout: (text) => void process.stdout.write(text),\n  stderr: (text) => void process.stderr.write(text),\n  isInteractive: process.stdin.isTTY === true,\n  readStdin: async () => {\n    const chunks: Buffer[] = [];\n    for await (const chunk of process.stdin) chunks.push(chunk as Buffer);\n    return Buffer.concat(chunks).toString('utf8');\n  },\n};\n\nrun(process.argv.slice(2), io)\n  .then((code) => {\n    process.exitCode = code;\n  })\n  .catch((error: unknown) => {\n    process.stderr.write(`galjp: ${String(error)}\\n`);\n    process.exitCode = 1;\n  });\n"]}