{"version":3,"file":"jaconv.mjs","sources":["../src/main/ts/jaconv/hebon.ts","../src/main/ts/jaconv/katahira.ts","../src/main/ts/jaconv/zenhan.ts","../src/main/ts/jaconv.ts"],"sourcesContent":["//---------------------------------------------------------------------\n// ヘボン式ローマ字変換\n//\n// Copyright (c) 2011 Kazuhiko Arase\n//\n// URL: https://github.com/kazuhikoarase/jaconv\n//\n// Licensed under the MIT license:\n//  http://www.opensource.org/licenses/mit-license.php\n//\n//---------------------------------------------------------------------\n\n// 'ん' は、別途ハンドリングするのでデータに含めない\nconst hebonMap : { [ hiragana : string ] : string } = {\n  'あ':'A','い':'I','う':'U','え':'E','お':'O',\n  'か':'KA','き':'KI','く':'KU','け':'KE','こ':'KO',\n  'さ':'SA','し':'SHI','す':'SU','せ':'SE','そ':'SO',\n  'た':'TA','ち':'CHI','つ':'TSU','て':'TE','と':'TO',\n  'な':'NA','に':'NI','ぬ':'NU','ね':'NE','の':'NO',\n  'は':'HA','ひ':'HI','ふ':'FU','へ':'HE','ほ':'HO',\n  'ま':'MA','み':'MI','む':'MU','め':'ME','も':'MO',\n  'や':'YA','ゆ':'YU','よ':'YO',\n  'ら':'RA','り':'RI','る':'RU','れ':'RE','ろ':'RO',\n  'わ':'WA','ゐ':'I','ゑ':'E','を':'O',\n  'ぁ':'A','ぃ':'I','ぅ':'U','ぇ':'E','ぉ':'O',\n  'が':'GA','ぎ':'GI','ぐ':'GU','げ':'GE','ご':'GO',\n  'ざ':'ZA','じ':'JI','ず':'ZU','ぜ':'ZE','ぞ':'ZO',\n  'だ':'DA','ぢ':'JI','づ':'ZU','で':'DE','ど':'DO',\n  'ば':'BA','び':'BI','ぶ':'BU','べ':'BE','ぼ':'BO',\n  'ぱ':'PA','ぴ':'PI','ぷ':'PU','ぺ':'PE','ぽ':'PO',\n  'きゃ':'KYA','きゅ':'KYU','きょ':'KYO',\n  'しゃ':'SHA','しゅ':'SHU','しょ':'SHO',\n  'ちゃ':'CHA','ちゅ':'CHU','ちょ':'CHO','ちぇ':'CHE',\n  'にゃ':'NYA','にゅ':'NYU','にょ':'NYO',\n  'ひゃ':'HYA','ひゅ':'HYU','ひょ':'HYO',\n  'みゃ':'MYA','みゅ':'MYU','みょ':'MYO',\n  'りゃ':'RYA','りゅ':'RYU','りょ':'RYO',\n  'ぎゃ':'GYA','ぎゅ':'GYU','ぎょ':'GYO',\n  'じゃ':'JA','じゅ':'JU','じょ':'JO',\n  'びゃ':'BYA','びゅ':'BYU','びょ':'BYO',\n  'ぴゃ':'PYA','ぴゅ':'PYU','ぴょ':'PYO'\n};\n\nconst aaSet : { [ aa : string ] : boolean } = {\n  'AA': true, 'EE': true, 'II': false, // I は連続しても省略しない\n  'OO': true, 'OU': true, 'UU': true\n};\n\nconst getHebon = function(s : string, index : number) {\n  let h : any = null;\n  let c : any = null;\n  if (index + 1 < s.length) {\n    c = s.substring(index, index + 2);\n    h = hebonMap[c];\n  }\n  if (!h && index < s.length) {\n    c = s.substring(index, index + 1);\n    h = hebonMap[c];\n  }\n  return {c: c, h: h || null};\n};\n\n/**\n * 全角ひらがなをヘボン式ローマ字で半角英文字に変換します。\n */\nexport function toHebon(s : string) {\n\n  let hebon = '';\n  let lastHebon = '';\n  let lastChar :any = '';\n  let i = 0;\n\n  while (i < s.length) {\n\n    const hr = getHebon(s, i);\n\n    if (hr.c == 'っ') {\n\n      // 'っち'\n      const nextHr = getHebon(s, i + 1);\n      if (nextHr.h != null) {\n        if (nextHr.h.indexOf('CH') == 0) {\n          hr.h = 'T';\n        } else {\n          hr.h = nextHr.h.substring(0, 1);\n        }\n      }\n\n    } else if (hr.c == 'ん') {\n\n      // B,M,P の前の 'ん' は 'M' とする。\n      const nextHr = getHebon(s, i + 1);\n      if (nextHr.h != null && 'BMP'.indexOf(nextHr.h.charAt(0) ) != -1) {\n        hr.h = 'M';\n      } else {\n        hr.h = 'N';\n      }\n\n    } else if (hr.c == 'ー') {\n\n      // 長音は無視\n      hr.h = '';\n    }\n\n    if (hr.h != null) {\n\n      // 変換できる文字の場合\n      if (lastHebon != null) {\n\n        // 連続する母音の除去\n        let htest = lastHebon + hr.h;\n        if (htest.length > 2) {\n          htest = htest.substring(htest.length - 2);\n        }\n        if (aaSet[htest]) {\n          hr.h = '';\n        }\n      }\n\n      hebon += hr.h;\n\n    } else {\n\n      // 変換できない文字の場合\n      hebon += hr.c;\n    }\n\n    lastHebon = hr.h;\n    lastChar = hr.c;\n    i += hr.c.length;\n  }\n\n  return hebon;\n}\n","//---------------------------------------------------------------------\n// カタカナ・ひらがな変換\n//\n// 2025/6/23 Kazuhiko Arase\n//\n\nconst minHira = 'ぁ'.charCodeAt(0);\nconst maxHira = 'ゖ'.charCodeAt(0);\nconst minKata= 'ァ'.charCodeAt(0);\nconst maxKata = 'ヶ'.charCodeAt(0);\n\n/**\n * 全角ひらがなを全角カタカナに変換します。\n */\nexport function toKatakana(s : string) {\n  let res = '';\n  for (let i = 0; i < s.length; i += 1) {\n    const cd = s.charCodeAt(i);\n    res += (minHira <= cd && cd <= maxHira)?\n      String.fromCharCode(cd - minHira + minKata) : s.charAt(i);\n  }\n  return res;\n}\n\n/**\n * 全角カタカナを全角ひらがなに変換します。\n */\nexport function toHiragana(s : string) {\n  let res = '';\n  for (let i = 0; i < s.length; i += 1) {\n    const cd = s.charCodeAt(i);\n    res += (minKata <= cd && cd <= maxKata)?\n      String.fromCharCode(cd - minKata + minHira) : s.charAt(i);\n  }\n  return res;\n}\n","//---------------------------------------------------------------------\n// 全角・半角変換\n//\n// 2005/2/26 Kazuhiko Arase\n//\n\nconst asciiData = [\n\n  '\\u0020', '\\u3000',\n  '!', '！',\n\n  // 2重引用符\n  //'\\\"', '＂',\n  '\\\"', '”', // 一対多の変換の逆変換は先優先\n  '\\\"', '“',\n\n  '#', '＃',\n  '$', '＄',\n  '%', '％',\n  '&', '＆',\n  '\\'', '’',\n  '(', '（',\n  ')', '）',\n  '*', '＊',\n  '+', '＋',\n  ',', '，',\n  '-', '－',\n  '.', '．',\n  '/', '／',\n  '0', '０',\n  '1', '１',\n  '2', '２',\n  '3', '３',\n  '4', '４',\n  '5', '５',\n  '6', '６',\n  '7', '７',\n  '8', '８',\n  '9', '９',\n  ':', '：',\n  ';', '；',\n  '<', '＜',\n  '=', '＝',\n  '>', '＞',\n  '?', '？',\n  '@', '＠',\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  // 円記号\n  //'\\\\', '＼',\n  '\\\\', '￥',\n\n  ']', '］',\n  '^', '＾',\n  '_', '＿',\n  '`', '‘',\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  '}', '｝',\n  '~', '～'\n];\n\nconst kanaData = [\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  'ノ', 'ﾉ',\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\ndeclare type StringMap = { [k : string] : string };\n\nconst createConversionMap = function(data : string[]) {\n\n  const map1 : StringMap = {};\n  const map2 : StringMap = {};\n\n  const add = function(s1 : string, s2 : string) {\n    if (!map1[s1]) {\n      map1[s1] = s2;\n    }\n    if (!map2[s2]) {\n      map2[s2] = s1;\n    }\n  };\n\n  const convert = function(s :  string, reverse : boolean) {\n\n    const map = !reverse? map1 : map2;\n\n    let converted = '';\n\n    for (let i = 0; i < s.length; i += 1) {\n\n      if (i + 1 < s.length) {\n        const c = map[s.substring(i, i + 2)];\n        if (c) {\n          converted += c;\n          i += 1;\n          continue;\n        }\n      }\n\n      const c = map[s.substring(i, i + 1)];\n      if (c) {\n        converted += c;\n        continue;\n      }\n\n      // 変換テーブルに該当無し\n      converted += s.substring(i, i + 1);\n    }\n\n    return converted;\n  }\n\n  if (data.length % 2 != 0) {\n    throw 'bad data length:' + data.length;\n  }\n  const len = data.length / 2;\n  for (let i = 0; i < len; i += 1) {\n    add(data[i * 2], data[i * 2 + 1]);\n  }\n\n  return { convert : convert };\n};\n\n//---------------------------------------------------------\n// 全角-半角 マッピング (ASCII)\n//\n\nconst asciiMap = createConversionMap(asciiData);\n\n//---------------------------------------------------------\n// 全角-半角 マッピング (カタカナ)\n//\n\nconst kanaMap = createConversionMap(kanaData);\n\n// exports\n\n/**\n * 全角英数記号を半角に変換します。\n */\nexport function toHanAscii(s : string) {\n  return asciiMap.convert(s, true);\n}\n\n/**\n * 半角英数記号を全角に変換します。\n */\nexport function toZenAscii(s : string) {\n  return asciiMap.convert(s, false);\n}\n\n/**\n * 全角カタカナを半角に変換します。\n */\nexport function toHanKana(s : string) {\n  return kanaMap.convert(s, false);\n}\n\n/**\n * 半角カタカナを全角に変換します。\n */\nexport function toZenKana(s : string) {\n  return kanaMap.convert(s, true);\n}\n\n/**\n * 全角英数記号、カタカナを半角に変換します。\n * (toHanAscii, toHanKana の組み合わせ)\n */\nexport function toHan(s : string) {\n  return toHanAscii(toHanKana(s) );\n}\n\n/**\n * 半角英数記号、カタカナを全角に変換します。\n * (toZenAscii, toZenKana の組み合わせ)\n */\nexport function toZen(s : string) {\n  return toZenAscii(toZenKana(s) );\n}\n\n/**\n * 全角英数記号を半角に、半角カタカナを全角に変換します。\n * (toHanAscii, toZenKana の組み合わせ)\n */\nexport function normalize(s : string) {\n  return toHanAscii(toZenKana(s) );\n}\n","//---------------------------------------------------------------------\n// 日本語文字変換ライブラリ (javascript)\n//\n// Copyright (c) 2025 Kazuhiko Arase\n//\n// URL: https://github.com/kazuhikoarase/jaconv\n//\n// Licensed under the MIT license:\n//  http://www.opensource.org/licenses/mit-license.php\n//\n//---------------------------------------------------------------------\n\n\nimport * as hebon from './jaconv/hebon';\nimport * as katahira from './jaconv/katahira';\nimport * as zenhan from './jaconv/zenhan';\n\nexport default {\n\n  toHebon: hebon.toHebon,\n\n  toHiragana: katahira.toHiragana,\n  toKatakana: katahira.toKatakana,\n\n  normalize: zenhan.normalize,\n  toHan: zenhan.toHan,\n  toHanAscii: zenhan.toHanAscii,\n  toHanKana: zenhan.toHanKana,\n  toZen: zenhan.toZen,\n  toZenAscii: zenhan.toZenAscii,\n  toZenKana: zenhan.toZenKana,\n};\n"],"names":["hebonMap","aaSet","getHebon","s","index","h","c","toHebon","hebon","lastHebon","i","hr","nextHr","htest","minHira","maxHira","minKata","maxKata","toKatakana","res","cd","toHiragana","asciiData","kanaData","createConversionMap","data","map1","map2","add","s1","s2","convert","reverse","map","converted","len","asciiMap","kanaMap","toHanAscii","toZenAscii","toHanKana","toZenKana","toHan","toZen","normalize","jaconv","hebon.toHebon","katahira.toHiragana","katahira.toKatakana","zenhan.normalize","zenhan.toHan","zenhan.toHanAscii","zenhan.toHanKana","zenhan.toZen","zenhan.toZenAscii","zenhan.toZenKana"],"mappings":"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;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAM;AAAA,EACN;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA;AAAA;AAAA,EAIL;AAAA,EAAM;AAAA,EAEN;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AACP,GAEMC,IAAW;AAAA,EACf;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EAEL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AAAA,EACL;AAAA,EAAK;AACP,GAIMC,IAAsB,SAASC,GAAiB;AAEpD,QAAMC,IAAmB,CAAA,GACnBC,IAAmB,CAAA,GAEnBC,IAAM,SAASC,GAAaC,GAAa;AAC7C,IAAKJ,EAAKG,CAAE,MACVH,EAAKG,CAAE,IAAIC,IAERH,EAAKG,CAAE,MACVH,EAAKG,CAAE,IAAID;AAAA,EACb,GAGIE,IAAU,SAAS5B,GAAa6B,GAAmB;AAEvD,UAAMC,IAAOD,IAAgBL,IAAPD;AAEtB,QAAIQ,IAAY;AAEhB,aAAS,IAAI,GAAG,IAAI/B,EAAE,QAAQ,KAAK,GAAG;AAEpC,UAAI,IAAI,IAAIA,EAAE,QAAQ;AACpB,cAAMG,IAAI2B,EAAI9B,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;AACnC,YAAIG,GAAG;AACL,UAAA4B,KAAa5B,GACb,KAAK;AACL;AAAA,QAAA;AAAA,MACF;AAGF,YAAMA,IAAI2B,EAAI9B,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;AACnC,UAAIG,GAAG;AACL,QAAA4B,KAAa5B;AACb;AAAA,MAAA;AAIF,MAAA4B,KAAa/B,EAAE,UAAU,GAAG,IAAI,CAAC;AAAA,IAAA;AAGnC,WAAO+B;AAAA,EAAA;AAGT,MAAIT,EAAK,SAAS,KAAK;AACrB,UAAM,qBAAqBA,EAAK;AAElC,QAAMU,IAAMV,EAAK,SAAS;AAC1B,WAASf,IAAI,GAAGA,IAAIyB,GAAKzB,KAAK;AAC5B,IAAAkB,EAAIH,EAAKf,IAAI,CAAC,GAAGe,EAAKf,IAAI,IAAI,CAAC,CAAC;AAGlC,SAAO,EAAE,SAAAqB,EAAA;AACX,GAMMK,IAAWZ,EAAoBF,CAAS,GAMxCe,IAAUb,EAAoBD,CAAQ;AAOrC,SAASe,EAAWnC,GAAY;AACrC,SAAOiC,EAAS,QAAQjC,GAAG,EAAI;AACjC;AAKO,SAASoC,EAAWpC,GAAY;AACrC,SAAOiC,EAAS,QAAQjC,GAAG,EAAK;AAClC;AAKO,SAASqC,EAAUrC,GAAY;AACpC,SAAOkC,EAAQ,QAAQlC,GAAG,EAAK;AACjC;AAKO,SAASsC,EAAUtC,GAAY;AACpC,SAAOkC,EAAQ,QAAQlC,GAAG,EAAI;AAChC;AAMO,SAASuC,EAAMvC,GAAY;AAChC,SAAOmC,EAAWE,EAAUrC,CAAC,CAAE;AACjC;AAMO,SAASwC,EAAMxC,GAAY;AAChC,SAAOoC,EAAWE,EAAUtC,CAAC,CAAE;AACjC;AAMO,SAASyC,EAAUzC,GAAY;AACpC,SAAOmC,EAAWG,EAAUtC,CAAC,CAAE;AACjC;ACjVA,MAAA0C,IAAe;AAAA,EAEb,SAASC;AAAAA,EAET,YAAYC;AAAAA,EACZ,YAAYC;AAAAA,EAEZ,WAAWC;AAAAA,EACX,OAAOC;AAAAA,EACP,YAAYC;AAAAA,EACZ,WAAWC;AAAAA,EACX,OAAOC;AAAAA,EACP,YAAYC;AAAAA,EACZ,WAAWC;AACb;"}