koichi12 commited on
Commit
c1ea3d4
·
verified ·
1 Parent(s): 6ed5a9a

Add files using upload-large-folder tool

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetgroupprober.py +106 -0
  2. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetprober.py +147 -0
  3. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachinedict.py +19 -0
  4. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/cp949prober.py +49 -0
  5. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/enums.py +85 -0
  6. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/escprober.py +102 -0
  7. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/eucjpprober.py +102 -0
  8. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/euckrprober.py +47 -0
  9. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwfreq.py +388 -0
  10. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312freq.py +284 -0
  11. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312prober.py +47 -0
  12. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/hebrewprober.py +316 -0
  13. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/jisfreq.py +325 -0
  14. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/jpcntx.py +238 -0
  15. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/langgreekmodel.py +0 -0
  16. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/langrussianmodel.py +0 -0
  17. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/langthaimodel.py +0 -0
  18. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/langturkishmodel.py +4380 -0
  19. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/latin1prober.py +147 -0
  20. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/macromanprober.py +162 -0
  21. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcharsetprober.py +95 -0
  22. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcssm.py +661 -0
  23. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/py.typed +0 -0
  24. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/resultdict.py +16 -0
  25. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcharsetprober.py +162 -0
  26. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/sjisprober.py +105 -0
  27. .venv/lib/python3.11/site-packages/pip/_vendor/chardet/version.py +9 -0
  28. .venv/lib/python3.11/site-packages/pip/_vendor/tomli/__init__.py +11 -0
  29. .venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc +0 -0
  30. .venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc +0 -0
  31. .venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc +0 -0
  32. .venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc +0 -0
  33. .venv/lib/python3.11/site-packages/pip/_vendor/tomli/_parser.py +691 -0
  34. .venv/lib/python3.11/site-packages/pip/_vendor/tomli/_re.py +107 -0
  35. .venv/lib/python3.11/site-packages/pip/_vendor/tomli/_types.py +10 -0
  36. .venv/lib/python3.11/site-packages/pip/_vendor/tomli/py.typed +1 -0
  37. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc +0 -0
  38. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc +0 -0
  39. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc +0 -0
  40. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc +0 -0
  41. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc +0 -0
  42. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc +0 -0
  43. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc +0 -0
  44. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc +0 -0
  45. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc +0 -0
  46. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc +0 -0
  47. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc +0 -0
  48. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc +0 -0
  49. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc +0 -0
  50. .venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetgroupprober.py ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is Mozilla Communicator client code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ from typing import List, Optional, Union
29
+
30
+ from .charsetprober import CharSetProber
31
+ from .enums import LanguageFilter, ProbingState
32
+
33
+
34
+ class CharSetGroupProber(CharSetProber):
35
+ def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None:
36
+ super().__init__(lang_filter=lang_filter)
37
+ self._active_num = 0
38
+ self.probers: List[CharSetProber] = []
39
+ self._best_guess_prober: Optional[CharSetProber] = None
40
+
41
+ def reset(self) -> None:
42
+ super().reset()
43
+ self._active_num = 0
44
+ for prober in self.probers:
45
+ prober.reset()
46
+ prober.active = True
47
+ self._active_num += 1
48
+ self._best_guess_prober = None
49
+
50
+ @property
51
+ def charset_name(self) -> Optional[str]:
52
+ if not self._best_guess_prober:
53
+ self.get_confidence()
54
+ if not self._best_guess_prober:
55
+ return None
56
+ return self._best_guess_prober.charset_name
57
+
58
+ @property
59
+ def language(self) -> Optional[str]:
60
+ if not self._best_guess_prober:
61
+ self.get_confidence()
62
+ if not self._best_guess_prober:
63
+ return None
64
+ return self._best_guess_prober.language
65
+
66
+ def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState:
67
+ for prober in self.probers:
68
+ if not prober.active:
69
+ continue
70
+ state = prober.feed(byte_str)
71
+ if not state:
72
+ continue
73
+ if state == ProbingState.FOUND_IT:
74
+ self._best_guess_prober = prober
75
+ self._state = ProbingState.FOUND_IT
76
+ return self.state
77
+ if state == ProbingState.NOT_ME:
78
+ prober.active = False
79
+ self._active_num -= 1
80
+ if self._active_num <= 0:
81
+ self._state = ProbingState.NOT_ME
82
+ return self.state
83
+ return self.state
84
+
85
+ def get_confidence(self) -> float:
86
+ state = self.state
87
+ if state == ProbingState.FOUND_IT:
88
+ return 0.99
89
+ if state == ProbingState.NOT_ME:
90
+ return 0.01
91
+ best_conf = 0.0
92
+ self._best_guess_prober = None
93
+ for prober in self.probers:
94
+ if not prober.active:
95
+ self.logger.debug("%s not active", prober.charset_name)
96
+ continue
97
+ conf = prober.get_confidence()
98
+ self.logger.debug(
99
+ "%s %s confidence = %s", prober.charset_name, prober.language, conf
100
+ )
101
+ if best_conf < conf:
102
+ best_conf = conf
103
+ self._best_guess_prober = prober
104
+ if not self._best_guess_prober:
105
+ return 0.0
106
+ return best_conf
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/charsetprober.py ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is Mozilla Universal charset detector code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 2001
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ # Shy Shalom - original C code
12
+ #
13
+ # This library is free software; you can redistribute it and/or
14
+ # modify it under the terms of the GNU Lesser General Public
15
+ # License as published by the Free Software Foundation; either
16
+ # version 2.1 of the License, or (at your option) any later version.
17
+ #
18
+ # This library is distributed in the hope that it will be useful,
19
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ # Lesser General Public License for more details.
22
+ #
23
+ # You should have received a copy of the GNU Lesser General Public
24
+ # License along with this library; if not, write to the Free Software
25
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26
+ # 02110-1301 USA
27
+ ######################### END LICENSE BLOCK #########################
28
+
29
+ import logging
30
+ import re
31
+ from typing import Optional, Union
32
+
33
+ from .enums import LanguageFilter, ProbingState
34
+
35
+ INTERNATIONAL_WORDS_PATTERN = re.compile(
36
+ b"[a-zA-Z]*[\x80-\xFF]+[a-zA-Z]*[^a-zA-Z\x80-\xFF]?"
37
+ )
38
+
39
+
40
+ class CharSetProber:
41
+
42
+ SHORTCUT_THRESHOLD = 0.95
43
+
44
+ def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None:
45
+ self._state = ProbingState.DETECTING
46
+ self.active = True
47
+ self.lang_filter = lang_filter
48
+ self.logger = logging.getLogger(__name__)
49
+
50
+ def reset(self) -> None:
51
+ self._state = ProbingState.DETECTING
52
+
53
+ @property
54
+ def charset_name(self) -> Optional[str]:
55
+ return None
56
+
57
+ @property
58
+ def language(self) -> Optional[str]:
59
+ raise NotImplementedError
60
+
61
+ def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState:
62
+ raise NotImplementedError
63
+
64
+ @property
65
+ def state(self) -> ProbingState:
66
+ return self._state
67
+
68
+ def get_confidence(self) -> float:
69
+ return 0.0
70
+
71
+ @staticmethod
72
+ def filter_high_byte_only(buf: Union[bytes, bytearray]) -> bytes:
73
+ buf = re.sub(b"([\x00-\x7F])+", b" ", buf)
74
+ return buf
75
+
76
+ @staticmethod
77
+ def filter_international_words(buf: Union[bytes, bytearray]) -> bytearray:
78
+ """
79
+ We define three types of bytes:
80
+ alphabet: english alphabets [a-zA-Z]
81
+ international: international characters [\x80-\xFF]
82
+ marker: everything else [^a-zA-Z\x80-\xFF]
83
+ The input buffer can be thought to contain a series of words delimited
84
+ by markers. This function works to filter all words that contain at
85
+ least one international character. All contiguous sequences of markers
86
+ are replaced by a single space ascii character.
87
+ This filter applies to all scripts which do not use English characters.
88
+ """
89
+ filtered = bytearray()
90
+
91
+ # This regex expression filters out only words that have at-least one
92
+ # international character. The word may include one marker character at
93
+ # the end.
94
+ words = INTERNATIONAL_WORDS_PATTERN.findall(buf)
95
+
96
+ for word in words:
97
+ filtered.extend(word[:-1])
98
+
99
+ # If the last character in the word is a marker, replace it with a
100
+ # space as markers shouldn't affect our analysis (they are used
101
+ # similarly across all languages and may thus have similar
102
+ # frequencies).
103
+ last_char = word[-1:]
104
+ if not last_char.isalpha() and last_char < b"\x80":
105
+ last_char = b" "
106
+ filtered.extend(last_char)
107
+
108
+ return filtered
109
+
110
+ @staticmethod
111
+ def remove_xml_tags(buf: Union[bytes, bytearray]) -> bytes:
112
+ """
113
+ Returns a copy of ``buf`` that retains only the sequences of English
114
+ alphabet and high byte characters that are not between <> characters.
115
+ This filter can be applied to all scripts which contain both English
116
+ characters and extended ASCII characters, but is currently only used by
117
+ ``Latin1Prober``.
118
+ """
119
+ filtered = bytearray()
120
+ in_tag = False
121
+ prev = 0
122
+ buf = memoryview(buf).cast("c")
123
+
124
+ for curr, buf_char in enumerate(buf):
125
+ # Check if we're coming out of or entering an XML tag
126
+
127
+ # https://github.com/python/typeshed/issues/8182
128
+ if buf_char == b">": # type: ignore[comparison-overlap]
129
+ prev = curr + 1
130
+ in_tag = False
131
+ # https://github.com/python/typeshed/issues/8182
132
+ elif buf_char == b"<": # type: ignore[comparison-overlap]
133
+ if curr > prev and not in_tag:
134
+ # Keep everything after last non-extended-ASCII,
135
+ # non-alphabetic character
136
+ filtered.extend(buf[prev:curr])
137
+ # Output a space to delimit stretch we kept
138
+ filtered.extend(b" ")
139
+ in_tag = True
140
+
141
+ # If we're not in a tag...
142
+ if not in_tag:
143
+ # Keep everything after last non-extended-ASCII, non-alphabetic
144
+ # character
145
+ filtered.extend(buf[prev:])
146
+
147
+ return filtered
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/codingstatemachinedict.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import TYPE_CHECKING, Tuple
2
+
3
+ if TYPE_CHECKING:
4
+ # TypedDict was introduced in Python 3.8.
5
+ #
6
+ # TODO: Remove the else block and TYPE_CHECKING check when dropping support
7
+ # for Python 3.7.
8
+ from typing import TypedDict
9
+
10
+ class CodingStateMachineDict(TypedDict, total=False):
11
+ class_table: Tuple[int, ...]
12
+ class_factor: int
13
+ state_table: Tuple[int, ...]
14
+ char_len_table: Tuple[int, ...]
15
+ name: str
16
+ language: str # Optional key
17
+
18
+ else:
19
+ CodingStateMachineDict = dict
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/cp949prober.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is mozilla.org code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ from .chardistribution import EUCKRDistributionAnalysis
29
+ from .codingstatemachine import CodingStateMachine
30
+ from .mbcharsetprober import MultiByteCharSetProber
31
+ from .mbcssm import CP949_SM_MODEL
32
+
33
+
34
+ class CP949Prober(MultiByteCharSetProber):
35
+ def __init__(self) -> None:
36
+ super().__init__()
37
+ self.coding_sm = CodingStateMachine(CP949_SM_MODEL)
38
+ # NOTE: CP949 is a superset of EUC-KR, so the distribution should be
39
+ # not different.
40
+ self.distribution_analyzer = EUCKRDistributionAnalysis()
41
+ self.reset()
42
+
43
+ @property
44
+ def charset_name(self) -> str:
45
+ return "CP949"
46
+
47
+ @property
48
+ def language(self) -> str:
49
+ return "Korean"
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/enums.py ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ All of the Enums that are used throughout the chardet package.
3
+
4
+ :author: Dan Blanchard (dan.blanchard@gmail.com)
5
+ """
6
+
7
+ from enum import Enum, Flag
8
+
9
+
10
+ class InputState:
11
+ """
12
+ This enum represents the different states a universal detector can be in.
13
+ """
14
+
15
+ PURE_ASCII = 0
16
+ ESC_ASCII = 1
17
+ HIGH_BYTE = 2
18
+
19
+
20
+ class LanguageFilter(Flag):
21
+ """
22
+ This enum represents the different language filters we can apply to a
23
+ ``UniversalDetector``.
24
+ """
25
+
26
+ NONE = 0x00
27
+ CHINESE_SIMPLIFIED = 0x01
28
+ CHINESE_TRADITIONAL = 0x02
29
+ JAPANESE = 0x04
30
+ KOREAN = 0x08
31
+ NON_CJK = 0x10
32
+ ALL = 0x1F
33
+ CHINESE = CHINESE_SIMPLIFIED | CHINESE_TRADITIONAL
34
+ CJK = CHINESE | JAPANESE | KOREAN
35
+
36
+
37
+ class ProbingState(Enum):
38
+ """
39
+ This enum represents the different states a prober can be in.
40
+ """
41
+
42
+ DETECTING = 0
43
+ FOUND_IT = 1
44
+ NOT_ME = 2
45
+
46
+
47
+ class MachineState:
48
+ """
49
+ This enum represents the different states a state machine can be in.
50
+ """
51
+
52
+ START = 0
53
+ ERROR = 1
54
+ ITS_ME = 2
55
+
56
+
57
+ class SequenceLikelihood:
58
+ """
59
+ This enum represents the likelihood of a character following the previous one.
60
+ """
61
+
62
+ NEGATIVE = 0
63
+ UNLIKELY = 1
64
+ LIKELY = 2
65
+ POSITIVE = 3
66
+
67
+ @classmethod
68
+ def get_num_categories(cls) -> int:
69
+ """:returns: The number of likelihood categories in the enum."""
70
+ return 4
71
+
72
+
73
+ class CharacterCategory:
74
+ """
75
+ This enum represents the different categories language models for
76
+ ``SingleByteCharsetProber`` put characters into.
77
+
78
+ Anything less than CONTROL is considered a letter.
79
+ """
80
+
81
+ UNDEFINED = 255
82
+ LINE_BREAK = 254
83
+ SYMBOL = 253
84
+ DIGIT = 252
85
+ CONTROL = 251
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/escprober.py ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is mozilla.org code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ from typing import Optional, Union
29
+
30
+ from .charsetprober import CharSetProber
31
+ from .codingstatemachine import CodingStateMachine
32
+ from .enums import LanguageFilter, MachineState, ProbingState
33
+ from .escsm import (
34
+ HZ_SM_MODEL,
35
+ ISO2022CN_SM_MODEL,
36
+ ISO2022JP_SM_MODEL,
37
+ ISO2022KR_SM_MODEL,
38
+ )
39
+
40
+
41
+ class EscCharSetProber(CharSetProber):
42
+ """
43
+ This CharSetProber uses a "code scheme" approach for detecting encodings,
44
+ whereby easily recognizable escape or shift sequences are relied on to
45
+ identify these encodings.
46
+ """
47
+
48
+ def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None:
49
+ super().__init__(lang_filter=lang_filter)
50
+ self.coding_sm = []
51
+ if self.lang_filter & LanguageFilter.CHINESE_SIMPLIFIED:
52
+ self.coding_sm.append(CodingStateMachine(HZ_SM_MODEL))
53
+ self.coding_sm.append(CodingStateMachine(ISO2022CN_SM_MODEL))
54
+ if self.lang_filter & LanguageFilter.JAPANESE:
55
+ self.coding_sm.append(CodingStateMachine(ISO2022JP_SM_MODEL))
56
+ if self.lang_filter & LanguageFilter.KOREAN:
57
+ self.coding_sm.append(CodingStateMachine(ISO2022KR_SM_MODEL))
58
+ self.active_sm_count = 0
59
+ self._detected_charset: Optional[str] = None
60
+ self._detected_language: Optional[str] = None
61
+ self._state = ProbingState.DETECTING
62
+ self.reset()
63
+
64
+ def reset(self) -> None:
65
+ super().reset()
66
+ for coding_sm in self.coding_sm:
67
+ coding_sm.active = True
68
+ coding_sm.reset()
69
+ self.active_sm_count = len(self.coding_sm)
70
+ self._detected_charset = None
71
+ self._detected_language = None
72
+
73
+ @property
74
+ def charset_name(self) -> Optional[str]:
75
+ return self._detected_charset
76
+
77
+ @property
78
+ def language(self) -> Optional[str]:
79
+ return self._detected_language
80
+
81
+ def get_confidence(self) -> float:
82
+ return 0.99 if self._detected_charset else 0.00
83
+
84
+ def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState:
85
+ for c in byte_str:
86
+ for coding_sm in self.coding_sm:
87
+ if not coding_sm.active:
88
+ continue
89
+ coding_state = coding_sm.next_state(c)
90
+ if coding_state == MachineState.ERROR:
91
+ coding_sm.active = False
92
+ self.active_sm_count -= 1
93
+ if self.active_sm_count <= 0:
94
+ self._state = ProbingState.NOT_ME
95
+ return self.state
96
+ elif coding_state == MachineState.ITS_ME:
97
+ self._state = ProbingState.FOUND_IT
98
+ self._detected_charset = coding_sm.get_coding_state_machine()
99
+ self._detected_language = coding_sm.language
100
+ return self.state
101
+
102
+ return self.state
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/eucjpprober.py ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is mozilla.org code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ from typing import Union
29
+
30
+ from .chardistribution import EUCJPDistributionAnalysis
31
+ from .codingstatemachine import CodingStateMachine
32
+ from .enums import MachineState, ProbingState
33
+ from .jpcntx import EUCJPContextAnalysis
34
+ from .mbcharsetprober import MultiByteCharSetProber
35
+ from .mbcssm import EUCJP_SM_MODEL
36
+
37
+
38
+ class EUCJPProber(MultiByteCharSetProber):
39
+ def __init__(self) -> None:
40
+ super().__init__()
41
+ self.coding_sm = CodingStateMachine(EUCJP_SM_MODEL)
42
+ self.distribution_analyzer = EUCJPDistributionAnalysis()
43
+ self.context_analyzer = EUCJPContextAnalysis()
44
+ self.reset()
45
+
46
+ def reset(self) -> None:
47
+ super().reset()
48
+ self.context_analyzer.reset()
49
+
50
+ @property
51
+ def charset_name(self) -> str:
52
+ return "EUC-JP"
53
+
54
+ @property
55
+ def language(self) -> str:
56
+ return "Japanese"
57
+
58
+ def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState:
59
+ assert self.coding_sm is not None
60
+ assert self.distribution_analyzer is not None
61
+
62
+ for i, byte in enumerate(byte_str):
63
+ # PY3K: byte_str is a byte array, so byte is an int, not a byte
64
+ coding_state = self.coding_sm.next_state(byte)
65
+ if coding_state == MachineState.ERROR:
66
+ self.logger.debug(
67
+ "%s %s prober hit error at byte %s",
68
+ self.charset_name,
69
+ self.language,
70
+ i,
71
+ )
72
+ self._state = ProbingState.NOT_ME
73
+ break
74
+ if coding_state == MachineState.ITS_ME:
75
+ self._state = ProbingState.FOUND_IT
76
+ break
77
+ if coding_state == MachineState.START:
78
+ char_len = self.coding_sm.get_current_charlen()
79
+ if i == 0:
80
+ self._last_char[1] = byte
81
+ self.context_analyzer.feed(self._last_char, char_len)
82
+ self.distribution_analyzer.feed(self._last_char, char_len)
83
+ else:
84
+ self.context_analyzer.feed(byte_str[i - 1 : i + 1], char_len)
85
+ self.distribution_analyzer.feed(byte_str[i - 1 : i + 1], char_len)
86
+
87
+ self._last_char[0] = byte_str[-1]
88
+
89
+ if self.state == ProbingState.DETECTING:
90
+ if self.context_analyzer.got_enough_data() and (
91
+ self.get_confidence() > self.SHORTCUT_THRESHOLD
92
+ ):
93
+ self._state = ProbingState.FOUND_IT
94
+
95
+ return self.state
96
+
97
+ def get_confidence(self) -> float:
98
+ assert self.distribution_analyzer is not None
99
+
100
+ context_conf = self.context_analyzer.get_confidence()
101
+ distrib_conf = self.distribution_analyzer.get_confidence()
102
+ return max(context_conf, distrib_conf)
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/euckrprober.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is mozilla.org code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ from .chardistribution import EUCKRDistributionAnalysis
29
+ from .codingstatemachine import CodingStateMachine
30
+ from .mbcharsetprober import MultiByteCharSetProber
31
+ from .mbcssm import EUCKR_SM_MODEL
32
+
33
+
34
+ class EUCKRProber(MultiByteCharSetProber):
35
+ def __init__(self) -> None:
36
+ super().__init__()
37
+ self.coding_sm = CodingStateMachine(EUCKR_SM_MODEL)
38
+ self.distribution_analyzer = EUCKRDistributionAnalysis()
39
+ self.reset()
40
+
41
+ @property
42
+ def charset_name(self) -> str:
43
+ return "EUC-KR"
44
+
45
+ @property
46
+ def language(self) -> str:
47
+ return "Korean"
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/euctwfreq.py ADDED
@@ -0,0 +1,388 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is Mozilla Communicator client code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ # EUCTW frequency table
29
+ # Converted from big5 work
30
+ # by Taiwan's Mandarin Promotion Council
31
+ # <http:#www.edu.tw:81/mandr/>
32
+
33
+ # 128 --> 0.42261
34
+ # 256 --> 0.57851
35
+ # 512 --> 0.74851
36
+ # 1024 --> 0.89384
37
+ # 2048 --> 0.97583
38
+ #
39
+ # Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98
40
+ # Random Distribution Ration = 512/(5401-512)=0.105
41
+ #
42
+ # Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR
43
+
44
+ EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75
45
+
46
+ # Char to FreqOrder table
47
+ EUCTW_TABLE_SIZE = 5376
48
+
49
+ # fmt: off
50
+ EUCTW_CHAR_TO_FREQ_ORDER = (
51
+ 1, 1800, 1506, 255, 1431, 198, 9, 82, 6, 7310, 177, 202, 3615, 1256, 2808, 110, # 2742
52
+ 3735, 33, 3241, 261, 76, 44, 2113, 16, 2931, 2184, 1176, 659, 3868, 26, 3404, 2643, # 2758
53
+ 1198, 3869, 3313, 4060, 410, 2211, 302, 590, 361, 1963, 8, 204, 58, 4296, 7311, 1931, # 2774
54
+ 63, 7312, 7313, 317, 1614, 75, 222, 159, 4061, 2412, 1480, 7314, 3500, 3068, 224, 2809, # 2790
55
+ 3616, 3, 10, 3870, 1471, 29, 2774, 1135, 2852, 1939, 873, 130, 3242, 1123, 312, 7315, # 2806
56
+ 4297, 2051, 507, 252, 682, 7316, 142, 1914, 124, 206, 2932, 34, 3501, 3173, 64, 604, # 2822
57
+ 7317, 2494, 1976, 1977, 155, 1990, 645, 641, 1606, 7318, 3405, 337, 72, 406, 7319, 80, # 2838
58
+ 630, 238, 3174, 1509, 263, 939, 1092, 2644, 756, 1440, 1094, 3406, 449, 69, 2969, 591, # 2854
59
+ 179, 2095, 471, 115, 2034, 1843, 60, 50, 2970, 134, 806, 1868, 734, 2035, 3407, 180, # 2870
60
+ 995, 1607, 156, 537, 2893, 688, 7320, 319, 1305, 779, 2144, 514, 2374, 298, 4298, 359, # 2886
61
+ 2495, 90, 2707, 1338, 663, 11, 906, 1099, 2545, 20, 2436, 182, 532, 1716, 7321, 732, # 2902
62
+ 1376, 4062, 1311, 1420, 3175, 25, 2312, 1056, 113, 399, 382, 1949, 242, 3408, 2467, 529, # 2918
63
+ 3243, 475, 1447, 3617, 7322, 117, 21, 656, 810, 1297, 2295, 2329, 3502, 7323, 126, 4063, # 2934
64
+ 706, 456, 150, 613, 4299, 71, 1118, 2036, 4064, 145, 3069, 85, 835, 486, 2114, 1246, # 2950
65
+ 1426, 428, 727, 1285, 1015, 800, 106, 623, 303, 1281, 7324, 2127, 2354, 347, 3736, 221, # 2966
66
+ 3503, 3110, 7325, 1955, 1153, 4065, 83, 296, 1199, 3070, 192, 624, 93, 7326, 822, 1897, # 2982
67
+ 2810, 3111, 795, 2064, 991, 1554, 1542, 1592, 27, 43, 2853, 859, 139, 1456, 860, 4300, # 2998
68
+ 437, 712, 3871, 164, 2392, 3112, 695, 211, 3017, 2096, 195, 3872, 1608, 3504, 3505, 3618, # 3014
69
+ 3873, 234, 811, 2971, 2097, 3874, 2229, 1441, 3506, 1615, 2375, 668, 2076, 1638, 305, 228, # 3030
70
+ 1664, 4301, 467, 415, 7327, 262, 2098, 1593, 239, 108, 300, 200, 1033, 512, 1247, 2077, # 3046
71
+ 7328, 7329, 2173, 3176, 3619, 2673, 593, 845, 1062, 3244, 88, 1723, 2037, 3875, 1950, 212, # 3062
72
+ 266, 152, 149, 468, 1898, 4066, 4302, 77, 187, 7330, 3018, 37, 5, 2972, 7331, 3876, # 3078
73
+ 7332, 7333, 39, 2517, 4303, 2894, 3177, 2078, 55, 148, 74, 4304, 545, 483, 1474, 1029, # 3094
74
+ 1665, 217, 1869, 1531, 3113, 1104, 2645, 4067, 24, 172, 3507, 900, 3877, 3508, 3509, 4305, # 3110
75
+ 32, 1408, 2811, 1312, 329, 487, 2355, 2247, 2708, 784, 2674, 4, 3019, 3314, 1427, 1788, # 3126
76
+ 188, 109, 499, 7334, 3620, 1717, 1789, 888, 1217, 3020, 4306, 7335, 3510, 7336, 3315, 1520, # 3142
77
+ 3621, 3878, 196, 1034, 775, 7337, 7338, 929, 1815, 249, 439, 38, 7339, 1063, 7340, 794, # 3158
78
+ 3879, 1435, 2296, 46, 178, 3245, 2065, 7341, 2376, 7342, 214, 1709, 4307, 804, 35, 707, # 3174
79
+ 324, 3622, 1601, 2546, 140, 459, 4068, 7343, 7344, 1365, 839, 272, 978, 2257, 2572, 3409, # 3190
80
+ 2128, 1363, 3623, 1423, 697, 100, 3071, 48, 70, 1231, 495, 3114, 2193, 7345, 1294, 7346, # 3206
81
+ 2079, 462, 586, 1042, 3246, 853, 256, 988, 185, 2377, 3410, 1698, 434, 1084, 7347, 3411, # 3222
82
+ 314, 2615, 2775, 4308, 2330, 2331, 569, 2280, 637, 1816, 2518, 757, 1162, 1878, 1616, 3412, # 3238
83
+ 287, 1577, 2115, 768, 4309, 1671, 2854, 3511, 2519, 1321, 3737, 909, 2413, 7348, 4069, 933, # 3254
84
+ 3738, 7349, 2052, 2356, 1222, 4310, 765, 2414, 1322, 786, 4311, 7350, 1919, 1462, 1677, 2895, # 3270
85
+ 1699, 7351, 4312, 1424, 2437, 3115, 3624, 2590, 3316, 1774, 1940, 3413, 3880, 4070, 309, 1369, # 3286
86
+ 1130, 2812, 364, 2230, 1653, 1299, 3881, 3512, 3882, 3883, 2646, 525, 1085, 3021, 902, 2000, # 3302
87
+ 1475, 964, 4313, 421, 1844, 1415, 1057, 2281, 940, 1364, 3116, 376, 4314, 4315, 1381, 7, # 3318
88
+ 2520, 983, 2378, 336, 1710, 2675, 1845, 321, 3414, 559, 1131, 3022, 2742, 1808, 1132, 1313, # 3334
89
+ 265, 1481, 1857, 7352, 352, 1203, 2813, 3247, 167, 1089, 420, 2814, 776, 792, 1724, 3513, # 3350
90
+ 4071, 2438, 3248, 7353, 4072, 7354, 446, 229, 333, 2743, 901, 3739, 1200, 1557, 4316, 2647, # 3366
91
+ 1920, 395, 2744, 2676, 3740, 4073, 1835, 125, 916, 3178, 2616, 4317, 7355, 7356, 3741, 7357, # 3382
92
+ 7358, 7359, 4318, 3117, 3625, 1133, 2547, 1757, 3415, 1510, 2313, 1409, 3514, 7360, 2145, 438, # 3398
93
+ 2591, 2896, 2379, 3317, 1068, 958, 3023, 461, 311, 2855, 2677, 4074, 1915, 3179, 4075, 1978, # 3414
94
+ 383, 750, 2745, 2617, 4076, 274, 539, 385, 1278, 1442, 7361, 1154, 1964, 384, 561, 210, # 3430
95
+ 98, 1295, 2548, 3515, 7362, 1711, 2415, 1482, 3416, 3884, 2897, 1257, 129, 7363, 3742, 642, # 3446
96
+ 523, 2776, 2777, 2648, 7364, 141, 2231, 1333, 68, 176, 441, 876, 907, 4077, 603, 2592, # 3462
97
+ 710, 171, 3417, 404, 549, 18, 3118, 2393, 1410, 3626, 1666, 7365, 3516, 4319, 2898, 4320, # 3478
98
+ 7366, 2973, 368, 7367, 146, 366, 99, 871, 3627, 1543, 748, 807, 1586, 1185, 22, 2258, # 3494
99
+ 379, 3743, 3180, 7368, 3181, 505, 1941, 2618, 1991, 1382, 2314, 7369, 380, 2357, 218, 702, # 3510
100
+ 1817, 1248, 3418, 3024, 3517, 3318, 3249, 7370, 2974, 3628, 930, 3250, 3744, 7371, 59, 7372, # 3526
101
+ 585, 601, 4078, 497, 3419, 1112, 1314, 4321, 1801, 7373, 1223, 1472, 2174, 7374, 749, 1836, # 3542
102
+ 690, 1899, 3745, 1772, 3885, 1476, 429, 1043, 1790, 2232, 2116, 917, 4079, 447, 1086, 1629, # 3558
103
+ 7375, 556, 7376, 7377, 2020, 1654, 844, 1090, 105, 550, 966, 1758, 2815, 1008, 1782, 686, # 3574
104
+ 1095, 7378, 2282, 793, 1602, 7379, 3518, 2593, 4322, 4080, 2933, 2297, 4323, 3746, 980, 2496, # 3590
105
+ 544, 353, 527, 4324, 908, 2678, 2899, 7380, 381, 2619, 1942, 1348, 7381, 1341, 1252, 560, # 3606
106
+ 3072, 7382, 3420, 2856, 7383, 2053, 973, 886, 2080, 143, 4325, 7384, 7385, 157, 3886, 496, # 3622
107
+ 4081, 57, 840, 540, 2038, 4326, 4327, 3421, 2117, 1445, 970, 2259, 1748, 1965, 2081, 4082, # 3638
108
+ 3119, 1234, 1775, 3251, 2816, 3629, 773, 1206, 2129, 1066, 2039, 1326, 3887, 1738, 1725, 4083, # 3654
109
+ 279, 3120, 51, 1544, 2594, 423, 1578, 2130, 2066, 173, 4328, 1879, 7386, 7387, 1583, 264, # 3670
110
+ 610, 3630, 4329, 2439, 280, 154, 7388, 7389, 7390, 1739, 338, 1282, 3073, 693, 2857, 1411, # 3686
111
+ 1074, 3747, 2440, 7391, 4330, 7392, 7393, 1240, 952, 2394, 7394, 2900, 1538, 2679, 685, 1483, # 3702
112
+ 4084, 2468, 1436, 953, 4085, 2054, 4331, 671, 2395, 79, 4086, 2441, 3252, 608, 567, 2680, # 3718
113
+ 3422, 4087, 4088, 1691, 393, 1261, 1791, 2396, 7395, 4332, 7396, 7397, 7398, 7399, 1383, 1672, # 3734
114
+ 3748, 3182, 1464, 522, 1119, 661, 1150, 216, 675, 4333, 3888, 1432, 3519, 609, 4334, 2681, # 3750
115
+ 2397, 7400, 7401, 7402, 4089, 3025, 0, 7403, 2469, 315, 231, 2442, 301, 3319, 4335, 2380, # 3766
116
+ 7404, 233, 4090, 3631, 1818, 4336, 4337, 7405, 96, 1776, 1315, 2082, 7406, 257, 7407, 1809, # 3782
117
+ 3632, 2709, 1139, 1819, 4091, 2021, 1124, 2163, 2778, 1777, 2649, 7408, 3074, 363, 1655, 3183, # 3798
118
+ 7409, 2975, 7410, 7411, 7412, 3889, 1567, 3890, 718, 103, 3184, 849, 1443, 341, 3320, 2934, # 3814
119
+ 1484, 7413, 1712, 127, 67, 339, 4092, 2398, 679, 1412, 821, 7414, 7415, 834, 738, 351, # 3830
120
+ 2976, 2146, 846, 235, 1497, 1880, 418, 1992, 3749, 2710, 186, 1100, 2147, 2746, 3520, 1545, # 3846
121
+ 1355, 2935, 2858, 1377, 583, 3891, 4093, 2573, 2977, 7416, 1298, 3633, 1078, 2549, 3634, 2358, # 3862
122
+ 78, 3750, 3751, 267, 1289, 2099, 2001, 1594, 4094, 348, 369, 1274, 2194, 2175, 1837, 4338, # 3878
123
+ 1820, 2817, 3635, 2747, 2283, 2002, 4339, 2936, 2748, 144, 3321, 882, 4340, 3892, 2749, 3423, # 3894
124
+ 4341, 2901, 7417, 4095, 1726, 320, 7418, 3893, 3026, 788, 2978, 7419, 2818, 1773, 1327, 2859, # 3910
125
+ 3894, 2819, 7420, 1306, 4342, 2003, 1700, 3752, 3521, 2359, 2650, 787, 2022, 506, 824, 3636, # 3926
126
+ 534, 323, 4343, 1044, 3322, 2023, 1900, 946, 3424, 7421, 1778, 1500, 1678, 7422, 1881, 4344, # 3942
127
+ 165, 243, 4345, 3637, 2521, 123, 683, 4096, 764, 4346, 36, 3895, 1792, 589, 2902, 816, # 3958
128
+ 626, 1667, 3027, 2233, 1639, 1555, 1622, 3753, 3896, 7423, 3897, 2860, 1370, 1228, 1932, 891, # 3974
129
+ 2083, 2903, 304, 4097, 7424, 292, 2979, 2711, 3522, 691, 2100, 4098, 1115, 4347, 118, 662, # 3990
130
+ 7425, 611, 1156, 854, 2381, 1316, 2861, 2, 386, 515, 2904, 7426, 7427, 3253, 868, 2234, # 4006
131
+ 1486, 855, 2651, 785, 2212, 3028, 7428, 1040, 3185, 3523, 7429, 3121, 448, 7430, 1525, 7431, # 4022
132
+ 2164, 4348, 7432, 3754, 7433, 4099, 2820, 3524, 3122, 503, 818, 3898, 3123, 1568, 814, 676, # 4038
133
+ 1444, 306, 1749, 7434, 3755, 1416, 1030, 197, 1428, 805, 2821, 1501, 4349, 7435, 7436, 7437, # 4054
134
+ 1993, 7438, 4350, 7439, 7440, 2195, 13, 2779, 3638, 2980, 3124, 1229, 1916, 7441, 3756, 2131, # 4070
135
+ 7442, 4100, 4351, 2399, 3525, 7443, 2213, 1511, 1727, 1120, 7444, 7445, 646, 3757, 2443, 307, # 4086
136
+ 7446, 7447, 1595, 3186, 7448, 7449, 7450, 3639, 1113, 1356, 3899, 1465, 2522, 2523, 7451, 519, # 4102
137
+ 7452, 128, 2132, 92, 2284, 1979, 7453, 3900, 1512, 342, 3125, 2196, 7454, 2780, 2214, 1980, # 4118
138
+ 3323, 7455, 290, 1656, 1317, 789, 827, 2360, 7456, 3758, 4352, 562, 581, 3901, 7457, 401, # 4134
139
+ 4353, 2248, 94, 4354, 1399, 2781, 7458, 1463, 2024, 4355, 3187, 1943, 7459, 828, 1105, 4101, # 4150
140
+ 1262, 1394, 7460, 4102, 605, 4356, 7461, 1783, 2862, 7462, 2822, 819, 2101, 578, 2197, 2937, # 4166
141
+ 7463, 1502, 436, 3254, 4103, 3255, 2823, 3902, 2905, 3425, 3426, 7464, 2712, 2315, 7465, 7466, # 4182
142
+ 2332, 2067, 23, 4357, 193, 826, 3759, 2102, 699, 1630, 4104, 3075, 390, 1793, 1064, 3526, # 4198
143
+ 7467, 1579, 3076, 3077, 1400, 7468, 4105, 1838, 1640, 2863, 7469, 4358, 4359, 137, 4106, 598, # 4214
144
+ 3078, 1966, 780, 104, 974, 2938, 7470, 278, 899, 253, 402, 572, 504, 493, 1339, 7471, # 4230
145
+ 3903, 1275, 4360, 2574, 2550, 7472, 3640, 3029, 3079, 2249, 565, 1334, 2713, 863, 41, 7473, # 4246
146
+ 7474, 4361, 7475, 1657, 2333, 19, 463, 2750, 4107, 606, 7476, 2981, 3256, 1087, 2084, 1323, # 4262
147
+ 2652, 2982, 7477, 1631, 1623, 1750, 4108, 2682, 7478, 2864, 791, 2714, 2653, 2334, 232, 2416, # 4278
148
+ 7479, 2983, 1498, 7480, 2654, 2620, 755, 1366, 3641, 3257, 3126, 2025, 1609, 119, 1917, 3427, # 4294
149
+ 862, 1026, 4109, 7481, 3904, 3760, 4362, 3905, 4363, 2260, 1951, 2470, 7482, 1125, 817, 4110, # 4310
150
+ 4111, 3906, 1513, 1766, 2040, 1487, 4112, 3030, 3258, 2824, 3761, 3127, 7483, 7484, 1507, 7485, # 4326
151
+ 2683, 733, 40, 1632, 1106, 2865, 345, 4113, 841, 2524, 230, 4364, 2984, 1846, 3259, 3428, # 4342
152
+ 7486, 1263, 986, 3429, 7487, 735, 879, 254, 1137, 857, 622, 1300, 1180, 1388, 1562, 3907, # 4358
153
+ 3908, 2939, 967, 2751, 2655, 1349, 592, 2133, 1692, 3324, 2985, 1994, 4114, 1679, 3909, 1901, # 4374
154
+ 2185, 7488, 739, 3642, 2715, 1296, 1290, 7489, 4115, 2198, 2199, 1921, 1563, 2595, 2551, 1870, # 4390
155
+ 2752, 2986, 7490, 435, 7491, 343, 1108, 596, 17, 1751, 4365, 2235, 3430, 3643, 7492, 4366, # 4406
156
+ 294, 3527, 2940, 1693, 477, 979, 281, 2041, 3528, 643, 2042, 3644, 2621, 2782, 2261, 1031, # 4422
157
+ 2335, 2134, 2298, 3529, 4367, 367, 1249, 2552, 7493, 3530, 7494, 4368, 1283, 3325, 2004, 240, # 4438
158
+ 1762, 3326, 4369, 4370, 836, 1069, 3128, 474, 7495, 2148, 2525, 268, 3531, 7496, 3188, 1521, # 4454
159
+ 1284, 7497, 1658, 1546, 4116, 7498, 3532, 3533, 7499, 4117, 3327, 2684, 1685, 4118, 961, 1673, # 4470
160
+ 2622, 190, 2005, 2200, 3762, 4371, 4372, 7500, 570, 2497, 3645, 1490, 7501, 4373, 2623, 3260, # 4486
161
+ 1956, 4374, 584, 1514, 396, 1045, 1944, 7502, 4375, 1967, 2444, 7503, 7504, 4376, 3910, 619, # 4502
162
+ 7505, 3129, 3261, 215, 2006, 2783, 2553, 3189, 4377, 3190, 4378, 763, 4119, 3763, 4379, 7506, # 4518
163
+ 7507, 1957, 1767, 2941, 3328, 3646, 1174, 452, 1477, 4380, 3329, 3130, 7508, 2825, 1253, 2382, # 4534
164
+ 2186, 1091, 2285, 4120, 492, 7509, 638, 1169, 1824, 2135, 1752, 3911, 648, 926, 1021, 1324, # 4550
165
+ 4381, 520, 4382, 997, 847, 1007, 892, 4383, 3764, 2262, 1871, 3647, 7510, 2400, 1784, 4384, # 4566
166
+ 1952, 2942, 3080, 3191, 1728, 4121, 2043, 3648, 4385, 2007, 1701, 3131, 1551, 30, 2263, 4122, # 4582
167
+ 7511, 2026, 4386, 3534, 7512, 501, 7513, 4123, 594, 3431, 2165, 1821, 3535, 3432, 3536, 3192, # 4598
168
+ 829, 2826, 4124, 7514, 1680, 3132, 1225, 4125, 7515, 3262, 4387, 4126, 3133, 2336, 7516, 4388, # 4614
169
+ 4127, 7517, 3912, 3913, 7518, 1847, 2383, 2596, 3330, 7519, 4389, 374, 3914, 652, 4128, 4129, # 4630
170
+ 375, 1140, 798, 7520, 7521, 7522, 2361, 4390, 2264, 546, 1659, 138, 3031, 2445, 4391, 7523, # 4646
171
+ 2250, 612, 1848, 910, 796, 3765, 1740, 1371, 825, 3766, 3767, 7524, 2906, 2554, 7525, 692, # 4662
172
+ 444, 3032, 2624, 801, 4392, 4130, 7526, 1491, 244, 1053, 3033, 4131, 4132, 340, 7527, 3915, # 4678
173
+ 1041, 2987, 293, 1168, 87, 1357, 7528, 1539, 959, 7529, 2236, 721, 694, 4133, 3768, 219, # 4694
174
+ 1478, 644, 1417, 3331, 2656, 1413, 1401, 1335, 1389, 3916, 7530, 7531, 2988, 2362, 3134, 1825, # 4710
175
+ 730, 1515, 184, 2827, 66, 4393, 7532, 1660, 2943, 246, 3332, 378, 1457, 226, 3433, 975, # 4726
176
+ 3917, 2944, 1264, 3537, 674, 696, 7533, 163, 7534, 1141, 2417, 2166, 713, 3538, 3333, 4394, # 4742
177
+ 3918, 7535, 7536, 1186, 15, 7537, 1079, 1070, 7538, 1522, 3193, 3539, 276, 1050, 2716, 758, # 4758
178
+ 1126, 653, 2945, 3263, 7539, 2337, 889, 3540, 3919, 3081, 2989, 903, 1250, 4395, 3920, 3434, # 4774
179
+ 3541, 1342, 1681, 1718, 766, 3264, 286, 89, 2946, 3649, 7540, 1713, 7541, 2597, 3334, 2990, # 4790
180
+ 7542, 2947, 2215, 3194, 2866, 7543, 4396, 2498, 2526, 181, 387, 1075, 3921, 731, 2187, 3335, # 4806
181
+ 7544, 3265, 310, 313, 3435, 2299, 770, 4134, 54, 3034, 189, 4397, 3082, 3769, 3922, 7545, # 4822
182
+ 1230, 1617, 1849, 355, 3542, 4135, 4398, 3336, 111, 4136, 3650, 1350, 3135, 3436, 3035, 4137, # 4838
183
+ 2149, 3266, 3543, 7546, 2784, 3923, 3924, 2991, 722, 2008, 7547, 1071, 247, 1207, 2338, 2471, # 4854
184
+ 1378, 4399, 2009, 864, 1437, 1214, 4400, 373, 3770, 1142, 2216, 667, 4401, 442, 2753, 2555, # 4870
185
+ 3771, 3925, 1968, 4138, 3267, 1839, 837, 170, 1107, 934, 1336, 1882, 7548, 7549, 2118, 4139, # 4886
186
+ 2828, 743, 1569, 7550, 4402, 4140, 582, 2384, 1418, 3437, 7551, 1802, 7552, 357, 1395, 1729, # 4902
187
+ 3651, 3268, 2418, 1564, 2237, 7553, 3083, 3772, 1633, 4403, 1114, 2085, 4141, 1532, 7554, 482, # 4918
188
+ 2446, 4404, 7555, 7556, 1492, 833, 1466, 7557, 2717, 3544, 1641, 2829, 7558, 1526, 1272, 3652, # 4934
189
+ 4142, 1686, 1794, 416, 2556, 1902, 1953, 1803, 7559, 3773, 2785, 3774, 1159, 2316, 7560, 2867, # 4950
190
+ 4405, 1610, 1584, 3036, 2419, 2754, 443, 3269, 1163, 3136, 7561, 7562, 3926, 7563, 4143, 2499, # 4966
191
+ 3037, 4406, 3927, 3137, 2103, 1647, 3545, 2010, 1872, 4144, 7564, 4145, 431, 3438, 7565, 250, # 4982
192
+ 97, 81, 4146, 7566, 1648, 1850, 1558, 160, 848, 7567, 866, 740, 1694, 7568, 2201, 2830, # 4998
193
+ 3195, 4147, 4407, 3653, 1687, 950, 2472, 426, 469, 3196, 3654, 3655, 3928, 7569, 7570, 1188, # 5014
194
+ 424, 1995, 861, 3546, 4148, 3775, 2202, 2685, 168, 1235, 3547, 4149, 7571, 2086, 1674, 4408, # 5030
195
+ 3337, 3270, 220, 2557, 1009, 7572, 3776, 670, 2992, 332, 1208, 717, 7573, 7574, 3548, 2447, # 5046
196
+ 3929, 3338, 7575, 513, 7576, 1209, 2868, 3339, 3138, 4409, 1080, 7577, 7578, 7579, 7580, 2527, # 5062
197
+ 3656, 3549, 815, 1587, 3930, 3931, 7581, 3550, 3439, 3777, 1254, 4410, 1328, 3038, 1390, 3932, # 5078
198
+ 1741, 3933, 3778, 3934, 7582, 236, 3779, 2448, 3271, 7583, 7584, 3657, 3780, 1273, 3781, 4411, # 5094
199
+ 7585, 308, 7586, 4412, 245, 4413, 1851, 2473, 1307, 2575, 430, 715, 2136, 2449, 7587, 270, # 5110
200
+ 199, 2869, 3935, 7588, 3551, 2718, 1753, 761, 1754, 725, 1661, 1840, 4414, 3440, 3658, 7589, # 5126
201
+ 7590, 587, 14, 3272, 227, 2598, 326, 480, 2265, 943, 2755, 3552, 291, 650, 1883, 7591, # 5142
202
+ 1702, 1226, 102, 1547, 62, 3441, 904, 4415, 3442, 1164, 4150, 7592, 7593, 1224, 1548, 2756, # 5158
203
+ 391, 498, 1493, 7594, 1386, 1419, 7595, 2055, 1177, 4416, 813, 880, 1081, 2363, 566, 1145, # 5174
204
+ 4417, 2286, 1001, 1035, 2558, 2599, 2238, 394, 1286, 7596, 7597, 2068, 7598, 86, 1494, 1730, # 5190
205
+ 3936, 491, 1588, 745, 897, 2948, 843, 3340, 3937, 2757, 2870, 3273, 1768, 998, 2217, 2069, # 5206
206
+ 397, 1826, 1195, 1969, 3659, 2993, 3341, 284, 7599, 3782, 2500, 2137, 2119, 1903, 7600, 3938, # 5222
207
+ 2150, 3939, 4151, 1036, 3443, 1904, 114, 2559, 4152, 209, 1527, 7601, 7602, 2949, 2831, 2625, # 5238
208
+ 2385, 2719, 3139, 812, 2560, 7603, 3274, 7604, 1559, 737, 1884, 3660, 1210, 885, 28, 2686, # 5254
209
+ 3553, 3783, 7605, 4153, 1004, 1779, 4418, 7606, 346, 1981, 2218, 2687, 4419, 3784, 1742, 797, # 5270
210
+ 1642, 3940, 1933, 1072, 1384, 2151, 896, 3941, 3275, 3661, 3197, 2871, 3554, 7607, 2561, 1958, # 5286
211
+ 4420, 2450, 1785, 7608, 7609, 7610, 3942, 4154, 1005, 1308, 3662, 4155, 2720, 4421, 4422, 1528, # 5302
212
+ 2600, 161, 1178, 4156, 1982, 987, 4423, 1101, 4157, 631, 3943, 1157, 3198, 2420, 1343, 1241, # 5318
213
+ 1016, 2239, 2562, 372, 877, 2339, 2501, 1160, 555, 1934, 911, 3944, 7611, 466, 1170, 169, # 5334
214
+ 1051, 2907, 2688, 3663, 2474, 2994, 1182, 2011, 2563, 1251, 2626, 7612, 992, 2340, 3444, 1540, # 5350
215
+ 2721, 1201, 2070, 2401, 1996, 2475, 7613, 4424, 528, 1922, 2188, 1503, 1873, 1570, 2364, 3342, # 5366
216
+ 3276, 7614, 557, 1073, 7615, 1827, 3445, 2087, 2266, 3140, 3039, 3084, 767, 3085, 2786, 4425, # 5382
217
+ 1006, 4158, 4426, 2341, 1267, 2176, 3664, 3199, 778, 3945, 3200, 2722, 1597, 2657, 7616, 4427, # 5398
218
+ 7617, 3446, 7618, 7619, 7620, 3277, 2689, 1433, 3278, 131, 95, 1504, 3946, 723, 4159, 3141, # 5414
219
+ 1841, 3555, 2758, 2189, 3947, 2027, 2104, 3665, 7621, 2995, 3948, 1218, 7622, 3343, 3201, 3949, # 5430
220
+ 4160, 2576, 248, 1634, 3785, 912, 7623, 2832, 3666, 3040, 3786, 654, 53, 7624, 2996, 7625, # 5446
221
+ 1688, 4428, 777, 3447, 1032, 3950, 1425, 7626, 191, 820, 2120, 2833, 971, 4429, 931, 3202, # 5462
222
+ 135, 664, 783, 3787, 1997, 772, 2908, 1935, 3951, 3788, 4430, 2909, 3203, 282, 2723, 640, # 5478
223
+ 1372, 3448, 1127, 922, 325, 3344, 7627, 7628, 711, 2044, 7629, 7630, 3952, 2219, 2787, 1936, # 5494
224
+ 3953, 3345, 2220, 2251, 3789, 2300, 7631, 4431, 3790, 1258, 3279, 3954, 3204, 2138, 2950, 3955, # 5510
225
+ 3956, 7632, 2221, 258, 3205, 4432, 101, 1227, 7633, 3280, 1755, 7634, 1391, 3281, 7635, 2910, # 5526
226
+ 2056, 893, 7636, 7637, 7638, 1402, 4161, 2342, 7639, 7640, 3206, 3556, 7641, 7642, 878, 1325, # 5542
227
+ 1780, 2788, 4433, 259, 1385, 2577, 744, 1183, 2267, 4434, 7643, 3957, 2502, 7644, 684, 1024, # 5558
228
+ 4162, 7645, 472, 3557, 3449, 1165, 3282, 3958, 3959, 322, 2152, 881, 455, 1695, 1152, 1340, # 5574
229
+ 660, 554, 2153, 4435, 1058, 4436, 4163, 830, 1065, 3346, 3960, 4437, 1923, 7646, 1703, 1918, # 5590
230
+ 7647, 932, 2268, 122, 7648, 4438, 947, 677, 7649, 3791, 2627, 297, 1905, 1924, 2269, 4439, # 5606
231
+ 2317, 3283, 7650, 7651, 4164, 7652, 4165, 84, 4166, 112, 989, 7653, 547, 1059, 3961, 701, # 5622
232
+ 3558, 1019, 7654, 4167, 7655, 3450, 942, 639, 457, 2301, 2451, 993, 2951, 407, 851, 494, # 5638
233
+ 4440, 3347, 927, 7656, 1237, 7657, 2421, 3348, 573, 4168, 680, 921, 2911, 1279, 1874, 285, # 5654
234
+ 790, 1448, 1983, 719, 2167, 7658, 7659, 4441, 3962, 3963, 1649, 7660, 1541, 563, 7661, 1077, # 5670
235
+ 7662, 3349, 3041, 3451, 511, 2997, 3964, 3965, 3667, 3966, 1268, 2564, 3350, 3207, 4442, 4443, # 5686
236
+ 7663, 535, 1048, 1276, 1189, 2912, 2028, 3142, 1438, 1373, 2834, 2952, 1134, 2012, 7664, 4169, # 5702
237
+ 1238, 2578, 3086, 1259, 7665, 700, 7666, 2953, 3143, 3668, 4170, 7667, 4171, 1146, 1875, 1906, # 5718
238
+ 4444, 2601, 3967, 781, 2422, 132, 1589, 203, 147, 273, 2789, 2402, 898, 1786, 2154, 3968, # 5734
239
+ 3969, 7668, 3792, 2790, 7669, 7670, 4445, 4446, 7671, 3208, 7672, 1635, 3793, 965, 7673, 1804, # 5750
240
+ 2690, 1516, 3559, 1121, 1082, 1329, 3284, 3970, 1449, 3794, 65, 1128, 2835, 2913, 2759, 1590, # 5766
241
+ 3795, 7674, 7675, 12, 2658, 45, 976, 2579, 3144, 4447, 517, 2528, 1013, 1037, 3209, 7676, # 5782
242
+ 3796, 2836, 7677, 3797, 7678, 3452, 7679, 2602, 614, 1998, 2318, 3798, 3087, 2724, 2628, 7680, # 5798
243
+ 2580, 4172, 599, 1269, 7681, 1810, 3669, 7682, 2691, 3088, 759, 1060, 489, 1805, 3351, 3285, # 5814
244
+ 1358, 7683, 7684, 2386, 1387, 1215, 2629, 2252, 490, 7685, 7686, 4173, 1759, 2387, 2343, 7687, # 5830
245
+ 4448, 3799, 1907, 3971, 2630, 1806, 3210, 4449, 3453, 3286, 2760, 2344, 874, 7688, 7689, 3454, # 5846
246
+ 3670, 1858, 91, 2914, 3671, 3042, 3800, 4450, 7690, 3145, 3972, 2659, 7691, 3455, 1202, 1403, # 5862
247
+ 3801, 2954, 2529, 1517, 2503, 4451, 3456, 2504, 7692, 4452, 7693, 2692, 1885, 1495, 1731, 3973, # 5878
248
+ 2365, 4453, 7694, 2029, 7695, 7696, 3974, 2693, 1216, 237, 2581, 4174, 2319, 3975, 3802, 4454, # 5894
249
+ 4455, 2694, 3560, 3457, 445, 4456, 7697, 7698, 7699, 7700, 2761, 61, 3976, 3672, 1822, 3977, # 5910
250
+ 7701, 687, 2045, 935, 925, 405, 2660, 703, 1096, 1859, 2725, 4457, 3978, 1876, 1367, 2695, # 5926
251
+ 3352, 918, 2105, 1781, 2476, 334, 3287, 1611, 1093, 4458, 564, 3146, 3458, 3673, 3353, 945, # 5942
252
+ 2631, 2057, 4459, 7702, 1925, 872, 4175, 7703, 3459, 2696, 3089, 349, 4176, 3674, 3979, 4460, # 5958
253
+ 3803, 4177, 3675, 2155, 3980, 4461, 4462, 4178, 4463, 2403, 2046, 782, 3981, 400, 251, 4179, # 5974
254
+ 1624, 7704, 7705, 277, 3676, 299, 1265, 476, 1191, 3804, 2121, 4180, 4181, 1109, 205, 7706, # 5990
255
+ 2582, 1000, 2156, 3561, 1860, 7707, 7708, 7709, 4464, 7710, 4465, 2565, 107, 2477, 2157, 3982, # 6006
256
+ 3460, 3147, 7711, 1533, 541, 1301, 158, 753, 4182, 2872, 3562, 7712, 1696, 370, 1088, 4183, # 6022
257
+ 4466, 3563, 579, 327, 440, 162, 2240, 269, 1937, 1374, 3461, 968, 3043, 56, 1396, 3090, # 6038
258
+ 2106, 3288, 3354, 7713, 1926, 2158, 4467, 2998, 7714, 3564, 7715, 7716, 3677, 4468, 2478, 7717, # 6054
259
+ 2791, 7718, 1650, 4469, 7719, 2603, 7720, 7721, 3983, 2661, 3355, 1149, 3356, 3984, 3805, 3985, # 6070
260
+ 7722, 1076, 49, 7723, 951, 3211, 3289, 3290, 450, 2837, 920, 7724, 1811, 2792, 2366, 4184, # 6086
261
+ 1908, 1138, 2367, 3806, 3462, 7725, 3212, 4470, 1909, 1147, 1518, 2423, 4471, 3807, 7726, 4472, # 6102
262
+ 2388, 2604, 260, 1795, 3213, 7727, 7728, 3808, 3291, 708, 7729, 3565, 1704, 7730, 3566, 1351, # 6118
263
+ 1618, 3357, 2999, 1886, 944, 4185, 3358, 4186, 3044, 3359, 4187, 7731, 3678, 422, 413, 1714, # 6134
264
+ 3292, 500, 2058, 2345, 4188, 2479, 7732, 1344, 1910, 954, 7733, 1668, 7734, 7735, 3986, 2404, # 6150
265
+ 4189, 3567, 3809, 4190, 7736, 2302, 1318, 2505, 3091, 133, 3092, 2873, 4473, 629, 31, 2838, # 6166
266
+ 2697, 3810, 4474, 850, 949, 4475, 3987, 2955, 1732, 2088, 4191, 1496, 1852, 7737, 3988, 620, # 6182
267
+ 3214, 981, 1242, 3679, 3360, 1619, 3680, 1643, 3293, 2139, 2452, 1970, 1719, 3463, 2168, 7738, # 6198
268
+ 3215, 7739, 7740, 3361, 1828, 7741, 1277, 4476, 1565, 2047, 7742, 1636, 3568, 3093, 7743, 869, # 6214
269
+ 2839, 655, 3811, 3812, 3094, 3989, 3000, 3813, 1310, 3569, 4477, 7744, 7745, 7746, 1733, 558, # 6230
270
+ 4478, 3681, 335, 1549, 3045, 1756, 4192, 3682, 1945, 3464, 1829, 1291, 1192, 470, 2726, 2107, # 6246
271
+ 2793, 913, 1054, 3990, 7747, 1027, 7748, 3046, 3991, 4479, 982, 2662, 3362, 3148, 3465, 3216, # 6262
272
+ 3217, 1946, 2794, 7749, 571, 4480, 7750, 1830, 7751, 3570, 2583, 1523, 2424, 7752, 2089, 984, # 6278
273
+ 4481, 3683, 1959, 7753, 3684, 852, 923, 2795, 3466, 3685, 969, 1519, 999, 2048, 2320, 1705, # 6294
274
+ 7754, 3095, 615, 1662, 151, 597, 3992, 2405, 2321, 1049, 275, 4482, 3686, 4193, 568, 3687, # 6310
275
+ 3571, 2480, 4194, 3688, 7755, 2425, 2270, 409, 3218, 7756, 1566, 2874, 3467, 1002, 769, 2840, # 6326
276
+ 194, 2090, 3149, 3689, 2222, 3294, 4195, 628, 1505, 7757, 7758, 1763, 2177, 3001, 3993, 521, # 6342
277
+ 1161, 2584, 1787, 2203, 2406, 4483, 3994, 1625, 4196, 4197, 412, 42, 3096, 464, 7759, 2632, # 6358
278
+ 4484, 3363, 1760, 1571, 2875, 3468, 2530, 1219, 2204, 3814, 2633, 2140, 2368, 4485, 4486, 3295, # 6374
279
+ 1651, 3364, 3572, 7760, 7761, 3573, 2481, 3469, 7762, 3690, 7763, 7764, 2271, 2091, 460, 7765, # 6390
280
+ 4487, 7766, 3002, 962, 588, 3574, 289, 3219, 2634, 1116, 52, 7767, 3047, 1796, 7768, 7769, # 6406
281
+ 7770, 1467, 7771, 1598, 1143, 3691, 4198, 1984, 1734, 1067, 4488, 1280, 3365, 465, 4489, 1572, # 6422
282
+ 510, 7772, 1927, 2241, 1812, 1644, 3575, 7773, 4490, 3692, 7774, 7775, 2663, 1573, 1534, 7776, # 6438
283
+ 7777, 4199, 536, 1807, 1761, 3470, 3815, 3150, 2635, 7778, 7779, 7780, 4491, 3471, 2915, 1911, # 6454
284
+ 2796, 7781, 3296, 1122, 377, 3220, 7782, 360, 7783, 7784, 4200, 1529, 551, 7785, 2059, 3693, # 6470
285
+ 1769, 2426, 7786, 2916, 4201, 3297, 3097, 2322, 2108, 2030, 4492, 1404, 136, 1468, 1479, 672, # 6486
286
+ 1171, 3221, 2303, 271, 3151, 7787, 2762, 7788, 2049, 678, 2727, 865, 1947, 4493, 7789, 2013, # 6502
287
+ 3995, 2956, 7790, 2728, 2223, 1397, 3048, 3694, 4494, 4495, 1735, 2917, 3366, 3576, 7791, 3816, # 6518
288
+ 509, 2841, 2453, 2876, 3817, 7792, 7793, 3152, 3153, 4496, 4202, 2531, 4497, 2304, 1166, 1010, # 6534
289
+ 552, 681, 1887, 7794, 7795, 2957, 2958, 3996, 1287, 1596, 1861, 3154, 358, 453, 736, 175, # 6550
290
+ 478, 1117, 905, 1167, 1097, 7796, 1853, 1530, 7797, 1706, 7798, 2178, 3472, 2287, 3695, 3473, # 6566
291
+ 3577, 4203, 2092, 4204, 7799, 3367, 1193, 2482, 4205, 1458, 2190, 2205, 1862, 1888, 1421, 3298, # 6582
292
+ 2918, 3049, 2179, 3474, 595, 2122, 7800, 3997, 7801, 7802, 4206, 1707, 2636, 223, 3696, 1359, # 6598
293
+ 751, 3098, 183, 3475, 7803, 2797, 3003, 419, 2369, 633, 704, 3818, 2389, 241, 7804, 7805, # 6614
294
+ 7806, 838, 3004, 3697, 2272, 2763, 2454, 3819, 1938, 2050, 3998, 1309, 3099, 2242, 1181, 7807, # 6630
295
+ 1136, 2206, 3820, 2370, 1446, 4207, 2305, 4498, 7808, 7809, 4208, 1055, 2605, 484, 3698, 7810, # 6646
296
+ 3999, 625, 4209, 2273, 3368, 1499, 4210, 4000, 7811, 4001, 4211, 3222, 2274, 2275, 3476, 7812, # 6662
297
+ 7813, 2764, 808, 2606, 3699, 3369, 4002, 4212, 3100, 2532, 526, 3370, 3821, 4213, 955, 7814, # 6678
298
+ 1620, 4214, 2637, 2427, 7815, 1429, 3700, 1669, 1831, 994, 928, 7816, 3578, 1260, 7817, 7818, # 6694
299
+ 7819, 1948, 2288, 741, 2919, 1626, 4215, 2729, 2455, 867, 1184, 362, 3371, 1392, 7820, 7821, # 6710
300
+ 4003, 4216, 1770, 1736, 3223, 2920, 4499, 4500, 1928, 2698, 1459, 1158, 7822, 3050, 3372, 2877, # 6726
301
+ 1292, 1929, 2506, 2842, 3701, 1985, 1187, 2071, 2014, 2607, 4217, 7823, 2566, 2507, 2169, 3702, # 6742
302
+ 2483, 3299, 7824, 3703, 4501, 7825, 7826, 666, 1003, 3005, 1022, 3579, 4218, 7827, 4502, 1813, # 6758
303
+ 2253, 574, 3822, 1603, 295, 1535, 705, 3823, 4219, 283, 858, 417, 7828, 7829, 3224, 4503, # 6774
304
+ 4504, 3051, 1220, 1889, 1046, 2276, 2456, 4004, 1393, 1599, 689, 2567, 388, 4220, 7830, 2484, # 6790
305
+ 802, 7831, 2798, 3824, 2060, 1405, 2254, 7832, 4505, 3825, 2109, 1052, 1345, 3225, 1585, 7833, # 6806
306
+ 809, 7834, 7835, 7836, 575, 2730, 3477, 956, 1552, 1469, 1144, 2323, 7837, 2324, 1560, 2457, # 6822
307
+ 3580, 3226, 4005, 616, 2207, 3155, 2180, 2289, 7838, 1832, 7839, 3478, 4506, 7840, 1319, 3704, # 6838
308
+ 3705, 1211, 3581, 1023, 3227, 1293, 2799, 7841, 7842, 7843, 3826, 607, 2306, 3827, 762, 2878, # 6854
309
+ 1439, 4221, 1360, 7844, 1485, 3052, 7845, 4507, 1038, 4222, 1450, 2061, 2638, 4223, 1379, 4508, # 6870
310
+ 2585, 7846, 7847, 4224, 1352, 1414, 2325, 2921, 1172, 7848, 7849, 3828, 3829, 7850, 1797, 1451, # 6886
311
+ 7851, 7852, 7853, 7854, 2922, 4006, 4007, 2485, 2346, 411, 4008, 4009, 3582, 3300, 3101, 4509, # 6902
312
+ 1561, 2664, 1452, 4010, 1375, 7855, 7856, 47, 2959, 316, 7857, 1406, 1591, 2923, 3156, 7858, # 6918
313
+ 1025, 2141, 3102, 3157, 354, 2731, 884, 2224, 4225, 2407, 508, 3706, 726, 3583, 996, 2428, # 6934
314
+ 3584, 729, 7859, 392, 2191, 1453, 4011, 4510, 3707, 7860, 7861, 2458, 3585, 2608, 1675, 2800, # 6950
315
+ 919, 2347, 2960, 2348, 1270, 4511, 4012, 73, 7862, 7863, 647, 7864, 3228, 2843, 2255, 1550, # 6966
316
+ 1346, 3006, 7865, 1332, 883, 3479, 7866, 7867, 7868, 7869, 3301, 2765, 7870, 1212, 831, 1347, # 6982
317
+ 4226, 4512, 2326, 3830, 1863, 3053, 720, 3831, 4513, 4514, 3832, 7871, 4227, 7872, 7873, 4515, # 6998
318
+ 7874, 7875, 1798, 4516, 3708, 2609, 4517, 3586, 1645, 2371, 7876, 7877, 2924, 669, 2208, 2665, # 7014
319
+ 2429, 7878, 2879, 7879, 7880, 1028, 3229, 7881, 4228, 2408, 7882, 2256, 1353, 7883, 7884, 4518, # 7030
320
+ 3158, 518, 7885, 4013, 7886, 4229, 1960, 7887, 2142, 4230, 7888, 7889, 3007, 2349, 2350, 3833, # 7046
321
+ 516, 1833, 1454, 4014, 2699, 4231, 4519, 2225, 2610, 1971, 1129, 3587, 7890, 2766, 7891, 2961, # 7062
322
+ 1422, 577, 1470, 3008, 1524, 3373, 7892, 7893, 432, 4232, 3054, 3480, 7894, 2586, 1455, 2508, # 7078
323
+ 2226, 1972, 1175, 7895, 1020, 2732, 4015, 3481, 4520, 7896, 2733, 7897, 1743, 1361, 3055, 3482, # 7094
324
+ 2639, 4016, 4233, 4521, 2290, 895, 924, 4234, 2170, 331, 2243, 3056, 166, 1627, 3057, 1098, # 7110
325
+ 7898, 1232, 2880, 2227, 3374, 4522, 657, 403, 1196, 2372, 542, 3709, 3375, 1600, 4235, 3483, # 7126
326
+ 7899, 4523, 2767, 3230, 576, 530, 1362, 7900, 4524, 2533, 2666, 3710, 4017, 7901, 842, 3834, # 7142
327
+ 7902, 2801, 2031, 1014, 4018, 213, 2700, 3376, 665, 621, 4236, 7903, 3711, 2925, 2430, 7904, # 7158
328
+ 2431, 3302, 3588, 3377, 7905, 4237, 2534, 4238, 4525, 3589, 1682, 4239, 3484, 1380, 7906, 724, # 7174
329
+ 2277, 600, 1670, 7907, 1337, 1233, 4526, 3103, 2244, 7908, 1621, 4527, 7909, 651, 4240, 7910, # 7190
330
+ 1612, 4241, 2611, 7911, 2844, 7912, 2734, 2307, 3058, 7913, 716, 2459, 3059, 174, 1255, 2701, # 7206
331
+ 4019, 3590, 548, 1320, 1398, 728, 4020, 1574, 7914, 1890, 1197, 3060, 4021, 7915, 3061, 3062, # 7222
332
+ 3712, 3591, 3713, 747, 7916, 635, 4242, 4528, 7917, 7918, 7919, 4243, 7920, 7921, 4529, 7922, # 7238
333
+ 3378, 4530, 2432, 451, 7923, 3714, 2535, 2072, 4244, 2735, 4245, 4022, 7924, 1764, 4531, 7925, # 7254
334
+ 4246, 350, 7926, 2278, 2390, 2486, 7927, 4247, 4023, 2245, 1434, 4024, 488, 4532, 458, 4248, # 7270
335
+ 4025, 3715, 771, 1330, 2391, 3835, 2568, 3159, 2159, 2409, 1553, 2667, 3160, 4249, 7928, 2487, # 7286
336
+ 2881, 2612, 1720, 2702, 4250, 3379, 4533, 7929, 2536, 4251, 7930, 3231, 4252, 2768, 7931, 2015, # 7302
337
+ 2736, 7932, 1155, 1017, 3716, 3836, 7933, 3303, 2308, 201, 1864, 4253, 1430, 7934, 4026, 7935, # 7318
338
+ 7936, 7937, 7938, 7939, 4254, 1604, 7940, 414, 1865, 371, 2587, 4534, 4535, 3485, 2016, 3104, # 7334
339
+ 4536, 1708, 960, 4255, 887, 389, 2171, 1536, 1663, 1721, 7941, 2228, 4027, 2351, 2926, 1580, # 7350
340
+ 7942, 7943, 7944, 1744, 7945, 2537, 4537, 4538, 7946, 4539, 7947, 2073, 7948, 7949, 3592, 3380, # 7366
341
+ 2882, 4256, 7950, 4257, 2640, 3381, 2802, 673, 2703, 2460, 709, 3486, 4028, 3593, 4258, 7951, # 7382
342
+ 1148, 502, 634, 7952, 7953, 1204, 4540, 3594, 1575, 4541, 2613, 3717, 7954, 3718, 3105, 948, # 7398
343
+ 3232, 121, 1745, 3837, 1110, 7955, 4259, 3063, 2509, 3009, 4029, 3719, 1151, 1771, 3838, 1488, # 7414
344
+ 4030, 1986, 7956, 2433, 3487, 7957, 7958, 2093, 7959, 4260, 3839, 1213, 1407, 2803, 531, 2737, # 7430
345
+ 2538, 3233, 1011, 1537, 7960, 2769, 4261, 3106, 1061, 7961, 3720, 3721, 1866, 2883, 7962, 2017, # 7446
346
+ 120, 4262, 4263, 2062, 3595, 3234, 2309, 3840, 2668, 3382, 1954, 4542, 7963, 7964, 3488, 1047, # 7462
347
+ 2704, 1266, 7965, 1368, 4543, 2845, 649, 3383, 3841, 2539, 2738, 1102, 2846, 2669, 7966, 7967, # 7478
348
+ 1999, 7968, 1111, 3596, 2962, 7969, 2488, 3842, 3597, 2804, 1854, 3384, 3722, 7970, 7971, 3385, # 7494
349
+ 2410, 2884, 3304, 3235, 3598, 7972, 2569, 7973, 3599, 2805, 4031, 1460, 856, 7974, 3600, 7975, # 7510
350
+ 2885, 2963, 7976, 2886, 3843, 7977, 4264, 632, 2510, 875, 3844, 1697, 3845, 2291, 7978, 7979, # 7526
351
+ 4544, 3010, 1239, 580, 4545, 4265, 7980, 914, 936, 2074, 1190, 4032, 1039, 2123, 7981, 7982, # 7542
352
+ 7983, 3386, 1473, 7984, 1354, 4266, 3846, 7985, 2172, 3064, 4033, 915, 3305, 4267, 4268, 3306, # 7558
353
+ 1605, 1834, 7986, 2739, 398, 3601, 4269, 3847, 4034, 328, 1912, 2847, 4035, 3848, 1331, 4270, # 7574
354
+ 3011, 937, 4271, 7987, 3602, 4036, 4037, 3387, 2160, 4546, 3388, 524, 742, 538, 3065, 1012, # 7590
355
+ 7988, 7989, 3849, 2461, 7990, 658, 1103, 225, 3850, 7991, 7992, 4547, 7993, 4548, 7994, 3236, # 7606
356
+ 1243, 7995, 4038, 963, 2246, 4549, 7996, 2705, 3603, 3161, 7997, 7998, 2588, 2327, 7999, 4550, # 7622
357
+ 8000, 8001, 8002, 3489, 3307, 957, 3389, 2540, 2032, 1930, 2927, 2462, 870, 2018, 3604, 1746, # 7638
358
+ 2770, 2771, 2434, 2463, 8003, 3851, 8004, 3723, 3107, 3724, 3490, 3390, 3725, 8005, 1179, 3066, # 7654
359
+ 8006, 3162, 2373, 4272, 3726, 2541, 3163, 3108, 2740, 4039, 8007, 3391, 1556, 2542, 2292, 977, # 7670
360
+ 2887, 2033, 4040, 1205, 3392, 8008, 1765, 3393, 3164, 2124, 1271, 1689, 714, 4551, 3491, 8009, # 7686
361
+ 2328, 3852, 533, 4273, 3605, 2181, 617, 8010, 2464, 3308, 3492, 2310, 8011, 8012, 3165, 8013, # 7702
362
+ 8014, 3853, 1987, 618, 427, 2641, 3493, 3394, 8015, 8016, 1244, 1690, 8017, 2806, 4274, 4552, # 7718
363
+ 8018, 3494, 8019, 8020, 2279, 1576, 473, 3606, 4275, 3395, 972, 8021, 3607, 8022, 3067, 8023, # 7734
364
+ 8024, 4553, 4554, 8025, 3727, 4041, 4042, 8026, 153, 4555, 356, 8027, 1891, 2888, 4276, 2143, # 7750
365
+ 408, 803, 2352, 8028, 3854, 8029, 4277, 1646, 2570, 2511, 4556, 4557, 3855, 8030, 3856, 4278, # 7766
366
+ 8031, 2411, 3396, 752, 8032, 8033, 1961, 2964, 8034, 746, 3012, 2465, 8035, 4279, 3728, 698, # 7782
367
+ 4558, 1892, 4280, 3608, 2543, 4559, 3609, 3857, 8036, 3166, 3397, 8037, 1823, 1302, 4043, 2706, # 7798
368
+ 3858, 1973, 4281, 8038, 4282, 3167, 823, 1303, 1288, 1236, 2848, 3495, 4044, 3398, 774, 3859, # 7814
369
+ 8039, 1581, 4560, 1304, 2849, 3860, 4561, 8040, 2435, 2161, 1083, 3237, 4283, 4045, 4284, 344, # 7830
370
+ 1173, 288, 2311, 454, 1683, 8041, 8042, 1461, 4562, 4046, 2589, 8043, 8044, 4563, 985, 894, # 7846
371
+ 8045, 3399, 3168, 8046, 1913, 2928, 3729, 1988, 8047, 2110, 1974, 8048, 4047, 8049, 2571, 1194, # 7862
372
+ 425, 8050, 4564, 3169, 1245, 3730, 4285, 8051, 8052, 2850, 8053, 636, 4565, 1855, 3861, 760, # 7878
373
+ 1799, 8054, 4286, 2209, 1508, 4566, 4048, 1893, 1684, 2293, 8055, 8056, 8057, 4287, 4288, 2210, # 7894
374
+ 479, 8058, 8059, 832, 8060, 4049, 2489, 8061, 2965, 2490, 3731, 990, 3109, 627, 1814, 2642, # 7910
375
+ 4289, 1582, 4290, 2125, 2111, 3496, 4567, 8062, 799, 4291, 3170, 8063, 4568, 2112, 1737, 3013, # 7926
376
+ 1018, 543, 754, 4292, 3309, 1676, 4569, 4570, 4050, 8064, 1489, 8065, 3497, 8066, 2614, 2889, # 7942
377
+ 4051, 8067, 8068, 2966, 8069, 8070, 8071, 8072, 3171, 4571, 4572, 2182, 1722, 8073, 3238, 3239, # 7958
378
+ 1842, 3610, 1715, 481, 365, 1975, 1856, 8074, 8075, 1962, 2491, 4573, 8076, 2126, 3611, 3240, # 7974
379
+ 433, 1894, 2063, 2075, 8077, 602, 2741, 8078, 8079, 8080, 8081, 8082, 3014, 1628, 3400, 8083, # 7990
380
+ 3172, 4574, 4052, 2890, 4575, 2512, 8084, 2544, 2772, 8085, 8086, 8087, 3310, 4576, 2891, 8088, # 8006
381
+ 4577, 8089, 2851, 4578, 4579, 1221, 2967, 4053, 2513, 8090, 8091, 8092, 1867, 1989, 8093, 8094, # 8022
382
+ 8095, 1895, 8096, 8097, 4580, 1896, 4054, 318, 8098, 2094, 4055, 4293, 8099, 8100, 485, 8101, # 8038
383
+ 938, 3862, 553, 2670, 116, 8102, 3863, 3612, 8103, 3498, 2671, 2773, 3401, 3311, 2807, 8104, # 8054
384
+ 3613, 2929, 4056, 1747, 2930, 2968, 8105, 8106, 207, 8107, 8108, 2672, 4581, 2514, 8109, 3015, # 8070
385
+ 890, 3614, 3864, 8110, 1877, 3732, 3402, 8111, 2183, 2353, 3403, 1652, 8112, 8113, 8114, 941, # 8086
386
+ 2294, 208, 3499, 4057, 2019, 330, 4294, 3865, 2892, 2492, 3733, 4295, 8115, 8116, 8117, 8118, # 8102
387
+ )
388
+ # fmt: on
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312freq.py ADDED
@@ -0,0 +1,284 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is Mozilla Communicator client code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ # GB2312 most frequently used character table
29
+ #
30
+ # Char to FreqOrder table , from hz6763
31
+
32
+ # 512 --> 0.79 -- 0.79
33
+ # 1024 --> 0.92 -- 0.13
34
+ # 2048 --> 0.98 -- 0.06
35
+ # 6768 --> 1.00 -- 0.02
36
+ #
37
+ # Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79
38
+ # Random Distribution Ration = 512 / (3755 - 512) = 0.157
39
+ #
40
+ # Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR
41
+
42
+ GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9
43
+
44
+ GB2312_TABLE_SIZE = 3760
45
+
46
+ # fmt: off
47
+ GB2312_CHAR_TO_FREQ_ORDER = (
48
+ 1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205,
49
+ 2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842,
50
+ 2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409,
51
+ 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670,
52
+ 1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820,
53
+ 1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585,
54
+ 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566,
55
+ 1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575,
56
+ 2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853,
57
+ 3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061,
58
+ 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155,
59
+ 1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406,
60
+ 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816,
61
+ 2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606,
62
+ 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023,
63
+ 2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414,
64
+ 1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513,
65
+ 3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052,
66
+ 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570,
67
+ 1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575,
68
+ 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250,
69
+ 2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506,
70
+ 1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26,
71
+ 3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835,
72
+ 1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686,
73
+ 2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054,
74
+ 1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894,
75
+ 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105,
76
+ 3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403,
77
+ 3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694,
78
+ 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873,
79
+ 3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940,
80
+ 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121,
81
+ 1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648,
82
+ 3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992,
83
+ 2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233,
84
+ 1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157,
85
+ 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807,
86
+ 1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094,
87
+ 4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258,
88
+ 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478,
89
+ 3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152,
90
+ 3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909,
91
+ 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272,
92
+ 1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221,
93
+ 2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252,
94
+ 1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301,
95
+ 1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254,
96
+ 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070,
97
+ 3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461,
98
+ 3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360,
99
+ 4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124,
100
+ 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535,
101
+ 3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243,
102
+ 1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713,
103
+ 1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071,
104
+ 4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442,
105
+ 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946,
106
+ 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257,
107
+ 3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180,
108
+ 1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427,
109
+ 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781,
110
+ 1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724,
111
+ 2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937,
112
+ 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943,
113
+ 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789,
114
+ 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552,
115
+ 3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246,
116
+ 4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451,
117
+ 3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310,
118
+ 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860,
119
+ 2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297,
120
+ 2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780,
121
+ 2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745,
122
+ 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936,
123
+ 2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032,
124
+ 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657,
125
+ 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414,
126
+ 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976,
127
+ 3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436,
128
+ 2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254,
129
+ 2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536,
130
+ 1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238,
131
+ 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059,
132
+ 2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741,
133
+ 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447,
134
+ 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601,
135
+ 1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269,
136
+ 1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894,
137
+ 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173,
138
+ 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994,
139
+ 1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956,
140
+ 2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437,
141
+ 3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154,
142
+ 2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240,
143
+ 2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143,
144
+ 2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634,
145
+ 3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472,
146
+ 1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541,
147
+ 1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143,
148
+ 2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312,
149
+ 1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414,
150
+ 3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754,
151
+ 1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424,
152
+ 1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302,
153
+ 3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739,
154
+ 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004,
155
+ 2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484,
156
+ 1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739,
157
+ 4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535,
158
+ 1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641,
159
+ 1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307,
160
+ 3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573,
161
+ 1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533,
162
+ 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965,
163
+ 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99,
164
+ 1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280,
165
+ 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505,
166
+ 1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012,
167
+ 1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039,
168
+ 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982,
169
+ 3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530,
170
+ 4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392,
171
+ 3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656,
172
+ 2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220,
173
+ 2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766,
174
+ 1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535,
175
+ 3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728,
176
+ 2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338,
177
+ 1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627,
178
+ 1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885,
179
+ 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411,
180
+ 2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671,
181
+ 2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162,
182
+ 3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774,
183
+ 4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524,
184
+ 3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346,
185
+ 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040,
186
+ 3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188,
187
+ 2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280,
188
+ 1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131,
189
+ 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947,
190
+ 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970,
191
+ 3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814,
192
+ 4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557,
193
+ 2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997,
194
+ 1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972,
195
+ 1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369,
196
+ 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376,
197
+ 1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480,
198
+ 3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610,
199
+ 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128,
200
+ 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769,
201
+ 1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207,
202
+ 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392,
203
+ 1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623,
204
+ 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782,
205
+ 2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650,
206
+ 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478,
207
+ 2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773,
208
+ 2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007,
209
+ 1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323,
210
+ 1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598,
211
+ 2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961,
212
+ 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302,
213
+ 1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409,
214
+ 1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683,
215
+ 2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191,
216
+ 2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616,
217
+ 3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302,
218
+ 1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774,
219
+ 4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147,
220
+ 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731,
221
+ 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464,
222
+ 3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377,
223
+ 1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315,
224
+ 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557,
225
+ 3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903,
226
+ 1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060,
227
+ 4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261,
228
+ 1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092,
229
+ 2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810,
230
+ 1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708,
231
+ 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658,
232
+ 1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871,
233
+ 3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503,
234
+ 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229,
235
+ 2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112,
236
+ 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504,
237
+ 1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389,
238
+ 1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27,
239
+ 1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542,
240
+ 3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861,
241
+ 2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845,
242
+ 3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700,
243
+ 3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469,
244
+ 3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582,
245
+ 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999,
246
+ 2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274,
247
+ 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020,
248
+ 2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601,
249
+ 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628,
250
+ 1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31,
251
+ 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668,
252
+ 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778,
253
+ 1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169,
254
+ 3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667,
255
+ 3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881,
256
+ 1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276,
257
+ 1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320,
258
+ 3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751,
259
+ 2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432,
260
+ 2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772,
261
+ 1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843,
262
+ 3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116,
263
+ 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904,
264
+ 4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652,
265
+ 1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664,
266
+ 2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770,
267
+ 3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283,
268
+ 3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626,
269
+ 1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713,
270
+ 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333,
271
+ 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062,
272
+ 2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555,
273
+ 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014,
274
+ 1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510,
275
+ 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015,
276
+ 1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459,
277
+ 1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390,
278
+ 1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238,
279
+ 1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232,
280
+ 1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624,
281
+ 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189,
282
+ 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, #last 512
283
+ )
284
+ # fmt: on
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/gb2312prober.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is mozilla.org code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ from .chardistribution import GB2312DistributionAnalysis
29
+ from .codingstatemachine import CodingStateMachine
30
+ from .mbcharsetprober import MultiByteCharSetProber
31
+ from .mbcssm import GB2312_SM_MODEL
32
+
33
+
34
+ class GB2312Prober(MultiByteCharSetProber):
35
+ def __init__(self) -> None:
36
+ super().__init__()
37
+ self.coding_sm = CodingStateMachine(GB2312_SM_MODEL)
38
+ self.distribution_analyzer = GB2312DistributionAnalysis()
39
+ self.reset()
40
+
41
+ @property
42
+ def charset_name(self) -> str:
43
+ return "GB2312"
44
+
45
+ @property
46
+ def language(self) -> str:
47
+ return "Chinese"
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/hebrewprober.py ADDED
@@ -0,0 +1,316 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is Mozilla Universal charset detector code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Shy Shalom
6
+ # Portions created by the Initial Developer are Copyright (C) 2005
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ from typing import Optional, Union
29
+
30
+ from .charsetprober import CharSetProber
31
+ from .enums import ProbingState
32
+ from .sbcharsetprober import SingleByteCharSetProber
33
+
34
+ # This prober doesn't actually recognize a language or a charset.
35
+ # It is a helper prober for the use of the Hebrew model probers
36
+
37
+ ### General ideas of the Hebrew charset recognition ###
38
+ #
39
+ # Four main charsets exist in Hebrew:
40
+ # "ISO-8859-8" - Visual Hebrew
41
+ # "windows-1255" - Logical Hebrew
42
+ # "ISO-8859-8-I" - Logical Hebrew
43
+ # "x-mac-hebrew" - ?? Logical Hebrew ??
44
+ #
45
+ # Both "ISO" charsets use a completely identical set of code points, whereas
46
+ # "windows-1255" and "x-mac-hebrew" are two different proper supersets of
47
+ # these code points. windows-1255 defines additional characters in the range
48
+ # 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific
49
+ # diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6.
50
+ # x-mac-hebrew defines similar additional code points but with a different
51
+ # mapping.
52
+ #
53
+ # As far as an average Hebrew text with no diacritics is concerned, all four
54
+ # charsets are identical with respect to code points. Meaning that for the
55
+ # main Hebrew alphabet, all four map the same values to all 27 Hebrew letters
56
+ # (including final letters).
57
+ #
58
+ # The dominant difference between these charsets is their directionality.
59
+ # "Visual" directionality means that the text is ordered as if the renderer is
60
+ # not aware of a BIDI rendering algorithm. The renderer sees the text and
61
+ # draws it from left to right. The text itself when ordered naturally is read
62
+ # backwards. A buffer of Visual Hebrew generally looks like so:
63
+ # "[last word of first line spelled backwards] [whole line ordered backwards
64
+ # and spelled backwards] [first word of first line spelled backwards]
65
+ # [end of line] [last word of second line] ... etc' "
66
+ # adding punctuation marks, numbers and English text to visual text is
67
+ # naturally also "visual" and from left to right.
68
+ #
69
+ # "Logical" directionality means the text is ordered "naturally" according to
70
+ # the order it is read. It is the responsibility of the renderer to display
71
+ # the text from right to left. A BIDI algorithm is used to place general
72
+ # punctuation marks, numbers and English text in the text.
73
+ #
74
+ # Texts in x-mac-hebrew are almost impossible to find on the Internet. From
75
+ # what little evidence I could find, it seems that its general directionality
76
+ # is Logical.
77
+ #
78
+ # To sum up all of the above, the Hebrew probing mechanism knows about two
79
+ # charsets:
80
+ # Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are
81
+ # backwards while line order is natural. For charset recognition purposes
82
+ # the line order is unimportant (In fact, for this implementation, even
83
+ # word order is unimportant).
84
+ # Logical Hebrew - "windows-1255" - normal, naturally ordered text.
85
+ #
86
+ # "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be
87
+ # specifically identified.
88
+ # "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew
89
+ # that contain special punctuation marks or diacritics is displayed with
90
+ # some unconverted characters showing as question marks. This problem might
91
+ # be corrected using another model prober for x-mac-hebrew. Due to the fact
92
+ # that x-mac-hebrew texts are so rare, writing another model prober isn't
93
+ # worth the effort and performance hit.
94
+ #
95
+ #### The Prober ####
96
+ #
97
+ # The prober is divided between two SBCharSetProbers and a HebrewProber,
98
+ # all of which are managed, created, fed data, inquired and deleted by the
99
+ # SBCSGroupProber. The two SBCharSetProbers identify that the text is in
100
+ # fact some kind of Hebrew, Logical or Visual. The final decision about which
101
+ # one is it is made by the HebrewProber by combining final-letter scores
102
+ # with the scores of the two SBCharSetProbers to produce a final answer.
103
+ #
104
+ # The SBCSGroupProber is responsible for stripping the original text of HTML
105
+ # tags, English characters, numbers, low-ASCII punctuation characters, spaces
106
+ # and new lines. It reduces any sequence of such characters to a single space.
107
+ # The buffer fed to each prober in the SBCS group prober is pure text in
108
+ # high-ASCII.
109
+ # The two SBCharSetProbers (model probers) share the same language model:
110
+ # Win1255Model.
111
+ # The first SBCharSetProber uses the model normally as any other
112
+ # SBCharSetProber does, to recognize windows-1255, upon which this model was
113
+ # built. The second SBCharSetProber is told to make the pair-of-letter
114
+ # lookup in the language model backwards. This in practice exactly simulates
115
+ # a visual Hebrew model using the windows-1255 logical Hebrew model.
116
+ #
117
+ # The HebrewProber is not using any language model. All it does is look for
118
+ # final-letter evidence suggesting the text is either logical Hebrew or visual
119
+ # Hebrew. Disjointed from the model probers, the results of the HebrewProber
120
+ # alone are meaningless. HebrewProber always returns 0.00 as confidence
121
+ # since it never identifies a charset by itself. Instead, the pointer to the
122
+ # HebrewProber is passed to the model probers as a helper "Name Prober".
123
+ # When the Group prober receives a positive identification from any prober,
124
+ # it asks for the name of the charset identified. If the prober queried is a
125
+ # Hebrew model prober, the model prober forwards the call to the
126
+ # HebrewProber to make the final decision. In the HebrewProber, the
127
+ # decision is made according to the final-letters scores maintained and Both
128
+ # model probers scores. The answer is returned in the form of the name of the
129
+ # charset identified, either "windows-1255" or "ISO-8859-8".
130
+
131
+
132
+ class HebrewProber(CharSetProber):
133
+ SPACE = 0x20
134
+ # windows-1255 / ISO-8859-8 code points of interest
135
+ FINAL_KAF = 0xEA
136
+ NORMAL_KAF = 0xEB
137
+ FINAL_MEM = 0xED
138
+ NORMAL_MEM = 0xEE
139
+ FINAL_NUN = 0xEF
140
+ NORMAL_NUN = 0xF0
141
+ FINAL_PE = 0xF3
142
+ NORMAL_PE = 0xF4
143
+ FINAL_TSADI = 0xF5
144
+ NORMAL_TSADI = 0xF6
145
+
146
+ # Minimum Visual vs Logical final letter score difference.
147
+ # If the difference is below this, don't rely solely on the final letter score
148
+ # distance.
149
+ MIN_FINAL_CHAR_DISTANCE = 5
150
+
151
+ # Minimum Visual vs Logical model score difference.
152
+ # If the difference is below this, don't rely at all on the model score
153
+ # distance.
154
+ MIN_MODEL_DISTANCE = 0.01
155
+
156
+ VISUAL_HEBREW_NAME = "ISO-8859-8"
157
+ LOGICAL_HEBREW_NAME = "windows-1255"
158
+
159
+ def __init__(self) -> None:
160
+ super().__init__()
161
+ self._final_char_logical_score = 0
162
+ self._final_char_visual_score = 0
163
+ self._prev = self.SPACE
164
+ self._before_prev = self.SPACE
165
+ self._logical_prober: Optional[SingleByteCharSetProber] = None
166
+ self._visual_prober: Optional[SingleByteCharSetProber] = None
167
+ self.reset()
168
+
169
+ def reset(self) -> None:
170
+ self._final_char_logical_score = 0
171
+ self._final_char_visual_score = 0
172
+ # The two last characters seen in the previous buffer,
173
+ # mPrev and mBeforePrev are initialized to space in order to simulate
174
+ # a word delimiter at the beginning of the data
175
+ self._prev = self.SPACE
176
+ self._before_prev = self.SPACE
177
+ # These probers are owned by the group prober.
178
+
179
+ def set_model_probers(
180
+ self,
181
+ logical_prober: SingleByteCharSetProber,
182
+ visual_prober: SingleByteCharSetProber,
183
+ ) -> None:
184
+ self._logical_prober = logical_prober
185
+ self._visual_prober = visual_prober
186
+
187
+ def is_final(self, c: int) -> bool:
188
+ return c in [
189
+ self.FINAL_KAF,
190
+ self.FINAL_MEM,
191
+ self.FINAL_NUN,
192
+ self.FINAL_PE,
193
+ self.FINAL_TSADI,
194
+ ]
195
+
196
+ def is_non_final(self, c: int) -> bool:
197
+ # The normal Tsadi is not a good Non-Final letter due to words like
198
+ # 'lechotet' (to chat) containing an apostrophe after the tsadi. This
199
+ # apostrophe is converted to a space in FilterWithoutEnglishLetters
200
+ # causing the Non-Final tsadi to appear at an end of a word even
201
+ # though this is not the case in the original text.
202
+ # The letters Pe and Kaf rarely display a related behavior of not being
203
+ # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak'
204
+ # for example legally end with a Non-Final Pe or Kaf. However, the
205
+ # benefit of these letters as Non-Final letters outweighs the damage
206
+ # since these words are quite rare.
207
+ return c in [self.NORMAL_KAF, self.NORMAL_MEM, self.NORMAL_NUN, self.NORMAL_PE]
208
+
209
+ def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState:
210
+ # Final letter analysis for logical-visual decision.
211
+ # Look for evidence that the received buffer is either logical Hebrew
212
+ # or visual Hebrew.
213
+ # The following cases are checked:
214
+ # 1) A word longer than 1 letter, ending with a final letter. This is
215
+ # an indication that the text is laid out "naturally" since the
216
+ # final letter really appears at the end. +1 for logical score.
217
+ # 2) A word longer than 1 letter, ending with a Non-Final letter. In
218
+ # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi,
219
+ # should not end with the Non-Final form of that letter. Exceptions
220
+ # to this rule are mentioned above in isNonFinal(). This is an
221
+ # indication that the text is laid out backwards. +1 for visual
222
+ # score
223
+ # 3) A word longer than 1 letter, starting with a final letter. Final
224
+ # letters should not appear at the beginning of a word. This is an
225
+ # indication that the text is laid out backwards. +1 for visual
226
+ # score.
227
+ #
228
+ # The visual score and logical score are accumulated throughout the
229
+ # text and are finally checked against each other in GetCharSetName().
230
+ # No checking for final letters in the middle of words is done since
231
+ # that case is not an indication for either Logical or Visual text.
232
+ #
233
+ # We automatically filter out all 7-bit characters (replace them with
234
+ # spaces) so the word boundary detection works properly. [MAP]
235
+
236
+ if self.state == ProbingState.NOT_ME:
237
+ # Both model probers say it's not them. No reason to continue.
238
+ return ProbingState.NOT_ME
239
+
240
+ byte_str = self.filter_high_byte_only(byte_str)
241
+
242
+ for cur in byte_str:
243
+ if cur == self.SPACE:
244
+ # We stand on a space - a word just ended
245
+ if self._before_prev != self.SPACE:
246
+ # next-to-last char was not a space so self._prev is not a
247
+ # 1 letter word
248
+ if self.is_final(self._prev):
249
+ # case (1) [-2:not space][-1:final letter][cur:space]
250
+ self._final_char_logical_score += 1
251
+ elif self.is_non_final(self._prev):
252
+ # case (2) [-2:not space][-1:Non-Final letter][
253
+ # cur:space]
254
+ self._final_char_visual_score += 1
255
+ else:
256
+ # Not standing on a space
257
+ if (
258
+ (self._before_prev == self.SPACE)
259
+ and (self.is_final(self._prev))
260
+ and (cur != self.SPACE)
261
+ ):
262
+ # case (3) [-2:space][-1:final letter][cur:not space]
263
+ self._final_char_visual_score += 1
264
+ self._before_prev = self._prev
265
+ self._prev = cur
266
+
267
+ # Forever detecting, till the end or until both model probers return
268
+ # ProbingState.NOT_ME (handled above)
269
+ return ProbingState.DETECTING
270
+
271
+ @property
272
+ def charset_name(self) -> str:
273
+ assert self._logical_prober is not None
274
+ assert self._visual_prober is not None
275
+
276
+ # Make the decision: is it Logical or Visual?
277
+ # If the final letter score distance is dominant enough, rely on it.
278
+ finalsub = self._final_char_logical_score - self._final_char_visual_score
279
+ if finalsub >= self.MIN_FINAL_CHAR_DISTANCE:
280
+ return self.LOGICAL_HEBREW_NAME
281
+ if finalsub <= -self.MIN_FINAL_CHAR_DISTANCE:
282
+ return self.VISUAL_HEBREW_NAME
283
+
284
+ # It's not dominant enough, try to rely on the model scores instead.
285
+ modelsub = (
286
+ self._logical_prober.get_confidence() - self._visual_prober.get_confidence()
287
+ )
288
+ if modelsub > self.MIN_MODEL_DISTANCE:
289
+ return self.LOGICAL_HEBREW_NAME
290
+ if modelsub < -self.MIN_MODEL_DISTANCE:
291
+ return self.VISUAL_HEBREW_NAME
292
+
293
+ # Still no good, back to final letter distance, maybe it'll save the
294
+ # day.
295
+ if finalsub < 0.0:
296
+ return self.VISUAL_HEBREW_NAME
297
+
298
+ # (finalsub > 0 - Logical) or (don't know what to do) default to
299
+ # Logical.
300
+ return self.LOGICAL_HEBREW_NAME
301
+
302
+ @property
303
+ def language(self) -> str:
304
+ return "Hebrew"
305
+
306
+ @property
307
+ def state(self) -> ProbingState:
308
+ assert self._logical_prober is not None
309
+ assert self._visual_prober is not None
310
+
311
+ # Remain active as long as any of the model probers are active.
312
+ if (self._logical_prober.state == ProbingState.NOT_ME) and (
313
+ self._visual_prober.state == ProbingState.NOT_ME
314
+ ):
315
+ return ProbingState.NOT_ME
316
+ return ProbingState.DETECTING
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/jisfreq.py ADDED
@@ -0,0 +1,325 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is Mozilla Communicator client code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ # Sampling from about 20M text materials include literature and computer technology
29
+ #
30
+ # Japanese frequency table, applied to both S-JIS and EUC-JP
31
+ # They are sorted in order.
32
+
33
+ # 128 --> 0.77094
34
+ # 256 --> 0.85710
35
+ # 512 --> 0.92635
36
+ # 1024 --> 0.97130
37
+ # 2048 --> 0.99431
38
+ #
39
+ # Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58
40
+ # Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191
41
+ #
42
+ # Typical Distribution Ratio, 25% of IDR
43
+
44
+ JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0
45
+
46
+ # Char to FreqOrder table ,
47
+ JIS_TABLE_SIZE = 4368
48
+
49
+ # fmt: off
50
+ JIS_CHAR_TO_FREQ_ORDER = (
51
+ 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16
52
+ 3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32
53
+ 1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48
54
+ 2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64
55
+ 2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80
56
+ 5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96
57
+ 1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112
58
+ 5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128
59
+ 5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144
60
+ 5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160
61
+ 5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176
62
+ 5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192
63
+ 5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208
64
+ 1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224
65
+ 1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240
66
+ 1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256
67
+ 2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272
68
+ 3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288
69
+ 3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304
70
+ 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320
71
+ 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336
72
+ 1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352
73
+ 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368
74
+ 5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384
75
+ 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400
76
+ 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416
77
+ 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432
78
+ 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448
79
+ 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464
80
+ 5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480
81
+ 5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496
82
+ 5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512
83
+ 4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528
84
+ 5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544
85
+ 5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560
86
+ 5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576
87
+ 5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592
88
+ 5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608
89
+ 5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624
90
+ 5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640
91
+ 5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656
92
+ 5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672
93
+ 3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688
94
+ 5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704
95
+ 5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720
96
+ 5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736
97
+ 5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752
98
+ 5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768
99
+ 5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784
100
+ 5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800
101
+ 5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816
102
+ 5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832
103
+ 5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848
104
+ 5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864
105
+ 5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880
106
+ 5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896
107
+ 5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912
108
+ 5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928
109
+ 5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944
110
+ 5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960
111
+ 5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976
112
+ 5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992
113
+ 5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008
114
+ 5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024
115
+ 5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040
116
+ 5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056
117
+ 5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072
118
+ 5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088
119
+ 5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104
120
+ 5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120
121
+ 5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136
122
+ 5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152
123
+ 5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168
124
+ 5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184
125
+ 5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200
126
+ 5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216
127
+ 5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232
128
+ 5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248
129
+ 5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264
130
+ 5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280
131
+ 5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296
132
+ 6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312
133
+ 6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328
134
+ 6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344
135
+ 6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360
136
+ 6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376
137
+ 6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392
138
+ 6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408
139
+ 6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424
140
+ 4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440
141
+ 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456
142
+ 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472
143
+ 1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488
144
+ 1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504
145
+ 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520
146
+ 3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536
147
+ 3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552
148
+ 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568
149
+ 3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584
150
+ 3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600
151
+ 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616
152
+ 2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632
153
+ 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648
154
+ 3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664
155
+ 1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680
156
+ 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696
157
+ 1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712
158
+ 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728
159
+ 2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744
160
+ 2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760
161
+ 2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776
162
+ 2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792
163
+ 1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808
164
+ 1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824
165
+ 1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840
166
+ 1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856
167
+ 2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872
168
+ 1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888
169
+ 2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904
170
+ 1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920
171
+ 1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936
172
+ 1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952
173
+ 1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968
174
+ 1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984
175
+ 1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000
176
+ 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016
177
+ 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032
178
+ 1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048
179
+ 2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064
180
+ 2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080
181
+ 2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096
182
+ 3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112
183
+ 3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128
184
+ 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144
185
+ 3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160
186
+ 1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176
187
+ 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192
188
+ 2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208
189
+ 1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224
190
+ 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240
191
+ 3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256
192
+ 4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272
193
+ 2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288
194
+ 1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304
195
+ 2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320
196
+ 1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336
197
+ 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352
198
+ 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368
199
+ 1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384
200
+ 2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400
201
+ 2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416
202
+ 2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432
203
+ 3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448
204
+ 1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464
205
+ 2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480
206
+ 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496
207
+ 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512
208
+ 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528
209
+ 1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544
210
+ 2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560
211
+ 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576
212
+ 1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592
213
+ 1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608
214
+ 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624
215
+ 1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640
216
+ 1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656
217
+ 1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672
218
+ 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688
219
+ 2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704
220
+ 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720
221
+ 2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736
222
+ 3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752
223
+ 2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768
224
+ 1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784
225
+ 6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800
226
+ 1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816
227
+ 2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832
228
+ 1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848
229
+ 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864
230
+ 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880
231
+ 3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896
232
+ 3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912
233
+ 1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928
234
+ 1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944
235
+ 1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960
236
+ 1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976
237
+ 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992
238
+ 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008
239
+ 2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024
240
+ 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040
241
+ 3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056
242
+ 2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072
243
+ 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088
244
+ 1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104
245
+ 2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120
246
+ 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136
247
+ 1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152
248
+ 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168
249
+ 4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184
250
+ 2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200
251
+ 1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216
252
+ 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232
253
+ 1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248
254
+ 2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264
255
+ 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280
256
+ 6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296
257
+ 1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312
258
+ 1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328
259
+ 2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344
260
+ 3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360
261
+ 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376
262
+ 3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392
263
+ 1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408
264
+ 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424
265
+ 1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440
266
+ 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456
267
+ 3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472
268
+ 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488
269
+ 2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504
270
+ 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520
271
+ 4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536
272
+ 2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552
273
+ 1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568
274
+ 1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584
275
+ 1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600
276
+ 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616
277
+ 1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632
278
+ 3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648
279
+ 1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664
280
+ 3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680
281
+ 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696
282
+ 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712
283
+ 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728
284
+ 2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744
285
+ 1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760
286
+ 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776
287
+ 1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792
288
+ 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808
289
+ 1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824
290
+ 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840
291
+ 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856
292
+ 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872
293
+ 1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888
294
+ 1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904
295
+ 2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920
296
+ 4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936
297
+ 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952
298
+ 1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968
299
+ 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984
300
+ 1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000
301
+ 3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016
302
+ 1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032
303
+ 2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048
304
+ 2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064
305
+ 1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080
306
+ 1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096
307
+ 2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112
308
+ 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128
309
+ 2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144
310
+ 1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160
311
+ 1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176
312
+ 1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192
313
+ 1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208
314
+ 3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224
315
+ 2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240
316
+ 2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256
317
+ 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272
318
+ 3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288
319
+ 3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304
320
+ 1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320
321
+ 2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336
322
+ 1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352
323
+ 2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512
324
+ )
325
+ # fmt: on
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/jpcntx.py ADDED
@@ -0,0 +1,238 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is Mozilla Communicator client code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ from typing import List, Tuple, Union
29
+
30
+ # This is hiragana 2-char sequence table, the number in each cell represents its frequency category
31
+ # fmt: off
32
+ jp2_char_context = (
33
+ (0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1),
34
+ (2, 4, 0, 4, 0, 3, 0, 4, 0, 3, 4, 4, 4, 2, 4, 3, 3, 4, 3, 2, 3, 3, 4, 2, 3, 3, 3, 2, 4, 1, 4, 3, 3, 1, 5, 4, 3, 4, 3, 4, 3, 5, 3, 0, 3, 5, 4, 2, 0, 3, 1, 0, 3, 3, 0, 3, 3, 0, 1, 1, 0, 4, 3, 0, 3, 3, 0, 4, 0, 2, 0, 3, 5, 5, 5, 5, 4, 0, 4, 1, 0, 3, 4),
35
+ (0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2),
36
+ (0, 4, 0, 5, 0, 5, 0, 4, 0, 4, 5, 4, 4, 3, 5, 3, 5, 1, 5, 3, 4, 3, 4, 4, 3, 4, 3, 3, 4, 3, 5, 4, 4, 3, 5, 5, 3, 5, 5, 5, 3, 5, 5, 3, 4, 5, 5, 3, 1, 3, 2, 0, 3, 4, 0, 4, 2, 0, 4, 2, 1, 5, 3, 2, 3, 5, 0, 4, 0, 2, 0, 5, 4, 4, 5, 4, 5, 0, 4, 0, 0, 4, 4),
37
+ (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
38
+ (0, 3, 0, 4, 0, 3, 0, 3, 0, 4, 5, 4, 3, 3, 3, 3, 4, 3, 5, 4, 4, 3, 5, 4, 4, 3, 4, 3, 4, 4, 4, 4, 5, 3, 4, 4, 3, 4, 5, 5, 4, 5, 5, 1, 4, 5, 4, 3, 0, 3, 3, 1, 3, 3, 0, 4, 4, 0, 3, 3, 1, 5, 3, 3, 3, 5, 0, 4, 0, 3, 0, 4, 4, 3, 4, 3, 3, 0, 4, 1, 1, 3, 4),
39
+ (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
40
+ (0, 4, 0, 3, 0, 3, 0, 4, 0, 3, 4, 4, 3, 2, 2, 1, 2, 1, 3, 1, 3, 3, 3, 3, 3, 4, 3, 1, 3, 3, 5, 3, 3, 0, 4, 3, 0, 5, 4, 3, 3, 5, 4, 4, 3, 4, 4, 5, 0, 1, 2, 0, 1, 2, 0, 2, 2, 0, 1, 0, 0, 5, 2, 2, 1, 4, 0, 3, 0, 1, 0, 4, 4, 3, 5, 4, 3, 0, 2, 1, 0, 4, 3),
41
+ (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
42
+ (0, 3, 0, 5, 0, 4, 0, 2, 1, 4, 4, 2, 4, 1, 4, 2, 4, 2, 4, 3, 3, 3, 4, 3, 3, 3, 3, 1, 4, 2, 3, 3, 3, 1, 4, 4, 1, 1, 1, 4, 3, 3, 2, 0, 2, 4, 3, 2, 0, 3, 3, 0, 3, 1, 1, 0, 0, 0, 3, 3, 0, 4, 2, 2, 3, 4, 0, 4, 0, 3, 0, 4, 4, 5, 3, 4, 4, 0, 3, 0, 0, 1, 4),
43
+ (1, 4, 0, 4, 0, 4, 0, 4, 0, 3, 5, 4, 4, 3, 4, 3, 5, 4, 3, 3, 4, 3, 5, 4, 4, 4, 4, 3, 4, 2, 4, 3, 3, 1, 5, 4, 3, 2, 4, 5, 4, 5, 5, 4, 4, 5, 4, 4, 0, 3, 2, 2, 3, 3, 0, 4, 3, 1, 3, 2, 1, 4, 3, 3, 4, 5, 0, 3, 0, 2, 0, 4, 5, 5, 4, 5, 4, 0, 4, 0, 0, 5, 4),
44
+ (0, 5, 0, 5, 0, 4, 0, 3, 0, 4, 4, 3, 4, 3, 3, 3, 4, 0, 4, 4, 4, 3, 4, 3, 4, 3, 3, 1, 4, 2, 4, 3, 4, 0, 5, 4, 1, 4, 5, 4, 4, 5, 3, 2, 4, 3, 4, 3, 2, 4, 1, 3, 3, 3, 2, 3, 2, 0, 4, 3, 3, 4, 3, 3, 3, 4, 0, 4, 0, 3, 0, 4, 5, 4, 4, 4, 3, 0, 4, 1, 0, 1, 3),
45
+ (0, 3, 1, 4, 0, 3, 0, 2, 0, 3, 4, 4, 3, 1, 4, 2, 3, 3, 4, 3, 4, 3, 4, 3, 4, 4, 3, 2, 3, 1, 5, 4, 4, 1, 4, 4, 3, 5, 4, 4, 3, 5, 5, 4, 3, 4, 4, 3, 1, 2, 3, 1, 2, 2, 0, 3, 2, 0, 3, 1, 0, 5, 3, 3, 3, 4, 3, 3, 3, 3, 4, 4, 4, 4, 5, 4, 2, 0, 3, 3, 2, 4, 3),
46
+ (0, 2, 0, 3, 0, 1, 0, 1, 0, 0, 3, 2, 0, 0, 2, 0, 1, 0, 2, 1, 3, 3, 3, 1, 2, 3, 1, 0, 1, 0, 4, 2, 1, 1, 3, 3, 0, 4, 3, 3, 1, 4, 3, 3, 0, 3, 3, 2, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 4, 1, 0, 2, 3, 2, 2, 2, 1, 3, 3, 3, 4, 4, 3, 2, 0, 3, 1, 0, 3, 3),
47
+ (0, 4, 0, 4, 0, 3, 0, 3, 0, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 3, 4, 2, 4, 3, 4, 3, 3, 2, 4, 3, 4, 5, 4, 1, 4, 5, 3, 5, 4, 5, 3, 5, 4, 0, 3, 5, 5, 3, 1, 3, 3, 2, 2, 3, 0, 3, 4, 1, 3, 3, 2, 4, 3, 3, 3, 4, 0, 4, 0, 3, 0, 4, 5, 4, 4, 5, 3, 0, 4, 1, 0, 3, 4),
48
+ (0, 2, 0, 3, 0, 3, 0, 0, 0, 2, 2, 2, 1, 0, 1, 0, 0, 0, 3, 0, 3, 0, 3, 0, 1, 3, 1, 0, 3, 1, 3, 3, 3, 1, 3, 3, 3, 0, 1, 3, 1, 3, 4, 0, 0, 3, 1, 1, 0, 3, 2, 0, 0, 0, 0, 1, 3, 0, 1, 0, 0, 3, 3, 2, 0, 3, 0, 0, 0, 0, 0, 3, 4, 3, 4, 3, 3, 0, 3, 0, 0, 2, 3),
49
+ (2, 3, 0, 3, 0, 2, 0, 1, 0, 3, 3, 4, 3, 1, 3, 1, 1, 1, 3, 1, 4, 3, 4, 3, 3, 3, 0, 0, 3, 1, 5, 4, 3, 1, 4, 3, 2, 5, 5, 4, 4, 4, 4, 3, 3, 4, 4, 4, 0, 2, 1, 1, 3, 2, 0, 1, 2, 0, 0, 1, 0, 4, 1, 3, 3, 3, 0, 3, 0, 1, 0, 4, 4, 4, 5, 5, 3, 0, 2, 0, 0, 4, 4),
50
+ (0, 2, 0, 1, 0, 3, 1, 3, 0, 2, 3, 3, 3, 0, 3, 1, 0, 0, 3, 0, 3, 2, 3, 1, 3, 2, 1, 1, 0, 0, 4, 2, 1, 0, 2, 3, 1, 4, 3, 2, 0, 4, 4, 3, 1, 3, 1, 3, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4, 1, 1, 1, 2, 0, 3, 0, 0, 0, 3, 4, 2, 4, 3, 2, 0, 1, 0, 0, 3, 3),
51
+ (0, 1, 0, 4, 0, 5, 0, 4, 0, 2, 4, 4, 2, 3, 3, 2, 3, 3, 5, 3, 3, 3, 4, 3, 4, 2, 3, 0, 4, 3, 3, 3, 4, 1, 4, 3, 2, 1, 5, 5, 3, 4, 5, 1, 3, 5, 4, 2, 0, 3, 3, 0, 1, 3, 0, 4, 2, 0, 1, 3, 1, 4, 3, 3, 3, 3, 0, 3, 0, 1, 0, 3, 4, 4, 4, 5, 5, 0, 3, 0, 1, 4, 5),
52
+ (0, 2, 0, 3, 0, 3, 0, 0, 0, 2, 3, 1, 3, 0, 4, 0, 1, 1, 3, 0, 3, 4, 3, 2, 3, 1, 0, 3, 3, 2, 3, 1, 3, 0, 2, 3, 0, 2, 1, 4, 1, 2, 2, 0, 0, 3, 3, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 2, 2, 0, 3, 2, 1, 3, 3, 0, 2, 0, 2, 0, 0, 3, 3, 1, 2, 4, 0, 3, 0, 2, 2, 3),
53
+ (2, 4, 0, 5, 0, 4, 0, 4, 0, 2, 4, 4, 4, 3, 4, 3, 3, 3, 1, 2, 4, 3, 4, 3, 4, 4, 5, 0, 3, 3, 3, 3, 2, 0, 4, 3, 1, 4, 3, 4, 1, 4, 4, 3, 3, 4, 4, 3, 1, 2, 3, 0, 4, 2, 0, 4, 1, 0, 3, 3, 0, 4, 3, 3, 3, 4, 0, 4, 0, 2, 0, 3, 5, 3, 4, 5, 2, 0, 3, 0, 0, 4, 5),
54
+ (0, 3, 0, 4, 0, 1, 0, 1, 0, 1, 3, 2, 2, 1, 3, 0, 3, 0, 2, 0, 2, 0, 3, 0, 2, 0, 0, 0, 1, 0, 1, 1, 0, 0, 3, 1, 0, 0, 0, 4, 0, 3, 1, 0, 2, 1, 3, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 2, 2, 3, 1, 0, 3, 0, 0, 0, 1, 4, 4, 4, 3, 0, 0, 4, 0, 0, 1, 4),
55
+ (1, 4, 1, 5, 0, 3, 0, 3, 0, 4, 5, 4, 4, 3, 5, 3, 3, 4, 4, 3, 4, 1, 3, 3, 3, 3, 2, 1, 4, 1, 5, 4, 3, 1, 4, 4, 3, 5, 4, 4, 3, 5, 4, 3, 3, 4, 4, 4, 0, 3, 3, 1, 2, 3, 0, 3, 1, 0, 3, 3, 0, 5, 4, 4, 4, 4, 4, 4, 3, 3, 5, 4, 4, 3, 3, 5, 4, 0, 3, 2, 0, 4, 4),
56
+ (0, 2, 0, 3, 0, 1, 0, 0, 0, 1, 3, 3, 3, 2, 4, 1, 3, 0, 3, 1, 3, 0, 2, 2, 1, 1, 0, 0, 2, 0, 4, 3, 1, 0, 4, 3, 0, 4, 4, 4, 1, 4, 3, 1, 1, 3, 3, 1, 0, 2, 0, 0, 1, 3, 0, 0, 0, 0, 2, 0, 0, 4, 3, 2, 4, 3, 5, 4, 3, 3, 3, 4, 3, 3, 4, 3, 3, 0, 2, 1, 0, 3, 3),
57
+ (0, 2, 0, 4, 0, 3, 0, 2, 0, 2, 5, 5, 3, 4, 4, 4, 4, 1, 4, 3, 3, 0, 4, 3, 4, 3, 1, 3, 3, 2, 4, 3, 0, 3, 4, 3, 0, 3, 4, 4, 2, 4, 4, 0, 4, 5, 3, 3, 2, 2, 1, 1, 1, 2, 0, 1, 5, 0, 3, 3, 2, 4, 3, 3, 3, 4, 0, 3, 0, 2, 0, 4, 4, 3, 5, 5, 0, 0, 3, 0, 2, 3, 3),
58
+ (0, 3, 0, 4, 0, 3, 0, 1, 0, 3, 4, 3, 3, 1, 3, 3, 3, 0, 3, 1, 3, 0, 4, 3, 3, 1, 1, 0, 3, 0, 3, 3, 0, 0, 4, 4, 0, 1, 5, 4, 3, 3, 5, 0, 3, 3, 4, 3, 0, 2, 0, 1, 1, 1, 0, 1, 3, 0, 1, 2, 1, 3, 3, 2, 3, 3, 0, 3, 0, 1, 0, 1, 3, 3, 4, 4, 1, 0, 1, 2, 2, 1, 3),
59
+ (0, 1, 0, 4, 0, 4, 0, 3, 0, 1, 3, 3, 3, 2, 3, 1, 1, 0, 3, 0, 3, 3, 4, 3, 2, 4, 2, 0, 1, 0, 4, 3, 2, 0, 4, 3, 0, 5, 3, 3, 2, 4, 4, 4, 3, 3, 3, 4, 0, 1, 3, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 4, 2, 3, 3, 3, 0, 3, 0, 0, 0, 4, 4, 4, 5, 3, 2, 0, 3, 3, 0, 3, 5),
60
+ (0, 2, 0, 3, 0, 0, 0, 3, 0, 1, 3, 0, 2, 0, 0, 0, 1, 0, 3, 1, 1, 3, 3, 0, 0, 3, 0, 0, 3, 0, 2, 3, 1, 0, 3, 1, 0, 3, 3, 2, 0, 4, 2, 2, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 1, 0, 1, 0, 0, 0, 1, 3, 1, 2, 0, 0, 0, 1, 0, 0, 1, 4),
61
+ (0, 3, 0, 3, 0, 5, 0, 1, 0, 2, 4, 3, 1, 3, 3, 2, 1, 1, 5, 2, 1, 0, 5, 1, 2, 0, 0, 0, 3, 3, 2, 2, 3, 2, 4, 3, 0, 0, 3, 3, 1, 3, 3, 0, 2, 5, 3, 4, 0, 3, 3, 0, 1, 2, 0, 2, 2, 0, 3, 2, 0, 2, 2, 3, 3, 3, 0, 2, 0, 1, 0, 3, 4, 4, 2, 5, 4, 0, 3, 0, 0, 3, 5),
62
+ (0, 3, 0, 3, 0, 3, 0, 1, 0, 3, 3, 3, 3, 0, 3, 0, 2, 0, 2, 1, 1, 0, 2, 0, 1, 0, 0, 0, 2, 1, 0, 0, 1, 0, 3, 2, 0, 0, 3, 3, 1, 2, 3, 1, 0, 3, 3, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 3, 1, 2, 3, 0, 3, 0, 1, 0, 3, 2, 1, 0, 4, 3, 0, 1, 1, 0, 3, 3),
63
+ (0, 4, 0, 5, 0, 3, 0, 3, 0, 4, 5, 5, 4, 3, 5, 3, 4, 3, 5, 3, 3, 2, 5, 3, 4, 4, 4, 3, 4, 3, 4, 5, 5, 3, 4, 4, 3, 4, 4, 5, 4, 4, 4, 3, 4, 5, 5, 4, 2, 3, 4, 2, 3, 4, 0, 3, 3, 1, 4, 3, 2, 4, 3, 3, 5, 5, 0, 3, 0, 3, 0, 5, 5, 5, 5, 4, 4, 0, 4, 0, 1, 4, 4),
64
+ (0, 4, 0, 4, 0, 3, 0, 3, 0, 3, 5, 4, 4, 2, 3, 2, 5, 1, 3, 2, 5, 1, 4, 2, 3, 2, 3, 3, 4, 3, 3, 3, 3, 2, 5, 4, 1, 3, 3, 5, 3, 4, 4, 0, 4, 4, 3, 1, 1, 3, 1, 0, 2, 3, 0, 2, 3, 0, 3, 0, 0, 4, 3, 1, 3, 4, 0, 3, 0, 2, 0, 4, 4, 4, 3, 4, 5, 0, 4, 0, 0, 3, 4),
65
+ (0, 3, 0, 3, 0, 3, 1, 2, 0, 3, 4, 4, 3, 3, 3, 0, 2, 2, 4, 3, 3, 1, 3, 3, 3, 1, 1, 0, 3, 1, 4, 3, 2, 3, 4, 4, 2, 4, 4, 4, 3, 4, 4, 3, 2, 4, 4, 3, 1, 3, 3, 1, 3, 3, 0, 4, 1, 0, 2, 2, 1, 4, 3, 2, 3, 3, 5, 4, 3, 3, 5, 4, 4, 3, 3, 0, 4, 0, 3, 2, 2, 4, 4),
66
+ (0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 2, 1, 3, 0, 0, 0, 0, 0, 2, 0, 1, 2, 1, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 1, 0, 1, 1, 3, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 3, 4, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1),
67
+ (0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0, 4, 1, 4, 0, 3, 0, 4, 0, 3, 0, 4, 0, 3, 0, 3, 0, 4, 1, 5, 1, 4, 0, 0, 3, 0, 5, 0, 5, 2, 0, 1, 0, 0, 0, 2, 1, 4, 0, 1, 3, 0, 0, 3, 0, 0, 3, 1, 1, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0),
68
+ (1, 4, 0, 5, 0, 3, 0, 2, 0, 3, 5, 4, 4, 3, 4, 3, 5, 3, 4, 3, 3, 0, 4, 3, 3, 3, 3, 3, 3, 2, 4, 4, 3, 1, 3, 4, 4, 5, 4, 4, 3, 4, 4, 1, 3, 5, 4, 3, 3, 3, 1, 2, 2, 3, 3, 1, 3, 1, 3, 3, 3, 5, 3, 3, 4, 5, 0, 3, 0, 3, 0, 3, 4, 3, 4, 4, 3, 0, 3, 0, 2, 4, 3),
69
+ (0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 4, 0, 4, 1, 4, 2, 4, 0, 3, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 3, 1, 1, 1, 0, 3, 0, 0, 0, 1, 2, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 0, 3, 2, 0, 2, 2, 0, 1, 0, 0, 0, 2, 3, 2, 3, 3, 0, 0, 0, 0, 2, 1, 0),
70
+ (0, 5, 1, 5, 0, 3, 0, 3, 0, 5, 4, 4, 5, 1, 5, 3, 3, 0, 4, 3, 4, 3, 5, 3, 4, 3, 3, 2, 4, 3, 4, 3, 3, 0, 3, 3, 1, 4, 4, 3, 4, 4, 4, 3, 4, 5, 5, 3, 2, 3, 1, 1, 3, 3, 1, 3, 1, 1, 3, 3, 2, 4, 5, 3, 3, 5, 0, 4, 0, 3, 0, 4, 4, 3, 5, 3, 3, 0, 3, 4, 0, 4, 3),
71
+ (0, 5, 0, 5, 0, 3, 0, 2, 0, 4, 4, 3, 5, 2, 4, 3, 3, 3, 4, 4, 4, 3, 5, 3, 5, 3, 3, 1, 4, 0, 4, 3, 3, 0, 3, 3, 0, 4, 4, 4, 4, 5, 4, 3, 3, 5, 5, 3, 2, 3, 1, 2, 3, 2, 0, 1, 0, 0, 3, 2, 2, 4, 4, 3, 1, 5, 0, 4, 0, 3, 0, 4, 3, 1, 3, 2, 1, 0, 3, 3, 0, 3, 3),
72
+ (0, 4, 0, 5, 0, 5, 0, 4, 0, 4, 5, 5, 5, 3, 4, 3, 3, 2, 5, 4, 4, 3, 5, 3, 5, 3, 4, 0, 4, 3, 4, 4, 3, 2, 4, 4, 3, 4, 5, 4, 4, 5, 5, 0, 3, 5, 5, 4, 1, 3, 3, 2, 3, 3, 1, 3, 1, 0, 4, 3, 1, 4, 4, 3, 4, 5, 0, 4, 0, 2, 0, 4, 3, 4, 4, 3, 3, 0, 4, 0, 0, 5, 5),
73
+ (0, 4, 0, 4, 0, 5, 0, 1, 1, 3, 3, 4, 4, 3, 4, 1, 3, 0, 5, 1, 3, 0, 3, 1, 3, 1, 1, 0, 3, 0, 3, 3, 4, 0, 4, 3, 0, 4, 4, 4, 3, 4, 4, 0, 3, 5, 4, 1, 0, 3, 0, 0, 2, 3, 0, 3, 1, 0, 3, 1, 0, 3, 2, 1, 3, 5, 0, 3, 0, 1, 0, 3, 2, 3, 3, 4, 4, 0, 2, 2, 0, 4, 4),
74
+ (2, 4, 0, 5, 0, 4, 0, 3, 0, 4, 5, 5, 4, 3, 5, 3, 5, 3, 5, 3, 5, 2, 5, 3, 4, 3, 3, 4, 3, 4, 5, 3, 2, 1, 5, 4, 3, 2, 3, 4, 5, 3, 4, 1, 2, 5, 4, 3, 0, 3, 3, 0, 3, 2, 0, 2, 3, 0, 4, 1, 0, 3, 4, 3, 3, 5, 0, 3, 0, 1, 0, 4, 5, 5, 5, 4, 3, 0, 4, 2, 0, 3, 5),
75
+ (0, 5, 0, 4, 0, 4, 0, 2, 0, 5, 4, 3, 4, 3, 4, 3, 3, 3, 4, 3, 4, 2, 5, 3, 5, 3, 4, 1, 4, 3, 4, 4, 4, 0, 3, 5, 0, 4, 4, 4, 4, 5, 3, 1, 3, 4, 5, 3, 3, 3, 3, 3, 3, 3, 0, 2, 2, 0, 3, 3, 2, 4, 3, 3, 3, 5, 3, 4, 1, 3, 3, 5, 3, 2, 0, 0, 0, 0, 4, 3, 1, 3, 3),
76
+ (0, 1, 0, 3, 0, 3, 0, 1, 0, 1, 3, 3, 3, 2, 3, 3, 3, 0, 3, 0, 0, 0, 3, 1, 3, 0, 0, 0, 2, 2, 2, 3, 0, 0, 3, 2, 0, 1, 2, 4, 1, 3, 3, 0, 0, 3, 3, 3, 0, 1, 0, 0, 2, 1, 0, 0, 3, 0, 3, 1, 0, 3, 0, 0, 1, 3, 0, 2, 0, 1, 0, 3, 3, 1, 3, 3, 0, 0, 1, 1, 0, 3, 3),
77
+ (0, 2, 0, 3, 0, 2, 1, 4, 0, 2, 2, 3, 1, 1, 3, 1, 1, 0, 2, 0, 3, 1, 2, 3, 1, 3, 0, 0, 1, 0, 4, 3, 2, 3, 3, 3, 1, 4, 2, 3, 3, 3, 3, 1, 0, 3, 1, 4, 0, 1, 1, 0, 1, 2, 0, 1, 1, 0, 1, 1, 0, 3, 1, 3, 2, 2, 0, 1, 0, 0, 0, 2, 3, 3, 3, 1, 0, 0, 0, 0, 0, 2, 3),
78
+ (0, 5, 0, 4, 0, 5, 0, 2, 0, 4, 5, 5, 3, 3, 4, 3, 3, 1, 5, 4, 4, 2, 4, 4, 4, 3, 4, 2, 4, 3, 5, 5, 4, 3, 3, 4, 3, 3, 5, 5, 4, 5, 5, 1, 3, 4, 5, 3, 1, 4, 3, 1, 3, 3, 0, 3, 3, 1, 4, 3, 1, 4, 5, 3, 3, 5, 0, 4, 0, 3, 0, 5, 3, 3, 1, 4, 3, 0, 4, 0, 1, 5, 3),
79
+ (0, 5, 0, 5, 0, 4, 0, 2, 0, 4, 4, 3, 4, 3, 3, 3, 3, 3, 5, 4, 4, 4, 4, 4, 4, 5, 3, 3, 5, 2, 4, 4, 4, 3, 4, 4, 3, 3, 4, 4, 5, 5, 3, 3, 4, 3, 4, 3, 3, 4, 3, 3, 3, 3, 1, 2, 2, 1, 4, 3, 3, 5, 4, 4, 3, 4, 0, 4, 0, 3, 0, 4, 4, 4, 4, 4, 1, 0, 4, 2, 0, 2, 4),
80
+ (0, 4, 0, 4, 0, 3, 0, 1, 0, 3, 5, 2, 3, 0, 3, 0, 2, 1, 4, 2, 3, 3, 4, 1, 4, 3, 3, 2, 4, 1, 3, 3, 3, 0, 3, 3, 0, 0, 3, 3, 3, 5, 3, 3, 3, 3, 3, 2, 0, 2, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 3, 1, 2, 2, 3, 0, 3, 0, 2, 0, 4, 4, 3, 3, 4, 1, 0, 3, 0, 0, 2, 4),
81
+ (0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 3, 1, 3, 0, 3, 2, 0, 0, 0, 1, 0, 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 0, 2, 0, 0, 0, 0, 0, 0, 2),
82
+ (0, 2, 1, 3, 0, 2, 0, 2, 0, 3, 3, 3, 3, 1, 3, 1, 3, 3, 3, 3, 3, 3, 4, 2, 2, 1, 2, 1, 4, 0, 4, 3, 1, 3, 3, 3, 2, 4, 3, 5, 4, 3, 3, 3, 3, 3, 3, 3, 0, 1, 3, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 4, 2, 0, 2, 3, 0, 3, 3, 0, 3, 3, 4, 2, 3, 1, 4, 0, 1, 2, 0, 2, 3),
83
+ (0, 3, 0, 3, 0, 1, 0, 3, 0, 2, 3, 3, 3, 0, 3, 1, 2, 0, 3, 3, 2, 3, 3, 2, 3, 2, 3, 1, 3, 0, 4, 3, 2, 0, 3, 3, 1, 4, 3, 3, 2, 3, 4, 3, 1, 3, 3, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 4, 1, 1, 0, 3, 0, 3, 1, 0, 2, 3, 3, 3, 3, 3, 1, 0, 0, 2, 0, 3, 3),
84
+ (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3),
85
+ (0, 2, 0, 3, 1, 3, 0, 3, 0, 2, 3, 3, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 1, 3, 0, 2, 3, 1, 1, 4, 3, 3, 2, 3, 3, 1, 2, 2, 4, 1, 3, 3, 0, 1, 4, 2, 3, 0, 1, 3, 0, 3, 0, 0, 1, 3, 0, 2, 0, 0, 3, 3, 2, 1, 3, 0, 3, 0, 2, 0, 3, 4, 4, 4, 3, 1, 0, 3, 0, 0, 3, 3),
86
+ (0, 2, 0, 1, 0, 2, 0, 0, 0, 1, 3, 2, 2, 1, 3, 0, 1, 1, 3, 0, 3, 2, 3, 1, 2, 0, 2, 0, 1, 1, 3, 3, 3, 0, 3, 3, 1, 1, 2, 3, 2, 3, 3, 1, 2, 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 2, 1, 2, 1, 3, 0, 3, 0, 0, 0, 3, 4, 4, 4, 3, 2, 0, 2, 0, 0, 2, 4),
87
+ (0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 0, 0, 3),
88
+ (0, 3, 0, 3, 0, 2, 0, 3, 0, 3, 3, 3, 2, 3, 2, 2, 2, 0, 3, 1, 3, 3, 3, 2, 3, 3, 0, 0, 3, 0, 3, 2, 2, 0, 2, 3, 1, 4, 3, 4, 3, 3, 2, 3, 1, 5, 4, 4, 0, 3, 1, 2, 1, 3, 0, 3, 1, 1, 2, 0, 2, 3, 1, 3, 1, 3, 0, 3, 0, 1, 0, 3, 3, 4, 4, 2, 1, 0, 2, 1, 0, 2, 4),
89
+ (0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 4, 2, 5, 1, 4, 0, 2, 0, 2, 1, 3, 1, 4, 0, 2, 1, 0, 0, 2, 1, 4, 1, 1, 0, 3, 3, 0, 5, 1, 3, 2, 3, 3, 1, 0, 3, 2, 3, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0, 1, 0, 3, 0, 2, 0, 1, 0, 3, 3, 3, 4, 3, 3, 0, 0, 0, 0, 2, 3),
90
+ (0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 1, 0, 0, 0, 0, 0, 3),
91
+ (0, 1, 0, 3, 0, 4, 0, 3, 0, 2, 4, 3, 1, 0, 3, 2, 2, 1, 3, 1, 2, 2, 3, 1, 1, 1, 2, 1, 3, 0, 1, 2, 0, 1, 3, 2, 1, 3, 0, 5, 5, 1, 0, 0, 1, 3, 2, 1, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 3, 4, 0, 1, 1, 1, 3, 2, 0, 2, 0, 1, 0, 2, 3, 3, 1, 2, 3, 0, 1, 0, 1, 0, 4),
92
+ (0, 0, 0, 1, 0, 3, 0, 3, 0, 2, 2, 1, 0, 0, 4, 0, 3, 0, 3, 1, 3, 0, 3, 0, 3, 0, 1, 0, 3, 0, 3, 1, 3, 0, 3, 3, 0, 0, 1, 2, 1, 1, 1, 0, 1, 2, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 2, 0, 0, 2, 0, 0, 0, 0, 2, 3, 3, 3, 3, 0, 0, 0, 0, 1, 4),
93
+ (0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 1, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 2, 0, 2, 3, 0, 0, 2, 2, 3, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 2, 3),
94
+ (2, 4, 0, 5, 0, 5, 0, 4, 0, 3, 4, 3, 3, 3, 4, 3, 3, 3, 4, 3, 4, 4, 5, 4, 5, 5, 5, 2, 3, 0, 5, 5, 4, 1, 5, 4, 3, 1, 5, 4, 3, 4, 4, 3, 3, 4, 3, 3, 0, 3, 2, 0, 2, 3, 0, 3, 0, 0, 3, 3, 0, 5, 3, 2, 3, 3, 0, 3, 0, 3, 0, 3, 4, 5, 4, 5, 3, 0, 4, 3, 0, 3, 4),
95
+ (0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 3, 4, 3, 2, 3, 2, 3, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 2, 4, 3, 3, 1, 3, 4, 3, 4, 4, 4, 3, 4, 4, 3, 2, 4, 4, 1, 0, 2, 0, 0, 1, 1, 0, 2, 0, 0, 3, 1, 0, 5, 3, 2, 1, 3, 0, 3, 0, 1, 2, 4, 3, 2, 4, 3, 3, 0, 3, 2, 0, 4, 4),
96
+ (0, 3, 0, 3, 0, 1, 0, 0, 0, 1, 4, 3, 3, 2, 3, 1, 3, 1, 4, 2, 3, 2, 4, 2, 3, 4, 3, 0, 2, 2, 3, 3, 3, 0, 3, 3, 3, 0, 3, 4, 1, 3, 3, 0, 3, 4, 3, 3, 0, 1, 1, 0, 1, 0, 0, 0, 4, 0, 3, 0, 0, 3, 1, 2, 1, 3, 0, 4, 0, 1, 0, 4, 3, 3, 4, 3, 3, 0, 2, 0, 0, 3, 3),
97
+ (0, 3, 0, 4, 0, 1, 0, 3, 0, 3, 4, 3, 3, 0, 3, 3, 3, 1, 3, 1, 3, 3, 4, 3, 3, 3, 0, 0, 3, 1, 5, 3, 3, 1, 3, 3, 2, 5, 4, 3, 3, 4, 5, 3, 2, 5, 3, 4, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 1, 1, 0, 4, 2, 2, 1, 3, 0, 3, 0, 2, 0, 4, 4, 3, 5, 3, 2, 0, 1, 1, 0, 3, 4),
98
+ (0, 5, 0, 4, 0, 5, 0, 2, 0, 4, 4, 3, 3, 2, 3, 3, 3, 1, 4, 3, 4, 1, 5, 3, 4, 3, 4, 0, 4, 2, 4, 3, 4, 1, 5, 4, 0, 4, 4, 4, 4, 5, 4, 1, 3, 5, 4, 2, 1, 4, 1, 1, 3, 2, 0, 3, 1, 0, 3, 2, 1, 4, 3, 3, 3, 4, 0, 4, 0, 3, 0, 4, 4, 4, 3, 3, 3, 0, 4, 2, 0, 3, 4),
99
+ (1, 4, 0, 4, 0, 3, 0, 1, 0, 3, 3, 3, 1, 1, 3, 3, 2, 2, 3, 3, 1, 0, 3, 2, 2, 1, 2, 0, 3, 1, 2, 1, 2, 0, 3, 2, 0, 2, 2, 3, 3, 4, 3, 0, 3, 3, 1, 2, 0, 1, 1, 3, 1, 2, 0, 0, 3, 0, 1, 1, 0, 3, 2, 2, 3, 3, 0, 3, 0, 0, 0, 2, 3, 3, 4, 3, 3, 0, 1, 0, 0, 1, 4),
100
+ (0, 4, 0, 4, 0, 4, 0, 0, 0, 3, 4, 4, 3, 1, 4, 2, 3, 2, 3, 3, 3, 1, 4, 3, 4, 0, 3, 0, 4, 2, 3, 3, 2, 2, 5, 4, 2, 1, 3, 4, 3, 4, 3, 1, 3, 3, 4, 2, 0, 2, 1, 0, 3, 3, 0, 0, 2, 0, 3, 1, 0, 4, 4, 3, 4, 3, 0, 4, 0, 1, 0, 2, 4, 4, 4, 4, 4, 0, 3, 2, 0, 3, 3),
101
+ (0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2),
102
+ (0, 2, 0, 3, 0, 4, 0, 4, 0, 1, 3, 3, 3, 0, 4, 0, 2, 1, 2, 1, 1, 1, 2, 0, 3, 1, 1, 0, 1, 0, 3, 1, 0, 0, 3, 3, 2, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 2, 0, 2, 2, 0, 3, 1, 0, 0, 1, 0, 1, 1, 0, 1, 2, 0, 3, 0, 0, 0, 0, 1, 0, 0, 3, 3, 4, 3, 1, 0, 1, 0, 3, 0, 2),
103
+ (0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 1, 0, 2, 0, 3, 1, 0, 1, 3, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 2, 3, 0, 1, 4, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 3),
104
+ (0, 2, 0, 5, 0, 5, 0, 1, 0, 2, 4, 3, 3, 2, 5, 1, 3, 2, 3, 3, 3, 0, 4, 1, 2, 0, 3, 0, 4, 0, 2, 2, 1, 1, 5, 3, 0, 0, 1, 4, 2, 3, 2, 0, 3, 3, 3, 2, 0, 2, 4, 1, 1, 2, 0, 1, 1, 0, 3, 1, 0, 1, 3, 1, 2, 3, 0, 2, 0, 0, 0, 1, 3, 5, 4, 4, 4, 0, 3, 0, 0, 1, 3),
105
+ (0, 4, 0, 5, 0, 4, 0, 4, 0, 4, 5, 4, 3, 3, 4, 3, 3, 3, 4, 3, 4, 4, 5, 3, 4, 5, 4, 2, 4, 2, 3, 4, 3, 1, 4, 4, 1, 3, 5, 4, 4, 5, 5, 4, 4, 5, 5, 5, 2, 3, 3, 1, 4, 3, 1, 3, 3, 0, 3, 3, 1, 4, 3, 4, 4, 4, 0, 3, 0, 4, 0, 3, 3, 4, 4, 5, 0, 0, 4, 3, 0, 4, 5),
106
+ (0, 4, 0, 4, 0, 3, 0, 3, 0, 3, 4, 4, 4, 3, 3, 2, 4, 3, 4, 3, 4, 3, 5, 3, 4, 3, 2, 1, 4, 2, 4, 4, 3, 1, 3, 4, 2, 4, 5, 5, 3, 4, 5, 4, 1, 5, 4, 3, 0, 3, 2, 2, 3, 2, 1, 3, 1, 0, 3, 3, 3, 5, 3, 3, 3, 5, 4, 4, 2, 3, 3, 4, 3, 3, 3, 2, 1, 0, 3, 2, 1, 4, 3),
107
+ (0, 4, 0, 5, 0, 4, 0, 3, 0, 3, 5, 5, 3, 2, 4, 3, 4, 0, 5, 4, 4, 1, 4, 4, 4, 3, 3, 3, 4, 3, 5, 5, 2, 3, 3, 4, 1, 2, 5, 5, 3, 5, 5, 2, 3, 5, 5, 4, 0, 3, 2, 0, 3, 3, 1, 1, 5, 1, 4, 1, 0, 4, 3, 2, 3, 5, 0, 4, 0, 3, 0, 5, 4, 3, 4, 3, 0, 0, 4, 1, 0, 4, 4),
108
+ (1, 3, 0, 4, 0, 2, 0, 2, 0, 2, 5, 5, 3, 3, 3, 3, 3, 0, 4, 2, 3, 4, 4, 4, 3, 4, 0, 0, 3, 4, 5, 4, 3, 3, 3, 3, 2, 5, 5, 4, 5, 5, 5, 4, 3, 5, 5, 5, 1, 3, 1, 0, 1, 0, 0, 3, 2, 0, 4, 2, 0, 5, 2, 3, 2, 4, 1, 3, 0, 3, 0, 4, 5, 4, 5, 4, 3, 0, 4, 2, 0, 5, 4),
109
+ (0, 3, 0, 4, 0, 5, 0, 3, 0, 3, 4, 4, 3, 2, 3, 2, 3, 3, 3, 3, 3, 2, 4, 3, 3, 2, 2, 0, 3, 3, 3, 3, 3, 1, 3, 3, 3, 0, 4, 4, 3, 4, 4, 1, 1, 4, 4, 2, 0, 3, 1, 0, 1, 1, 0, 4, 1, 0, 2, 3, 1, 3, 3, 1, 3, 4, 0, 3, 0, 1, 0, 3, 1, 3, 0, 0, 1, 0, 2, 0, 0, 4, 4),
110
+ (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
111
+ (0, 3, 0, 3, 0, 2, 0, 3, 0, 1, 5, 4, 3, 3, 3, 1, 4, 2, 1, 2, 3, 4, 4, 2, 4, 4, 5, 0, 3, 1, 4, 3, 4, 0, 4, 3, 3, 3, 2, 3, 2, 5, 3, 4, 3, 2, 2, 3, 0, 0, 3, 0, 2, 1, 0, 1, 2, 0, 0, 0, 0, 2, 1, 1, 3, 1, 0, 2, 0, 4, 0, 3, 4, 4, 4, 5, 2, 0, 2, 0, 0, 1, 3),
112
+ (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 4, 2, 1, 1, 0, 1, 0, 3, 2, 0, 0, 3, 1, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 4, 0, 4, 2, 1, 0, 0, 0, 0, 0, 1),
113
+ (0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 2, 0, 2, 1, 0, 0, 1, 2, 1, 0, 1, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2),
114
+ (0, 4, 0, 4, 0, 4, 0, 3, 0, 4, 4, 3, 4, 2, 4, 3, 2, 0, 4, 4, 4, 3, 5, 3, 5, 3, 3, 2, 4, 2, 4, 3, 4, 3, 1, 4, 0, 2, 3, 4, 4, 4, 3, 3, 3, 4, 4, 4, 3, 4, 1, 3, 4, 3, 2, 1, 2, 1, 3, 3, 3, 4, 4, 3, 3, 5, 0, 4, 0, 3, 0, 4, 3, 3, 3, 2, 1, 0, 3, 0, 0, 3, 3),
115
+ (0, 4, 0, 3, 0, 3, 0, 3, 0, 3, 5, 5, 3, 3, 3, 3, 4, 3, 4, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 4, 3, 5, 3, 3, 1, 3, 2, 4, 5, 5, 5, 5, 4, 3, 4, 5, 5, 3, 2, 2, 3, 3, 3, 3, 2, 3, 3, 1, 2, 3, 2, 4, 3, 3, 3, 4, 0, 4, 0, 2, 0, 4, 3, 2, 2, 1, 2, 0, 3, 0, 0, 4, 1),
116
+ )
117
+ # fmt: on
118
+
119
+
120
+ class JapaneseContextAnalysis:
121
+ NUM_OF_CATEGORY = 6
122
+ DONT_KNOW = -1
123
+ ENOUGH_REL_THRESHOLD = 100
124
+ MAX_REL_THRESHOLD = 1000
125
+ MINIMUM_DATA_THRESHOLD = 4
126
+
127
+ def __init__(self) -> None:
128
+ self._total_rel = 0
129
+ self._rel_sample: List[int] = []
130
+ self._need_to_skip_char_num = 0
131
+ self._last_char_order = -1
132
+ self._done = False
133
+ self.reset()
134
+
135
+ def reset(self) -> None:
136
+ self._total_rel = 0 # total sequence received
137
+ # category counters, each integer counts sequence in its category
138
+ self._rel_sample = [0] * self.NUM_OF_CATEGORY
139
+ # if last byte in current buffer is not the last byte of a character,
140
+ # we need to know how many bytes to skip in next buffer
141
+ self._need_to_skip_char_num = 0
142
+ self._last_char_order = -1 # The order of previous char
143
+ # If this flag is set to True, detection is done and conclusion has
144
+ # been made
145
+ self._done = False
146
+
147
+ def feed(self, byte_str: Union[bytes, bytearray], num_bytes: int) -> None:
148
+ if self._done:
149
+ return
150
+
151
+ # The buffer we got is byte oriented, and a character may span in more than one
152
+ # buffers. In case the last one or two byte in last buffer is not
153
+ # complete, we record how many byte needed to complete that character
154
+ # and skip these bytes here. We can choose to record those bytes as
155
+ # well and analyse the character once it is complete, but since a
156
+ # character will not make much difference, by simply skipping
157
+ # this character will simply our logic and improve performance.
158
+ i = self._need_to_skip_char_num
159
+ while i < num_bytes:
160
+ order, char_len = self.get_order(byte_str[i : i + 2])
161
+ i += char_len
162
+ if i > num_bytes:
163
+ self._need_to_skip_char_num = i - num_bytes
164
+ self._last_char_order = -1
165
+ else:
166
+ if (order != -1) and (self._last_char_order != -1):
167
+ self._total_rel += 1
168
+ if self._total_rel > self.MAX_REL_THRESHOLD:
169
+ self._done = True
170
+ break
171
+ self._rel_sample[
172
+ jp2_char_context[self._last_char_order][order]
173
+ ] += 1
174
+ self._last_char_order = order
175
+
176
+ def got_enough_data(self) -> bool:
177
+ return self._total_rel > self.ENOUGH_REL_THRESHOLD
178
+
179
+ def get_confidence(self) -> float:
180
+ # This is just one way to calculate confidence. It works well for me.
181
+ if self._total_rel > self.MINIMUM_DATA_THRESHOLD:
182
+ return (self._total_rel - self._rel_sample[0]) / self._total_rel
183
+ return self.DONT_KNOW
184
+
185
+ def get_order(self, _: Union[bytes, bytearray]) -> Tuple[int, int]:
186
+ return -1, 1
187
+
188
+
189
+ class SJISContextAnalysis(JapaneseContextAnalysis):
190
+ def __init__(self) -> None:
191
+ super().__init__()
192
+ self._charset_name = "SHIFT_JIS"
193
+
194
+ @property
195
+ def charset_name(self) -> str:
196
+ return self._charset_name
197
+
198
+ def get_order(self, byte_str: Union[bytes, bytearray]) -> Tuple[int, int]:
199
+ if not byte_str:
200
+ return -1, 1
201
+ # find out current char's byte length
202
+ first_char = byte_str[0]
203
+ if (0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC):
204
+ char_len = 2
205
+ if (first_char == 0x87) or (0xFA <= first_char <= 0xFC):
206
+ self._charset_name = "CP932"
207
+ else:
208
+ char_len = 1
209
+
210
+ # return its order if it is hiragana
211
+ if len(byte_str) > 1:
212
+ second_char = byte_str[1]
213
+ if (first_char == 202) and (0x9F <= second_char <= 0xF1):
214
+ return second_char - 0x9F, char_len
215
+
216
+ return -1, char_len
217
+
218
+
219
+ class EUCJPContextAnalysis(JapaneseContextAnalysis):
220
+ def get_order(self, byte_str: Union[bytes, bytearray]) -> Tuple[int, int]:
221
+ if not byte_str:
222
+ return -1, 1
223
+ # find out current char's byte length
224
+ first_char = byte_str[0]
225
+ if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE):
226
+ char_len = 2
227
+ elif first_char == 0x8F:
228
+ char_len = 3
229
+ else:
230
+ char_len = 1
231
+
232
+ # return its order if it is hiragana
233
+ if len(byte_str) > 1:
234
+ second_char = byte_str[1]
235
+ if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3):
236
+ return second_char - 0xA1, char_len
237
+
238
+ return -1, char_len
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/langgreekmodel.py ADDED
The diff for this file is too large to render. See raw diff
 
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/langrussianmodel.py ADDED
The diff for this file is too large to render. See raw diff
 
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/langthaimodel.py ADDED
The diff for this file is too large to render. See raw diff
 
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/langturkishmodel.py ADDED
@@ -0,0 +1,4380 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pip._vendor.chardet.sbcharsetprober import SingleByteCharSetModel
2
+
3
+ # 3: Positive
4
+ # 2: Likely
5
+ # 1: Unlikely
6
+ # 0: Negative
7
+
8
+ TURKISH_LANG_MODEL = {
9
+ 23: { # 'A'
10
+ 23: 0, # 'A'
11
+ 37: 0, # 'B'
12
+ 47: 0, # 'C'
13
+ 39: 0, # 'D'
14
+ 29: 0, # 'E'
15
+ 52: 0, # 'F'
16
+ 36: 0, # 'G'
17
+ 45: 0, # 'H'
18
+ 53: 0, # 'I'
19
+ 60: 0, # 'J'
20
+ 16: 0, # 'K'
21
+ 49: 0, # 'L'
22
+ 20: 0, # 'M'
23
+ 46: 0, # 'N'
24
+ 42: 0, # 'O'
25
+ 48: 0, # 'P'
26
+ 44: 0, # 'R'
27
+ 35: 0, # 'S'
28
+ 31: 0, # 'T'
29
+ 51: 0, # 'U'
30
+ 38: 0, # 'V'
31
+ 62: 0, # 'W'
32
+ 43: 0, # 'Y'
33
+ 56: 0, # 'Z'
34
+ 1: 3, # 'a'
35
+ 21: 0, # 'b'
36
+ 28: 0, # 'c'
37
+ 12: 2, # 'd'
38
+ 2: 3, # 'e'
39
+ 18: 0, # 'f'
40
+ 27: 1, # 'g'
41
+ 25: 1, # 'h'
42
+ 3: 1, # 'i'
43
+ 24: 0, # 'j'
44
+ 10: 2, # 'k'
45
+ 5: 1, # 'l'
46
+ 13: 1, # 'm'
47
+ 4: 1, # 'n'
48
+ 15: 0, # 'o'
49
+ 26: 0, # 'p'
50
+ 7: 1, # 'r'
51
+ 8: 1, # 's'
52
+ 9: 1, # 't'
53
+ 14: 1, # 'u'
54
+ 32: 0, # 'v'
55
+ 57: 0, # 'w'
56
+ 58: 0, # 'x'
57
+ 11: 3, # 'y'
58
+ 22: 0, # 'z'
59
+ 63: 0, # '·'
60
+ 54: 0, # 'Ç'
61
+ 50: 0, # 'Ö'
62
+ 55: 0, # 'Ü'
63
+ 59: 0, # 'â'
64
+ 33: 1, # 'ç'
65
+ 61: 0, # 'î'
66
+ 34: 0, # 'ö'
67
+ 17: 0, # 'ü'
68
+ 30: 0, # 'ğ'
69
+ 41: 0, # 'İ'
70
+ 6: 0, # 'ı'
71
+ 40: 0, # 'Ş'
72
+ 19: 0, # 'ş'
73
+ },
74
+ 37: { # 'B'
75
+ 23: 0, # 'A'
76
+ 37: 0, # 'B'
77
+ 47: 2, # 'C'
78
+ 39: 0, # 'D'
79
+ 29: 0, # 'E'
80
+ 52: 2, # 'F'
81
+ 36: 0, # 'G'
82
+ 45: 0, # 'H'
83
+ 53: 0, # 'I'
84
+ 60: 0, # 'J'
85
+ 16: 1, # 'K'
86
+ 49: 0, # 'L'
87
+ 20: 0, # 'M'
88
+ 46: 0, # 'N'
89
+ 42: 0, # 'O'
90
+ 48: 1, # 'P'
91
+ 44: 0, # 'R'
92
+ 35: 1, # 'S'
93
+ 31: 0, # 'T'
94
+ 51: 0, # 'U'
95
+ 38: 1, # 'V'
96
+ 62: 0, # 'W'
97
+ 43: 1, # 'Y'
98
+ 56: 0, # 'Z'
99
+ 1: 2, # 'a'
100
+ 21: 0, # 'b'
101
+ 28: 2, # 'c'
102
+ 12: 0, # 'd'
103
+ 2: 3, # 'e'
104
+ 18: 0, # 'f'
105
+ 27: 0, # 'g'
106
+ 25: 0, # 'h'
107
+ 3: 0, # 'i'
108
+ 24: 0, # 'j'
109
+ 10: 0, # 'k'
110
+ 5: 0, # 'l'
111
+ 13: 1, # 'm'
112
+ 4: 1, # 'n'
113
+ 15: 0, # 'o'
114
+ 26: 0, # 'p'
115
+ 7: 0, # 'r'
116
+ 8: 0, # 's'
117
+ 9: 0, # 't'
118
+ 14: 2, # 'u'
119
+ 32: 0, # 'v'
120
+ 57: 0, # 'w'
121
+ 58: 0, # 'x'
122
+ 11: 0, # 'y'
123
+ 22: 1, # 'z'
124
+ 63: 0, # '·'
125
+ 54: 0, # 'Ç'
126
+ 50: 1, # 'Ö'
127
+ 55: 0, # 'Ü'
128
+ 59: 0, # 'â'
129
+ 33: 0, # 'ç'
130
+ 61: 0, # 'î'
131
+ 34: 1, # 'ö'
132
+ 17: 0, # 'ü'
133
+ 30: 0, # 'ğ'
134
+ 41: 0, # 'İ'
135
+ 6: 0, # 'ı'
136
+ 40: 1, # 'Ş'
137
+ 19: 1, # 'ş'
138
+ },
139
+ 47: { # 'C'
140
+ 23: 0, # 'A'
141
+ 37: 0, # 'B'
142
+ 47: 0, # 'C'
143
+ 39: 0, # 'D'
144
+ 29: 0, # 'E'
145
+ 52: 1, # 'F'
146
+ 36: 0, # 'G'
147
+ 45: 0, # 'H'
148
+ 53: 0, # 'I'
149
+ 60: 0, # 'J'
150
+ 16: 0, # 'K'
151
+ 49: 1, # 'L'
152
+ 20: 0, # 'M'
153
+ 46: 1, # 'N'
154
+ 42: 0, # 'O'
155
+ 48: 1, # 'P'
156
+ 44: 1, # 'R'
157
+ 35: 0, # 'S'
158
+ 31: 0, # 'T'
159
+ 51: 0, # 'U'
160
+ 38: 1, # 'V'
161
+ 62: 0, # 'W'
162
+ 43: 1, # 'Y'
163
+ 56: 0, # 'Z'
164
+ 1: 3, # 'a'
165
+ 21: 0, # 'b'
166
+ 28: 2, # 'c'
167
+ 12: 0, # 'd'
168
+ 2: 3, # 'e'
169
+ 18: 0, # 'f'
170
+ 27: 0, # 'g'
171
+ 25: 0, # 'h'
172
+ 3: 0, # 'i'
173
+ 24: 2, # 'j'
174
+ 10: 1, # 'k'
175
+ 5: 2, # 'l'
176
+ 13: 2, # 'm'
177
+ 4: 2, # 'n'
178
+ 15: 1, # 'o'
179
+ 26: 0, # 'p'
180
+ 7: 2, # 'r'
181
+ 8: 0, # 's'
182
+ 9: 0, # 't'
183
+ 14: 3, # 'u'
184
+ 32: 0, # 'v'
185
+ 57: 0, # 'w'
186
+ 58: 0, # 'x'
187
+ 11: 0, # 'y'
188
+ 22: 2, # 'z'
189
+ 63: 0, # '·'
190
+ 54: 0, # 'Ç'
191
+ 50: 1, # 'Ö'
192
+ 55: 0, # 'Ü'
193
+ 59: 0, # 'â'
194
+ 33: 1, # 'ç'
195
+ 61: 0, # 'î'
196
+ 34: 1, # 'ö'
197
+ 17: 0, # 'ü'
198
+ 30: 0, # 'ğ'
199
+ 41: 1, # 'İ'
200
+ 6: 3, # 'ı'
201
+ 40: 0, # 'Ş'
202
+ 19: 0, # 'ş'
203
+ },
204
+ 39: { # 'D'
205
+ 23: 0, # 'A'
206
+ 37: 0, # 'B'
207
+ 47: 0, # 'C'
208
+ 39: 0, # 'D'
209
+ 29: 0, # 'E'
210
+ 52: 1, # 'F'
211
+ 36: 0, # 'G'
212
+ 45: 0, # 'H'
213
+ 53: 0, # 'I'
214
+ 60: 0, # 'J'
215
+ 16: 1, # 'K'
216
+ 49: 0, # 'L'
217
+ 20: 0, # 'M'
218
+ 46: 0, # 'N'
219
+ 42: 0, # 'O'
220
+ 48: 1, # 'P'
221
+ 44: 0, # 'R'
222
+ 35: 0, # 'S'
223
+ 31: 0, # 'T'
224
+ 51: 0, # 'U'
225
+ 38: 0, # 'V'
226
+ 62: 0, # 'W'
227
+ 43: 0, # 'Y'
228
+ 56: 0, # 'Z'
229
+ 1: 2, # 'a'
230
+ 21: 0, # 'b'
231
+ 28: 2, # 'c'
232
+ 12: 0, # 'd'
233
+ 2: 2, # 'e'
234
+ 18: 0, # 'f'
235
+ 27: 0, # 'g'
236
+ 25: 0, # 'h'
237
+ 3: 0, # 'i'
238
+ 24: 0, # 'j'
239
+ 10: 0, # 'k'
240
+ 5: 1, # 'l'
241
+ 13: 3, # 'm'
242
+ 4: 0, # 'n'
243
+ 15: 1, # 'o'
244
+ 26: 0, # 'p'
245
+ 7: 0, # 'r'
246
+ 8: 0, # 's'
247
+ 9: 0, # 't'
248
+ 14: 1, # 'u'
249
+ 32: 0, # 'v'
250
+ 57: 0, # 'w'
251
+ 58: 0, # 'x'
252
+ 11: 0, # 'y'
253
+ 22: 1, # 'z'
254
+ 63: 0, # '·'
255
+ 54: 1, # 'Ç'
256
+ 50: 0, # 'Ö'
257
+ 55: 0, # 'Ü'
258
+ 59: 0, # 'â'
259
+ 33: 1, # 'ç'
260
+ 61: 0, # 'î'
261
+ 34: 0, # 'ö'
262
+ 17: 0, # 'ü'
263
+ 30: 1, # 'ğ'
264
+ 41: 0, # 'İ'
265
+ 6: 1, # 'ı'
266
+ 40: 1, # 'Ş'
267
+ 19: 0, # 'ş'
268
+ },
269
+ 29: { # 'E'
270
+ 23: 0, # 'A'
271
+ 37: 0, # 'B'
272
+ 47: 0, # 'C'
273
+ 39: 0, # 'D'
274
+ 29: 1, # 'E'
275
+ 52: 0, # 'F'
276
+ 36: 0, # 'G'
277
+ 45: 0, # 'H'
278
+ 53: 0, # 'I'
279
+ 60: 0, # 'J'
280
+ 16: 3, # 'K'
281
+ 49: 0, # 'L'
282
+ 20: 1, # 'M'
283
+ 46: 0, # 'N'
284
+ 42: 0, # 'O'
285
+ 48: 0, # 'P'
286
+ 44: 0, # 'R'
287
+ 35: 0, # 'S'
288
+ 31: 0, # 'T'
289
+ 51: 0, # 'U'
290
+ 38: 0, # 'V'
291
+ 62: 0, # 'W'
292
+ 43: 0, # 'Y'
293
+ 56: 0, # 'Z'
294
+ 1: 3, # 'a'
295
+ 21: 0, # 'b'
296
+ 28: 0, # 'c'
297
+ 12: 2, # 'd'
298
+ 2: 3, # 'e'
299
+ 18: 0, # 'f'
300
+ 27: 1, # 'g'
301
+ 25: 0, # 'h'
302
+ 3: 1, # 'i'
303
+ 24: 1, # 'j'
304
+ 10: 0, # 'k'
305
+ 5: 3, # 'l'
306
+ 13: 3, # 'm'
307
+ 4: 3, # 'n'
308
+ 15: 0, # 'o'
309
+ 26: 0, # 'p'
310
+ 7: 0, # 'r'
311
+ 8: 1, # 's'
312
+ 9: 1, # 't'
313
+ 14: 1, # 'u'
314
+ 32: 1, # 'v'
315
+ 57: 0, # 'w'
316
+ 58: 0, # 'x'
317
+ 11: 2, # 'y'
318
+ 22: 0, # 'z'
319
+ 63: 0, # '·'
320
+ 54: 0, # 'Ç'
321
+ 50: 0, # 'Ö'
322
+ 55: 0, # 'Ü'
323
+ 59: 0, # 'â'
324
+ 33: 0, # 'ç'
325
+ 61: 0, # 'î'
326
+ 34: 0, # 'ö'
327
+ 17: 0, # 'ü'
328
+ 30: 0, # 'ğ'
329
+ 41: 0, # 'İ'
330
+ 6: 3, # 'ı'
331
+ 40: 0, # 'Ş'
332
+ 19: 0, # 'ş'
333
+ },
334
+ 52: { # 'F'
335
+ 23: 0, # 'A'
336
+ 37: 1, # 'B'
337
+ 47: 1, # 'C'
338
+ 39: 1, # 'D'
339
+ 29: 1, # 'E'
340
+ 52: 2, # 'F'
341
+ 36: 0, # 'G'
342
+ 45: 2, # 'H'
343
+ 53: 1, # 'I'
344
+ 60: 0, # 'J'
345
+ 16: 0, # 'K'
346
+ 49: 0, # 'L'
347
+ 20: 1, # 'M'
348
+ 46: 1, # 'N'
349
+ 42: 1, # 'O'
350
+ 48: 2, # 'P'
351
+ 44: 1, # 'R'
352
+ 35: 1, # 'S'
353
+ 31: 1, # 'T'
354
+ 51: 1, # 'U'
355
+ 38: 1, # 'V'
356
+ 62: 0, # 'W'
357
+ 43: 2, # 'Y'
358
+ 56: 0, # 'Z'
359
+ 1: 0, # 'a'
360
+ 21: 1, # 'b'
361
+ 28: 1, # 'c'
362
+ 12: 1, # 'd'
363
+ 2: 0, # 'e'
364
+ 18: 1, # 'f'
365
+ 27: 0, # 'g'
366
+ 25: 0, # 'h'
367
+ 3: 2, # 'i'
368
+ 24: 1, # 'j'
369
+ 10: 0, # 'k'
370
+ 5: 0, # 'l'
371
+ 13: 1, # 'm'
372
+ 4: 2, # 'n'
373
+ 15: 1, # 'o'
374
+ 26: 0, # 'p'
375
+ 7: 2, # 'r'
376
+ 8: 1, # 's'
377
+ 9: 1, # 't'
378
+ 14: 1, # 'u'
379
+ 32: 0, # 'v'
380
+ 57: 0, # 'w'
381
+ 58: 0, # 'x'
382
+ 11: 1, # 'y'
383
+ 22: 1, # 'z'
384
+ 63: 0, # '·'
385
+ 54: 0, # 'Ç'
386
+ 50: 1, # 'Ö'
387
+ 55: 2, # 'Ü'
388
+ 59: 0, # 'â'
389
+ 33: 0, # 'ç'
390
+ 61: 0, # 'î'
391
+ 34: 2, # 'ö'
392
+ 17: 0, # 'ü'
393
+ 30: 1, # 'ğ'
394
+ 41: 1, # 'İ'
395
+ 6: 2, # 'ı'
396
+ 40: 0, # 'Ş'
397
+ 19: 2, # 'ş'
398
+ },
399
+ 36: { # 'G'
400
+ 23: 1, # 'A'
401
+ 37: 0, # 'B'
402
+ 47: 1, # 'C'
403
+ 39: 0, # 'D'
404
+ 29: 0, # 'E'
405
+ 52: 1, # 'F'
406
+ 36: 2, # 'G'
407
+ 45: 0, # 'H'
408
+ 53: 0, # 'I'
409
+ 60: 0, # 'J'
410
+ 16: 2, # 'K'
411
+ 49: 0, # 'L'
412
+ 20: 0, # 'M'
413
+ 46: 2, # 'N'
414
+ 42: 1, # 'O'
415
+ 48: 1, # 'P'
416
+ 44: 1, # 'R'
417
+ 35: 1, # 'S'
418
+ 31: 0, # 'T'
419
+ 51: 1, # 'U'
420
+ 38: 2, # 'V'
421
+ 62: 0, # 'W'
422
+ 43: 0, # 'Y'
423
+ 56: 0, # 'Z'
424
+ 1: 3, # 'a'
425
+ 21: 0, # 'b'
426
+ 28: 1, # 'c'
427
+ 12: 0, # 'd'
428
+ 2: 3, # 'e'
429
+ 18: 0, # 'f'
430
+ 27: 0, # 'g'
431
+ 25: 0, # 'h'
432
+ 3: 0, # 'i'
433
+ 24: 1, # 'j'
434
+ 10: 1, # 'k'
435
+ 5: 0, # 'l'
436
+ 13: 3, # 'm'
437
+ 4: 2, # 'n'
438
+ 15: 0, # 'o'
439
+ 26: 1, # 'p'
440
+ 7: 0, # 'r'
441
+ 8: 1, # 's'
442
+ 9: 1, # 't'
443
+ 14: 3, # 'u'
444
+ 32: 0, # 'v'
445
+ 57: 0, # 'w'
446
+ 58: 1, # 'x'
447
+ 11: 0, # 'y'
448
+ 22: 2, # 'z'
449
+ 63: 0, # '·'
450
+ 54: 1, # 'Ç'
451
+ 50: 2, # 'Ö'
452
+ 55: 0, # 'Ü'
453
+ 59: 1, # 'â'
454
+ 33: 2, # 'ç'
455
+ 61: 0, # 'î'
456
+ 34: 0, # 'ö'
457
+ 17: 0, # 'ü'
458
+ 30: 1, # 'ğ'
459
+ 41: 1, # 'İ'
460
+ 6: 2, # 'ı'
461
+ 40: 2, # 'Ş'
462
+ 19: 1, # 'ş'
463
+ },
464
+ 45: { # 'H'
465
+ 23: 0, # 'A'
466
+ 37: 1, # 'B'
467
+ 47: 0, # 'C'
468
+ 39: 0, # 'D'
469
+ 29: 0, # 'E'
470
+ 52: 2, # 'F'
471
+ 36: 2, # 'G'
472
+ 45: 1, # 'H'
473
+ 53: 1, # 'I'
474
+ 60: 0, # 'J'
475
+ 16: 2, # 'K'
476
+ 49: 1, # 'L'
477
+ 20: 0, # 'M'
478
+ 46: 1, # 'N'
479
+ 42: 1, # 'O'
480
+ 48: 1, # 'P'
481
+ 44: 0, # 'R'
482
+ 35: 2, # 'S'
483
+ 31: 0, # 'T'
484
+ 51: 1, # 'U'
485
+ 38: 2, # 'V'
486
+ 62: 0, # 'W'
487
+ 43: 0, # 'Y'
488
+ 56: 0, # 'Z'
489
+ 1: 3, # 'a'
490
+ 21: 0, # 'b'
491
+ 28: 2, # 'c'
492
+ 12: 0, # 'd'
493
+ 2: 3, # 'e'
494
+ 18: 0, # 'f'
495
+ 27: 0, # 'g'
496
+ 25: 0, # 'h'
497
+ 3: 2, # 'i'
498
+ 24: 0, # 'j'
499
+ 10: 1, # 'k'
500
+ 5: 0, # 'l'
501
+ 13: 2, # 'm'
502
+ 4: 0, # 'n'
503
+ 15: 1, # 'o'
504
+ 26: 1, # 'p'
505
+ 7: 1, # 'r'
506
+ 8: 0, # 's'
507
+ 9: 0, # 't'
508
+ 14: 3, # 'u'
509
+ 32: 0, # 'v'
510
+ 57: 0, # 'w'
511
+ 58: 0, # 'x'
512
+ 11: 0, # 'y'
513
+ 22: 2, # 'z'
514
+ 63: 0, # '·'
515
+ 54: 1, # 'Ç'
516
+ 50: 1, # 'Ö'
517
+ 55: 0, # 'Ü'
518
+ 59: 0, # 'â'
519
+ 33: 1, # 'ç'
520
+ 61: 0, # 'î'
521
+ 34: 1, # 'ö'
522
+ 17: 0, # 'ü'
523
+ 30: 2, # 'ğ'
524
+ 41: 1, # 'İ'
525
+ 6: 0, # 'ı'
526
+ 40: 2, # 'Ş'
527
+ 19: 1, # 'ş'
528
+ },
529
+ 53: { # 'I'
530
+ 23: 0, # 'A'
531
+ 37: 0, # 'B'
532
+ 47: 0, # 'C'
533
+ 39: 0, # 'D'
534
+ 29: 0, # 'E'
535
+ 52: 1, # 'F'
536
+ 36: 0, # 'G'
537
+ 45: 0, # 'H'
538
+ 53: 0, # 'I'
539
+ 60: 0, # 'J'
540
+ 16: 2, # 'K'
541
+ 49: 0, # 'L'
542
+ 20: 0, # 'M'
543
+ 46: 0, # 'N'
544
+ 42: 0, # 'O'
545
+ 48: 1, # 'P'
546
+ 44: 0, # 'R'
547
+ 35: 0, # 'S'
548
+ 31: 0, # 'T'
549
+ 51: 0, # 'U'
550
+ 38: 0, # 'V'
551
+ 62: 0, # 'W'
552
+ 43: 0, # 'Y'
553
+ 56: 0, # 'Z'
554
+ 1: 2, # 'a'
555
+ 21: 0, # 'b'
556
+ 28: 2, # 'c'
557
+ 12: 0, # 'd'
558
+ 2: 2, # 'e'
559
+ 18: 0, # 'f'
560
+ 27: 0, # 'g'
561
+ 25: 0, # 'h'
562
+ 3: 0, # 'i'
563
+ 24: 0, # 'j'
564
+ 10: 0, # 'k'
565
+ 5: 2, # 'l'
566
+ 13: 2, # 'm'
567
+ 4: 0, # 'n'
568
+ 15: 0, # 'o'
569
+ 26: 0, # 'p'
570
+ 7: 0, # 'r'
571
+ 8: 0, # 's'
572
+ 9: 0, # 't'
573
+ 14: 2, # 'u'
574
+ 32: 0, # 'v'
575
+ 57: 0, # 'w'
576
+ 58: 0, # 'x'
577
+ 11: 0, # 'y'
578
+ 22: 2, # 'z'
579
+ 63: 0, # '·'
580
+ 54: 1, # 'Ç'
581
+ 50: 0, # 'Ö'
582
+ 55: 0, # 'Ü'
583
+ 59: 0, # 'â'
584
+ 33: 2, # 'ç'
585
+ 61: 0, # 'î'
586
+ 34: 1, # 'ö'
587
+ 17: 0, # 'ü'
588
+ 30: 0, # 'ğ'
589
+ 41: 0, # 'İ'
590
+ 6: 0, # 'ı'
591
+ 40: 1, # 'Ş'
592
+ 19: 1, # 'ş'
593
+ },
594
+ 60: { # 'J'
595
+ 23: 0, # 'A'
596
+ 37: 0, # 'B'
597
+ 47: 0, # 'C'
598
+ 39: 0, # 'D'
599
+ 29: 0, # 'E'
600
+ 52: 0, # 'F'
601
+ 36: 0, # 'G'
602
+ 45: 0, # 'H'
603
+ 53: 0, # 'I'
604
+ 60: 0, # 'J'
605
+ 16: 0, # 'K'
606
+ 49: 0, # 'L'
607
+ 20: 1, # 'M'
608
+ 46: 0, # 'N'
609
+ 42: 0, # 'O'
610
+ 48: 0, # 'P'
611
+ 44: 0, # 'R'
612
+ 35: 0, # 'S'
613
+ 31: 0, # 'T'
614
+ 51: 0, # 'U'
615
+ 38: 0, # 'V'
616
+ 62: 0, # 'W'
617
+ 43: 0, # 'Y'
618
+ 56: 0, # 'Z'
619
+ 1: 0, # 'a'
620
+ 21: 1, # 'b'
621
+ 28: 0, # 'c'
622
+ 12: 1, # 'd'
623
+ 2: 0, # 'e'
624
+ 18: 0, # 'f'
625
+ 27: 0, # 'g'
626
+ 25: 0, # 'h'
627
+ 3: 1, # 'i'
628
+ 24: 0, # 'j'
629
+ 10: 0, # 'k'
630
+ 5: 0, # 'l'
631
+ 13: 0, # 'm'
632
+ 4: 1, # 'n'
633
+ 15: 0, # 'o'
634
+ 26: 0, # 'p'
635
+ 7: 0, # 'r'
636
+ 8: 1, # 's'
637
+ 9: 0, # 't'
638
+ 14: 0, # 'u'
639
+ 32: 0, # 'v'
640
+ 57: 0, # 'w'
641
+ 58: 0, # 'x'
642
+ 11: 0, # 'y'
643
+ 22: 0, # 'z'
644
+ 63: 0, # '·'
645
+ 54: 0, # 'Ç'
646
+ 50: 0, # 'Ö'
647
+ 55: 0, # 'Ü'
648
+ 59: 0, # 'â'
649
+ 33: 0, # 'ç'
650
+ 61: 0, # 'î'
651
+ 34: 0, # 'ö'
652
+ 17: 0, # 'ü'
653
+ 30: 0, # 'ğ'
654
+ 41: 0, # 'İ'
655
+ 6: 0, # 'ı'
656
+ 40: 0, # 'Ş'
657
+ 19: 0, # 'ş'
658
+ },
659
+ 16: { # 'K'
660
+ 23: 0, # 'A'
661
+ 37: 0, # 'B'
662
+ 47: 0, # 'C'
663
+ 39: 0, # 'D'
664
+ 29: 3, # 'E'
665
+ 52: 0, # 'F'
666
+ 36: 0, # 'G'
667
+ 45: 0, # 'H'
668
+ 53: 0, # 'I'
669
+ 60: 0, # 'J'
670
+ 16: 0, # 'K'
671
+ 49: 0, # 'L'
672
+ 20: 2, # 'M'
673
+ 46: 0, # 'N'
674
+ 42: 0, # 'O'
675
+ 48: 0, # 'P'
676
+ 44: 0, # 'R'
677
+ 35: 0, # 'S'
678
+ 31: 2, # 'T'
679
+ 51: 0, # 'U'
680
+ 38: 0, # 'V'
681
+ 62: 0, # 'W'
682
+ 43: 0, # 'Y'
683
+ 56: 0, # 'Z'
684
+ 1: 2, # 'a'
685
+ 21: 3, # 'b'
686
+ 28: 0, # 'c'
687
+ 12: 3, # 'd'
688
+ 2: 1, # 'e'
689
+ 18: 3, # 'f'
690
+ 27: 3, # 'g'
691
+ 25: 3, # 'h'
692
+ 3: 3, # 'i'
693
+ 24: 2, # 'j'
694
+ 10: 3, # 'k'
695
+ 5: 0, # 'l'
696
+ 13: 0, # 'm'
697
+ 4: 3, # 'n'
698
+ 15: 0, # 'o'
699
+ 26: 1, # 'p'
700
+ 7: 3, # 'r'
701
+ 8: 3, # 's'
702
+ 9: 3, # 't'
703
+ 14: 0, # 'u'
704
+ 32: 3, # 'v'
705
+ 57: 0, # 'w'
706
+ 58: 0, # 'x'
707
+ 11: 2, # 'y'
708
+ 22: 1, # 'z'
709
+ 63: 0, # '·'
710
+ 54: 0, # 'Ç'
711
+ 50: 0, # 'Ö'
712
+ 55: 0, # 'Ü'
713
+ 59: 0, # 'â'
714
+ 33: 0, # 'ç'
715
+ 61: 0, # 'î'
716
+ 34: 0, # 'ö'
717
+ 17: 2, # 'ü'
718
+ 30: 0, # 'ğ'
719
+ 41: 1, # 'İ'
720
+ 6: 3, # 'ı'
721
+ 40: 0, # 'Ş'
722
+ 19: 0, # 'ş'
723
+ },
724
+ 49: { # 'L'
725
+ 23: 0, # 'A'
726
+ 37: 0, # 'B'
727
+ 47: 0, # 'C'
728
+ 39: 0, # 'D'
729
+ 29: 2, # 'E'
730
+ 52: 0, # 'F'
731
+ 36: 1, # 'G'
732
+ 45: 1, # 'H'
733
+ 53: 0, # 'I'
734
+ 60: 0, # 'J'
735
+ 16: 0, # 'K'
736
+ 49: 0, # 'L'
737
+ 20: 1, # 'M'
738
+ 46: 0, # 'N'
739
+ 42: 2, # 'O'
740
+ 48: 0, # 'P'
741
+ 44: 0, # 'R'
742
+ 35: 0, # 'S'
743
+ 31: 0, # 'T'
744
+ 51: 0, # 'U'
745
+ 38: 0, # 'V'
746
+ 62: 0, # 'W'
747
+ 43: 1, # 'Y'
748
+ 56: 0, # 'Z'
749
+ 1: 0, # 'a'
750
+ 21: 3, # 'b'
751
+ 28: 0, # 'c'
752
+ 12: 2, # 'd'
753
+ 2: 0, # 'e'
754
+ 18: 0, # 'f'
755
+ 27: 0, # 'g'
756
+ 25: 0, # 'h'
757
+ 3: 2, # 'i'
758
+ 24: 0, # 'j'
759
+ 10: 1, # 'k'
760
+ 5: 0, # 'l'
761
+ 13: 0, # 'm'
762
+ 4: 2, # 'n'
763
+ 15: 1, # 'o'
764
+ 26: 1, # 'p'
765
+ 7: 1, # 'r'
766
+ 8: 1, # 's'
767
+ 9: 1, # 't'
768
+ 14: 0, # 'u'
769
+ 32: 0, # 'v'
770
+ 57: 0, # 'w'
771
+ 58: 0, # 'x'
772
+ 11: 2, # 'y'
773
+ 22: 0, # 'z'
774
+ 63: 0, # '·'
775
+ 54: 0, # 'Ç'
776
+ 50: 0, # 'Ö'
777
+ 55: 2, # 'Ü'
778
+ 59: 0, # 'â'
779
+ 33: 0, # 'ç'
780
+ 61: 0, # 'î'
781
+ 34: 1, # 'ö'
782
+ 17: 1, # 'ü'
783
+ 30: 1, # 'ğ'
784
+ 41: 0, # 'İ'
785
+ 6: 2, # 'ı'
786
+ 40: 0, # 'Ş'
787
+ 19: 0, # 'ş'
788
+ },
789
+ 20: { # 'M'
790
+ 23: 1, # 'A'
791
+ 37: 0, # 'B'
792
+ 47: 0, # 'C'
793
+ 39: 0, # 'D'
794
+ 29: 0, # 'E'
795
+ 52: 0, # 'F'
796
+ 36: 0, # 'G'
797
+ 45: 0, # 'H'
798
+ 53: 0, # 'I'
799
+ 60: 1, # 'J'
800
+ 16: 3, # 'K'
801
+ 49: 0, # 'L'
802
+ 20: 2, # 'M'
803
+ 46: 0, # 'N'
804
+ 42: 0, # 'O'
805
+ 48: 0, # 'P'
806
+ 44: 0, # 'R'
807
+ 35: 0, # 'S'
808
+ 31: 1, # 'T'
809
+ 51: 0, # 'U'
810
+ 38: 0, # 'V'
811
+ 62: 0, # 'W'
812
+ 43: 0, # 'Y'
813
+ 56: 0, # 'Z'
814
+ 1: 3, # 'a'
815
+ 21: 2, # 'b'
816
+ 28: 0, # 'c'
817
+ 12: 3, # 'd'
818
+ 2: 3, # 'e'
819
+ 18: 0, # 'f'
820
+ 27: 1, # 'g'
821
+ 25: 1, # 'h'
822
+ 3: 2, # 'i'
823
+ 24: 2, # 'j'
824
+ 10: 2, # 'k'
825
+ 5: 2, # 'l'
826
+ 13: 3, # 'm'
827
+ 4: 3, # 'n'
828
+ 15: 0, # 'o'
829
+ 26: 1, # 'p'
830
+ 7: 3, # 'r'
831
+ 8: 0, # 's'
832
+ 9: 2, # 't'
833
+ 14: 3, # 'u'
834
+ 32: 0, # 'v'
835
+ 57: 0, # 'w'
836
+ 58: 0, # 'x'
837
+ 11: 2, # 'y'
838
+ 22: 0, # 'z'
839
+ 63: 0, # '·'
840
+ 54: 0, # 'Ç'
841
+ 50: 0, # 'Ö'
842
+ 55: 0, # 'Ü'
843
+ 59: 0, # 'â'
844
+ 33: 3, # 'ç'
845
+ 61: 0, # 'î'
846
+ 34: 0, # 'ö'
847
+ 17: 0, # 'ü'
848
+ 30: 0, # 'ğ'
849
+ 41: 0, # 'İ'
850
+ 6: 3, # 'ı'
851
+ 40: 0, # 'Ş'
852
+ 19: 0, # 'ş'
853
+ },
854
+ 46: { # 'N'
855
+ 23: 0, # 'A'
856
+ 37: 1, # 'B'
857
+ 47: 0, # 'C'
858
+ 39: 0, # 'D'
859
+ 29: 0, # 'E'
860
+ 52: 1, # 'F'
861
+ 36: 1, # 'G'
862
+ 45: 1, # 'H'
863
+ 53: 0, # 'I'
864
+ 60: 0, # 'J'
865
+ 16: 2, # 'K'
866
+ 49: 0, # 'L'
867
+ 20: 0, # 'M'
868
+ 46: 1, # 'N'
869
+ 42: 0, # 'O'
870
+ 48: 0, # 'P'
871
+ 44: 1, # 'R'
872
+ 35: 1, # 'S'
873
+ 31: 0, # 'T'
874
+ 51: 1, # 'U'
875
+ 38: 2, # 'V'
876
+ 62: 0, # 'W'
877
+ 43: 1, # 'Y'
878
+ 56: 0, # 'Z'
879
+ 1: 3, # 'a'
880
+ 21: 0, # 'b'
881
+ 28: 2, # 'c'
882
+ 12: 0, # 'd'
883
+ 2: 3, # 'e'
884
+ 18: 0, # 'f'
885
+ 27: 1, # 'g'
886
+ 25: 0, # 'h'
887
+ 3: 0, # 'i'
888
+ 24: 2, # 'j'
889
+ 10: 1, # 'k'
890
+ 5: 1, # 'l'
891
+ 13: 3, # 'm'
892
+ 4: 2, # 'n'
893
+ 15: 1, # 'o'
894
+ 26: 1, # 'p'
895
+ 7: 1, # 'r'
896
+ 8: 0, # 's'
897
+ 9: 0, # 't'
898
+ 14: 3, # 'u'
899
+ 32: 0, # 'v'
900
+ 57: 0, # 'w'
901
+ 58: 1, # 'x'
902
+ 11: 1, # 'y'
903
+ 22: 2, # 'z'
904
+ 63: 0, # '·'
905
+ 54: 1, # 'Ç'
906
+ 50: 1, # 'Ö'
907
+ 55: 0, # 'Ü'
908
+ 59: 0, # 'â'
909
+ 33: 0, # 'ç'
910
+ 61: 0, # 'î'
911
+ 34: 1, # 'ö'
912
+ 17: 0, # 'ü'
913
+ 30: 0, # 'ğ'
914
+ 41: 1, # 'İ'
915
+ 6: 2, # 'ı'
916
+ 40: 1, # 'Ş'
917
+ 19: 1, # 'ş'
918
+ },
919
+ 42: { # 'O'
920
+ 23: 0, # 'A'
921
+ 37: 0, # 'B'
922
+ 47: 0, # 'C'
923
+ 39: 0, # 'D'
924
+ 29: 0, # 'E'
925
+ 52: 1, # 'F'
926
+ 36: 0, # 'G'
927
+ 45: 1, # 'H'
928
+ 53: 0, # 'I'
929
+ 60: 0, # 'J'
930
+ 16: 2, # 'K'
931
+ 49: 1, # 'L'
932
+ 20: 0, # 'M'
933
+ 46: 0, # 'N'
934
+ 42: 0, # 'O'
935
+ 48: 2, # 'P'
936
+ 44: 1, # 'R'
937
+ 35: 1, # 'S'
938
+ 31: 0, # 'T'
939
+ 51: 1, # 'U'
940
+ 38: 1, # 'V'
941
+ 62: 0, # 'W'
942
+ 43: 0, # 'Y'
943
+ 56: 0, # 'Z'
944
+ 1: 3, # 'a'
945
+ 21: 0, # 'b'
946
+ 28: 2, # 'c'
947
+ 12: 0, # 'd'
948
+ 2: 2, # 'e'
949
+ 18: 0, # 'f'
950
+ 27: 0, # 'g'
951
+ 25: 0, # 'h'
952
+ 3: 0, # 'i'
953
+ 24: 0, # 'j'
954
+ 10: 0, # 'k'
955
+ 5: 3, # 'l'
956
+ 13: 3, # 'm'
957
+ 4: 0, # 'n'
958
+ 15: 1, # 'o'
959
+ 26: 0, # 'p'
960
+ 7: 0, # 'r'
961
+ 8: 0, # 's'
962
+ 9: 0, # 't'
963
+ 14: 2, # 'u'
964
+ 32: 0, # 'v'
965
+ 57: 0, # 'w'
966
+ 58: 0, # 'x'
967
+ 11: 0, # 'y'
968
+ 22: 2, # 'z'
969
+ 63: 0, # '·'
970
+ 54: 2, # 'Ç'
971
+ 50: 1, # 'Ö'
972
+ 55: 0, # 'Ü'
973
+ 59: 0, # 'â'
974
+ 33: 2, # 'ç'
975
+ 61: 0, # 'î'
976
+ 34: 1, # 'ö'
977
+ 17: 0, # 'ü'
978
+ 30: 1, # 'ğ'
979
+ 41: 2, # 'İ'
980
+ 6: 1, # 'ı'
981
+ 40: 1, # 'Ş'
982
+ 19: 1, # 'ş'
983
+ },
984
+ 48: { # 'P'
985
+ 23: 0, # 'A'
986
+ 37: 0, # 'B'
987
+ 47: 2, # 'C'
988
+ 39: 0, # 'D'
989
+ 29: 0, # 'E'
990
+ 52: 2, # 'F'
991
+ 36: 1, # 'G'
992
+ 45: 1, # 'H'
993
+ 53: 0, # 'I'
994
+ 60: 0, # 'J'
995
+ 16: 2, # 'K'
996
+ 49: 0, # 'L'
997
+ 20: 0, # 'M'
998
+ 46: 1, # 'N'
999
+ 42: 1, # 'O'
1000
+ 48: 1, # 'P'
1001
+ 44: 0, # 'R'
1002
+ 35: 1, # 'S'
1003
+ 31: 0, # 'T'
1004
+ 51: 0, # 'U'
1005
+ 38: 1, # 'V'
1006
+ 62: 0, # 'W'
1007
+ 43: 0, # 'Y'
1008
+ 56: 0, # 'Z'
1009
+ 1: 2, # 'a'
1010
+ 21: 0, # 'b'
1011
+ 28: 2, # 'c'
1012
+ 12: 0, # 'd'
1013
+ 2: 3, # 'e'
1014
+ 18: 0, # 'f'
1015
+ 27: 0, # 'g'
1016
+ 25: 0, # 'h'
1017
+ 3: 0, # 'i'
1018
+ 24: 0, # 'j'
1019
+ 10: 1, # 'k'
1020
+ 5: 0, # 'l'
1021
+ 13: 2, # 'm'
1022
+ 4: 0, # 'n'
1023
+ 15: 2, # 'o'
1024
+ 26: 0, # 'p'
1025
+ 7: 0, # 'r'
1026
+ 8: 0, # 's'
1027
+ 9: 0, # 't'
1028
+ 14: 2, # 'u'
1029
+ 32: 0, # 'v'
1030
+ 57: 0, # 'w'
1031
+ 58: 2, # 'x'
1032
+ 11: 0, # 'y'
1033
+ 22: 2, # 'z'
1034
+ 63: 0, # '·'
1035
+ 54: 1, # 'Ç'
1036
+ 50: 2, # 'Ö'
1037
+ 55: 0, # 'Ü'
1038
+ 59: 0, # 'â'
1039
+ 33: 0, # 'ç'
1040
+ 61: 0, # 'î'
1041
+ 34: 2, # 'ö'
1042
+ 17: 0, # 'ü'
1043
+ 30: 1, # 'ğ'
1044
+ 41: 1, # 'İ'
1045
+ 6: 0, # 'ı'
1046
+ 40: 2, # 'Ş'
1047
+ 19: 1, # 'ş'
1048
+ },
1049
+ 44: { # 'R'
1050
+ 23: 0, # 'A'
1051
+ 37: 0, # 'B'
1052
+ 47: 1, # 'C'
1053
+ 39: 0, # 'D'
1054
+ 29: 0, # 'E'
1055
+ 52: 1, # 'F'
1056
+ 36: 0, # 'G'
1057
+ 45: 0, # 'H'
1058
+ 53: 0, # 'I'
1059
+ 60: 0, # 'J'
1060
+ 16: 3, # 'K'
1061
+ 49: 0, # 'L'
1062
+ 20: 0, # 'M'
1063
+ 46: 0, # 'N'
1064
+ 42: 0, # 'O'
1065
+ 48: 1, # 'P'
1066
+ 44: 0, # 'R'
1067
+ 35: 0, # 'S'
1068
+ 31: 0, # 'T'
1069
+ 51: 0, # 'U'
1070
+ 38: 0, # 'V'
1071
+ 62: 0, # 'W'
1072
+ 43: 1, # 'Y'
1073
+ 56: 0, # 'Z'
1074
+ 1: 3, # 'a'
1075
+ 21: 1, # 'b'
1076
+ 28: 1, # 'c'
1077
+ 12: 0, # 'd'
1078
+ 2: 2, # 'e'
1079
+ 18: 0, # 'f'
1080
+ 27: 0, # 'g'
1081
+ 25: 0, # 'h'
1082
+ 3: 0, # 'i'
1083
+ 24: 0, # 'j'
1084
+ 10: 1, # 'k'
1085
+ 5: 2, # 'l'
1086
+ 13: 2, # 'm'
1087
+ 4: 0, # 'n'
1088
+ 15: 1, # 'o'
1089
+ 26: 0, # 'p'
1090
+ 7: 0, # 'r'
1091
+ 8: 0, # 's'
1092
+ 9: 0, # 't'
1093
+ 14: 2, # 'u'
1094
+ 32: 0, # 'v'
1095
+ 57: 0, # 'w'
1096
+ 58: 0, # 'x'
1097
+ 11: 1, # 'y'
1098
+ 22: 2, # 'z'
1099
+ 63: 0, # '·'
1100
+ 54: 0, # 'Ç'
1101
+ 50: 1, # 'Ö'
1102
+ 55: 0, # 'Ü'
1103
+ 59: 0, # 'â'
1104
+ 33: 1, # 'ç'
1105
+ 61: 0, # 'î'
1106
+ 34: 1, # 'ö'
1107
+ 17: 1, # 'ü'
1108
+ 30: 1, # 'ğ'
1109
+ 41: 0, # 'İ'
1110
+ 6: 2, # 'ı'
1111
+ 40: 1, # 'Ş'
1112
+ 19: 1, # 'ş'
1113
+ },
1114
+ 35: { # 'S'
1115
+ 23: 0, # 'A'
1116
+ 37: 0, # 'B'
1117
+ 47: 1, # 'C'
1118
+ 39: 0, # 'D'
1119
+ 29: 0, # 'E'
1120
+ 52: 1, # 'F'
1121
+ 36: 1, # 'G'
1122
+ 45: 1, # 'H'
1123
+ 53: 0, # 'I'
1124
+ 60: 0, # 'J'
1125
+ 16: 3, # 'K'
1126
+ 49: 1, # 'L'
1127
+ 20: 1, # 'M'
1128
+ 46: 0, # 'N'
1129
+ 42: 0, # 'O'
1130
+ 48: 1, # 'P'
1131
+ 44: 0, # 'R'
1132
+ 35: 0, # 'S'
1133
+ 31: 0, # 'T'
1134
+ 51: 1, # 'U'
1135
+ 38: 1, # 'V'
1136
+ 62: 0, # 'W'
1137
+ 43: 1, # 'Y'
1138
+ 56: 0, # 'Z'
1139
+ 1: 3, # 'a'
1140
+ 21: 0, # 'b'
1141
+ 28: 2, # 'c'
1142
+ 12: 0, # 'd'
1143
+ 2: 3, # 'e'
1144
+ 18: 0, # 'f'
1145
+ 27: 0, # 'g'
1146
+ 25: 0, # 'h'
1147
+ 3: 0, # 'i'
1148
+ 24: 0, # 'j'
1149
+ 10: 1, # 'k'
1150
+ 5: 1, # 'l'
1151
+ 13: 2, # 'm'
1152
+ 4: 1, # 'n'
1153
+ 15: 0, # 'o'
1154
+ 26: 0, # 'p'
1155
+ 7: 0, # 'r'
1156
+ 8: 0, # 's'
1157
+ 9: 1, # 't'
1158
+ 14: 2, # 'u'
1159
+ 32: 0, # 'v'
1160
+ 57: 0, # 'w'
1161
+ 58: 0, # 'x'
1162
+ 11: 0, # 'y'
1163
+ 22: 1, # 'z'
1164
+ 63: 0, # '·'
1165
+ 54: 2, # 'Ç'
1166
+ 50: 2, # 'Ö'
1167
+ 55: 0, # 'Ü'
1168
+ 59: 0, # 'â'
1169
+ 33: 3, # 'ç'
1170
+ 61: 0, # 'î'
1171
+ 34: 1, # 'ö'
1172
+ 17: 0, # 'ü'
1173
+ 30: 0, # 'ğ'
1174
+ 41: 0, # 'İ'
1175
+ 6: 3, # 'ı'
1176
+ 40: 2, # 'Ş'
1177
+ 19: 1, # 'ş'
1178
+ },
1179
+ 31: { # 'T'
1180
+ 23: 0, # 'A'
1181
+ 37: 0, # 'B'
1182
+ 47: 0, # 'C'
1183
+ 39: 0, # 'D'
1184
+ 29: 0, # 'E'
1185
+ 52: 0, # 'F'
1186
+ 36: 0, # 'G'
1187
+ 45: 0, # 'H'
1188
+ 53: 0, # 'I'
1189
+ 60: 1, # 'J'
1190
+ 16: 2, # 'K'
1191
+ 49: 0, # 'L'
1192
+ 20: 1, # 'M'
1193
+ 46: 0, # 'N'
1194
+ 42: 0, # 'O'
1195
+ 48: 0, # 'P'
1196
+ 44: 0, # 'R'
1197
+ 35: 0, # 'S'
1198
+ 31: 2, # 'T'
1199
+ 51: 0, # 'U'
1200
+ 38: 0, # 'V'
1201
+ 62: 0, # 'W'
1202
+ 43: 0, # 'Y'
1203
+ 56: 0, # 'Z'
1204
+ 1: 3, # 'a'
1205
+ 21: 2, # 'b'
1206
+ 28: 0, # 'c'
1207
+ 12: 1, # 'd'
1208
+ 2: 3, # 'e'
1209
+ 18: 2, # 'f'
1210
+ 27: 2, # 'g'
1211
+ 25: 0, # 'h'
1212
+ 3: 1, # 'i'
1213
+ 24: 1, # 'j'
1214
+ 10: 2, # 'k'
1215
+ 5: 2, # 'l'
1216
+ 13: 3, # 'm'
1217
+ 4: 3, # 'n'
1218
+ 15: 0, # 'o'
1219
+ 26: 2, # 'p'
1220
+ 7: 2, # 'r'
1221
+ 8: 0, # 's'
1222
+ 9: 2, # 't'
1223
+ 14: 2, # 'u'
1224
+ 32: 1, # 'v'
1225
+ 57: 1, # 'w'
1226
+ 58: 1, # 'x'
1227
+ 11: 2, # 'y'
1228
+ 22: 0, # 'z'
1229
+ 63: 0, # '·'
1230
+ 54: 0, # 'Ç'
1231
+ 50: 0, # 'Ö'
1232
+ 55: 0, # 'Ü'
1233
+ 59: 0, # 'â'
1234
+ 33: 0, # 'ç'
1235
+ 61: 0, # 'î'
1236
+ 34: 0, # 'ö'
1237
+ 17: 1, # 'ü'
1238
+ 30: 0, # 'ğ'
1239
+ 41: 0, # 'İ'
1240
+ 6: 3, # 'ı'
1241
+ 40: 0, # 'Ş'
1242
+ 19: 0, # 'ş'
1243
+ },
1244
+ 51: { # 'U'
1245
+ 23: 0, # 'A'
1246
+ 37: 0, # 'B'
1247
+ 47: 0, # 'C'
1248
+ 39: 0, # 'D'
1249
+ 29: 0, # 'E'
1250
+ 52: 1, # 'F'
1251
+ 36: 1, # 'G'
1252
+ 45: 0, # 'H'
1253
+ 53: 0, # 'I'
1254
+ 60: 0, # 'J'
1255
+ 16: 1, # 'K'
1256
+ 49: 0, # 'L'
1257
+ 20: 0, # 'M'
1258
+ 46: 1, # 'N'
1259
+ 42: 0, # 'O'
1260
+ 48: 1, # 'P'
1261
+ 44: 0, # 'R'
1262
+ 35: 0, # 'S'
1263
+ 31: 0, # 'T'
1264
+ 51: 1, # 'U'
1265
+ 38: 1, # 'V'
1266
+ 62: 0, # 'W'
1267
+ 43: 0, # 'Y'
1268
+ 56: 0, # 'Z'
1269
+ 1: 3, # 'a'
1270
+ 21: 0, # 'b'
1271
+ 28: 1, # 'c'
1272
+ 12: 0, # 'd'
1273
+ 2: 3, # 'e'
1274
+ 18: 0, # 'f'
1275
+ 27: 2, # 'g'
1276
+ 25: 0, # 'h'
1277
+ 3: 0, # 'i'
1278
+ 24: 0, # 'j'
1279
+ 10: 1, # 'k'
1280
+ 5: 1, # 'l'
1281
+ 13: 3, # 'm'
1282
+ 4: 2, # 'n'
1283
+ 15: 0, # 'o'
1284
+ 26: 1, # 'p'
1285
+ 7: 0, # 'r'
1286
+ 8: 0, # 's'
1287
+ 9: 0, # 't'
1288
+ 14: 2, # 'u'
1289
+ 32: 0, # 'v'
1290
+ 57: 0, # 'w'
1291
+ 58: 0, # 'x'
1292
+ 11: 0, # 'y'
1293
+ 22: 2, # 'z'
1294
+ 63: 0, # '·'
1295
+ 54: 1, # 'Ç'
1296
+ 50: 1, # 'Ö'
1297
+ 55: 0, # 'Ü'
1298
+ 59: 0, # 'â'
1299
+ 33: 0, # 'ç'
1300
+ 61: 0, # 'î'
1301
+ 34: 0, # 'ö'
1302
+ 17: 0, # 'ü'
1303
+ 30: 1, # 'ğ'
1304
+ 41: 1, # 'İ'
1305
+ 6: 2, # 'ı'
1306
+ 40: 0, # 'Ş'
1307
+ 19: 1, # 'ş'
1308
+ },
1309
+ 38: { # 'V'
1310
+ 23: 1, # 'A'
1311
+ 37: 1, # 'B'
1312
+ 47: 1, # 'C'
1313
+ 39: 0, # 'D'
1314
+ 29: 0, # 'E'
1315
+ 52: 2, # 'F'
1316
+ 36: 0, # 'G'
1317
+ 45: 0, # 'H'
1318
+ 53: 0, # 'I'
1319
+ 60: 0, # 'J'
1320
+ 16: 3, # 'K'
1321
+ 49: 0, # 'L'
1322
+ 20: 3, # 'M'
1323
+ 46: 0, # 'N'
1324
+ 42: 0, # 'O'
1325
+ 48: 1, # 'P'
1326
+ 44: 1, # 'R'
1327
+ 35: 0, # 'S'
1328
+ 31: 0, # 'T'
1329
+ 51: 1, # 'U'
1330
+ 38: 1, # 'V'
1331
+ 62: 0, # 'W'
1332
+ 43: 0, # 'Y'
1333
+ 56: 0, # 'Z'
1334
+ 1: 3, # 'a'
1335
+ 21: 0, # 'b'
1336
+ 28: 2, # 'c'
1337
+ 12: 0, # 'd'
1338
+ 2: 3, # 'e'
1339
+ 18: 0, # 'f'
1340
+ 27: 0, # 'g'
1341
+ 25: 0, # 'h'
1342
+ 3: 0, # 'i'
1343
+ 24: 0, # 'j'
1344
+ 10: 0, # 'k'
1345
+ 5: 2, # 'l'
1346
+ 13: 2, # 'm'
1347
+ 4: 0, # 'n'
1348
+ 15: 2, # 'o'
1349
+ 26: 0, # 'p'
1350
+ 7: 0, # 'r'
1351
+ 8: 0, # 's'
1352
+ 9: 1, # 't'
1353
+ 14: 3, # 'u'
1354
+ 32: 0, # 'v'
1355
+ 57: 0, # 'w'
1356
+ 58: 0, # 'x'
1357
+ 11: 1, # 'y'
1358
+ 22: 2, # 'z'
1359
+ 63: 0, # '·'
1360
+ 54: 1, # 'Ç'
1361
+ 50: 1, # 'Ö'
1362
+ 55: 0, # 'Ü'
1363
+ 59: 1, # 'â'
1364
+ 33: 2, # 'ç'
1365
+ 61: 0, # 'î'
1366
+ 34: 1, # 'ö'
1367
+ 17: 0, # 'ü'
1368
+ 30: 1, # 'ğ'
1369
+ 41: 1, # 'İ'
1370
+ 6: 3, # 'ı'
1371
+ 40: 2, # 'Ş'
1372
+ 19: 1, # 'ş'
1373
+ },
1374
+ 62: { # 'W'
1375
+ 23: 0, # 'A'
1376
+ 37: 0, # 'B'
1377
+ 47: 0, # 'C'
1378
+ 39: 0, # 'D'
1379
+ 29: 0, # 'E'
1380
+ 52: 0, # 'F'
1381
+ 36: 0, # 'G'
1382
+ 45: 0, # 'H'
1383
+ 53: 0, # 'I'
1384
+ 60: 0, # 'J'
1385
+ 16: 0, # 'K'
1386
+ 49: 0, # 'L'
1387
+ 20: 0, # 'M'
1388
+ 46: 0, # 'N'
1389
+ 42: 0, # 'O'
1390
+ 48: 0, # 'P'
1391
+ 44: 0, # 'R'
1392
+ 35: 0, # 'S'
1393
+ 31: 0, # 'T'
1394
+ 51: 0, # 'U'
1395
+ 38: 0, # 'V'
1396
+ 62: 0, # 'W'
1397
+ 43: 0, # 'Y'
1398
+ 56: 0, # 'Z'
1399
+ 1: 0, # 'a'
1400
+ 21: 0, # 'b'
1401
+ 28: 0, # 'c'
1402
+ 12: 0, # 'd'
1403
+ 2: 0, # 'e'
1404
+ 18: 0, # 'f'
1405
+ 27: 0, # 'g'
1406
+ 25: 0, # 'h'
1407
+ 3: 0, # 'i'
1408
+ 24: 0, # 'j'
1409
+ 10: 0, # 'k'
1410
+ 5: 0, # 'l'
1411
+ 13: 0, # 'm'
1412
+ 4: 0, # 'n'
1413
+ 15: 0, # 'o'
1414
+ 26: 0, # 'p'
1415
+ 7: 0, # 'r'
1416
+ 8: 0, # 's'
1417
+ 9: 0, # 't'
1418
+ 14: 0, # 'u'
1419
+ 32: 0, # 'v'
1420
+ 57: 0, # 'w'
1421
+ 58: 0, # 'x'
1422
+ 11: 0, # 'y'
1423
+ 22: 0, # 'z'
1424
+ 63: 0, # '·'
1425
+ 54: 0, # 'Ç'
1426
+ 50: 0, # 'Ö'
1427
+ 55: 0, # 'Ü'
1428
+ 59: 0, # 'â'
1429
+ 33: 0, # 'ç'
1430
+ 61: 0, # 'î'
1431
+ 34: 0, # 'ö'
1432
+ 17: 0, # 'ü'
1433
+ 30: 0, # 'ğ'
1434
+ 41: 0, # 'İ'
1435
+ 6: 0, # 'ı'
1436
+ 40: 0, # 'Ş'
1437
+ 19: 0, # 'ş'
1438
+ },
1439
+ 43: { # 'Y'
1440
+ 23: 0, # 'A'
1441
+ 37: 0, # 'B'
1442
+ 47: 1, # 'C'
1443
+ 39: 0, # 'D'
1444
+ 29: 0, # 'E'
1445
+ 52: 2, # 'F'
1446
+ 36: 0, # 'G'
1447
+ 45: 1, # 'H'
1448
+ 53: 1, # 'I'
1449
+ 60: 0, # 'J'
1450
+ 16: 2, # 'K'
1451
+ 49: 0, # 'L'
1452
+ 20: 0, # 'M'
1453
+ 46: 2, # 'N'
1454
+ 42: 0, # 'O'
1455
+ 48: 2, # 'P'
1456
+ 44: 1, # 'R'
1457
+ 35: 1, # 'S'
1458
+ 31: 0, # 'T'
1459
+ 51: 1, # 'U'
1460
+ 38: 2, # 'V'
1461
+ 62: 0, # 'W'
1462
+ 43: 0, # 'Y'
1463
+ 56: 0, # 'Z'
1464
+ 1: 3, # 'a'
1465
+ 21: 0, # 'b'
1466
+ 28: 2, # 'c'
1467
+ 12: 0, # 'd'
1468
+ 2: 2, # 'e'
1469
+ 18: 0, # 'f'
1470
+ 27: 0, # 'g'
1471
+ 25: 0, # 'h'
1472
+ 3: 0, # 'i'
1473
+ 24: 1, # 'j'
1474
+ 10: 1, # 'k'
1475
+ 5: 1, # 'l'
1476
+ 13: 3, # 'm'
1477
+ 4: 0, # 'n'
1478
+ 15: 2, # 'o'
1479
+ 26: 0, # 'p'
1480
+ 7: 0, # 'r'
1481
+ 8: 0, # 's'
1482
+ 9: 0, # 't'
1483
+ 14: 3, # 'u'
1484
+ 32: 0, # 'v'
1485
+ 57: 0, # 'w'
1486
+ 58: 1, # 'x'
1487
+ 11: 0, # 'y'
1488
+ 22: 2, # 'z'
1489
+ 63: 0, # '·'
1490
+ 54: 1, # 'Ç'
1491
+ 50: 2, # 'Ö'
1492
+ 55: 1, # 'Ü'
1493
+ 59: 1, # 'â'
1494
+ 33: 0, # 'ç'
1495
+ 61: 0, # 'î'
1496
+ 34: 1, # 'ö'
1497
+ 17: 0, # 'ü'
1498
+ 30: 1, # 'ğ'
1499
+ 41: 1, # 'İ'
1500
+ 6: 0, # 'ı'
1501
+ 40: 2, # 'Ş'
1502
+ 19: 1, # 'ş'
1503
+ },
1504
+ 56: { # 'Z'
1505
+ 23: 0, # 'A'
1506
+ 37: 0, # 'B'
1507
+ 47: 0, # 'C'
1508
+ 39: 0, # 'D'
1509
+ 29: 0, # 'E'
1510
+ 52: 0, # 'F'
1511
+ 36: 0, # 'G'
1512
+ 45: 0, # 'H'
1513
+ 53: 0, # 'I'
1514
+ 60: 0, # 'J'
1515
+ 16: 0, # 'K'
1516
+ 49: 0, # 'L'
1517
+ 20: 0, # 'M'
1518
+ 46: 0, # 'N'
1519
+ 42: 0, # 'O'
1520
+ 48: 0, # 'P'
1521
+ 44: 0, # 'R'
1522
+ 35: 0, # 'S'
1523
+ 31: 0, # 'T'
1524
+ 51: 0, # 'U'
1525
+ 38: 0, # 'V'
1526
+ 62: 0, # 'W'
1527
+ 43: 0, # 'Y'
1528
+ 56: 2, # 'Z'
1529
+ 1: 2, # 'a'
1530
+ 21: 1, # 'b'
1531
+ 28: 0, # 'c'
1532
+ 12: 0, # 'd'
1533
+ 2: 2, # 'e'
1534
+ 18: 0, # 'f'
1535
+ 27: 0, # 'g'
1536
+ 25: 0, # 'h'
1537
+ 3: 2, # 'i'
1538
+ 24: 1, # 'j'
1539
+ 10: 0, # 'k'
1540
+ 5: 0, # 'l'
1541
+ 13: 1, # 'm'
1542
+ 4: 1, # 'n'
1543
+ 15: 0, # 'o'
1544
+ 26: 0, # 'p'
1545
+ 7: 1, # 'r'
1546
+ 8: 1, # 's'
1547
+ 9: 0, # 't'
1548
+ 14: 2, # 'u'
1549
+ 32: 0, # 'v'
1550
+ 57: 0, # 'w'
1551
+ 58: 0, # 'x'
1552
+ 11: 0, # 'y'
1553
+ 22: 0, # 'z'
1554
+ 63: 0, # '·'
1555
+ 54: 0, # 'Ç'
1556
+ 50: 0, # 'Ö'
1557
+ 55: 0, # 'Ü'
1558
+ 59: 0, # 'â'
1559
+ 33: 0, # 'ç'
1560
+ 61: 0, # 'î'
1561
+ 34: 0, # 'ö'
1562
+ 17: 1, # 'ü'
1563
+ 30: 0, # 'ğ'
1564
+ 41: 0, # 'İ'
1565
+ 6: 1, # 'ı'
1566
+ 40: 0, # 'Ş'
1567
+ 19: 0, # 'ş'
1568
+ },
1569
+ 1: { # 'a'
1570
+ 23: 3, # 'A'
1571
+ 37: 0, # 'B'
1572
+ 47: 1, # 'C'
1573
+ 39: 0, # 'D'
1574
+ 29: 3, # 'E'
1575
+ 52: 0, # 'F'
1576
+ 36: 1, # 'G'
1577
+ 45: 1, # 'H'
1578
+ 53: 0, # 'I'
1579
+ 60: 0, # 'J'
1580
+ 16: 0, # 'K'
1581
+ 49: 0, # 'L'
1582
+ 20: 3, # 'M'
1583
+ 46: 1, # 'N'
1584
+ 42: 0, # 'O'
1585
+ 48: 1, # 'P'
1586
+ 44: 0, # 'R'
1587
+ 35: 0, # 'S'
1588
+ 31: 3, # 'T'
1589
+ 51: 0, # 'U'
1590
+ 38: 1, # 'V'
1591
+ 62: 0, # 'W'
1592
+ 43: 0, # 'Y'
1593
+ 56: 2, # 'Z'
1594
+ 1: 2, # 'a'
1595
+ 21: 3, # 'b'
1596
+ 28: 0, # 'c'
1597
+ 12: 3, # 'd'
1598
+ 2: 2, # 'e'
1599
+ 18: 3, # 'f'
1600
+ 27: 3, # 'g'
1601
+ 25: 3, # 'h'
1602
+ 3: 3, # 'i'
1603
+ 24: 3, # 'j'
1604
+ 10: 3, # 'k'
1605
+ 5: 0, # 'l'
1606
+ 13: 2, # 'm'
1607
+ 4: 3, # 'n'
1608
+ 15: 1, # 'o'
1609
+ 26: 3, # 'p'
1610
+ 7: 3, # 'r'
1611
+ 8: 3, # 's'
1612
+ 9: 3, # 't'
1613
+ 14: 3, # 'u'
1614
+ 32: 3, # 'v'
1615
+ 57: 2, # 'w'
1616
+ 58: 0, # 'x'
1617
+ 11: 3, # 'y'
1618
+ 22: 0, # 'z'
1619
+ 63: 1, # '·'
1620
+ 54: 0, # 'Ç'
1621
+ 50: 0, # 'Ö'
1622
+ 55: 0, # 'Ü'
1623
+ 59: 0, # 'â'
1624
+ 33: 1, # 'ç'
1625
+ 61: 1, # 'î'
1626
+ 34: 1, # 'ö'
1627
+ 17: 3, # 'ü'
1628
+ 30: 0, # 'ğ'
1629
+ 41: 0, # 'İ'
1630
+ 6: 3, # 'ı'
1631
+ 40: 0, # 'Ş'
1632
+ 19: 1, # 'ş'
1633
+ },
1634
+ 21: { # 'b'
1635
+ 23: 0, # 'A'
1636
+ 37: 0, # 'B'
1637
+ 47: 0, # 'C'
1638
+ 39: 0, # 'D'
1639
+ 29: 0, # 'E'
1640
+ 52: 0, # 'F'
1641
+ 36: 1, # 'G'
1642
+ 45: 0, # 'H'
1643
+ 53: 0, # 'I'
1644
+ 60: 1, # 'J'
1645
+ 16: 2, # 'K'
1646
+ 49: 0, # 'L'
1647
+ 20: 2, # 'M'
1648
+ 46: 0, # 'N'
1649
+ 42: 0, # 'O'
1650
+ 48: 0, # 'P'
1651
+ 44: 0, # 'R'
1652
+ 35: 0, # 'S'
1653
+ 31: 1, # 'T'
1654
+ 51: 0, # 'U'
1655
+ 38: 0, # 'V'
1656
+ 62: 0, # 'W'
1657
+ 43: 1, # 'Y'
1658
+ 56: 0, # 'Z'
1659
+ 1: 3, # 'a'
1660
+ 21: 2, # 'b'
1661
+ 28: 0, # 'c'
1662
+ 12: 3, # 'd'
1663
+ 2: 3, # 'e'
1664
+ 18: 0, # 'f'
1665
+ 27: 3, # 'g'
1666
+ 25: 1, # 'h'
1667
+ 3: 3, # 'i'
1668
+ 24: 2, # 'j'
1669
+ 10: 3, # 'k'
1670
+ 5: 3, # 'l'
1671
+ 13: 3, # 'm'
1672
+ 4: 3, # 'n'
1673
+ 15: 0, # 'o'
1674
+ 26: 3, # 'p'
1675
+ 7: 1, # 'r'
1676
+ 8: 2, # 's'
1677
+ 9: 2, # 't'
1678
+ 14: 2, # 'u'
1679
+ 32: 1, # 'v'
1680
+ 57: 0, # 'w'
1681
+ 58: 1, # 'x'
1682
+ 11: 3, # 'y'
1683
+ 22: 0, # 'z'
1684
+ 63: 0, # '·'
1685
+ 54: 0, # 'Ç'
1686
+ 50: 0, # 'Ö'
1687
+ 55: 0, # 'Ü'
1688
+ 59: 0, # 'â'
1689
+ 33: 1, # 'ç'
1690
+ 61: 0, # 'î'
1691
+ 34: 0, # 'ö'
1692
+ 17: 0, # 'ü'
1693
+ 30: 1, # 'ğ'
1694
+ 41: 0, # 'İ'
1695
+ 6: 2, # 'ı'
1696
+ 40: 0, # 'Ş'
1697
+ 19: 0, # 'ş'
1698
+ },
1699
+ 28: { # 'c'
1700
+ 23: 0, # 'A'
1701
+ 37: 1, # 'B'
1702
+ 47: 1, # 'C'
1703
+ 39: 1, # 'D'
1704
+ 29: 2, # 'E'
1705
+ 52: 0, # 'F'
1706
+ 36: 2, # 'G'
1707
+ 45: 2, # 'H'
1708
+ 53: 1, # 'I'
1709
+ 60: 0, # 'J'
1710
+ 16: 0, # 'K'
1711
+ 49: 0, # 'L'
1712
+ 20: 2, # 'M'
1713
+ 46: 1, # 'N'
1714
+ 42: 1, # 'O'
1715
+ 48: 2, # 'P'
1716
+ 44: 1, # 'R'
1717
+ 35: 1, # 'S'
1718
+ 31: 2, # 'T'
1719
+ 51: 2, # 'U'
1720
+ 38: 2, # 'V'
1721
+ 62: 0, # 'W'
1722
+ 43: 3, # 'Y'
1723
+ 56: 0, # 'Z'
1724
+ 1: 1, # 'a'
1725
+ 21: 1, # 'b'
1726
+ 28: 2, # 'c'
1727
+ 12: 2, # 'd'
1728
+ 2: 1, # 'e'
1729
+ 18: 1, # 'f'
1730
+ 27: 2, # 'g'
1731
+ 25: 2, # 'h'
1732
+ 3: 3, # 'i'
1733
+ 24: 1, # 'j'
1734
+ 10: 3, # 'k'
1735
+ 5: 0, # 'l'
1736
+ 13: 2, # 'm'
1737
+ 4: 3, # 'n'
1738
+ 15: 2, # 'o'
1739
+ 26: 2, # 'p'
1740
+ 7: 3, # 'r'
1741
+ 8: 3, # 's'
1742
+ 9: 3, # 't'
1743
+ 14: 1, # 'u'
1744
+ 32: 0, # 'v'
1745
+ 57: 1, # 'w'
1746
+ 58: 0, # 'x'
1747
+ 11: 2, # 'y'
1748
+ 22: 1, # 'z'
1749
+ 63: 1, # '·'
1750
+ 54: 0, # 'Ç'
1751
+ 50: 0, # 'Ö'
1752
+ 55: 1, # 'Ü'
1753
+ 59: 0, # 'â'
1754
+ 33: 0, # 'ç'
1755
+ 61: 1, # 'î'
1756
+ 34: 2, # 'ö'
1757
+ 17: 2, # 'ü'
1758
+ 30: 2, # 'ğ'
1759
+ 41: 1, # 'İ'
1760
+ 6: 3, # 'ı'
1761
+ 40: 0, # 'Ş'
1762
+ 19: 2, # 'ş'
1763
+ },
1764
+ 12: { # 'd'
1765
+ 23: 1, # 'A'
1766
+ 37: 0, # 'B'
1767
+ 47: 0, # 'C'
1768
+ 39: 0, # 'D'
1769
+ 29: 0, # 'E'
1770
+ 52: 0, # 'F'
1771
+ 36: 0, # 'G'
1772
+ 45: 0, # 'H'
1773
+ 53: 0, # 'I'
1774
+ 60: 2, # 'J'
1775
+ 16: 3, # 'K'
1776
+ 49: 0, # 'L'
1777
+ 20: 3, # 'M'
1778
+ 46: 0, # 'N'
1779
+ 42: 0, # 'O'
1780
+ 48: 0, # 'P'
1781
+ 44: 0, # 'R'
1782
+ 35: 1, # 'S'
1783
+ 31: 1, # 'T'
1784
+ 51: 0, # 'U'
1785
+ 38: 0, # 'V'
1786
+ 62: 0, # 'W'
1787
+ 43: 0, # 'Y'
1788
+ 56: 0, # 'Z'
1789
+ 1: 3, # 'a'
1790
+ 21: 2, # 'b'
1791
+ 28: 1, # 'c'
1792
+ 12: 3, # 'd'
1793
+ 2: 3, # 'e'
1794
+ 18: 1, # 'f'
1795
+ 27: 3, # 'g'
1796
+ 25: 3, # 'h'
1797
+ 3: 2, # 'i'
1798
+ 24: 3, # 'j'
1799
+ 10: 2, # 'k'
1800
+ 5: 3, # 'l'
1801
+ 13: 3, # 'm'
1802
+ 4: 3, # 'n'
1803
+ 15: 1, # 'o'
1804
+ 26: 2, # 'p'
1805
+ 7: 3, # 'r'
1806
+ 8: 2, # 's'
1807
+ 9: 2, # 't'
1808
+ 14: 3, # 'u'
1809
+ 32: 1, # 'v'
1810
+ 57: 0, # 'w'
1811
+ 58: 1, # 'x'
1812
+ 11: 3, # 'y'
1813
+ 22: 1, # 'z'
1814
+ 63: 1, # '·'
1815
+ 54: 0, # 'Ç'
1816
+ 50: 0, # 'Ö'
1817
+ 55: 0, # 'Ü'
1818
+ 59: 0, # 'â'
1819
+ 33: 0, # 'ç'
1820
+ 61: 0, # 'î'
1821
+ 34: 0, # 'ö'
1822
+ 17: 1, # 'ü'
1823
+ 30: 0, # 'ğ'
1824
+ 41: 0, # 'İ'
1825
+ 6: 2, # 'ı'
1826
+ 40: 0, # 'Ş'
1827
+ 19: 0, # 'ş'
1828
+ },
1829
+ 2: { # 'e'
1830
+ 23: 2, # 'A'
1831
+ 37: 0, # 'B'
1832
+ 47: 2, # 'C'
1833
+ 39: 0, # 'D'
1834
+ 29: 3, # 'E'
1835
+ 52: 1, # 'F'
1836
+ 36: 0, # 'G'
1837
+ 45: 0, # 'H'
1838
+ 53: 0, # 'I'
1839
+ 60: 0, # 'J'
1840
+ 16: 1, # 'K'
1841
+ 49: 0, # 'L'
1842
+ 20: 3, # 'M'
1843
+ 46: 1, # 'N'
1844
+ 42: 0, # 'O'
1845
+ 48: 1, # 'P'
1846
+ 44: 1, # 'R'
1847
+ 35: 0, # 'S'
1848
+ 31: 3, # 'T'
1849
+ 51: 0, # 'U'
1850
+ 38: 1, # 'V'
1851
+ 62: 0, # 'W'
1852
+ 43: 1, # 'Y'
1853
+ 56: 0, # 'Z'
1854
+ 1: 3, # 'a'
1855
+ 21: 3, # 'b'
1856
+ 28: 0, # 'c'
1857
+ 12: 3, # 'd'
1858
+ 2: 2, # 'e'
1859
+ 18: 3, # 'f'
1860
+ 27: 3, # 'g'
1861
+ 25: 3, # 'h'
1862
+ 3: 3, # 'i'
1863
+ 24: 3, # 'j'
1864
+ 10: 3, # 'k'
1865
+ 5: 0, # 'l'
1866
+ 13: 2, # 'm'
1867
+ 4: 3, # 'n'
1868
+ 15: 1, # 'o'
1869
+ 26: 3, # 'p'
1870
+ 7: 3, # 'r'
1871
+ 8: 3, # 's'
1872
+ 9: 3, # 't'
1873
+ 14: 3, # 'u'
1874
+ 32: 3, # 'v'
1875
+ 57: 2, # 'w'
1876
+ 58: 0, # 'x'
1877
+ 11: 3, # 'y'
1878
+ 22: 1, # 'z'
1879
+ 63: 1, # '·'
1880
+ 54: 0, # 'Ç'
1881
+ 50: 0, # 'Ö'
1882
+ 55: 0, # 'Ü'
1883
+ 59: 0, # 'â'
1884
+ 33: 1, # 'ç'
1885
+ 61: 0, # 'î'
1886
+ 34: 1, # 'ö'
1887
+ 17: 3, # 'ü'
1888
+ 30: 0, # 'ğ'
1889
+ 41: 0, # 'İ'
1890
+ 6: 3, # 'ı'
1891
+ 40: 0, # 'Ş'
1892
+ 19: 0, # 'ş'
1893
+ },
1894
+ 18: { # 'f'
1895
+ 23: 0, # 'A'
1896
+ 37: 0, # 'B'
1897
+ 47: 0, # 'C'
1898
+ 39: 0, # 'D'
1899
+ 29: 0, # 'E'
1900
+ 52: 0, # 'F'
1901
+ 36: 0, # 'G'
1902
+ 45: 0, # 'H'
1903
+ 53: 0, # 'I'
1904
+ 60: 0, # 'J'
1905
+ 16: 2, # 'K'
1906
+ 49: 0, # 'L'
1907
+ 20: 2, # 'M'
1908
+ 46: 0, # 'N'
1909
+ 42: 0, # 'O'
1910
+ 48: 0, # 'P'
1911
+ 44: 0, # 'R'
1912
+ 35: 0, # 'S'
1913
+ 31: 2, # 'T'
1914
+ 51: 0, # 'U'
1915
+ 38: 0, # 'V'
1916
+ 62: 0, # 'W'
1917
+ 43: 0, # 'Y'
1918
+ 56: 0, # 'Z'
1919
+ 1: 3, # 'a'
1920
+ 21: 1, # 'b'
1921
+ 28: 0, # 'c'
1922
+ 12: 3, # 'd'
1923
+ 2: 3, # 'e'
1924
+ 18: 2, # 'f'
1925
+ 27: 1, # 'g'
1926
+ 25: 1, # 'h'
1927
+ 3: 1, # 'i'
1928
+ 24: 1, # 'j'
1929
+ 10: 1, # 'k'
1930
+ 5: 3, # 'l'
1931
+ 13: 3, # 'm'
1932
+ 4: 3, # 'n'
1933
+ 15: 0, # 'o'
1934
+ 26: 2, # 'p'
1935
+ 7: 1, # 'r'
1936
+ 8: 3, # 's'
1937
+ 9: 3, # 't'
1938
+ 14: 1, # 'u'
1939
+ 32: 2, # 'v'
1940
+ 57: 0, # 'w'
1941
+ 58: 0, # 'x'
1942
+ 11: 1, # 'y'
1943
+ 22: 0, # 'z'
1944
+ 63: 0, # '·'
1945
+ 54: 0, # 'Ç'
1946
+ 50: 0, # 'Ö'
1947
+ 55: 0, # 'Ü'
1948
+ 59: 0, # 'â'
1949
+ 33: 1, # 'ç'
1950
+ 61: 0, # 'î'
1951
+ 34: 0, # 'ö'
1952
+ 17: 1, # 'ü'
1953
+ 30: 0, # 'ğ'
1954
+ 41: 0, # 'İ'
1955
+ 6: 1, # 'ı'
1956
+ 40: 0, # 'Ş'
1957
+ 19: 0, # 'ş'
1958
+ },
1959
+ 27: { # 'g'
1960
+ 23: 0, # 'A'
1961
+ 37: 0, # 'B'
1962
+ 47: 0, # 'C'
1963
+ 39: 0, # 'D'
1964
+ 29: 0, # 'E'
1965
+ 52: 0, # 'F'
1966
+ 36: 0, # 'G'
1967
+ 45: 0, # 'H'
1968
+ 53: 0, # 'I'
1969
+ 60: 0, # 'J'
1970
+ 16: 3, # 'K'
1971
+ 49: 0, # 'L'
1972
+ 20: 0, # 'M'
1973
+ 46: 0, # 'N'
1974
+ 42: 0, # 'O'
1975
+ 48: 0, # 'P'
1976
+ 44: 0, # 'R'
1977
+ 35: 1, # 'S'
1978
+ 31: 1, # 'T'
1979
+ 51: 0, # 'U'
1980
+ 38: 2, # 'V'
1981
+ 62: 0, # 'W'
1982
+ 43: 0, # 'Y'
1983
+ 56: 0, # 'Z'
1984
+ 1: 3, # 'a'
1985
+ 21: 1, # 'b'
1986
+ 28: 0, # 'c'
1987
+ 12: 1, # 'd'
1988
+ 2: 3, # 'e'
1989
+ 18: 0, # 'f'
1990
+ 27: 2, # 'g'
1991
+ 25: 1, # 'h'
1992
+ 3: 2, # 'i'
1993
+ 24: 3, # 'j'
1994
+ 10: 2, # 'k'
1995
+ 5: 3, # 'l'
1996
+ 13: 3, # 'm'
1997
+ 4: 2, # 'n'
1998
+ 15: 0, # 'o'
1999
+ 26: 1, # 'p'
2000
+ 7: 2, # 'r'
2001
+ 8: 2, # 's'
2002
+ 9: 3, # 't'
2003
+ 14: 3, # 'u'
2004
+ 32: 1, # 'v'
2005
+ 57: 0, # 'w'
2006
+ 58: 0, # 'x'
2007
+ 11: 1, # 'y'
2008
+ 22: 0, # 'z'
2009
+ 63: 1, # '·'
2010
+ 54: 0, # 'Ç'
2011
+ 50: 0, # 'Ö'
2012
+ 55: 0, # 'Ü'
2013
+ 59: 0, # 'â'
2014
+ 33: 0, # 'ç'
2015
+ 61: 0, # 'î'
2016
+ 34: 0, # 'ö'
2017
+ 17: 0, # 'ü'
2018
+ 30: 0, # 'ğ'
2019
+ 41: 0, # 'İ'
2020
+ 6: 2, # 'ı'
2021
+ 40: 0, # 'Ş'
2022
+ 19: 0, # 'ş'
2023
+ },
2024
+ 25: { # 'h'
2025
+ 23: 0, # 'A'
2026
+ 37: 0, # 'B'
2027
+ 47: 0, # 'C'
2028
+ 39: 0, # 'D'
2029
+ 29: 0, # 'E'
2030
+ 52: 0, # 'F'
2031
+ 36: 0, # 'G'
2032
+ 45: 0, # 'H'
2033
+ 53: 0, # 'I'
2034
+ 60: 0, # 'J'
2035
+ 16: 2, # 'K'
2036
+ 49: 0, # 'L'
2037
+ 20: 0, # 'M'
2038
+ 46: 0, # 'N'
2039
+ 42: 0, # 'O'
2040
+ 48: 0, # 'P'
2041
+ 44: 0, # 'R'
2042
+ 35: 0, # 'S'
2043
+ 31: 0, # 'T'
2044
+ 51: 0, # 'U'
2045
+ 38: 0, # 'V'
2046
+ 62: 0, # 'W'
2047
+ 43: 0, # 'Y'
2048
+ 56: 0, # 'Z'
2049
+ 1: 3, # 'a'
2050
+ 21: 0, # 'b'
2051
+ 28: 0, # 'c'
2052
+ 12: 2, # 'd'
2053
+ 2: 3, # 'e'
2054
+ 18: 0, # 'f'
2055
+ 27: 1, # 'g'
2056
+ 25: 2, # 'h'
2057
+ 3: 2, # 'i'
2058
+ 24: 3, # 'j'
2059
+ 10: 3, # 'k'
2060
+ 5: 3, # 'l'
2061
+ 13: 3, # 'm'
2062
+ 4: 3, # 'n'
2063
+ 15: 1, # 'o'
2064
+ 26: 1, # 'p'
2065
+ 7: 3, # 'r'
2066
+ 8: 3, # 's'
2067
+ 9: 2, # 't'
2068
+ 14: 3, # 'u'
2069
+ 32: 2, # 'v'
2070
+ 57: 1, # 'w'
2071
+ 58: 0, # 'x'
2072
+ 11: 1, # 'y'
2073
+ 22: 0, # 'z'
2074
+ 63: 0, # '·'
2075
+ 54: 0, # 'Ç'
2076
+ 50: 0, # 'Ö'
2077
+ 55: 0, # 'Ü'
2078
+ 59: 0, # 'â'
2079
+ 33: 0, # 'ç'
2080
+ 61: 0, # 'î'
2081
+ 34: 0, # 'ö'
2082
+ 17: 0, # 'ü'
2083
+ 30: 0, # 'ğ'
2084
+ 41: 0, # 'İ'
2085
+ 6: 3, # 'ı'
2086
+ 40: 0, # 'Ş'
2087
+ 19: 0, # 'ş'
2088
+ },
2089
+ 3: { # 'i'
2090
+ 23: 2, # 'A'
2091
+ 37: 0, # 'B'
2092
+ 47: 0, # 'C'
2093
+ 39: 0, # 'D'
2094
+ 29: 0, # 'E'
2095
+ 52: 0, # 'F'
2096
+ 36: 0, # 'G'
2097
+ 45: 0, # 'H'
2098
+ 53: 0, # 'I'
2099
+ 60: 1, # 'J'
2100
+ 16: 3, # 'K'
2101
+ 49: 0, # 'L'
2102
+ 20: 3, # 'M'
2103
+ 46: 0, # 'N'
2104
+ 42: 1, # 'O'
2105
+ 48: 0, # 'P'
2106
+ 44: 0, # 'R'
2107
+ 35: 1, # 'S'
2108
+ 31: 2, # 'T'
2109
+ 51: 0, # 'U'
2110
+ 38: 1, # 'V'
2111
+ 62: 0, # 'W'
2112
+ 43: 0, # 'Y'
2113
+ 56: 0, # 'Z'
2114
+ 1: 3, # 'a'
2115
+ 21: 2, # 'b'
2116
+ 28: 0, # 'c'
2117
+ 12: 3, # 'd'
2118
+ 2: 3, # 'e'
2119
+ 18: 2, # 'f'
2120
+ 27: 3, # 'g'
2121
+ 25: 1, # 'h'
2122
+ 3: 3, # 'i'
2123
+ 24: 2, # 'j'
2124
+ 10: 3, # 'k'
2125
+ 5: 3, # 'l'
2126
+ 13: 3, # 'm'
2127
+ 4: 3, # 'n'
2128
+ 15: 1, # 'o'
2129
+ 26: 3, # 'p'
2130
+ 7: 3, # 'r'
2131
+ 8: 3, # 's'
2132
+ 9: 3, # 't'
2133
+ 14: 3, # 'u'
2134
+ 32: 2, # 'v'
2135
+ 57: 1, # 'w'
2136
+ 58: 1, # 'x'
2137
+ 11: 3, # 'y'
2138
+ 22: 1, # 'z'
2139
+ 63: 1, # '·'
2140
+ 54: 0, # 'Ç'
2141
+ 50: 0, # 'Ö'
2142
+ 55: 1, # 'Ü'
2143
+ 59: 0, # 'â'
2144
+ 33: 2, # 'ç'
2145
+ 61: 0, # 'î'
2146
+ 34: 0, # 'ö'
2147
+ 17: 3, # 'ü'
2148
+ 30: 0, # 'ğ'
2149
+ 41: 1, # 'İ'
2150
+ 6: 2, # 'ı'
2151
+ 40: 0, # 'Ş'
2152
+ 19: 0, # 'ş'
2153
+ },
2154
+ 24: { # 'j'
2155
+ 23: 0, # 'A'
2156
+ 37: 0, # 'B'
2157
+ 47: 0, # 'C'
2158
+ 39: 0, # 'D'
2159
+ 29: 0, # 'E'
2160
+ 52: 0, # 'F'
2161
+ 36: 0, # 'G'
2162
+ 45: 0, # 'H'
2163
+ 53: 0, # 'I'
2164
+ 60: 1, # 'J'
2165
+ 16: 2, # 'K'
2166
+ 49: 0, # 'L'
2167
+ 20: 2, # 'M'
2168
+ 46: 0, # 'N'
2169
+ 42: 0, # 'O'
2170
+ 48: 1, # 'P'
2171
+ 44: 0, # 'R'
2172
+ 35: 0, # 'S'
2173
+ 31: 1, # 'T'
2174
+ 51: 0, # 'U'
2175
+ 38: 0, # 'V'
2176
+ 62: 0, # 'W'
2177
+ 43: 0, # 'Y'
2178
+ 56: 1, # 'Z'
2179
+ 1: 3, # 'a'
2180
+ 21: 1, # 'b'
2181
+ 28: 1, # 'c'
2182
+ 12: 3, # 'd'
2183
+ 2: 3, # 'e'
2184
+ 18: 2, # 'f'
2185
+ 27: 1, # 'g'
2186
+ 25: 1, # 'h'
2187
+ 3: 2, # 'i'
2188
+ 24: 1, # 'j'
2189
+ 10: 2, # 'k'
2190
+ 5: 2, # 'l'
2191
+ 13: 3, # 'm'
2192
+ 4: 2, # 'n'
2193
+ 15: 0, # 'o'
2194
+ 26: 1, # 'p'
2195
+ 7: 2, # 'r'
2196
+ 8: 3, # 's'
2197
+ 9: 2, # 't'
2198
+ 14: 3, # 'u'
2199
+ 32: 2, # 'v'
2200
+ 57: 0, # 'w'
2201
+ 58: 2, # 'x'
2202
+ 11: 1, # 'y'
2203
+ 22: 0, # 'z'
2204
+ 63: 0, # '·'
2205
+ 54: 0, # 'Ç'
2206
+ 50: 0, # 'Ö'
2207
+ 55: 0, # 'Ü'
2208
+ 59: 0, # 'â'
2209
+ 33: 1, # 'ç'
2210
+ 61: 0, # 'î'
2211
+ 34: 0, # 'ö'
2212
+ 17: 1, # 'ü'
2213
+ 30: 0, # 'ğ'
2214
+ 41: 0, # 'İ'
2215
+ 6: 3, # 'ı'
2216
+ 40: 0, # 'Ş'
2217
+ 19: 0, # 'ş'
2218
+ },
2219
+ 10: { # 'k'
2220
+ 23: 0, # 'A'
2221
+ 37: 0, # 'B'
2222
+ 47: 0, # 'C'
2223
+ 39: 0, # 'D'
2224
+ 29: 0, # 'E'
2225
+ 52: 0, # 'F'
2226
+ 36: 0, # 'G'
2227
+ 45: 0, # 'H'
2228
+ 53: 0, # 'I'
2229
+ 60: 0, # 'J'
2230
+ 16: 3, # 'K'
2231
+ 49: 0, # 'L'
2232
+ 20: 2, # 'M'
2233
+ 46: 0, # 'N'
2234
+ 42: 0, # 'O'
2235
+ 48: 0, # 'P'
2236
+ 44: 0, # 'R'
2237
+ 35: 0, # 'S'
2238
+ 31: 3, # 'T'
2239
+ 51: 0, # 'U'
2240
+ 38: 1, # 'V'
2241
+ 62: 0, # 'W'
2242
+ 43: 0, # 'Y'
2243
+ 56: 1, # 'Z'
2244
+ 1: 3, # 'a'
2245
+ 21: 2, # 'b'
2246
+ 28: 0, # 'c'
2247
+ 12: 2, # 'd'
2248
+ 2: 3, # 'e'
2249
+ 18: 1, # 'f'
2250
+ 27: 2, # 'g'
2251
+ 25: 2, # 'h'
2252
+ 3: 3, # 'i'
2253
+ 24: 2, # 'j'
2254
+ 10: 2, # 'k'
2255
+ 5: 3, # 'l'
2256
+ 13: 3, # 'm'
2257
+ 4: 3, # 'n'
2258
+ 15: 0, # 'o'
2259
+ 26: 3, # 'p'
2260
+ 7: 2, # 'r'
2261
+ 8: 2, # 's'
2262
+ 9: 2, # 't'
2263
+ 14: 3, # 'u'
2264
+ 32: 0, # 'v'
2265
+ 57: 0, # 'w'
2266
+ 58: 1, # 'x'
2267
+ 11: 3, # 'y'
2268
+ 22: 0, # 'z'
2269
+ 63: 1, # '·'
2270
+ 54: 0, # 'Ç'
2271
+ 50: 0, # 'Ö'
2272
+ 55: 0, # 'Ü'
2273
+ 59: 0, # 'â'
2274
+ 33: 3, # 'ç'
2275
+ 61: 0, # 'î'
2276
+ 34: 1, # 'ö'
2277
+ 17: 3, # 'ü'
2278
+ 30: 1, # 'ğ'
2279
+ 41: 0, # 'İ'
2280
+ 6: 3, # 'ı'
2281
+ 40: 0, # 'Ş'
2282
+ 19: 1, # 'ş'
2283
+ },
2284
+ 5: { # 'l'
2285
+ 23: 0, # 'A'
2286
+ 37: 0, # 'B'
2287
+ 47: 0, # 'C'
2288
+ 39: 0, # 'D'
2289
+ 29: 3, # 'E'
2290
+ 52: 0, # 'F'
2291
+ 36: 0, # 'G'
2292
+ 45: 0, # 'H'
2293
+ 53: 0, # 'I'
2294
+ 60: 0, # 'J'
2295
+ 16: 0, # 'K'
2296
+ 49: 0, # 'L'
2297
+ 20: 2, # 'M'
2298
+ 46: 0, # 'N'
2299
+ 42: 0, # 'O'
2300
+ 48: 0, # 'P'
2301
+ 44: 0, # 'R'
2302
+ 35: 0, # 'S'
2303
+ 31: 1, # 'T'
2304
+ 51: 0, # 'U'
2305
+ 38: 0, # 'V'
2306
+ 62: 0, # 'W'
2307
+ 43: 0, # 'Y'
2308
+ 56: 0, # 'Z'
2309
+ 1: 0, # 'a'
2310
+ 21: 3, # 'b'
2311
+ 28: 0, # 'c'
2312
+ 12: 3, # 'd'
2313
+ 2: 1, # 'e'
2314
+ 18: 3, # 'f'
2315
+ 27: 3, # 'g'
2316
+ 25: 2, # 'h'
2317
+ 3: 3, # 'i'
2318
+ 24: 2, # 'j'
2319
+ 10: 3, # 'k'
2320
+ 5: 1, # 'l'
2321
+ 13: 1, # 'm'
2322
+ 4: 3, # 'n'
2323
+ 15: 0, # 'o'
2324
+ 26: 2, # 'p'
2325
+ 7: 3, # 'r'
2326
+ 8: 3, # 's'
2327
+ 9: 3, # 't'
2328
+ 14: 2, # 'u'
2329
+ 32: 2, # 'v'
2330
+ 57: 0, # 'w'
2331
+ 58: 0, # 'x'
2332
+ 11: 3, # 'y'
2333
+ 22: 0, # 'z'
2334
+ 63: 0, # '·'
2335
+ 54: 0, # 'Ç'
2336
+ 50: 0, # 'Ö'
2337
+ 55: 0, # 'Ü'
2338
+ 59: 0, # 'â'
2339
+ 33: 1, # 'ç'
2340
+ 61: 0, # 'î'
2341
+ 34: 0, # 'ö'
2342
+ 17: 2, # 'ü'
2343
+ 30: 0, # 'ğ'
2344
+ 41: 0, # 'İ'
2345
+ 6: 3, # 'ı'
2346
+ 40: 0, # 'Ş'
2347
+ 19: 0, # 'ş'
2348
+ },
2349
+ 13: { # 'm'
2350
+ 23: 1, # 'A'
2351
+ 37: 0, # 'B'
2352
+ 47: 0, # 'C'
2353
+ 39: 0, # 'D'
2354
+ 29: 3, # 'E'
2355
+ 52: 0, # 'F'
2356
+ 36: 0, # 'G'
2357
+ 45: 0, # 'H'
2358
+ 53: 0, # 'I'
2359
+ 60: 0, # 'J'
2360
+ 16: 0, # 'K'
2361
+ 49: 0, # 'L'
2362
+ 20: 3, # 'M'
2363
+ 46: 0, # 'N'
2364
+ 42: 0, # 'O'
2365
+ 48: 0, # 'P'
2366
+ 44: 0, # 'R'
2367
+ 35: 0, # 'S'
2368
+ 31: 3, # 'T'
2369
+ 51: 0, # 'U'
2370
+ 38: 0, # 'V'
2371
+ 62: 0, # 'W'
2372
+ 43: 1, # 'Y'
2373
+ 56: 0, # 'Z'
2374
+ 1: 2, # 'a'
2375
+ 21: 3, # 'b'
2376
+ 28: 0, # 'c'
2377
+ 12: 3, # 'd'
2378
+ 2: 2, # 'e'
2379
+ 18: 3, # 'f'
2380
+ 27: 3, # 'g'
2381
+ 25: 3, # 'h'
2382
+ 3: 3, # 'i'
2383
+ 24: 3, # 'j'
2384
+ 10: 3, # 'k'
2385
+ 5: 0, # 'l'
2386
+ 13: 2, # 'm'
2387
+ 4: 3, # 'n'
2388
+ 15: 1, # 'o'
2389
+ 26: 2, # 'p'
2390
+ 7: 3, # 'r'
2391
+ 8: 3, # 's'
2392
+ 9: 3, # 't'
2393
+ 14: 2, # 'u'
2394
+ 32: 2, # 'v'
2395
+ 57: 1, # 'w'
2396
+ 58: 0, # 'x'
2397
+ 11: 3, # 'y'
2398
+ 22: 0, # 'z'
2399
+ 63: 0, # '·'
2400
+ 54: 0, # 'Ç'
2401
+ 50: 0, # 'Ö'
2402
+ 55: 0, # 'Ü'
2403
+ 59: 0, # 'â'
2404
+ 33: 0, # 'ç'
2405
+ 61: 0, # 'î'
2406
+ 34: 0, # 'ö'
2407
+ 17: 3, # 'ü'
2408
+ 30: 0, # 'ğ'
2409
+ 41: 0, # 'İ'
2410
+ 6: 3, # 'ı'
2411
+ 40: 0, # 'Ş'
2412
+ 19: 1, # 'ş'
2413
+ },
2414
+ 4: { # 'n'
2415
+ 23: 1, # 'A'
2416
+ 37: 0, # 'B'
2417
+ 47: 0, # 'C'
2418
+ 39: 0, # 'D'
2419
+ 29: 0, # 'E'
2420
+ 52: 0, # 'F'
2421
+ 36: 0, # 'G'
2422
+ 45: 1, # 'H'
2423
+ 53: 0, # 'I'
2424
+ 60: 2, # 'J'
2425
+ 16: 3, # 'K'
2426
+ 49: 0, # 'L'
2427
+ 20: 3, # 'M'
2428
+ 46: 0, # 'N'
2429
+ 42: 0, # 'O'
2430
+ 48: 0, # 'P'
2431
+ 44: 0, # 'R'
2432
+ 35: 0, # 'S'
2433
+ 31: 2, # 'T'
2434
+ 51: 0, # 'U'
2435
+ 38: 0, # 'V'
2436
+ 62: 0, # 'W'
2437
+ 43: 0, # 'Y'
2438
+ 56: 0, # 'Z'
2439
+ 1: 3, # 'a'
2440
+ 21: 2, # 'b'
2441
+ 28: 1, # 'c'
2442
+ 12: 3, # 'd'
2443
+ 2: 3, # 'e'
2444
+ 18: 1, # 'f'
2445
+ 27: 2, # 'g'
2446
+ 25: 3, # 'h'
2447
+ 3: 2, # 'i'
2448
+ 24: 2, # 'j'
2449
+ 10: 3, # 'k'
2450
+ 5: 3, # 'l'
2451
+ 13: 3, # 'm'
2452
+ 4: 3, # 'n'
2453
+ 15: 1, # 'o'
2454
+ 26: 3, # 'p'
2455
+ 7: 2, # 'r'
2456
+ 8: 3, # 's'
2457
+ 9: 3, # 't'
2458
+ 14: 3, # 'u'
2459
+ 32: 2, # 'v'
2460
+ 57: 0, # 'w'
2461
+ 58: 2, # 'x'
2462
+ 11: 3, # 'y'
2463
+ 22: 0, # 'z'
2464
+ 63: 0, # '·'
2465
+ 54: 0, # 'Ç'
2466
+ 50: 0, # 'Ö'
2467
+ 55: 0, # 'Ü'
2468
+ 59: 0, # 'â'
2469
+ 33: 1, # 'ç'
2470
+ 61: 0, # 'î'
2471
+ 34: 0, # 'ö'
2472
+ 17: 2, # 'ü'
2473
+ 30: 0, # 'ğ'
2474
+ 41: 0, # 'İ'
2475
+ 6: 1, # 'ı'
2476
+ 40: 0, # 'Ş'
2477
+ 19: 0, # 'ş'
2478
+ },
2479
+ 15: { # 'o'
2480
+ 23: 0, # 'A'
2481
+ 37: 0, # 'B'
2482
+ 47: 1, # 'C'
2483
+ 39: 0, # 'D'
2484
+ 29: 0, # 'E'
2485
+ 52: 2, # 'F'
2486
+ 36: 1, # 'G'
2487
+ 45: 1, # 'H'
2488
+ 53: 1, # 'I'
2489
+ 60: 0, # 'J'
2490
+ 16: 3, # 'K'
2491
+ 49: 2, # 'L'
2492
+ 20: 0, # 'M'
2493
+ 46: 2, # 'N'
2494
+ 42: 1, # 'O'
2495
+ 48: 2, # 'P'
2496
+ 44: 1, # 'R'
2497
+ 35: 0, # 'S'
2498
+ 31: 0, # 'T'
2499
+ 51: 0, # 'U'
2500
+ 38: 0, # 'V'
2501
+ 62: 0, # 'W'
2502
+ 43: 0, # 'Y'
2503
+ 56: 0, # 'Z'
2504
+ 1: 3, # 'a'
2505
+ 21: 0, # 'b'
2506
+ 28: 2, # 'c'
2507
+ 12: 0, # 'd'
2508
+ 2: 3, # 'e'
2509
+ 18: 0, # 'f'
2510
+ 27: 0, # 'g'
2511
+ 25: 0, # 'h'
2512
+ 3: 1, # 'i'
2513
+ 24: 2, # 'j'
2514
+ 10: 1, # 'k'
2515
+ 5: 3, # 'l'
2516
+ 13: 3, # 'm'
2517
+ 4: 2, # 'n'
2518
+ 15: 2, # 'o'
2519
+ 26: 0, # 'p'
2520
+ 7: 1, # 'r'
2521
+ 8: 0, # 's'
2522
+ 9: 0, # 't'
2523
+ 14: 3, # 'u'
2524
+ 32: 0, # 'v'
2525
+ 57: 0, # 'w'
2526
+ 58: 2, # 'x'
2527
+ 11: 0, # 'y'
2528
+ 22: 2, # 'z'
2529
+ 63: 0, # '·'
2530
+ 54: 1, # 'Ç'
2531
+ 50: 2, # 'Ö'
2532
+ 55: 0, # 'Ü'
2533
+ 59: 0, # 'â'
2534
+ 33: 3, # 'ç'
2535
+ 61: 0, # 'î'
2536
+ 34: 1, # 'ö'
2537
+ 17: 0, # 'ü'
2538
+ 30: 2, # 'ğ'
2539
+ 41: 2, # 'İ'
2540
+ 6: 3, # 'ı'
2541
+ 40: 2, # 'Ş'
2542
+ 19: 2, # 'ş'
2543
+ },
2544
+ 26: { # 'p'
2545
+ 23: 0, # 'A'
2546
+ 37: 0, # 'B'
2547
+ 47: 0, # 'C'
2548
+ 39: 0, # 'D'
2549
+ 29: 0, # 'E'
2550
+ 52: 0, # 'F'
2551
+ 36: 0, # 'G'
2552
+ 45: 0, # 'H'
2553
+ 53: 0, # 'I'
2554
+ 60: 0, # 'J'
2555
+ 16: 3, # 'K'
2556
+ 49: 0, # 'L'
2557
+ 20: 1, # 'M'
2558
+ 46: 0, # 'N'
2559
+ 42: 0, # 'O'
2560
+ 48: 0, # 'P'
2561
+ 44: 0, # 'R'
2562
+ 35: 0, # 'S'
2563
+ 31: 0, # 'T'
2564
+ 51: 0, # 'U'
2565
+ 38: 0, # 'V'
2566
+ 62: 0, # 'W'
2567
+ 43: 0, # 'Y'
2568
+ 56: 0, # 'Z'
2569
+ 1: 3, # 'a'
2570
+ 21: 1, # 'b'
2571
+ 28: 0, # 'c'
2572
+ 12: 1, # 'd'
2573
+ 2: 3, # 'e'
2574
+ 18: 0, # 'f'
2575
+ 27: 1, # 'g'
2576
+ 25: 1, # 'h'
2577
+ 3: 2, # 'i'
2578
+ 24: 3, # 'j'
2579
+ 10: 1, # 'k'
2580
+ 5: 3, # 'l'
2581
+ 13: 3, # 'm'
2582
+ 4: 2, # 'n'
2583
+ 15: 0, # 'o'
2584
+ 26: 2, # 'p'
2585
+ 7: 2, # 'r'
2586
+ 8: 1, # 's'
2587
+ 9: 1, # 't'
2588
+ 14: 3, # 'u'
2589
+ 32: 0, # 'v'
2590
+ 57: 0, # 'w'
2591
+ 58: 1, # 'x'
2592
+ 11: 1, # 'y'
2593
+ 22: 0, # 'z'
2594
+ 63: 0, # '·'
2595
+ 54: 0, # 'Ç'
2596
+ 50: 0, # 'Ö'
2597
+ 55: 0, # 'Ü'
2598
+ 59: 0, # 'â'
2599
+ 33: 3, # 'ç'
2600
+ 61: 0, # 'î'
2601
+ 34: 0, # 'ö'
2602
+ 17: 1, # 'ü'
2603
+ 30: 0, # 'ğ'
2604
+ 41: 0, # 'İ'
2605
+ 6: 3, # 'ı'
2606
+ 40: 0, # 'Ş'
2607
+ 19: 0, # 'ş'
2608
+ },
2609
+ 7: { # 'r'
2610
+ 23: 0, # 'A'
2611
+ 37: 0, # 'B'
2612
+ 47: 0, # 'C'
2613
+ 39: 0, # 'D'
2614
+ 29: 0, # 'E'
2615
+ 52: 1, # 'F'
2616
+ 36: 0, # 'G'
2617
+ 45: 0, # 'H'
2618
+ 53: 0, # 'I'
2619
+ 60: 2, # 'J'
2620
+ 16: 3, # 'K'
2621
+ 49: 0, # 'L'
2622
+ 20: 2, # 'M'
2623
+ 46: 0, # 'N'
2624
+ 42: 0, # 'O'
2625
+ 48: 0, # 'P'
2626
+ 44: 0, # 'R'
2627
+ 35: 0, # 'S'
2628
+ 31: 2, # 'T'
2629
+ 51: 1, # 'U'
2630
+ 38: 0, # 'V'
2631
+ 62: 0, # 'W'
2632
+ 43: 0, # 'Y'
2633
+ 56: 1, # 'Z'
2634
+ 1: 3, # 'a'
2635
+ 21: 1, # 'b'
2636
+ 28: 0, # 'c'
2637
+ 12: 3, # 'd'
2638
+ 2: 3, # 'e'
2639
+ 18: 0, # 'f'
2640
+ 27: 2, # 'g'
2641
+ 25: 3, # 'h'
2642
+ 3: 2, # 'i'
2643
+ 24: 2, # 'j'
2644
+ 10: 3, # 'k'
2645
+ 5: 3, # 'l'
2646
+ 13: 3, # 'm'
2647
+ 4: 3, # 'n'
2648
+ 15: 0, # 'o'
2649
+ 26: 2, # 'p'
2650
+ 7: 3, # 'r'
2651
+ 8: 3, # 's'
2652
+ 9: 3, # 't'
2653
+ 14: 3, # 'u'
2654
+ 32: 2, # 'v'
2655
+ 57: 0, # 'w'
2656
+ 58: 1, # 'x'
2657
+ 11: 2, # 'y'
2658
+ 22: 0, # 'z'
2659
+ 63: 1, # '·'
2660
+ 54: 0, # 'Ç'
2661
+ 50: 0, # 'Ö'
2662
+ 55: 0, # 'Ü'
2663
+ 59: 0, # 'â'
2664
+ 33: 2, # 'ç'
2665
+ 61: 0, # 'î'
2666
+ 34: 0, # 'ö'
2667
+ 17: 3, # 'ü'
2668
+ 30: 0, # 'ğ'
2669
+ 41: 0, # 'İ'
2670
+ 6: 2, # 'ı'
2671
+ 40: 0, # 'Ş'
2672
+ 19: 0, # 'ş'
2673
+ },
2674
+ 8: { # 's'
2675
+ 23: 1, # 'A'
2676
+ 37: 0, # 'B'
2677
+ 47: 0, # 'C'
2678
+ 39: 0, # 'D'
2679
+ 29: 0, # 'E'
2680
+ 52: 0, # 'F'
2681
+ 36: 1, # 'G'
2682
+ 45: 0, # 'H'
2683
+ 53: 0, # 'I'
2684
+ 60: 0, # 'J'
2685
+ 16: 3, # 'K'
2686
+ 49: 0, # 'L'
2687
+ 20: 3, # 'M'
2688
+ 46: 0, # 'N'
2689
+ 42: 0, # 'O'
2690
+ 48: 0, # 'P'
2691
+ 44: 0, # 'R'
2692
+ 35: 0, # 'S'
2693
+ 31: 2, # 'T'
2694
+ 51: 0, # 'U'
2695
+ 38: 0, # 'V'
2696
+ 62: 0, # 'W'
2697
+ 43: 0, # 'Y'
2698
+ 56: 1, # 'Z'
2699
+ 1: 3, # 'a'
2700
+ 21: 2, # 'b'
2701
+ 28: 1, # 'c'
2702
+ 12: 3, # 'd'
2703
+ 2: 3, # 'e'
2704
+ 18: 0, # 'f'
2705
+ 27: 2, # 'g'
2706
+ 25: 2, # 'h'
2707
+ 3: 2, # 'i'
2708
+ 24: 3, # 'j'
2709
+ 10: 3, # 'k'
2710
+ 5: 3, # 'l'
2711
+ 13: 3, # 'm'
2712
+ 4: 3, # 'n'
2713
+ 15: 0, # 'o'
2714
+ 26: 3, # 'p'
2715
+ 7: 3, # 'r'
2716
+ 8: 3, # 's'
2717
+ 9: 3, # 't'
2718
+ 14: 3, # 'u'
2719
+ 32: 2, # 'v'
2720
+ 57: 0, # 'w'
2721
+ 58: 1, # 'x'
2722
+ 11: 2, # 'y'
2723
+ 22: 1, # 'z'
2724
+ 63: 0, # '·'
2725
+ 54: 0, # 'Ç'
2726
+ 50: 0, # 'Ö'
2727
+ 55: 0, # 'Ü'
2728
+ 59: 0, # 'â'
2729
+ 33: 2, # 'ç'
2730
+ 61: 0, # 'î'
2731
+ 34: 0, # 'ö'
2732
+ 17: 2, # 'ü'
2733
+ 30: 0, # 'ğ'
2734
+ 41: 0, # 'İ'
2735
+ 6: 3, # 'ı'
2736
+ 40: 0, # 'Ş'
2737
+ 19: 1, # 'ş'
2738
+ },
2739
+ 9: { # 't'
2740
+ 23: 0, # 'A'
2741
+ 37: 0, # 'B'
2742
+ 47: 0, # 'C'
2743
+ 39: 0, # 'D'
2744
+ 29: 0, # 'E'
2745
+ 52: 0, # 'F'
2746
+ 36: 0, # 'G'
2747
+ 45: 0, # 'H'
2748
+ 53: 0, # 'I'
2749
+ 60: 1, # 'J'
2750
+ 16: 3, # 'K'
2751
+ 49: 0, # 'L'
2752
+ 20: 2, # 'M'
2753
+ 46: 0, # 'N'
2754
+ 42: 0, # 'O'
2755
+ 48: 0, # 'P'
2756
+ 44: 0, # 'R'
2757
+ 35: 0, # 'S'
2758
+ 31: 2, # 'T'
2759
+ 51: 0, # 'U'
2760
+ 38: 0, # 'V'
2761
+ 62: 0, # 'W'
2762
+ 43: 0, # 'Y'
2763
+ 56: 1, # 'Z'
2764
+ 1: 3, # 'a'
2765
+ 21: 3, # 'b'
2766
+ 28: 0, # 'c'
2767
+ 12: 3, # 'd'
2768
+ 2: 3, # 'e'
2769
+ 18: 2, # 'f'
2770
+ 27: 2, # 'g'
2771
+ 25: 2, # 'h'
2772
+ 3: 2, # 'i'
2773
+ 24: 2, # 'j'
2774
+ 10: 3, # 'k'
2775
+ 5: 3, # 'l'
2776
+ 13: 3, # 'm'
2777
+ 4: 3, # 'n'
2778
+ 15: 0, # 'o'
2779
+ 26: 2, # 'p'
2780
+ 7: 3, # 'r'
2781
+ 8: 3, # 's'
2782
+ 9: 3, # 't'
2783
+ 14: 3, # 'u'
2784
+ 32: 3, # 'v'
2785
+ 57: 0, # 'w'
2786
+ 58: 2, # 'x'
2787
+ 11: 2, # 'y'
2788
+ 22: 0, # 'z'
2789
+ 63: 0, # '·'
2790
+ 54: 0, # 'Ç'
2791
+ 50: 0, # 'Ö'
2792
+ 55: 0, # 'Ü'
2793
+ 59: 0, # 'â'
2794
+ 33: 3, # 'ç'
2795
+ 61: 0, # 'î'
2796
+ 34: 0, # 'ö'
2797
+ 17: 2, # 'ü'
2798
+ 30: 0, # 'ğ'
2799
+ 41: 0, # 'İ'
2800
+ 6: 3, # 'ı'
2801
+ 40: 0, # 'Ş'
2802
+ 19: 0, # 'ş'
2803
+ },
2804
+ 14: { # 'u'
2805
+ 23: 3, # 'A'
2806
+ 37: 0, # 'B'
2807
+ 47: 0, # 'C'
2808
+ 39: 0, # 'D'
2809
+ 29: 3, # 'E'
2810
+ 52: 0, # 'F'
2811
+ 36: 0, # 'G'
2812
+ 45: 1, # 'H'
2813
+ 53: 0, # 'I'
2814
+ 60: 1, # 'J'
2815
+ 16: 0, # 'K'
2816
+ 49: 0, # 'L'
2817
+ 20: 3, # 'M'
2818
+ 46: 2, # 'N'
2819
+ 42: 0, # 'O'
2820
+ 48: 1, # 'P'
2821
+ 44: 0, # 'R'
2822
+ 35: 0, # 'S'
2823
+ 31: 3, # 'T'
2824
+ 51: 0, # 'U'
2825
+ 38: 0, # 'V'
2826
+ 62: 0, # 'W'
2827
+ 43: 1, # 'Y'
2828
+ 56: 2, # 'Z'
2829
+ 1: 2, # 'a'
2830
+ 21: 3, # 'b'
2831
+ 28: 0, # 'c'
2832
+ 12: 3, # 'd'
2833
+ 2: 2, # 'e'
2834
+ 18: 2, # 'f'
2835
+ 27: 3, # 'g'
2836
+ 25: 3, # 'h'
2837
+ 3: 3, # 'i'
2838
+ 24: 2, # 'j'
2839
+ 10: 3, # 'k'
2840
+ 5: 0, # 'l'
2841
+ 13: 3, # 'm'
2842
+ 4: 3, # 'n'
2843
+ 15: 0, # 'o'
2844
+ 26: 3, # 'p'
2845
+ 7: 3, # 'r'
2846
+ 8: 3, # 's'
2847
+ 9: 3, # 't'
2848
+ 14: 3, # 'u'
2849
+ 32: 2, # 'v'
2850
+ 57: 2, # 'w'
2851
+ 58: 0, # 'x'
2852
+ 11: 3, # 'y'
2853
+ 22: 0, # 'z'
2854
+ 63: 1, # '·'
2855
+ 54: 0, # 'Ç'
2856
+ 50: 0, # 'Ö'
2857
+ 55: 0, # 'Ü'
2858
+ 59: 0, # 'â'
2859
+ 33: 0, # 'ç'
2860
+ 61: 0, # 'î'
2861
+ 34: 0, # 'ö'
2862
+ 17: 3, # 'ü'
2863
+ 30: 1, # 'ğ'
2864
+ 41: 0, # 'İ'
2865
+ 6: 3, # 'ı'
2866
+ 40: 0, # 'Ş'
2867
+ 19: 0, # 'ş'
2868
+ },
2869
+ 32: { # 'v'
2870
+ 23: 0, # 'A'
2871
+ 37: 0, # 'B'
2872
+ 47: 0, # 'C'
2873
+ 39: 0, # 'D'
2874
+ 29: 0, # 'E'
2875
+ 52: 0, # 'F'
2876
+ 36: 0, # 'G'
2877
+ 45: 0, # 'H'
2878
+ 53: 0, # 'I'
2879
+ 60: 0, # 'J'
2880
+ 16: 3, # 'K'
2881
+ 49: 0, # 'L'
2882
+ 20: 1, # 'M'
2883
+ 46: 0, # 'N'
2884
+ 42: 0, # 'O'
2885
+ 48: 0, # 'P'
2886
+ 44: 0, # 'R'
2887
+ 35: 0, # 'S'
2888
+ 31: 0, # 'T'
2889
+ 51: 0, # 'U'
2890
+ 38: 0, # 'V'
2891
+ 62: 0, # 'W'
2892
+ 43: 0, # 'Y'
2893
+ 56: 0, # 'Z'
2894
+ 1: 3, # 'a'
2895
+ 21: 0, # 'b'
2896
+ 28: 0, # 'c'
2897
+ 12: 3, # 'd'
2898
+ 2: 3, # 'e'
2899
+ 18: 0, # 'f'
2900
+ 27: 0, # 'g'
2901
+ 25: 0, # 'h'
2902
+ 3: 0, # 'i'
2903
+ 24: 1, # 'j'
2904
+ 10: 1, # 'k'
2905
+ 5: 3, # 'l'
2906
+ 13: 2, # 'm'
2907
+ 4: 3, # 'n'
2908
+ 15: 0, # 'o'
2909
+ 26: 1, # 'p'
2910
+ 7: 1, # 'r'
2911
+ 8: 2, # 's'
2912
+ 9: 3, # 't'
2913
+ 14: 3, # 'u'
2914
+ 32: 1, # 'v'
2915
+ 57: 0, # 'w'
2916
+ 58: 0, # 'x'
2917
+ 11: 0, # 'y'
2918
+ 22: 0, # 'z'
2919
+ 63: 0, # '·'
2920
+ 54: 0, # 'Ç'
2921
+ 50: 0, # 'Ö'
2922
+ 55: 0, # 'Ü'
2923
+ 59: 0, # 'â'
2924
+ 33: 2, # 'ç'
2925
+ 61: 0, # 'î'
2926
+ 34: 0, # 'ö'
2927
+ 17: 0, # 'ü'
2928
+ 30: 0, # 'ğ'
2929
+ 41: 0, # 'İ'
2930
+ 6: 1, # 'ı'
2931
+ 40: 0, # 'Ş'
2932
+ 19: 0, # 'ş'
2933
+ },
2934
+ 57: { # 'w'
2935
+ 23: 0, # 'A'
2936
+ 37: 0, # 'B'
2937
+ 47: 0, # 'C'
2938
+ 39: 0, # 'D'
2939
+ 29: 0, # 'E'
2940
+ 52: 0, # 'F'
2941
+ 36: 0, # 'G'
2942
+ 45: 0, # 'H'
2943
+ 53: 0, # 'I'
2944
+ 60: 0, # 'J'
2945
+ 16: 0, # 'K'
2946
+ 49: 0, # 'L'
2947
+ 20: 0, # 'M'
2948
+ 46: 0, # 'N'
2949
+ 42: 0, # 'O'
2950
+ 48: 0, # 'P'
2951
+ 44: 0, # 'R'
2952
+ 35: 0, # 'S'
2953
+ 31: 0, # 'T'
2954
+ 51: 1, # 'U'
2955
+ 38: 0, # 'V'
2956
+ 62: 0, # 'W'
2957
+ 43: 0, # 'Y'
2958
+ 56: 0, # 'Z'
2959
+ 1: 1, # 'a'
2960
+ 21: 0, # 'b'
2961
+ 28: 0, # 'c'
2962
+ 12: 0, # 'd'
2963
+ 2: 2, # 'e'
2964
+ 18: 0, # 'f'
2965
+ 27: 0, # 'g'
2966
+ 25: 1, # 'h'
2967
+ 3: 0, # 'i'
2968
+ 24: 0, # 'j'
2969
+ 10: 1, # 'k'
2970
+ 5: 0, # 'l'
2971
+ 13: 0, # 'm'
2972
+ 4: 1, # 'n'
2973
+ 15: 0, # 'o'
2974
+ 26: 0, # 'p'
2975
+ 7: 0, # 'r'
2976
+ 8: 1, # 's'
2977
+ 9: 0, # 't'
2978
+ 14: 1, # 'u'
2979
+ 32: 0, # 'v'
2980
+ 57: 2, # 'w'
2981
+ 58: 0, # 'x'
2982
+ 11: 0, # 'y'
2983
+ 22: 0, # 'z'
2984
+ 63: 1, # '·'
2985
+ 54: 0, # 'Ç'
2986
+ 50: 0, # 'Ö'
2987
+ 55: 0, # 'Ü'
2988
+ 59: 0, # 'â'
2989
+ 33: 0, # 'ç'
2990
+ 61: 0, # 'î'
2991
+ 34: 0, # 'ö'
2992
+ 17: 1, # 'ü'
2993
+ 30: 0, # 'ğ'
2994
+ 41: 0, # 'İ'
2995
+ 6: 0, # 'ı'
2996
+ 40: 0, # 'Ş'
2997
+ 19: 0, # 'ş'
2998
+ },
2999
+ 58: { # 'x'
3000
+ 23: 0, # 'A'
3001
+ 37: 0, # 'B'
3002
+ 47: 0, # 'C'
3003
+ 39: 0, # 'D'
3004
+ 29: 1, # 'E'
3005
+ 52: 0, # 'F'
3006
+ 36: 0, # 'G'
3007
+ 45: 0, # 'H'
3008
+ 53: 0, # 'I'
3009
+ 60: 1, # 'J'
3010
+ 16: 0, # 'K'
3011
+ 49: 0, # 'L'
3012
+ 20: 1, # 'M'
3013
+ 46: 0, # 'N'
3014
+ 42: 0, # 'O'
3015
+ 48: 0, # 'P'
3016
+ 44: 0, # 'R'
3017
+ 35: 0, # 'S'
3018
+ 31: 0, # 'T'
3019
+ 51: 0, # 'U'
3020
+ 38: 0, # 'V'
3021
+ 62: 0, # 'W'
3022
+ 43: 0, # 'Y'
3023
+ 56: 0, # 'Z'
3024
+ 1: 0, # 'a'
3025
+ 21: 1, # 'b'
3026
+ 28: 0, # 'c'
3027
+ 12: 2, # 'd'
3028
+ 2: 1, # 'e'
3029
+ 18: 0, # 'f'
3030
+ 27: 0, # 'g'
3031
+ 25: 0, # 'h'
3032
+ 3: 2, # 'i'
3033
+ 24: 2, # 'j'
3034
+ 10: 1, # 'k'
3035
+ 5: 0, # 'l'
3036
+ 13: 0, # 'm'
3037
+ 4: 2, # 'n'
3038
+ 15: 0, # 'o'
3039
+ 26: 0, # 'p'
3040
+ 7: 1, # 'r'
3041
+ 8: 2, # 's'
3042
+ 9: 1, # 't'
3043
+ 14: 0, # 'u'
3044
+ 32: 0, # 'v'
3045
+ 57: 0, # 'w'
3046
+ 58: 0, # 'x'
3047
+ 11: 2, # 'y'
3048
+ 22: 0, # 'z'
3049
+ 63: 0, # '·'
3050
+ 54: 0, # 'Ç'
3051
+ 50: 0, # 'Ö'
3052
+ 55: 0, # 'Ü'
3053
+ 59: 0, # 'â'
3054
+ 33: 0, # 'ç'
3055
+ 61: 0, # 'î'
3056
+ 34: 0, # 'ö'
3057
+ 17: 1, # 'ü'
3058
+ 30: 0, # 'ğ'
3059
+ 41: 0, # 'İ'
3060
+ 6: 2, # 'ı'
3061
+ 40: 0, # 'Ş'
3062
+ 19: 0, # 'ş'
3063
+ },
3064
+ 11: { # 'y'
3065
+ 23: 1, # 'A'
3066
+ 37: 0, # 'B'
3067
+ 47: 0, # 'C'
3068
+ 39: 0, # 'D'
3069
+ 29: 0, # 'E'
3070
+ 52: 0, # 'F'
3071
+ 36: 0, # 'G'
3072
+ 45: 0, # 'H'
3073
+ 53: 0, # 'I'
3074
+ 60: 1, # 'J'
3075
+ 16: 3, # 'K'
3076
+ 49: 0, # 'L'
3077
+ 20: 1, # 'M'
3078
+ 46: 0, # 'N'
3079
+ 42: 0, # 'O'
3080
+ 48: 0, # 'P'
3081
+ 44: 0, # 'R'
3082
+ 35: 0, # 'S'
3083
+ 31: 1, # 'T'
3084
+ 51: 0, # 'U'
3085
+ 38: 0, # 'V'
3086
+ 62: 0, # 'W'
3087
+ 43: 1, # 'Y'
3088
+ 56: 1, # 'Z'
3089
+ 1: 3, # 'a'
3090
+ 21: 1, # 'b'
3091
+ 28: 0, # 'c'
3092
+ 12: 2, # 'd'
3093
+ 2: 3, # 'e'
3094
+ 18: 0, # 'f'
3095
+ 27: 2, # 'g'
3096
+ 25: 2, # 'h'
3097
+ 3: 2, # 'i'
3098
+ 24: 1, # 'j'
3099
+ 10: 2, # 'k'
3100
+ 5: 3, # 'l'
3101
+ 13: 3, # 'm'
3102
+ 4: 3, # 'n'
3103
+ 15: 0, # 'o'
3104
+ 26: 1, # 'p'
3105
+ 7: 2, # 'r'
3106
+ 8: 1, # 's'
3107
+ 9: 2, # 't'
3108
+ 14: 3, # 'u'
3109
+ 32: 0, # 'v'
3110
+ 57: 0, # 'w'
3111
+ 58: 1, # 'x'
3112
+ 11: 3, # 'y'
3113
+ 22: 0, # 'z'
3114
+ 63: 0, # '·'
3115
+ 54: 0, # 'Ç'
3116
+ 50: 0, # 'Ö'
3117
+ 55: 0, # 'Ü'
3118
+ 59: 0, # 'â'
3119
+ 33: 3, # 'ç'
3120
+ 61: 0, # 'î'
3121
+ 34: 0, # 'ö'
3122
+ 17: 2, # 'ü'
3123
+ 30: 0, # 'ğ'
3124
+ 41: 0, # 'İ'
3125
+ 6: 3, # 'ı'
3126
+ 40: 0, # 'Ş'
3127
+ 19: 0, # 'ş'
3128
+ },
3129
+ 22: { # 'z'
3130
+ 23: 2, # 'A'
3131
+ 37: 2, # 'B'
3132
+ 47: 1, # 'C'
3133
+ 39: 2, # 'D'
3134
+ 29: 3, # 'E'
3135
+ 52: 1, # 'F'
3136
+ 36: 2, # 'G'
3137
+ 45: 2, # 'H'
3138
+ 53: 1, # 'I'
3139
+ 60: 0, # 'J'
3140
+ 16: 0, # 'K'
3141
+ 49: 0, # 'L'
3142
+ 20: 3, # 'M'
3143
+ 46: 2, # 'N'
3144
+ 42: 2, # 'O'
3145
+ 48: 2, # 'P'
3146
+ 44: 1, # 'R'
3147
+ 35: 1, # 'S'
3148
+ 31: 3, # 'T'
3149
+ 51: 2, # 'U'
3150
+ 38: 2, # 'V'
3151
+ 62: 0, # 'W'
3152
+ 43: 2, # 'Y'
3153
+ 56: 1, # 'Z'
3154
+ 1: 1, # 'a'
3155
+ 21: 2, # 'b'
3156
+ 28: 1, # 'c'
3157
+ 12: 2, # 'd'
3158
+ 2: 2, # 'e'
3159
+ 18: 3, # 'f'
3160
+ 27: 2, # 'g'
3161
+ 25: 2, # 'h'
3162
+ 3: 3, # 'i'
3163
+ 24: 2, # 'j'
3164
+ 10: 3, # 'k'
3165
+ 5: 0, # 'l'
3166
+ 13: 2, # 'm'
3167
+ 4: 3, # 'n'
3168
+ 15: 2, # 'o'
3169
+ 26: 2, # 'p'
3170
+ 7: 3, # 'r'
3171
+ 8: 3, # 's'
3172
+ 9: 3, # 't'
3173
+ 14: 0, # 'u'
3174
+ 32: 2, # 'v'
3175
+ 57: 0, # 'w'
3176
+ 58: 0, # 'x'
3177
+ 11: 3, # 'y'
3178
+ 22: 2, # 'z'
3179
+ 63: 1, # '·'
3180
+ 54: 0, # 'Ç'
3181
+ 50: 0, # 'Ö'
3182
+ 55: 2, # 'Ü'
3183
+ 59: 1, # 'â'
3184
+ 33: 0, # 'ç'
3185
+ 61: 0, # 'î'
3186
+ 34: 2, # 'ö'
3187
+ 17: 2, # 'ü'
3188
+ 30: 2, # 'ğ'
3189
+ 41: 1, # 'İ'
3190
+ 6: 3, # 'ı'
3191
+ 40: 1, # 'Ş'
3192
+ 19: 2, # 'ş'
3193
+ },
3194
+ 63: { # '·'
3195
+ 23: 0, # 'A'
3196
+ 37: 0, # 'B'
3197
+ 47: 0, # 'C'
3198
+ 39: 0, # 'D'
3199
+ 29: 0, # 'E'
3200
+ 52: 0, # 'F'
3201
+ 36: 0, # 'G'
3202
+ 45: 0, # 'H'
3203
+ 53: 0, # 'I'
3204
+ 60: 0, # 'J'
3205
+ 16: 0, # 'K'
3206
+ 49: 0, # 'L'
3207
+ 20: 0, # 'M'
3208
+ 46: 0, # 'N'
3209
+ 42: 0, # 'O'
3210
+ 48: 0, # 'P'
3211
+ 44: 0, # 'R'
3212
+ 35: 0, # 'S'
3213
+ 31: 0, # 'T'
3214
+ 51: 0, # 'U'
3215
+ 38: 0, # 'V'
3216
+ 62: 0, # 'W'
3217
+ 43: 0, # 'Y'
3218
+ 56: 0, # 'Z'
3219
+ 1: 0, # 'a'
3220
+ 21: 0, # 'b'
3221
+ 28: 0, # 'c'
3222
+ 12: 0, # 'd'
3223
+ 2: 1, # 'e'
3224
+ 18: 0, # 'f'
3225
+ 27: 0, # 'g'
3226
+ 25: 0, # 'h'
3227
+ 3: 0, # 'i'
3228
+ 24: 0, # 'j'
3229
+ 10: 0, # 'k'
3230
+ 5: 0, # 'l'
3231
+ 13: 2, # 'm'
3232
+ 4: 0, # 'n'
3233
+ 15: 0, # 'o'
3234
+ 26: 0, # 'p'
3235
+ 7: 0, # 'r'
3236
+ 8: 0, # 's'
3237
+ 9: 0, # 't'
3238
+ 14: 2, # 'u'
3239
+ 32: 0, # 'v'
3240
+ 57: 0, # 'w'
3241
+ 58: 0, # 'x'
3242
+ 11: 0, # 'y'
3243
+ 22: 0, # 'z'
3244
+ 63: 0, # '·'
3245
+ 54: 0, # 'Ç'
3246
+ 50: 0, # 'Ö'
3247
+ 55: 0, # 'Ü'
3248
+ 59: 0, # 'â'
3249
+ 33: 0, # 'ç'
3250
+ 61: 0, # 'î'
3251
+ 34: 0, # 'ö'
3252
+ 17: 0, # 'ü'
3253
+ 30: 0, # 'ğ'
3254
+ 41: 0, # 'İ'
3255
+ 6: 0, # 'ı'
3256
+ 40: 0, # 'Ş'
3257
+ 19: 0, # 'ş'
3258
+ },
3259
+ 54: { # 'Ç'
3260
+ 23: 0, # 'A'
3261
+ 37: 0, # 'B'
3262
+ 47: 1, # 'C'
3263
+ 39: 1, # 'D'
3264
+ 29: 0, # 'E'
3265
+ 52: 0, # 'F'
3266
+ 36: 1, # 'G'
3267
+ 45: 1, # 'H'
3268
+ 53: 1, # 'I'
3269
+ 60: 0, # 'J'
3270
+ 16: 0, # 'K'
3271
+ 49: 0, # 'L'
3272
+ 20: 0, # 'M'
3273
+ 46: 0, # 'N'
3274
+ 42: 1, # 'O'
3275
+ 48: 1, # 'P'
3276
+ 44: 0, # 'R'
3277
+ 35: 0, # 'S'
3278
+ 31: 0, # 'T'
3279
+ 51: 1, # 'U'
3280
+ 38: 1, # 'V'
3281
+ 62: 0, # 'W'
3282
+ 43: 2, # 'Y'
3283
+ 56: 0, # 'Z'
3284
+ 1: 0, # 'a'
3285
+ 21: 1, # 'b'
3286
+ 28: 0, # 'c'
3287
+ 12: 1, # 'd'
3288
+ 2: 0, # 'e'
3289
+ 18: 0, # 'f'
3290
+ 27: 1, # 'g'
3291
+ 25: 0, # 'h'
3292
+ 3: 3, # 'i'
3293
+ 24: 0, # 'j'
3294
+ 10: 1, # 'k'
3295
+ 5: 0, # 'l'
3296
+ 13: 0, # 'm'
3297
+ 4: 2, # 'n'
3298
+ 15: 1, # 'o'
3299
+ 26: 0, # 'p'
3300
+ 7: 2, # 'r'
3301
+ 8: 0, # 's'
3302
+ 9: 1, # 't'
3303
+ 14: 0, # 'u'
3304
+ 32: 2, # 'v'
3305
+ 57: 0, # 'w'
3306
+ 58: 0, # 'x'
3307
+ 11: 0, # 'y'
3308
+ 22: 0, # 'z'
3309
+ 63: 0, # '·'
3310
+ 54: 0, # 'Ç'
3311
+ 50: 0, # 'Ö'
3312
+ 55: 2, # 'Ü'
3313
+ 59: 0, # 'â'
3314
+ 33: 0, # 'ç'
3315
+ 61: 0, # 'î'
3316
+ 34: 1, # 'ö'
3317
+ 17: 0, # 'ü'
3318
+ 30: 0, # 'ğ'
3319
+ 41: 0, # 'İ'
3320
+ 6: 2, # 'ı'
3321
+ 40: 0, # 'Ş'
3322
+ 19: 1, # 'ş'
3323
+ },
3324
+ 50: { # 'Ö'
3325
+ 23: 0, # 'A'
3326
+ 37: 0, # 'B'
3327
+ 47: 1, # 'C'
3328
+ 39: 1, # 'D'
3329
+ 29: 2, # 'E'
3330
+ 52: 0, # 'F'
3331
+ 36: 1, # 'G'
3332
+ 45: 2, # 'H'
3333
+ 53: 0, # 'I'
3334
+ 60: 0, # 'J'
3335
+ 16: 0, # 'K'
3336
+ 49: 0, # 'L'
3337
+ 20: 1, # 'M'
3338
+ 46: 1, # 'N'
3339
+ 42: 2, # 'O'
3340
+ 48: 2, # 'P'
3341
+ 44: 1, # 'R'
3342
+ 35: 0, # 'S'
3343
+ 31: 0, # 'T'
3344
+ 51: 1, # 'U'
3345
+ 38: 1, # 'V'
3346
+ 62: 0, # 'W'
3347
+ 43: 2, # 'Y'
3348
+ 56: 0, # 'Z'
3349
+ 1: 0, # 'a'
3350
+ 21: 2, # 'b'
3351
+ 28: 1, # 'c'
3352
+ 12: 2, # 'd'
3353
+ 2: 0, # 'e'
3354
+ 18: 1, # 'f'
3355
+ 27: 1, # 'g'
3356
+ 25: 1, # 'h'
3357
+ 3: 2, # 'i'
3358
+ 24: 0, # 'j'
3359
+ 10: 2, # 'k'
3360
+ 5: 0, # 'l'
3361
+ 13: 0, # 'm'
3362
+ 4: 3, # 'n'
3363
+ 15: 2, # 'o'
3364
+ 26: 2, # 'p'
3365
+ 7: 3, # 'r'
3366
+ 8: 1, # 's'
3367
+ 9: 2, # 't'
3368
+ 14: 0, # 'u'
3369
+ 32: 1, # 'v'
3370
+ 57: 0, # 'w'
3371
+ 58: 0, # 'x'
3372
+ 11: 0, # 'y'
3373
+ 22: 1, # 'z'
3374
+ 63: 0, # '·'
3375
+ 54: 0, # 'Ç'
3376
+ 50: 0, # 'Ö'
3377
+ 55: 0, # 'Ü'
3378
+ 59: 0, # 'â'
3379
+ 33: 0, # 'ç'
3380
+ 61: 0, # 'î'
3381
+ 34: 2, # 'ö'
3382
+ 17: 2, # 'ü'
3383
+ 30: 1, # 'ğ'
3384
+ 41: 0, # 'İ'
3385
+ 6: 2, # 'ı'
3386
+ 40: 0, # 'Ş'
3387
+ 19: 1, # 'ş'
3388
+ },
3389
+ 55: { # 'Ü'
3390
+ 23: 0, # 'A'
3391
+ 37: 0, # 'B'
3392
+ 47: 0, # 'C'
3393
+ 39: 0, # 'D'
3394
+ 29: 0, # 'E'
3395
+ 52: 2, # 'F'
3396
+ 36: 0, # 'G'
3397
+ 45: 0, # 'H'
3398
+ 53: 0, # 'I'
3399
+ 60: 0, # 'J'
3400
+ 16: 1, # 'K'
3401
+ 49: 0, # 'L'
3402
+ 20: 0, # 'M'
3403
+ 46: 0, # 'N'
3404
+ 42: 0, # 'O'
3405
+ 48: 1, # 'P'
3406
+ 44: 0, # 'R'
3407
+ 35: 0, # 'S'
3408
+ 31: 0, # 'T'
3409
+ 51: 0, # 'U'
3410
+ 38: 1, # 'V'
3411
+ 62: 0, # 'W'
3412
+ 43: 0, # 'Y'
3413
+ 56: 0, # 'Z'
3414
+ 1: 2, # 'a'
3415
+ 21: 0, # 'b'
3416
+ 28: 2, # 'c'
3417
+ 12: 0, # 'd'
3418
+ 2: 2, # 'e'
3419
+ 18: 0, # 'f'
3420
+ 27: 1, # 'g'
3421
+ 25: 0, # 'h'
3422
+ 3: 0, # 'i'
3423
+ 24: 0, # 'j'
3424
+ 10: 0, # 'k'
3425
+ 5: 1, # 'l'
3426
+ 13: 1, # 'm'
3427
+ 4: 1, # 'n'
3428
+ 15: 0, # 'o'
3429
+ 26: 0, # 'p'
3430
+ 7: 0, # 'r'
3431
+ 8: 0, # 's'
3432
+ 9: 1, # 't'
3433
+ 14: 2, # 'u'
3434
+ 32: 0, # 'v'
3435
+ 57: 0, # 'w'
3436
+ 58: 0, # 'x'
3437
+ 11: 0, # 'y'
3438
+ 22: 1, # 'z'
3439
+ 63: 0, # '·'
3440
+ 54: 0, # 'Ç'
3441
+ 50: 1, # 'Ö'
3442
+ 55: 0, # 'Ü'
3443
+ 59: 0, # 'â'
3444
+ 33: 0, # 'ç'
3445
+ 61: 0, # 'î'
3446
+ 34: 1, # 'ö'
3447
+ 17: 0, # 'ü'
3448
+ 30: 1, # 'ğ'
3449
+ 41: 1, # 'İ'
3450
+ 6: 0, # 'ı'
3451
+ 40: 0, # 'Ş'
3452
+ 19: 1, # 'ş'
3453
+ },
3454
+ 59: { # 'â'
3455
+ 23: 0, # 'A'
3456
+ 37: 0, # 'B'
3457
+ 47: 0, # 'C'
3458
+ 39: 0, # 'D'
3459
+ 29: 0, # 'E'
3460
+ 52: 0, # 'F'
3461
+ 36: 1, # 'G'
3462
+ 45: 0, # 'H'
3463
+ 53: 0, # 'I'
3464
+ 60: 0, # 'J'
3465
+ 16: 1, # 'K'
3466
+ 49: 0, # 'L'
3467
+ 20: 0, # 'M'
3468
+ 46: 0, # 'N'
3469
+ 42: 0, # 'O'
3470
+ 48: 0, # 'P'
3471
+ 44: 0, # 'R'
3472
+ 35: 0, # 'S'
3473
+ 31: 0, # 'T'
3474
+ 51: 0, # 'U'
3475
+ 38: 0, # 'V'
3476
+ 62: 0, # 'W'
3477
+ 43: 0, # 'Y'
3478
+ 56: 0, # 'Z'
3479
+ 1: 2, # 'a'
3480
+ 21: 0, # 'b'
3481
+ 28: 0, # 'c'
3482
+ 12: 0, # 'd'
3483
+ 2: 2, # 'e'
3484
+ 18: 0, # 'f'
3485
+ 27: 0, # 'g'
3486
+ 25: 0, # 'h'
3487
+ 3: 0, # 'i'
3488
+ 24: 0, # 'j'
3489
+ 10: 0, # 'k'
3490
+ 5: 0, # 'l'
3491
+ 13: 2, # 'm'
3492
+ 4: 0, # 'n'
3493
+ 15: 1, # 'o'
3494
+ 26: 0, # 'p'
3495
+ 7: 0, # 'r'
3496
+ 8: 0, # 's'
3497
+ 9: 0, # 't'
3498
+ 14: 2, # 'u'
3499
+ 32: 0, # 'v'
3500
+ 57: 0, # 'w'
3501
+ 58: 0, # 'x'
3502
+ 11: 0, # 'y'
3503
+ 22: 1, # 'z'
3504
+ 63: 0, # '·'
3505
+ 54: 0, # 'Ç'
3506
+ 50: 0, # 'Ö'
3507
+ 55: 0, # 'Ü'
3508
+ 59: 0, # 'â'
3509
+ 33: 0, # 'ç'
3510
+ 61: 0, # 'î'
3511
+ 34: 0, # 'ö'
3512
+ 17: 0, # 'ü'
3513
+ 30: 0, # 'ğ'
3514
+ 41: 0, # 'İ'
3515
+ 6: 1, # 'ı'
3516
+ 40: 1, # 'Ş'
3517
+ 19: 0, # 'ş'
3518
+ },
3519
+ 33: { # 'ç'
3520
+ 23: 0, # 'A'
3521
+ 37: 0, # 'B'
3522
+ 47: 0, # 'C'
3523
+ 39: 0, # 'D'
3524
+ 29: 3, # 'E'
3525
+ 52: 0, # 'F'
3526
+ 36: 0, # 'G'
3527
+ 45: 0, # 'H'
3528
+ 53: 0, # 'I'
3529
+ 60: 0, # 'J'
3530
+ 16: 0, # 'K'
3531
+ 49: 0, # 'L'
3532
+ 20: 1, # 'M'
3533
+ 46: 0, # 'N'
3534
+ 42: 0, # 'O'
3535
+ 48: 0, # 'P'
3536
+ 44: 0, # 'R'
3537
+ 35: 0, # 'S'
3538
+ 31: 2, # 'T'
3539
+ 51: 0, # 'U'
3540
+ 38: 1, # 'V'
3541
+ 62: 0, # 'W'
3542
+ 43: 0, # 'Y'
3543
+ 56: 0, # 'Z'
3544
+ 1: 0, # 'a'
3545
+ 21: 3, # 'b'
3546
+ 28: 0, # 'c'
3547
+ 12: 2, # 'd'
3548
+ 2: 0, # 'e'
3549
+ 18: 2, # 'f'
3550
+ 27: 1, # 'g'
3551
+ 25: 3, # 'h'
3552
+ 3: 3, # 'i'
3553
+ 24: 0, # 'j'
3554
+ 10: 3, # 'k'
3555
+ 5: 0, # 'l'
3556
+ 13: 0, # 'm'
3557
+ 4: 3, # 'n'
3558
+ 15: 0, # 'o'
3559
+ 26: 1, # 'p'
3560
+ 7: 3, # 'r'
3561
+ 8: 2, # 's'
3562
+ 9: 3, # 't'
3563
+ 14: 0, # 'u'
3564
+ 32: 2, # 'v'
3565
+ 57: 0, # 'w'
3566
+ 58: 0, # 'x'
3567
+ 11: 2, # 'y'
3568
+ 22: 0, # 'z'
3569
+ 63: 0, # '·'
3570
+ 54: 0, # 'Ç'
3571
+ 50: 0, # 'Ö'
3572
+ 55: 0, # 'Ü'
3573
+ 59: 0, # 'â'
3574
+ 33: 0, # 'ç'
3575
+ 61: 0, # 'î'
3576
+ 34: 0, # 'ö'
3577
+ 17: 1, # 'ü'
3578
+ 30: 0, # 'ğ'
3579
+ 41: 0, # 'İ'
3580
+ 6: 3, # 'ı'
3581
+ 40: 0, # 'Ş'
3582
+ 19: 0, # 'ş'
3583
+ },
3584
+ 61: { # 'î'
3585
+ 23: 0, # 'A'
3586
+ 37: 0, # 'B'
3587
+ 47: 0, # 'C'
3588
+ 39: 0, # 'D'
3589
+ 29: 0, # 'E'
3590
+ 52: 0, # 'F'
3591
+ 36: 0, # 'G'
3592
+ 45: 0, # 'H'
3593
+ 53: 0, # 'I'
3594
+ 60: 0, # 'J'
3595
+ 16: 0, # 'K'
3596
+ 49: 0, # 'L'
3597
+ 20: 0, # 'M'
3598
+ 46: 0, # 'N'
3599
+ 42: 0, # 'O'
3600
+ 48: 0, # 'P'
3601
+ 44: 0, # 'R'
3602
+ 35: 0, # 'S'
3603
+ 31: 0, # 'T'
3604
+ 51: 0, # 'U'
3605
+ 38: 0, # 'V'
3606
+ 62: 0, # 'W'
3607
+ 43: 0, # 'Y'
3608
+ 56: 1, # 'Z'
3609
+ 1: 2, # 'a'
3610
+ 21: 0, # 'b'
3611
+ 28: 0, # 'c'
3612
+ 12: 0, # 'd'
3613
+ 2: 2, # 'e'
3614
+ 18: 0, # 'f'
3615
+ 27: 0, # 'g'
3616
+ 25: 0, # 'h'
3617
+ 3: 0, # 'i'
3618
+ 24: 1, # 'j'
3619
+ 10: 0, # 'k'
3620
+ 5: 0, # 'l'
3621
+ 13: 1, # 'm'
3622
+ 4: 1, # 'n'
3623
+ 15: 0, # 'o'
3624
+ 26: 0, # 'p'
3625
+ 7: 0, # 'r'
3626
+ 8: 0, # 's'
3627
+ 9: 0, # 't'
3628
+ 14: 1, # 'u'
3629
+ 32: 0, # 'v'
3630
+ 57: 0, # 'w'
3631
+ 58: 0, # 'x'
3632
+ 11: 0, # 'y'
3633
+ 22: 1, # 'z'
3634
+ 63: 0, # '·'
3635
+ 54: 0, # 'Ç'
3636
+ 50: 0, # 'Ö'
3637
+ 55: 0, # 'Ü'
3638
+ 59: 0, # 'â'
3639
+ 33: 0, # 'ç'
3640
+ 61: 1, # 'î'
3641
+ 34: 0, # 'ö'
3642
+ 17: 0, # 'ü'
3643
+ 30: 0, # 'ğ'
3644
+ 41: 0, # 'İ'
3645
+ 6: 1, # 'ı'
3646
+ 40: 0, # 'Ş'
3647
+ 19: 0, # 'ş'
3648
+ },
3649
+ 34: { # 'ö'
3650
+ 23: 0, # 'A'
3651
+ 37: 1, # 'B'
3652
+ 47: 1, # 'C'
3653
+ 39: 0, # 'D'
3654
+ 29: 0, # 'E'
3655
+ 52: 2, # 'F'
3656
+ 36: 1, # 'G'
3657
+ 45: 1, # 'H'
3658
+ 53: 0, # 'I'
3659
+ 60: 0, # 'J'
3660
+ 16: 3, # 'K'
3661
+ 49: 1, # 'L'
3662
+ 20: 0, # 'M'
3663
+ 46: 1, # 'N'
3664
+ 42: 1, # 'O'
3665
+ 48: 2, # 'P'
3666
+ 44: 1, # 'R'
3667
+ 35: 1, # 'S'
3668
+ 31: 1, # 'T'
3669
+ 51: 1, # 'U'
3670
+ 38: 1, # 'V'
3671
+ 62: 0, # 'W'
3672
+ 43: 0, # 'Y'
3673
+ 56: 1, # 'Z'
3674
+ 1: 3, # 'a'
3675
+ 21: 1, # 'b'
3676
+ 28: 2, # 'c'
3677
+ 12: 1, # 'd'
3678
+ 2: 3, # 'e'
3679
+ 18: 0, # 'f'
3680
+ 27: 2, # 'g'
3681
+ 25: 2, # 'h'
3682
+ 3: 1, # 'i'
3683
+ 24: 2, # 'j'
3684
+ 10: 1, # 'k'
3685
+ 5: 2, # 'l'
3686
+ 13: 3, # 'm'
3687
+ 4: 2, # 'n'
3688
+ 15: 2, # 'o'
3689
+ 26: 0, # 'p'
3690
+ 7: 0, # 'r'
3691
+ 8: 3, # 's'
3692
+ 9: 1, # 't'
3693
+ 14: 3, # 'u'
3694
+ 32: 0, # 'v'
3695
+ 57: 0, # 'w'
3696
+ 58: 0, # 'x'
3697
+ 11: 1, # 'y'
3698
+ 22: 2, # 'z'
3699
+ 63: 0, # '·'
3700
+ 54: 1, # 'Ç'
3701
+ 50: 2, # 'Ö'
3702
+ 55: 0, # 'Ü'
3703
+ 59: 0, # 'â'
3704
+ 33: 2, # 'ç'
3705
+ 61: 0, # 'î'
3706
+ 34: 2, # 'ö'
3707
+ 17: 0, # 'ü'
3708
+ 30: 2, # 'ğ'
3709
+ 41: 1, # 'İ'
3710
+ 6: 1, # 'ı'
3711
+ 40: 2, # 'Ş'
3712
+ 19: 1, # 'ş'
3713
+ },
3714
+ 17: { # 'ü'
3715
+ 23: 0, # 'A'
3716
+ 37: 0, # 'B'
3717
+ 47: 1, # 'C'
3718
+ 39: 0, # 'D'
3719
+ 29: 0, # 'E'
3720
+ 52: 0, # 'F'
3721
+ 36: 0, # 'G'
3722
+ 45: 0, # 'H'
3723
+ 53: 0, # 'I'
3724
+ 60: 1, # 'J'
3725
+ 16: 1, # 'K'
3726
+ 49: 0, # 'L'
3727
+ 20: 1, # 'M'
3728
+ 46: 0, # 'N'
3729
+ 42: 0, # 'O'
3730
+ 48: 0, # 'P'
3731
+ 44: 0, # 'R'
3732
+ 35: 0, # 'S'
3733
+ 31: 1, # 'T'
3734
+ 51: 0, # 'U'
3735
+ 38: 0, # 'V'
3736
+ 62: 0, # 'W'
3737
+ 43: 0, # 'Y'
3738
+ 56: 1, # 'Z'
3739
+ 1: 3, # 'a'
3740
+ 21: 0, # 'b'
3741
+ 28: 0, # 'c'
3742
+ 12: 1, # 'd'
3743
+ 2: 3, # 'e'
3744
+ 18: 1, # 'f'
3745
+ 27: 2, # 'g'
3746
+ 25: 0, # 'h'
3747
+ 3: 1, # 'i'
3748
+ 24: 1, # 'j'
3749
+ 10: 2, # 'k'
3750
+ 5: 3, # 'l'
3751
+ 13: 2, # 'm'
3752
+ 4: 3, # 'n'
3753
+ 15: 0, # 'o'
3754
+ 26: 2, # 'p'
3755
+ 7: 2, # 'r'
3756
+ 8: 3, # 's'
3757
+ 9: 2, # 't'
3758
+ 14: 3, # 'u'
3759
+ 32: 1, # 'v'
3760
+ 57: 1, # 'w'
3761
+ 58: 0, # 'x'
3762
+ 11: 0, # 'y'
3763
+ 22: 0, # 'z'
3764
+ 63: 0, # '·'
3765
+ 54: 0, # 'Ç'
3766
+ 50: 0, # 'Ö'
3767
+ 55: 0, # 'Ü'
3768
+ 59: 0, # 'â'
3769
+ 33: 1, # 'ç'
3770
+ 61: 0, # 'î'
3771
+ 34: 0, # 'ö'
3772
+ 17: 2, # 'ü'
3773
+ 30: 0, # 'ğ'
3774
+ 41: 0, # 'İ'
3775
+ 6: 2, # 'ı'
3776
+ 40: 0, # 'Ş'
3777
+ 19: 0, # 'ş'
3778
+ },
3779
+ 30: { # 'ğ'
3780
+ 23: 0, # 'A'
3781
+ 37: 2, # 'B'
3782
+ 47: 1, # 'C'
3783
+ 39: 0, # 'D'
3784
+ 29: 0, # 'E'
3785
+ 52: 2, # 'F'
3786
+ 36: 1, # 'G'
3787
+ 45: 0, # 'H'
3788
+ 53: 1, # 'I'
3789
+ 60: 0, # 'J'
3790
+ 16: 3, # 'K'
3791
+ 49: 0, # 'L'
3792
+ 20: 1, # 'M'
3793
+ 46: 2, # 'N'
3794
+ 42: 2, # 'O'
3795
+ 48: 1, # 'P'
3796
+ 44: 1, # 'R'
3797
+ 35: 0, # 'S'
3798
+ 31: 1, # 'T'
3799
+ 51: 0, # 'U'
3800
+ 38: 2, # 'V'
3801
+ 62: 0, # 'W'
3802
+ 43: 2, # 'Y'
3803
+ 56: 0, # 'Z'
3804
+ 1: 3, # 'a'
3805
+ 21: 0, # 'b'
3806
+ 28: 2, # 'c'
3807
+ 12: 0, # 'd'
3808
+ 2: 2, # 'e'
3809
+ 18: 0, # 'f'
3810
+ 27: 0, # 'g'
3811
+ 25: 0, # 'h'
3812
+ 3: 0, # 'i'
3813
+ 24: 3, # 'j'
3814
+ 10: 1, # 'k'
3815
+ 5: 2, # 'l'
3816
+ 13: 3, # 'm'
3817
+ 4: 0, # 'n'
3818
+ 15: 1, # 'o'
3819
+ 26: 0, # 'p'
3820
+ 7: 1, # 'r'
3821
+ 8: 0, # 's'
3822
+ 9: 0, # 't'
3823
+ 14: 3, # 'u'
3824
+ 32: 0, # 'v'
3825
+ 57: 0, # 'w'
3826
+ 58: 0, # 'x'
3827
+ 11: 0, # 'y'
3828
+ 22: 2, # 'z'
3829
+ 63: 0, # '·'
3830
+ 54: 2, # 'Ç'
3831
+ 50: 2, # 'Ö'
3832
+ 55: 0, # 'Ü'
3833
+ 59: 0, # 'â'
3834
+ 33: 1, # 'ç'
3835
+ 61: 0, # 'î'
3836
+ 34: 2, # 'ö'
3837
+ 17: 0, # 'ü'
3838
+ 30: 1, # 'ğ'
3839
+ 41: 2, # 'İ'
3840
+ 6: 2, # 'ı'
3841
+ 40: 2, # 'Ş'
3842
+ 19: 1, # 'ş'
3843
+ },
3844
+ 41: { # 'İ'
3845
+ 23: 0, # 'A'
3846
+ 37: 0, # 'B'
3847
+ 47: 1, # 'C'
3848
+ 39: 1, # 'D'
3849
+ 29: 1, # 'E'
3850
+ 52: 0, # 'F'
3851
+ 36: 2, # 'G'
3852
+ 45: 2, # 'H'
3853
+ 53: 0, # 'I'
3854
+ 60: 0, # 'J'
3855
+ 16: 0, # 'K'
3856
+ 49: 0, # 'L'
3857
+ 20: 2, # 'M'
3858
+ 46: 1, # 'N'
3859
+ 42: 1, # 'O'
3860
+ 48: 2, # 'P'
3861
+ 44: 0, # 'R'
3862
+ 35: 1, # 'S'
3863
+ 31: 1, # 'T'
3864
+ 51: 1, # 'U'
3865
+ 38: 1, # 'V'
3866
+ 62: 0, # 'W'
3867
+ 43: 2, # 'Y'
3868
+ 56: 0, # 'Z'
3869
+ 1: 1, # 'a'
3870
+ 21: 2, # 'b'
3871
+ 28: 1, # 'c'
3872
+ 12: 2, # 'd'
3873
+ 2: 1, # 'e'
3874
+ 18: 0, # 'f'
3875
+ 27: 3, # 'g'
3876
+ 25: 2, # 'h'
3877
+ 3: 2, # 'i'
3878
+ 24: 2, # 'j'
3879
+ 10: 2, # 'k'
3880
+ 5: 0, # 'l'
3881
+ 13: 1, # 'm'
3882
+ 4: 3, # 'n'
3883
+ 15: 1, # 'o'
3884
+ 26: 1, # 'p'
3885
+ 7: 3, # 'r'
3886
+ 8: 3, # 's'
3887
+ 9: 2, # 't'
3888
+ 14: 0, # 'u'
3889
+ 32: 0, # 'v'
3890
+ 57: 1, # 'w'
3891
+ 58: 0, # 'x'
3892
+ 11: 2, # 'y'
3893
+ 22: 0, # 'z'
3894
+ 63: 0, # '·'
3895
+ 54: 0, # 'Ç'
3896
+ 50: 0, # 'Ö'
3897
+ 55: 1, # 'Ü'
3898
+ 59: 1, # 'â'
3899
+ 33: 0, # 'ç'
3900
+ 61: 0, # 'î'
3901
+ 34: 1, # 'ö'
3902
+ 17: 1, # 'ü'
3903
+ 30: 2, # 'ğ'
3904
+ 41: 0, # 'İ'
3905
+ 6: 3, # 'ı'
3906
+ 40: 0, # 'Ş'
3907
+ 19: 1, # 'ş'
3908
+ },
3909
+ 6: { # 'ı'
3910
+ 23: 2, # 'A'
3911
+ 37: 0, # 'B'
3912
+ 47: 0, # 'C'
3913
+ 39: 0, # 'D'
3914
+ 29: 0, # 'E'
3915
+ 52: 0, # 'F'
3916
+ 36: 1, # 'G'
3917
+ 45: 0, # 'H'
3918
+ 53: 0, # 'I'
3919
+ 60: 2, # 'J'
3920
+ 16: 3, # 'K'
3921
+ 49: 0, # 'L'
3922
+ 20: 3, # 'M'
3923
+ 46: 1, # 'N'
3924
+ 42: 0, # 'O'
3925
+ 48: 0, # 'P'
3926
+ 44: 0, # 'R'
3927
+ 35: 0, # 'S'
3928
+ 31: 2, # 'T'
3929
+ 51: 0, # 'U'
3930
+ 38: 0, # 'V'
3931
+ 62: 0, # 'W'
3932
+ 43: 2, # 'Y'
3933
+ 56: 1, # 'Z'
3934
+ 1: 3, # 'a'
3935
+ 21: 2, # 'b'
3936
+ 28: 1, # 'c'
3937
+ 12: 3, # 'd'
3938
+ 2: 3, # 'e'
3939
+ 18: 3, # 'f'
3940
+ 27: 3, # 'g'
3941
+ 25: 2, # 'h'
3942
+ 3: 3, # 'i'
3943
+ 24: 3, # 'j'
3944
+ 10: 3, # 'k'
3945
+ 5: 3, # 'l'
3946
+ 13: 3, # 'm'
3947
+ 4: 3, # 'n'
3948
+ 15: 0, # 'o'
3949
+ 26: 3, # 'p'
3950
+ 7: 3, # 'r'
3951
+ 8: 3, # 's'
3952
+ 9: 3, # 't'
3953
+ 14: 3, # 'u'
3954
+ 32: 3, # 'v'
3955
+ 57: 1, # 'w'
3956
+ 58: 1, # 'x'
3957
+ 11: 3, # 'y'
3958
+ 22: 0, # 'z'
3959
+ 63: 1, # '·'
3960
+ 54: 0, # 'Ç'
3961
+ 50: 0, # 'Ö'
3962
+ 55: 0, # 'Ü'
3963
+ 59: 0, # 'â'
3964
+ 33: 2, # 'ç'
3965
+ 61: 0, # 'î'
3966
+ 34: 0, # 'ö'
3967
+ 17: 3, # 'ü'
3968
+ 30: 0, # 'ğ'
3969
+ 41: 0, # 'İ'
3970
+ 6: 3, # 'ı'
3971
+ 40: 0, # 'Ş'
3972
+ 19: 0, # 'ş'
3973
+ },
3974
+ 40: { # 'Ş'
3975
+ 23: 0, # 'A'
3976
+ 37: 0, # 'B'
3977
+ 47: 1, # 'C'
3978
+ 39: 1, # 'D'
3979
+ 29: 1, # 'E'
3980
+ 52: 0, # 'F'
3981
+ 36: 1, # 'G'
3982
+ 45: 2, # 'H'
3983
+ 53: 1, # 'I'
3984
+ 60: 0, # 'J'
3985
+ 16: 0, # 'K'
3986
+ 49: 0, # 'L'
3987
+ 20: 2, # 'M'
3988
+ 46: 1, # 'N'
3989
+ 42: 1, # 'O'
3990
+ 48: 2, # 'P'
3991
+ 44: 2, # 'R'
3992
+ 35: 1, # 'S'
3993
+ 31: 1, # 'T'
3994
+ 51: 0, # 'U'
3995
+ 38: 1, # 'V'
3996
+ 62: 0, # 'W'
3997
+ 43: 2, # 'Y'
3998
+ 56: 1, # 'Z'
3999
+ 1: 0, # 'a'
4000
+ 21: 2, # 'b'
4001
+ 28: 0, # 'c'
4002
+ 12: 2, # 'd'
4003
+ 2: 0, # 'e'
4004
+ 18: 3, # 'f'
4005
+ 27: 0, # 'g'
4006
+ 25: 2, # 'h'
4007
+ 3: 3, # 'i'
4008
+ 24: 2, # 'j'
4009
+ 10: 1, # 'k'
4010
+ 5: 0, # 'l'
4011
+ 13: 1, # 'm'
4012
+ 4: 3, # 'n'
4013
+ 15: 2, # 'o'
4014
+ 26: 0, # 'p'
4015
+ 7: 3, # 'r'
4016
+ 8: 2, # 's'
4017
+ 9: 2, # 't'
4018
+ 14: 1, # 'u'
4019
+ 32: 3, # 'v'
4020
+ 57: 0, # 'w'
4021
+ 58: 0, # 'x'
4022
+ 11: 2, # 'y'
4023
+ 22: 0, # 'z'
4024
+ 63: 0, # '·'
4025
+ 54: 0, # 'Ç'
4026
+ 50: 0, # 'Ö'
4027
+ 55: 1, # 'Ü'
4028
+ 59: 0, # 'â'
4029
+ 33: 0, # 'ç'
4030
+ 61: 0, # 'î'
4031
+ 34: 2, # 'ö'
4032
+ 17: 1, # 'ü'
4033
+ 30: 2, # 'ğ'
4034
+ 41: 0, # 'İ'
4035
+ 6: 2, # 'ı'
4036
+ 40: 1, # 'Ş'
4037
+ 19: 2, # 'ş'
4038
+ },
4039
+ 19: { # 'ş'
4040
+ 23: 0, # 'A'
4041
+ 37: 0, # 'B'
4042
+ 47: 1, # 'C'
4043
+ 39: 0, # 'D'
4044
+ 29: 0, # 'E'
4045
+ 52: 2, # 'F'
4046
+ 36: 1, # 'G'
4047
+ 45: 0, # 'H'
4048
+ 53: 0, # 'I'
4049
+ 60: 0, # 'J'
4050
+ 16: 3, # 'K'
4051
+ 49: 2, # 'L'
4052
+ 20: 0, # 'M'
4053
+ 46: 1, # 'N'
4054
+ 42: 1, # 'O'
4055
+ 48: 1, # 'P'
4056
+ 44: 1, # 'R'
4057
+ 35: 1, # 'S'
4058
+ 31: 0, # 'T'
4059
+ 51: 1, # 'U'
4060
+ 38: 1, # 'V'
4061
+ 62: 0, # 'W'
4062
+ 43: 1, # 'Y'
4063
+ 56: 0, # 'Z'
4064
+ 1: 3, # 'a'
4065
+ 21: 1, # 'b'
4066
+ 28: 2, # 'c'
4067
+ 12: 0, # 'd'
4068
+ 2: 3, # 'e'
4069
+ 18: 0, # 'f'
4070
+ 27: 2, # 'g'
4071
+ 25: 1, # 'h'
4072
+ 3: 1, # 'i'
4073
+ 24: 0, # 'j'
4074
+ 10: 2, # 'k'
4075
+ 5: 2, # 'l'
4076
+ 13: 3, # 'm'
4077
+ 4: 0, # 'n'
4078
+ 15: 0, # 'o'
4079
+ 26: 1, # 'p'
4080
+ 7: 3, # 'r'
4081
+ 8: 0, # 's'
4082
+ 9: 0, # 't'
4083
+ 14: 3, # 'u'
4084
+ 32: 0, # 'v'
4085
+ 57: 0, # 'w'
4086
+ 58: 0, # 'x'
4087
+ 11: 0, # 'y'
4088
+ 22: 2, # 'z'
4089
+ 63: 0, # '·'
4090
+ 54: 1, # 'Ç'
4091
+ 50: 2, # 'Ö'
4092
+ 55: 0, # 'Ü'
4093
+ 59: 0, # 'â'
4094
+ 33: 1, # 'ç'
4095
+ 61: 1, # 'î'
4096
+ 34: 2, # 'ö'
4097
+ 17: 0, # 'ü'
4098
+ 30: 1, # 'ğ'
4099
+ 41: 1, # 'İ'
4100
+ 6: 1, # 'ı'
4101
+ 40: 1, # 'Ş'
4102
+ 19: 1, # 'ş'
4103
+ },
4104
+ }
4105
+
4106
+ # 255: Undefined characters that did not exist in training text
4107
+ # 254: Carriage/Return
4108
+ # 253: symbol (punctuation) that does not belong to word
4109
+ # 252: 0 - 9
4110
+ # 251: Control characters
4111
+
4112
+ # Character Mapping Table(s):
4113
+ ISO_8859_9_TURKISH_CHAR_TO_ORDER = {
4114
+ 0: 255, # '\x00'
4115
+ 1: 255, # '\x01'
4116
+ 2: 255, # '\x02'
4117
+ 3: 255, # '\x03'
4118
+ 4: 255, # '\x04'
4119
+ 5: 255, # '\x05'
4120
+ 6: 255, # '\x06'
4121
+ 7: 255, # '\x07'
4122
+ 8: 255, # '\x08'
4123
+ 9: 255, # '\t'
4124
+ 10: 255, # '\n'
4125
+ 11: 255, # '\x0b'
4126
+ 12: 255, # '\x0c'
4127
+ 13: 255, # '\r'
4128
+ 14: 255, # '\x0e'
4129
+ 15: 255, # '\x0f'
4130
+ 16: 255, # '\x10'
4131
+ 17: 255, # '\x11'
4132
+ 18: 255, # '\x12'
4133
+ 19: 255, # '\x13'
4134
+ 20: 255, # '\x14'
4135
+ 21: 255, # '\x15'
4136
+ 22: 255, # '\x16'
4137
+ 23: 255, # '\x17'
4138
+ 24: 255, # '\x18'
4139
+ 25: 255, # '\x19'
4140
+ 26: 255, # '\x1a'
4141
+ 27: 255, # '\x1b'
4142
+ 28: 255, # '\x1c'
4143
+ 29: 255, # '\x1d'
4144
+ 30: 255, # '\x1e'
4145
+ 31: 255, # '\x1f'
4146
+ 32: 255, # ' '
4147
+ 33: 255, # '!'
4148
+ 34: 255, # '"'
4149
+ 35: 255, # '#'
4150
+ 36: 255, # '$'
4151
+ 37: 255, # '%'
4152
+ 38: 255, # '&'
4153
+ 39: 255, # "'"
4154
+ 40: 255, # '('
4155
+ 41: 255, # ')'
4156
+ 42: 255, # '*'
4157
+ 43: 255, # '+'
4158
+ 44: 255, # ','
4159
+ 45: 255, # '-'
4160
+ 46: 255, # '.'
4161
+ 47: 255, # '/'
4162
+ 48: 255, # '0'
4163
+ 49: 255, # '1'
4164
+ 50: 255, # '2'
4165
+ 51: 255, # '3'
4166
+ 52: 255, # '4'
4167
+ 53: 255, # '5'
4168
+ 54: 255, # '6'
4169
+ 55: 255, # '7'
4170
+ 56: 255, # '8'
4171
+ 57: 255, # '9'
4172
+ 58: 255, # ':'
4173
+ 59: 255, # ';'
4174
+ 60: 255, # '<'
4175
+ 61: 255, # '='
4176
+ 62: 255, # '>'
4177
+ 63: 255, # '?'
4178
+ 64: 255, # '@'
4179
+ 65: 23, # 'A'
4180
+ 66: 37, # 'B'
4181
+ 67: 47, # 'C'
4182
+ 68: 39, # 'D'
4183
+ 69: 29, # 'E'
4184
+ 70: 52, # 'F'
4185
+ 71: 36, # 'G'
4186
+ 72: 45, # 'H'
4187
+ 73: 53, # 'I'
4188
+ 74: 60, # 'J'
4189
+ 75: 16, # 'K'
4190
+ 76: 49, # 'L'
4191
+ 77: 20, # 'M'
4192
+ 78: 46, # 'N'
4193
+ 79: 42, # 'O'
4194
+ 80: 48, # 'P'
4195
+ 81: 69, # 'Q'
4196
+ 82: 44, # 'R'
4197
+ 83: 35, # 'S'
4198
+ 84: 31, # 'T'
4199
+ 85: 51, # 'U'
4200
+ 86: 38, # 'V'
4201
+ 87: 62, # 'W'
4202
+ 88: 65, # 'X'
4203
+ 89: 43, # 'Y'
4204
+ 90: 56, # 'Z'
4205
+ 91: 255, # '['
4206
+ 92: 255, # '\\'
4207
+ 93: 255, # ']'
4208
+ 94: 255, # '^'
4209
+ 95: 255, # '_'
4210
+ 96: 255, # '`'
4211
+ 97: 1, # 'a'
4212
+ 98: 21, # 'b'
4213
+ 99: 28, # 'c'
4214
+ 100: 12, # 'd'
4215
+ 101: 2, # 'e'
4216
+ 102: 18, # 'f'
4217
+ 103: 27, # 'g'
4218
+ 104: 25, # 'h'
4219
+ 105: 3, # 'i'
4220
+ 106: 24, # 'j'
4221
+ 107: 10, # 'k'
4222
+ 108: 5, # 'l'
4223
+ 109: 13, # 'm'
4224
+ 110: 4, # 'n'
4225
+ 111: 15, # 'o'
4226
+ 112: 26, # 'p'
4227
+ 113: 64, # 'q'
4228
+ 114: 7, # 'r'
4229
+ 115: 8, # 's'
4230
+ 116: 9, # 't'
4231
+ 117: 14, # 'u'
4232
+ 118: 32, # 'v'
4233
+ 119: 57, # 'w'
4234
+ 120: 58, # 'x'
4235
+ 121: 11, # 'y'
4236
+ 122: 22, # 'z'
4237
+ 123: 255, # '{'
4238
+ 124: 255, # '|'
4239
+ 125: 255, # '}'
4240
+ 126: 255, # '~'
4241
+ 127: 255, # '\x7f'
4242
+ 128: 180, # '\x80'
4243
+ 129: 179, # '\x81'
4244
+ 130: 178, # '\x82'
4245
+ 131: 177, # '\x83'
4246
+ 132: 176, # '\x84'
4247
+ 133: 175, # '\x85'
4248
+ 134: 174, # '\x86'
4249
+ 135: 173, # '\x87'
4250
+ 136: 172, # '\x88'
4251
+ 137: 171, # '\x89'
4252
+ 138: 170, # '\x8a'
4253
+ 139: 169, # '\x8b'
4254
+ 140: 168, # '\x8c'
4255
+ 141: 167, # '\x8d'
4256
+ 142: 166, # '\x8e'
4257
+ 143: 165, # '\x8f'
4258
+ 144: 164, # '\x90'
4259
+ 145: 163, # '\x91'
4260
+ 146: 162, # '\x92'
4261
+ 147: 161, # '\x93'
4262
+ 148: 160, # '\x94'
4263
+ 149: 159, # '\x95'
4264
+ 150: 101, # '\x96'
4265
+ 151: 158, # '\x97'
4266
+ 152: 157, # '\x98'
4267
+ 153: 156, # '\x99'
4268
+ 154: 155, # '\x9a'
4269
+ 155: 154, # '\x9b'
4270
+ 156: 153, # '\x9c'
4271
+ 157: 152, # '\x9d'
4272
+ 158: 151, # '\x9e'
4273
+ 159: 106, # '\x9f'
4274
+ 160: 150, # '\xa0'
4275
+ 161: 149, # '¡'
4276
+ 162: 148, # '¢'
4277
+ 163: 147, # '£'
4278
+ 164: 146, # '¤'
4279
+ 165: 145, # '¥'
4280
+ 166: 144, # '¦'
4281
+ 167: 100, # '§'
4282
+ 168: 143, # '¨'
4283
+ 169: 142, # '©'
4284
+ 170: 141, # 'ª'
4285
+ 171: 140, # '«'
4286
+ 172: 139, # '¬'
4287
+ 173: 138, # '\xad'
4288
+ 174: 137, # '®'
4289
+ 175: 136, # '¯'
4290
+ 176: 94, # '°'
4291
+ 177: 80, # '±'
4292
+ 178: 93, # '²'
4293
+ 179: 135, # '³'
4294
+ 180: 105, # '´'
4295
+ 181: 134, # 'µ'
4296
+ 182: 133, # '¶'
4297
+ 183: 63, # '·'
4298
+ 184: 132, # '¸'
4299
+ 185: 131, # '¹'
4300
+ 186: 130, # 'º'
4301
+ 187: 129, # '»'
4302
+ 188: 128, # '¼'
4303
+ 189: 127, # '½'
4304
+ 190: 126, # '¾'
4305
+ 191: 125, # '¿'
4306
+ 192: 124, # 'À'
4307
+ 193: 104, # 'Á'
4308
+ 194: 73, # 'Â'
4309
+ 195: 99, # 'Ã'
4310
+ 196: 79, # 'Ä'
4311
+ 197: 85, # 'Å'
4312
+ 198: 123, # 'Æ'
4313
+ 199: 54, # 'Ç'
4314
+ 200: 122, # 'È'
4315
+ 201: 98, # 'É'
4316
+ 202: 92, # 'Ê'
4317
+ 203: 121, # 'Ë'
4318
+ 204: 120, # 'Ì'
4319
+ 205: 91, # 'Í'
4320
+ 206: 103, # 'Î'
4321
+ 207: 119, # 'Ï'
4322
+ 208: 68, # 'Ğ'
4323
+ 209: 118, # 'Ñ'
4324
+ 210: 117, # 'Ò'
4325
+ 211: 97, # 'Ó'
4326
+ 212: 116, # 'Ô'
4327
+ 213: 115, # 'Õ'
4328
+ 214: 50, # 'Ö'
4329
+ 215: 90, # '×'
4330
+ 216: 114, # 'Ø'
4331
+ 217: 113, # 'Ù'
4332
+ 218: 112, # 'Ú'
4333
+ 219: 111, # 'Û'
4334
+ 220: 55, # 'Ü'
4335
+ 221: 41, # 'İ'
4336
+ 222: 40, # 'Ş'
4337
+ 223: 86, # 'ß'
4338
+ 224: 89, # 'à'
4339
+ 225: 70, # 'á'
4340
+ 226: 59, # 'â'
4341
+ 227: 78, # 'ã'
4342
+ 228: 71, # 'ä'
4343
+ 229: 82, # 'å'
4344
+ 230: 88, # 'æ'
4345
+ 231: 33, # 'ç'
4346
+ 232: 77, # 'è'
4347
+ 233: 66, # 'é'
4348
+ 234: 84, # 'ê'
4349
+ 235: 83, # 'ë'
4350
+ 236: 110, # 'ì'
4351
+ 237: 75, # 'í'
4352
+ 238: 61, # 'î'
4353
+ 239: 96, # 'ï'
4354
+ 240: 30, # 'ğ'
4355
+ 241: 67, # 'ñ'
4356
+ 242: 109, # 'ò'
4357
+ 243: 74, # 'ó'
4358
+ 244: 87, # 'ô'
4359
+ 245: 102, # 'õ'
4360
+ 246: 34, # 'ö'
4361
+ 247: 95, # '÷'
4362
+ 248: 81, # 'ø'
4363
+ 249: 108, # 'ù'
4364
+ 250: 76, # 'ú'
4365
+ 251: 72, # 'û'
4366
+ 252: 17, # 'ü'
4367
+ 253: 6, # 'ı'
4368
+ 254: 19, # 'ş'
4369
+ 255: 107, # 'ÿ'
4370
+ }
4371
+
4372
+ ISO_8859_9_TURKISH_MODEL = SingleByteCharSetModel(
4373
+ charset_name="ISO-8859-9",
4374
+ language="Turkish",
4375
+ char_to_order_map=ISO_8859_9_TURKISH_CHAR_TO_ORDER,
4376
+ language_model=TURKISH_LANG_MODEL,
4377
+ typical_positive_ratio=0.97029,
4378
+ keep_ascii_letters=True,
4379
+ alphabet="ABCDEFGHIJKLMNOPRSTUVYZabcdefghijklmnoprstuvyzÂÇÎÖÛÜâçîöûüĞğİıŞş",
4380
+ )
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/latin1prober.py ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is Mozilla Universal charset detector code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 2001
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ # Shy Shalom - original C code
12
+ #
13
+ # This library is free software; you can redistribute it and/or
14
+ # modify it under the terms of the GNU Lesser General Public
15
+ # License as published by the Free Software Foundation; either
16
+ # version 2.1 of the License, or (at your option) any later version.
17
+ #
18
+ # This library is distributed in the hope that it will be useful,
19
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ # Lesser General Public License for more details.
22
+ #
23
+ # You should have received a copy of the GNU Lesser General Public
24
+ # License along with this library; if not, write to the Free Software
25
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26
+ # 02110-1301 USA
27
+ ######################### END LICENSE BLOCK #########################
28
+
29
+ from typing import List, Union
30
+
31
+ from .charsetprober import CharSetProber
32
+ from .enums import ProbingState
33
+
34
+ FREQ_CAT_NUM = 4
35
+
36
+ UDF = 0 # undefined
37
+ OTH = 1 # other
38
+ ASC = 2 # ascii capital letter
39
+ ASS = 3 # ascii small letter
40
+ ACV = 4 # accent capital vowel
41
+ ACO = 5 # accent capital other
42
+ ASV = 6 # accent small vowel
43
+ ASO = 7 # accent small other
44
+ CLASS_NUM = 8 # total classes
45
+
46
+ # fmt: off
47
+ Latin1_CharToClass = (
48
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07
49
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F
50
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17
51
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F
52
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27
53
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F
54
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37
55
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F
56
+ OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47
57
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F
58
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57
59
+ ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F
60
+ OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67
61
+ ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F
62
+ ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77
63
+ ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F
64
+ OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87
65
+ OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F
66
+ UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97
67
+ OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F
68
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7
69
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF
70
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7
71
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF
72
+ ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7
73
+ ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF
74
+ ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7
75
+ ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF
76
+ ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7
77
+ ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF
78
+ ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7
79
+ ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF
80
+ )
81
+
82
+ # 0 : illegal
83
+ # 1 : very unlikely
84
+ # 2 : normal
85
+ # 3 : very likely
86
+ Latin1ClassModel = (
87
+ # UDF OTH ASC ASS ACV ACO ASV ASO
88
+ 0, 0, 0, 0, 0, 0, 0, 0, # UDF
89
+ 0, 3, 3, 3, 3, 3, 3, 3, # OTH
90
+ 0, 3, 3, 3, 3, 3, 3, 3, # ASC
91
+ 0, 3, 3, 3, 1, 1, 3, 3, # ASS
92
+ 0, 3, 3, 3, 1, 2, 1, 2, # ACV
93
+ 0, 3, 3, 3, 3, 3, 3, 3, # ACO
94
+ 0, 3, 1, 3, 1, 1, 1, 3, # ASV
95
+ 0, 3, 1, 3, 1, 1, 3, 3, # ASO
96
+ )
97
+ # fmt: on
98
+
99
+
100
+ class Latin1Prober(CharSetProber):
101
+ def __init__(self) -> None:
102
+ super().__init__()
103
+ self._last_char_class = OTH
104
+ self._freq_counter: List[int] = []
105
+ self.reset()
106
+
107
+ def reset(self) -> None:
108
+ self._last_char_class = OTH
109
+ self._freq_counter = [0] * FREQ_CAT_NUM
110
+ super().reset()
111
+
112
+ @property
113
+ def charset_name(self) -> str:
114
+ return "ISO-8859-1"
115
+
116
+ @property
117
+ def language(self) -> str:
118
+ return ""
119
+
120
+ def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState:
121
+ byte_str = self.remove_xml_tags(byte_str)
122
+ for c in byte_str:
123
+ char_class = Latin1_CharToClass[c]
124
+ freq = Latin1ClassModel[(self._last_char_class * CLASS_NUM) + char_class]
125
+ if freq == 0:
126
+ self._state = ProbingState.NOT_ME
127
+ break
128
+ self._freq_counter[freq] += 1
129
+ self._last_char_class = char_class
130
+
131
+ return self.state
132
+
133
+ def get_confidence(self) -> float:
134
+ if self.state == ProbingState.NOT_ME:
135
+ return 0.01
136
+
137
+ total = sum(self._freq_counter)
138
+ confidence = (
139
+ 0.0
140
+ if total < 0.01
141
+ else (self._freq_counter[3] - self._freq_counter[1] * 20.0) / total
142
+ )
143
+ confidence = max(confidence, 0.0)
144
+ # lower the confidence of latin1 so that other more accurate
145
+ # detector can take priority.
146
+ confidence *= 0.73
147
+ return confidence
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/macromanprober.py ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # This code was modified from latin1prober.py by Rob Speer <rob@lumino.so>.
3
+ # The Original Code is Mozilla Universal charset detector code.
4
+ #
5
+ # The Initial Developer of the Original Code is
6
+ # Netscape Communications Corporation.
7
+ # Portions created by the Initial Developer are Copyright (C) 2001
8
+ # the Initial Developer. All Rights Reserved.
9
+ #
10
+ # Contributor(s):
11
+ # Rob Speer - adapt to MacRoman encoding
12
+ # Mark Pilgrim - port to Python
13
+ # Shy Shalom - original C code
14
+ #
15
+ # This library is free software; you can redistribute it and/or
16
+ # modify it under the terms of the GNU Lesser General Public
17
+ # License as published by the Free Software Foundation; either
18
+ # version 2.1 of the License, or (at your option) any later version.
19
+ #
20
+ # This library is distributed in the hope that it will be useful,
21
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
22
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23
+ # Lesser General Public License for more details.
24
+ #
25
+ # You should have received a copy of the GNU Lesser General Public
26
+ # License along with this library; if not, write to the Free Software
27
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
28
+ # 02110-1301 USA
29
+ ######################### END LICENSE BLOCK #########################
30
+
31
+ from typing import List, Union
32
+
33
+ from .charsetprober import CharSetProber
34
+ from .enums import ProbingState
35
+
36
+ FREQ_CAT_NUM = 4
37
+
38
+ UDF = 0 # undefined
39
+ OTH = 1 # other
40
+ ASC = 2 # ascii capital letter
41
+ ASS = 3 # ascii small letter
42
+ ACV = 4 # accent capital vowel
43
+ ACO = 5 # accent capital other
44
+ ASV = 6 # accent small vowel
45
+ ASO = 7 # accent small other
46
+ ODD = 8 # character that is unlikely to appear
47
+ CLASS_NUM = 9 # total classes
48
+
49
+ # The change from Latin1 is that we explicitly look for extended characters
50
+ # that are infrequently-occurring symbols, and consider them to always be
51
+ # improbable. This should let MacRoman get out of the way of more likely
52
+ # encodings in most situations.
53
+
54
+ # fmt: off
55
+ MacRoman_CharToClass = (
56
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07
57
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F
58
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17
59
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F
60
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27
61
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F
62
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37
63
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F
64
+ OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47
65
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F
66
+ ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57
67
+ ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F
68
+ OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67
69
+ ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F
70
+ ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77
71
+ ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F
72
+ ACV, ACV, ACO, ACV, ACO, ACV, ACV, ASV, # 80 - 87
73
+ ASV, ASV, ASV, ASV, ASV, ASO, ASV, ASV, # 88 - 8F
74
+ ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASV, # 90 - 97
75
+ ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # 98 - 9F
76
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, ASO, # A0 - A7
77
+ OTH, OTH, ODD, ODD, OTH, OTH, ACV, ACV, # A8 - AF
78
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7
79
+ OTH, OTH, OTH, OTH, OTH, OTH, ASV, ASV, # B8 - BF
80
+ OTH, OTH, ODD, OTH, ODD, OTH, OTH, OTH, # C0 - C7
81
+ OTH, OTH, OTH, ACV, ACV, ACV, ACV, ASV, # C8 - CF
82
+ OTH, OTH, OTH, OTH, OTH, OTH, OTH, ODD, # D0 - D7
83
+ ASV, ACV, ODD, OTH, OTH, OTH, OTH, OTH, # D8 - DF
84
+ OTH, OTH, OTH, OTH, OTH, ACV, ACV, ACV, # E0 - E7
85
+ ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # E8 - EF
86
+ ODD, ACV, ACV, ACV, ACV, ASV, ODD, ODD, # F0 - F7
87
+ ODD, ODD, ODD, ODD, ODD, ODD, ODD, ODD, # F8 - FF
88
+ )
89
+
90
+ # 0 : illegal
91
+ # 1 : very unlikely
92
+ # 2 : normal
93
+ # 3 : very likely
94
+ MacRomanClassModel = (
95
+ # UDF OTH ASC ASS ACV ACO ASV ASO ODD
96
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, # UDF
97
+ 0, 3, 3, 3, 3, 3, 3, 3, 1, # OTH
98
+ 0, 3, 3, 3, 3, 3, 3, 3, 1, # ASC
99
+ 0, 3, 3, 3, 1, 1, 3, 3, 1, # ASS
100
+ 0, 3, 3, 3, 1, 2, 1, 2, 1, # ACV
101
+ 0, 3, 3, 3, 3, 3, 3, 3, 1, # ACO
102
+ 0, 3, 1, 3, 1, 1, 1, 3, 1, # ASV
103
+ 0, 3, 1, 3, 1, 1, 3, 3, 1, # ASO
104
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, # ODD
105
+ )
106
+ # fmt: on
107
+
108
+
109
+ class MacRomanProber(CharSetProber):
110
+ def __init__(self) -> None:
111
+ super().__init__()
112
+ self._last_char_class = OTH
113
+ self._freq_counter: List[int] = []
114
+ self.reset()
115
+
116
+ def reset(self) -> None:
117
+ self._last_char_class = OTH
118
+ self._freq_counter = [0] * FREQ_CAT_NUM
119
+
120
+ # express the prior that MacRoman is a somewhat rare encoding;
121
+ # this can be done by starting out in a slightly improbable state
122
+ # that must be overcome
123
+ self._freq_counter[2] = 10
124
+
125
+ super().reset()
126
+
127
+ @property
128
+ def charset_name(self) -> str:
129
+ return "MacRoman"
130
+
131
+ @property
132
+ def language(self) -> str:
133
+ return ""
134
+
135
+ def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState:
136
+ byte_str = self.remove_xml_tags(byte_str)
137
+ for c in byte_str:
138
+ char_class = MacRoman_CharToClass[c]
139
+ freq = MacRomanClassModel[(self._last_char_class * CLASS_NUM) + char_class]
140
+ if freq == 0:
141
+ self._state = ProbingState.NOT_ME
142
+ break
143
+ self._freq_counter[freq] += 1
144
+ self._last_char_class = char_class
145
+
146
+ return self.state
147
+
148
+ def get_confidence(self) -> float:
149
+ if self.state == ProbingState.NOT_ME:
150
+ return 0.01
151
+
152
+ total = sum(self._freq_counter)
153
+ confidence = (
154
+ 0.0
155
+ if total < 0.01
156
+ else (self._freq_counter[3] - self._freq_counter[1] * 20.0) / total
157
+ )
158
+ confidence = max(confidence, 0.0)
159
+ # lower the confidence of MacRoman so that other more accurate
160
+ # detector can take priority.
161
+ confidence *= 0.73
162
+ return confidence
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcharsetprober.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is Mozilla Universal charset detector code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 2001
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ # Shy Shalom - original C code
12
+ # Proofpoint, Inc.
13
+ #
14
+ # This library is free software; you can redistribute it and/or
15
+ # modify it under the terms of the GNU Lesser General Public
16
+ # License as published by the Free Software Foundation; either
17
+ # version 2.1 of the License, or (at your option) any later version.
18
+ #
19
+ # This library is distributed in the hope that it will be useful,
20
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22
+ # Lesser General Public License for more details.
23
+ #
24
+ # You should have received a copy of the GNU Lesser General Public
25
+ # License along with this library; if not, write to the Free Software
26
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
27
+ # 02110-1301 USA
28
+ ######################### END LICENSE BLOCK #########################
29
+
30
+ from typing import Optional, Union
31
+
32
+ from .chardistribution import CharDistributionAnalysis
33
+ from .charsetprober import CharSetProber
34
+ from .codingstatemachine import CodingStateMachine
35
+ from .enums import LanguageFilter, MachineState, ProbingState
36
+
37
+
38
+ class MultiByteCharSetProber(CharSetProber):
39
+ """
40
+ MultiByteCharSetProber
41
+ """
42
+
43
+ def __init__(self, lang_filter: LanguageFilter = LanguageFilter.NONE) -> None:
44
+ super().__init__(lang_filter=lang_filter)
45
+ self.distribution_analyzer: Optional[CharDistributionAnalysis] = None
46
+ self.coding_sm: Optional[CodingStateMachine] = None
47
+ self._last_char = bytearray(b"\0\0")
48
+
49
+ def reset(self) -> None:
50
+ super().reset()
51
+ if self.coding_sm:
52
+ self.coding_sm.reset()
53
+ if self.distribution_analyzer:
54
+ self.distribution_analyzer.reset()
55
+ self._last_char = bytearray(b"\0\0")
56
+
57
+ def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState:
58
+ assert self.coding_sm is not None
59
+ assert self.distribution_analyzer is not None
60
+
61
+ for i, byte in enumerate(byte_str):
62
+ coding_state = self.coding_sm.next_state(byte)
63
+ if coding_state == MachineState.ERROR:
64
+ self.logger.debug(
65
+ "%s %s prober hit error at byte %s",
66
+ self.charset_name,
67
+ self.language,
68
+ i,
69
+ )
70
+ self._state = ProbingState.NOT_ME
71
+ break
72
+ if coding_state == MachineState.ITS_ME:
73
+ self._state = ProbingState.FOUND_IT
74
+ break
75
+ if coding_state == MachineState.START:
76
+ char_len = self.coding_sm.get_current_charlen()
77
+ if i == 0:
78
+ self._last_char[1] = byte
79
+ self.distribution_analyzer.feed(self._last_char, char_len)
80
+ else:
81
+ self.distribution_analyzer.feed(byte_str[i - 1 : i + 1], char_len)
82
+
83
+ self._last_char[0] = byte_str[-1]
84
+
85
+ if self.state == ProbingState.DETECTING:
86
+ if self.distribution_analyzer.got_enough_data() and (
87
+ self.get_confidence() > self.SHORTCUT_THRESHOLD
88
+ ):
89
+ self._state = ProbingState.FOUND_IT
90
+
91
+ return self.state
92
+
93
+ def get_confidence(self) -> float:
94
+ assert self.distribution_analyzer is not None
95
+ return self.distribution_analyzer.get_confidence()
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/mbcssm.py ADDED
@@ -0,0 +1,661 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is mozilla.org code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ from .codingstatemachinedict import CodingStateMachineDict
29
+ from .enums import MachineState
30
+
31
+ # BIG5
32
+
33
+ # fmt: off
34
+ BIG5_CLS = (
35
+ 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 #allow 0x00 as legal value
36
+ 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f
37
+ 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17
38
+ 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f
39
+ 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27
40
+ 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f
41
+ 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37
42
+ 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f
43
+ 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47
44
+ 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f
45
+ 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57
46
+ 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f
47
+ 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67
48
+ 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f
49
+ 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77
50
+ 2, 2, 2, 2, 2, 2, 2, 1, # 78 - 7f
51
+ 4, 4, 4, 4, 4, 4, 4, 4, # 80 - 87
52
+ 4, 4, 4, 4, 4, 4, 4, 4, # 88 - 8f
53
+ 4, 4, 4, 4, 4, 4, 4, 4, # 90 - 97
54
+ 4, 4, 4, 4, 4, 4, 4, 4, # 98 - 9f
55
+ 4, 3, 3, 3, 3, 3, 3, 3, # a0 - a7
56
+ 3, 3, 3, 3, 3, 3, 3, 3, # a8 - af
57
+ 3, 3, 3, 3, 3, 3, 3, 3, # b0 - b7
58
+ 3, 3, 3, 3, 3, 3, 3, 3, # b8 - bf
59
+ 3, 3, 3, 3, 3, 3, 3, 3, # c0 - c7
60
+ 3, 3, 3, 3, 3, 3, 3, 3, # c8 - cf
61
+ 3, 3, 3, 3, 3, 3, 3, 3, # d0 - d7
62
+ 3, 3, 3, 3, 3, 3, 3, 3, # d8 - df
63
+ 3, 3, 3, 3, 3, 3, 3, 3, # e0 - e7
64
+ 3, 3, 3, 3, 3, 3, 3, 3, # e8 - ef
65
+ 3, 3, 3, 3, 3, 3, 3, 3, # f0 - f7
66
+ 3, 3, 3, 3, 3, 3, 3, 0 # f8 - ff
67
+ )
68
+
69
+ BIG5_ST = (
70
+ MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07
71
+ MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,#08-0f
72
+ MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START#10-17
73
+ )
74
+ # fmt: on
75
+
76
+ BIG5_CHAR_LEN_TABLE = (0, 1, 1, 2, 0)
77
+
78
+ BIG5_SM_MODEL: CodingStateMachineDict = {
79
+ "class_table": BIG5_CLS,
80
+ "class_factor": 5,
81
+ "state_table": BIG5_ST,
82
+ "char_len_table": BIG5_CHAR_LEN_TABLE,
83
+ "name": "Big5",
84
+ }
85
+
86
+ # CP949
87
+ # fmt: off
88
+ CP949_CLS = (
89
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, # 00 - 0f
90
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, # 10 - 1f
91
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 2f
92
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 3f
93
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, # 40 - 4f
94
+ 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, # 50 - 5f
95
+ 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, # 60 - 6f
96
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 1, # 70 - 7f
97
+ 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, # 80 - 8f
98
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, # 90 - 9f
99
+ 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, # a0 - af
100
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, # b0 - bf
101
+ 7, 7, 7, 7, 7, 7, 9, 2, 2, 3, 2, 2, 2, 2, 2, 2, # c0 - cf
102
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, # d0 - df
103
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, # e0 - ef
104
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, # f0 - ff
105
+ )
106
+
107
+ CP949_ST = (
108
+ #cls= 0 1 2 3 4 5 6 7 8 9 # previous state =
109
+ MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START, 4, 5,MachineState.ERROR, 6, # MachineState.START
110
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, # MachineState.ERROR
111
+ MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME
112
+ MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 3
113
+ MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 4
114
+ MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 5
115
+ MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 6
116
+ )
117
+ # fmt: on
118
+
119
+ CP949_CHAR_LEN_TABLE = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2)
120
+
121
+ CP949_SM_MODEL: CodingStateMachineDict = {
122
+ "class_table": CP949_CLS,
123
+ "class_factor": 10,
124
+ "state_table": CP949_ST,
125
+ "char_len_table": CP949_CHAR_LEN_TABLE,
126
+ "name": "CP949",
127
+ }
128
+
129
+ # EUC-JP
130
+ # fmt: off
131
+ EUCJP_CLS = (
132
+ 4, 4, 4, 4, 4, 4, 4, 4, # 00 - 07
133
+ 4, 4, 4, 4, 4, 4, 5, 5, # 08 - 0f
134
+ 4, 4, 4, 4, 4, 4, 4, 4, # 10 - 17
135
+ 4, 4, 4, 5, 4, 4, 4, 4, # 18 - 1f
136
+ 4, 4, 4, 4, 4, 4, 4, 4, # 20 - 27
137
+ 4, 4, 4, 4, 4, 4, 4, 4, # 28 - 2f
138
+ 4, 4, 4, 4, 4, 4, 4, 4, # 30 - 37
139
+ 4, 4, 4, 4, 4, 4, 4, 4, # 38 - 3f
140
+ 4, 4, 4, 4, 4, 4, 4, 4, # 40 - 47
141
+ 4, 4, 4, 4, 4, 4, 4, 4, # 48 - 4f
142
+ 4, 4, 4, 4, 4, 4, 4, 4, # 50 - 57
143
+ 4, 4, 4, 4, 4, 4, 4, 4, # 58 - 5f
144
+ 4, 4, 4, 4, 4, 4, 4, 4, # 60 - 67
145
+ 4, 4, 4, 4, 4, 4, 4, 4, # 68 - 6f
146
+ 4, 4, 4, 4, 4, 4, 4, 4, # 70 - 77
147
+ 4, 4, 4, 4, 4, 4, 4, 4, # 78 - 7f
148
+ 5, 5, 5, 5, 5, 5, 5, 5, # 80 - 87
149
+ 5, 5, 5, 5, 5, 5, 1, 3, # 88 - 8f
150
+ 5, 5, 5, 5, 5, 5, 5, 5, # 90 - 97
151
+ 5, 5, 5, 5, 5, 5, 5, 5, # 98 - 9f
152
+ 5, 2, 2, 2, 2, 2, 2, 2, # a0 - a7
153
+ 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af
154
+ 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7
155
+ 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf
156
+ 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7
157
+ 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf
158
+ 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7
159
+ 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df
160
+ 0, 0, 0, 0, 0, 0, 0, 0, # e0 - e7
161
+ 0, 0, 0, 0, 0, 0, 0, 0, # e8 - ef
162
+ 0, 0, 0, 0, 0, 0, 0, 0, # f0 - f7
163
+ 0, 0, 0, 0, 0, 0, 0, 5 # f8 - ff
164
+ )
165
+
166
+ EUCJP_ST = (
167
+ 3, 4, 3, 5,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07
168
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f
169
+ MachineState.ITS_ME,MachineState.ITS_ME,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17
170
+ MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 3,MachineState.ERROR,#18-1f
171
+ 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START#20-27
172
+ )
173
+ # fmt: on
174
+
175
+ EUCJP_CHAR_LEN_TABLE = (2, 2, 2, 3, 1, 0)
176
+
177
+ EUCJP_SM_MODEL: CodingStateMachineDict = {
178
+ "class_table": EUCJP_CLS,
179
+ "class_factor": 6,
180
+ "state_table": EUCJP_ST,
181
+ "char_len_table": EUCJP_CHAR_LEN_TABLE,
182
+ "name": "EUC-JP",
183
+ }
184
+
185
+ # EUC-KR
186
+ # fmt: off
187
+ EUCKR_CLS = (
188
+ 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07
189
+ 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f
190
+ 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17
191
+ 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f
192
+ 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27
193
+ 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f
194
+ 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37
195
+ 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f
196
+ 1, 1, 1, 1, 1, 1, 1, 1, # 40 - 47
197
+ 1, 1, 1, 1, 1, 1, 1, 1, # 48 - 4f
198
+ 1, 1, 1, 1, 1, 1, 1, 1, # 50 - 57
199
+ 1, 1, 1, 1, 1, 1, 1, 1, # 58 - 5f
200
+ 1, 1, 1, 1, 1, 1, 1, 1, # 60 - 67
201
+ 1, 1, 1, 1, 1, 1, 1, 1, # 68 - 6f
202
+ 1, 1, 1, 1, 1, 1, 1, 1, # 70 - 77
203
+ 1, 1, 1, 1, 1, 1, 1, 1, # 78 - 7f
204
+ 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87
205
+ 0, 0, 0, 0, 0, 0, 0, 0, # 88 - 8f
206
+ 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97
207
+ 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f
208
+ 0, 2, 2, 2, 2, 2, 2, 2, # a0 - a7
209
+ 2, 2, 2, 2, 2, 3, 3, 3, # a8 - af
210
+ 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7
211
+ 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf
212
+ 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7
213
+ 2, 3, 2, 2, 2, 2, 2, 2, # c8 - cf
214
+ 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7
215
+ 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df
216
+ 2, 2, 2, 2, 2, 2, 2, 2, # e0 - e7
217
+ 2, 2, 2, 2, 2, 2, 2, 2, # e8 - ef
218
+ 2, 2, 2, 2, 2, 2, 2, 2, # f0 - f7
219
+ 2, 2, 2, 2, 2, 2, 2, 0 # f8 - ff
220
+ )
221
+
222
+ EUCKR_ST = (
223
+ MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07
224
+ MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #08-0f
225
+ )
226
+ # fmt: on
227
+
228
+ EUCKR_CHAR_LEN_TABLE = (0, 1, 2, 0)
229
+
230
+ EUCKR_SM_MODEL: CodingStateMachineDict = {
231
+ "class_table": EUCKR_CLS,
232
+ "class_factor": 4,
233
+ "state_table": EUCKR_ST,
234
+ "char_len_table": EUCKR_CHAR_LEN_TABLE,
235
+ "name": "EUC-KR",
236
+ }
237
+
238
+ # JOHAB
239
+ # fmt: off
240
+ JOHAB_CLS = (
241
+ 4,4,4,4,4,4,4,4, # 00 - 07
242
+ 4,4,4,4,4,4,0,0, # 08 - 0f
243
+ 4,4,4,4,4,4,4,4, # 10 - 17
244
+ 4,4,4,0,4,4,4,4, # 18 - 1f
245
+ 4,4,4,4,4,4,4,4, # 20 - 27
246
+ 4,4,4,4,4,4,4,4, # 28 - 2f
247
+ 4,3,3,3,3,3,3,3, # 30 - 37
248
+ 3,3,3,3,3,3,3,3, # 38 - 3f
249
+ 3,1,1,1,1,1,1,1, # 40 - 47
250
+ 1,1,1,1,1,1,1,1, # 48 - 4f
251
+ 1,1,1,1,1,1,1,1, # 50 - 57
252
+ 1,1,1,1,1,1,1,1, # 58 - 5f
253
+ 1,1,1,1,1,1,1,1, # 60 - 67
254
+ 1,1,1,1,1,1,1,1, # 68 - 6f
255
+ 1,1,1,1,1,1,1,1, # 70 - 77
256
+ 1,1,1,1,1,1,1,2, # 78 - 7f
257
+ 6,6,6,6,8,8,8,8, # 80 - 87
258
+ 8,8,8,8,8,8,8,8, # 88 - 8f
259
+ 8,7,7,7,7,7,7,7, # 90 - 97
260
+ 7,7,7,7,7,7,7,7, # 98 - 9f
261
+ 7,7,7,7,7,7,7,7, # a0 - a7
262
+ 7,7,7,7,7,7,7,7, # a8 - af
263
+ 7,7,7,7,7,7,7,7, # b0 - b7
264
+ 7,7,7,7,7,7,7,7, # b8 - bf
265
+ 7,7,7,7,7,7,7,7, # c0 - c7
266
+ 7,7,7,7,7,7,7,7, # c8 - cf
267
+ 7,7,7,7,5,5,5,5, # d0 - d7
268
+ 5,9,9,9,9,9,9,5, # d8 - df
269
+ 9,9,9,9,9,9,9,9, # e0 - e7
270
+ 9,9,9,9,9,9,9,9, # e8 - ef
271
+ 9,9,9,9,9,9,9,9, # f0 - f7
272
+ 9,9,5,5,5,5,5,0 # f8 - ff
273
+ )
274
+
275
+ JOHAB_ST = (
276
+ # cls = 0 1 2 3 4 5 6 7 8 9
277
+ MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.ERROR ,MachineState.ERROR ,3 ,3 ,4 , # MachineState.START
278
+ MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME
279
+ MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR ,MachineState.ERROR , # MachineState.ERROR
280
+ MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.ERROR ,MachineState.ERROR ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START ,MachineState.START , # 3
281
+ MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START ,MachineState.ERROR ,MachineState.START , # 4
282
+ )
283
+ # fmt: on
284
+
285
+ JOHAB_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 0, 0, 2, 2, 2)
286
+
287
+ JOHAB_SM_MODEL: CodingStateMachineDict = {
288
+ "class_table": JOHAB_CLS,
289
+ "class_factor": 10,
290
+ "state_table": JOHAB_ST,
291
+ "char_len_table": JOHAB_CHAR_LEN_TABLE,
292
+ "name": "Johab",
293
+ }
294
+
295
+ # EUC-TW
296
+ # fmt: off
297
+ EUCTW_CLS = (
298
+ 2, 2, 2, 2, 2, 2, 2, 2, # 00 - 07
299
+ 2, 2, 2, 2, 2, 2, 0, 0, # 08 - 0f
300
+ 2, 2, 2, 2, 2, 2, 2, 2, # 10 - 17
301
+ 2, 2, 2, 0, 2, 2, 2, 2, # 18 - 1f
302
+ 2, 2, 2, 2, 2, 2, 2, 2, # 20 - 27
303
+ 2, 2, 2, 2, 2, 2, 2, 2, # 28 - 2f
304
+ 2, 2, 2, 2, 2, 2, 2, 2, # 30 - 37
305
+ 2, 2, 2, 2, 2, 2, 2, 2, # 38 - 3f
306
+ 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47
307
+ 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f
308
+ 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57
309
+ 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f
310
+ 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67
311
+ 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f
312
+ 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77
313
+ 2, 2, 2, 2, 2, 2, 2, 2, # 78 - 7f
314
+ 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87
315
+ 0, 0, 0, 0, 0, 0, 6, 0, # 88 - 8f
316
+ 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97
317
+ 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f
318
+ 0, 3, 4, 4, 4, 4, 4, 4, # a0 - a7
319
+ 5, 5, 1, 1, 1, 1, 1, 1, # a8 - af
320
+ 1, 1, 1, 1, 1, 1, 1, 1, # b0 - b7
321
+ 1, 1, 1, 1, 1, 1, 1, 1, # b8 - bf
322
+ 1, 1, 3, 1, 3, 3, 3, 3, # c0 - c7
323
+ 3, 3, 3, 3, 3, 3, 3, 3, # c8 - cf
324
+ 3, 3, 3, 3, 3, 3, 3, 3, # d0 - d7
325
+ 3, 3, 3, 3, 3, 3, 3, 3, # d8 - df
326
+ 3, 3, 3, 3, 3, 3, 3, 3, # e0 - e7
327
+ 3, 3, 3, 3, 3, 3, 3, 3, # e8 - ef
328
+ 3, 3, 3, 3, 3, 3, 3, 3, # f0 - f7
329
+ 3, 3, 3, 3, 3, 3, 3, 0 # f8 - ff
330
+ )
331
+
332
+ EUCTW_ST = (
333
+ MachineState.ERROR,MachineState.ERROR,MachineState.START, 3, 3, 3, 4,MachineState.ERROR,#00-07
334
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f
335
+ MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.ERROR,#10-17
336
+ MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f
337
+ 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,#20-27
338
+ MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f
339
+ )
340
+ # fmt: on
341
+
342
+ EUCTW_CHAR_LEN_TABLE = (0, 0, 1, 2, 2, 2, 3)
343
+
344
+ EUCTW_SM_MODEL: CodingStateMachineDict = {
345
+ "class_table": EUCTW_CLS,
346
+ "class_factor": 7,
347
+ "state_table": EUCTW_ST,
348
+ "char_len_table": EUCTW_CHAR_LEN_TABLE,
349
+ "name": "x-euc-tw",
350
+ }
351
+
352
+ # GB2312
353
+ # fmt: off
354
+ GB2312_CLS = (
355
+ 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07
356
+ 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f
357
+ 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17
358
+ 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f
359
+ 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27
360
+ 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f
361
+ 3, 3, 3, 3, 3, 3, 3, 3, # 30 - 37
362
+ 3, 3, 1, 1, 1, 1, 1, 1, # 38 - 3f
363
+ 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47
364
+ 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f
365
+ 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57
366
+ 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f
367
+ 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67
368
+ 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f
369
+ 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77
370
+ 2, 2, 2, 2, 2, 2, 2, 4, # 78 - 7f
371
+ 5, 6, 6, 6, 6, 6, 6, 6, # 80 - 87
372
+ 6, 6, 6, 6, 6, 6, 6, 6, # 88 - 8f
373
+ 6, 6, 6, 6, 6, 6, 6, 6, # 90 - 97
374
+ 6, 6, 6, 6, 6, 6, 6, 6, # 98 - 9f
375
+ 6, 6, 6, 6, 6, 6, 6, 6, # a0 - a7
376
+ 6, 6, 6, 6, 6, 6, 6, 6, # a8 - af
377
+ 6, 6, 6, 6, 6, 6, 6, 6, # b0 - b7
378
+ 6, 6, 6, 6, 6, 6, 6, 6, # b8 - bf
379
+ 6, 6, 6, 6, 6, 6, 6, 6, # c0 - c7
380
+ 6, 6, 6, 6, 6, 6, 6, 6, # c8 - cf
381
+ 6, 6, 6, 6, 6, 6, 6, 6, # d0 - d7
382
+ 6, 6, 6, 6, 6, 6, 6, 6, # d8 - df
383
+ 6, 6, 6, 6, 6, 6, 6, 6, # e0 - e7
384
+ 6, 6, 6, 6, 6, 6, 6, 6, # e8 - ef
385
+ 6, 6, 6, 6, 6, 6, 6, 6, # f0 - f7
386
+ 6, 6, 6, 6, 6, 6, 6, 0 # f8 - ff
387
+ )
388
+
389
+ GB2312_ST = (
390
+ MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, 3,MachineState.ERROR,#00-07
391
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f
392
+ MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,#10-17
393
+ 4,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f
394
+ MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#20-27
395
+ MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f
396
+ )
397
+ # fmt: on
398
+
399
+ # To be accurate, the length of class 6 can be either 2 or 4.
400
+ # But it is not necessary to discriminate between the two since
401
+ # it is used for frequency analysis only, and we are validating
402
+ # each code range there as well. So it is safe to set it to be
403
+ # 2 here.
404
+ GB2312_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 1, 2)
405
+
406
+ GB2312_SM_MODEL: CodingStateMachineDict = {
407
+ "class_table": GB2312_CLS,
408
+ "class_factor": 7,
409
+ "state_table": GB2312_ST,
410
+ "char_len_table": GB2312_CHAR_LEN_TABLE,
411
+ "name": "GB2312",
412
+ }
413
+
414
+ # Shift_JIS
415
+ # fmt: off
416
+ SJIS_CLS = (
417
+ 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07
418
+ 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f
419
+ 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17
420
+ 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f
421
+ 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27
422
+ 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f
423
+ 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37
424
+ 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f
425
+ 2, 2, 2, 2, 2, 2, 2, 2, # 40 - 47
426
+ 2, 2, 2, 2, 2, 2, 2, 2, # 48 - 4f
427
+ 2, 2, 2, 2, 2, 2, 2, 2, # 50 - 57
428
+ 2, 2, 2, 2, 2, 2, 2, 2, # 58 - 5f
429
+ 2, 2, 2, 2, 2, 2, 2, 2, # 60 - 67
430
+ 2, 2, 2, 2, 2, 2, 2, 2, # 68 - 6f
431
+ 2, 2, 2, 2, 2, 2, 2, 2, # 70 - 77
432
+ 2, 2, 2, 2, 2, 2, 2, 1, # 78 - 7f
433
+ 3, 3, 3, 3, 3, 2, 2, 3, # 80 - 87
434
+ 3, 3, 3, 3, 3, 3, 3, 3, # 88 - 8f
435
+ 3, 3, 3, 3, 3, 3, 3, 3, # 90 - 97
436
+ 3, 3, 3, 3, 3, 3, 3, 3, # 98 - 9f
437
+ #0xa0 is illegal in sjis encoding, but some pages does
438
+ #contain such byte. We need to be more error forgiven.
439
+ 2, 2, 2, 2, 2, 2, 2, 2, # a0 - a7
440
+ 2, 2, 2, 2, 2, 2, 2, 2, # a8 - af
441
+ 2, 2, 2, 2, 2, 2, 2, 2, # b0 - b7
442
+ 2, 2, 2, 2, 2, 2, 2, 2, # b8 - bf
443
+ 2, 2, 2, 2, 2, 2, 2, 2, # c0 - c7
444
+ 2, 2, 2, 2, 2, 2, 2, 2, # c8 - cf
445
+ 2, 2, 2, 2, 2, 2, 2, 2, # d0 - d7
446
+ 2, 2, 2, 2, 2, 2, 2, 2, # d8 - df
447
+ 3, 3, 3, 3, 3, 3, 3, 3, # e0 - e7
448
+ 3, 3, 3, 3, 3, 4, 4, 4, # e8 - ef
449
+ 3, 3, 3, 3, 3, 3, 3, 3, # f0 - f7
450
+ 3, 3, 3, 3, 3, 0, 0, 0, # f8 - ff
451
+ )
452
+
453
+ SJIS_ST = (
454
+ MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07
455
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f
456
+ MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START #10-17
457
+ )
458
+ # fmt: on
459
+
460
+ SJIS_CHAR_LEN_TABLE = (0, 1, 1, 2, 0, 0)
461
+
462
+ SJIS_SM_MODEL: CodingStateMachineDict = {
463
+ "class_table": SJIS_CLS,
464
+ "class_factor": 6,
465
+ "state_table": SJIS_ST,
466
+ "char_len_table": SJIS_CHAR_LEN_TABLE,
467
+ "name": "Shift_JIS",
468
+ }
469
+
470
+ # UCS2-BE
471
+ # fmt: off
472
+ UCS2BE_CLS = (
473
+ 0, 0, 0, 0, 0, 0, 0, 0, # 00 - 07
474
+ 0, 0, 1, 0, 0, 2, 0, 0, # 08 - 0f
475
+ 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17
476
+ 0, 0, 0, 3, 0, 0, 0, 0, # 18 - 1f
477
+ 0, 0, 0, 0, 0, 0, 0, 0, # 20 - 27
478
+ 0, 3, 3, 3, 3, 3, 0, 0, # 28 - 2f
479
+ 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37
480
+ 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f
481
+ 0, 0, 0, 0, 0, 0, 0, 0, # 40 - 47
482
+ 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f
483
+ 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57
484
+ 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f
485
+ 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67
486
+ 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f
487
+ 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77
488
+ 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f
489
+ 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87
490
+ 0, 0, 0, 0, 0, 0, 0, 0, # 88 - 8f
491
+ 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97
492
+ 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f
493
+ 0, 0, 0, 0, 0, 0, 0, 0, # a0 - a7
494
+ 0, 0, 0, 0, 0, 0, 0, 0, # a8 - af
495
+ 0, 0, 0, 0, 0, 0, 0, 0, # b0 - b7
496
+ 0, 0, 0, 0, 0, 0, 0, 0, # b8 - bf
497
+ 0, 0, 0, 0, 0, 0, 0, 0, # c0 - c7
498
+ 0, 0, 0, 0, 0, 0, 0, 0, # c8 - cf
499
+ 0, 0, 0, 0, 0, 0, 0, 0, # d0 - d7
500
+ 0, 0, 0, 0, 0, 0, 0, 0, # d8 - df
501
+ 0, 0, 0, 0, 0, 0, 0, 0, # e0 - e7
502
+ 0, 0, 0, 0, 0, 0, 0, 0, # e8 - ef
503
+ 0, 0, 0, 0, 0, 0, 0, 0, # f0 - f7
504
+ 0, 0, 0, 0, 0, 0, 4, 5 # f8 - ff
505
+ )
506
+
507
+ UCS2BE_ST = (
508
+ 5, 7, 7,MachineState.ERROR, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07
509
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f
510
+ MachineState.ITS_ME,MachineState.ITS_ME, 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,#10-17
511
+ 6, 6, 6, 6, 6,MachineState.ITS_ME, 6, 6,#18-1f
512
+ 6, 6, 6, 6, 5, 7, 7,MachineState.ERROR,#20-27
513
+ 5, 8, 6, 6,MachineState.ERROR, 6, 6, 6,#28-2f
514
+ 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #30-37
515
+ )
516
+ # fmt: on
517
+
518
+ UCS2BE_CHAR_LEN_TABLE = (2, 2, 2, 0, 2, 2)
519
+
520
+ UCS2BE_SM_MODEL: CodingStateMachineDict = {
521
+ "class_table": UCS2BE_CLS,
522
+ "class_factor": 6,
523
+ "state_table": UCS2BE_ST,
524
+ "char_len_table": UCS2BE_CHAR_LEN_TABLE,
525
+ "name": "UTF-16BE",
526
+ }
527
+
528
+ # UCS2-LE
529
+ # fmt: off
530
+ UCS2LE_CLS = (
531
+ 0, 0, 0, 0, 0, 0, 0, 0, # 00 - 07
532
+ 0, 0, 1, 0, 0, 2, 0, 0, # 08 - 0f
533
+ 0, 0, 0, 0, 0, 0, 0, 0, # 10 - 17
534
+ 0, 0, 0, 3, 0, 0, 0, 0, # 18 - 1f
535
+ 0, 0, 0, 0, 0, 0, 0, 0, # 20 - 27
536
+ 0, 3, 3, 3, 3, 3, 0, 0, # 28 - 2f
537
+ 0, 0, 0, 0, 0, 0, 0, 0, # 30 - 37
538
+ 0, 0, 0, 0, 0, 0, 0, 0, # 38 - 3f
539
+ 0, 0, 0, 0, 0, 0, 0, 0, # 40 - 47
540
+ 0, 0, 0, 0, 0, 0, 0, 0, # 48 - 4f
541
+ 0, 0, 0, 0, 0, 0, 0, 0, # 50 - 57
542
+ 0, 0, 0, 0, 0, 0, 0, 0, # 58 - 5f
543
+ 0, 0, 0, 0, 0, 0, 0, 0, # 60 - 67
544
+ 0, 0, 0, 0, 0, 0, 0, 0, # 68 - 6f
545
+ 0, 0, 0, 0, 0, 0, 0, 0, # 70 - 77
546
+ 0, 0, 0, 0, 0, 0, 0, 0, # 78 - 7f
547
+ 0, 0, 0, 0, 0, 0, 0, 0, # 80 - 87
548
+ 0, 0, 0, 0, 0, 0, 0, 0, # 88 - 8f
549
+ 0, 0, 0, 0, 0, 0, 0, 0, # 90 - 97
550
+ 0, 0, 0, 0, 0, 0, 0, 0, # 98 - 9f
551
+ 0, 0, 0, 0, 0, 0, 0, 0, # a0 - a7
552
+ 0, 0, 0, 0, 0, 0, 0, 0, # a8 - af
553
+ 0, 0, 0, 0, 0, 0, 0, 0, # b0 - b7
554
+ 0, 0, 0, 0, 0, 0, 0, 0, # b8 - bf
555
+ 0, 0, 0, 0, 0, 0, 0, 0, # c0 - c7
556
+ 0, 0, 0, 0, 0, 0, 0, 0, # c8 - cf
557
+ 0, 0, 0, 0, 0, 0, 0, 0, # d0 - d7
558
+ 0, 0, 0, 0, 0, 0, 0, 0, # d8 - df
559
+ 0, 0, 0, 0, 0, 0, 0, 0, # e0 - e7
560
+ 0, 0, 0, 0, 0, 0, 0, 0, # e8 - ef
561
+ 0, 0, 0, 0, 0, 0, 0, 0, # f0 - f7
562
+ 0, 0, 0, 0, 0, 0, 4, 5 # f8 - ff
563
+ )
564
+
565
+ UCS2LE_ST = (
566
+ 6, 6, 7, 6, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07
567
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f
568
+ MachineState.ITS_ME,MachineState.ITS_ME, 5, 5, 5,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#10-17
569
+ 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR, 6, 6,#18-1f
570
+ 7, 6, 8, 8, 5, 5, 5,MachineState.ERROR,#20-27
571
+ 5, 5, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5,#28-2f
572
+ 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR,MachineState.START,MachineState.START #30-37
573
+ )
574
+ # fmt: on
575
+
576
+ UCS2LE_CHAR_LEN_TABLE = (2, 2, 2, 2, 2, 2)
577
+
578
+ UCS2LE_SM_MODEL: CodingStateMachineDict = {
579
+ "class_table": UCS2LE_CLS,
580
+ "class_factor": 6,
581
+ "state_table": UCS2LE_ST,
582
+ "char_len_table": UCS2LE_CHAR_LEN_TABLE,
583
+ "name": "UTF-16LE",
584
+ }
585
+
586
+ # UTF-8
587
+ # fmt: off
588
+ UTF8_CLS = (
589
+ 1, 1, 1, 1, 1, 1, 1, 1, # 00 - 07 #allow 0x00 as a legal value
590
+ 1, 1, 1, 1, 1, 1, 0, 0, # 08 - 0f
591
+ 1, 1, 1, 1, 1, 1, 1, 1, # 10 - 17
592
+ 1, 1, 1, 0, 1, 1, 1, 1, # 18 - 1f
593
+ 1, 1, 1, 1, 1, 1, 1, 1, # 20 - 27
594
+ 1, 1, 1, 1, 1, 1, 1, 1, # 28 - 2f
595
+ 1, 1, 1, 1, 1, 1, 1, 1, # 30 - 37
596
+ 1, 1, 1, 1, 1, 1, 1, 1, # 38 - 3f
597
+ 1, 1, 1, 1, 1, 1, 1, 1, # 40 - 47
598
+ 1, 1, 1, 1, 1, 1, 1, 1, # 48 - 4f
599
+ 1, 1, 1, 1, 1, 1, 1, 1, # 50 - 57
600
+ 1, 1, 1, 1, 1, 1, 1, 1, # 58 - 5f
601
+ 1, 1, 1, 1, 1, 1, 1, 1, # 60 - 67
602
+ 1, 1, 1, 1, 1, 1, 1, 1, # 68 - 6f
603
+ 1, 1, 1, 1, 1, 1, 1, 1, # 70 - 77
604
+ 1, 1, 1, 1, 1, 1, 1, 1, # 78 - 7f
605
+ 2, 2, 2, 2, 3, 3, 3, 3, # 80 - 87
606
+ 4, 4, 4, 4, 4, 4, 4, 4, # 88 - 8f
607
+ 4, 4, 4, 4, 4, 4, 4, 4, # 90 - 97
608
+ 4, 4, 4, 4, 4, 4, 4, 4, # 98 - 9f
609
+ 5, 5, 5, 5, 5, 5, 5, 5, # a0 - a7
610
+ 5, 5, 5, 5, 5, 5, 5, 5, # a8 - af
611
+ 5, 5, 5, 5, 5, 5, 5, 5, # b0 - b7
612
+ 5, 5, 5, 5, 5, 5, 5, 5, # b8 - bf
613
+ 0, 0, 6, 6, 6, 6, 6, 6, # c0 - c7
614
+ 6, 6, 6, 6, 6, 6, 6, 6, # c8 - cf
615
+ 6, 6, 6, 6, 6, 6, 6, 6, # d0 - d7
616
+ 6, 6, 6, 6, 6, 6, 6, 6, # d8 - df
617
+ 7, 8, 8, 8, 8, 8, 8, 8, # e0 - e7
618
+ 8, 8, 8, 8, 8, 9, 8, 8, # e8 - ef
619
+ 10, 11, 11, 11, 11, 11, 11, 11, # f0 - f7
620
+ 12, 13, 13, 13, 14, 15, 0, 0 # f8 - ff
621
+ )
622
+
623
+ UTF8_ST = (
624
+ MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12, 10,#00-07
625
+ 9, 11, 8, 7, 6, 5, 4, 3,#08-0f
626
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17
627
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f
628
+ MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#20-27
629
+ MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#28-2f
630
+ MachineState.ERROR,MachineState.ERROR, 5, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#30-37
631
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#38-3f
632
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#40-47
633
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#48-4f
634
+ MachineState.ERROR,MachineState.ERROR, 7, 7, 7, 7,MachineState.ERROR,MachineState.ERROR,#50-57
635
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#58-5f
636
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 7, 7,MachineState.ERROR,MachineState.ERROR,#60-67
637
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#68-6f
638
+ MachineState.ERROR,MachineState.ERROR, 9, 9, 9, 9,MachineState.ERROR,MachineState.ERROR,#70-77
639
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#78-7f
640
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 9,MachineState.ERROR,MachineState.ERROR,#80-87
641
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#88-8f
642
+ MachineState.ERROR,MachineState.ERROR, 12, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,#90-97
643
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#98-9f
644
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12,MachineState.ERROR,MachineState.ERROR,#a0-a7
645
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#a8-af
646
+ MachineState.ERROR,MachineState.ERROR, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b0-b7
647
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b8-bf
648
+ MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,#c0-c7
649
+ MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR #c8-cf
650
+ )
651
+ # fmt: on
652
+
653
+ UTF8_CHAR_LEN_TABLE = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6)
654
+
655
+ UTF8_SM_MODEL: CodingStateMachineDict = {
656
+ "class_table": UTF8_CLS,
657
+ "class_factor": 16,
658
+ "state_table": UTF8_ST,
659
+ "char_len_table": UTF8_CHAR_LEN_TABLE,
660
+ "name": "UTF-8",
661
+ }
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/py.typed ADDED
File without changes
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/resultdict.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import TYPE_CHECKING, Optional
2
+
3
+ if TYPE_CHECKING:
4
+ # TypedDict was introduced in Python 3.8.
5
+ #
6
+ # TODO: Remove the else block and TYPE_CHECKING check when dropping support
7
+ # for Python 3.7.
8
+ from typing import TypedDict
9
+
10
+ class ResultDict(TypedDict):
11
+ encoding: Optional[str]
12
+ confidence: float
13
+ language: Optional[str]
14
+
15
+ else:
16
+ ResultDict = dict
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/sbcharsetprober.py ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is Mozilla Universal charset detector code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 2001
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ # Shy Shalom - original C code
12
+ #
13
+ # This library is free software; you can redistribute it and/or
14
+ # modify it under the terms of the GNU Lesser General Public
15
+ # License as published by the Free Software Foundation; either
16
+ # version 2.1 of the License, or (at your option) any later version.
17
+ #
18
+ # This library is distributed in the hope that it will be useful,
19
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ # Lesser General Public License for more details.
22
+ #
23
+ # You should have received a copy of the GNU Lesser General Public
24
+ # License along with this library; if not, write to the Free Software
25
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26
+ # 02110-1301 USA
27
+ ######################### END LICENSE BLOCK #########################
28
+
29
+ from typing import Dict, List, NamedTuple, Optional, Union
30
+
31
+ from .charsetprober import CharSetProber
32
+ from .enums import CharacterCategory, ProbingState, SequenceLikelihood
33
+
34
+
35
+ class SingleByteCharSetModel(NamedTuple):
36
+ charset_name: str
37
+ language: str
38
+ char_to_order_map: Dict[int, int]
39
+ language_model: Dict[int, Dict[int, int]]
40
+ typical_positive_ratio: float
41
+ keep_ascii_letters: bool
42
+ alphabet: str
43
+
44
+
45
+ class SingleByteCharSetProber(CharSetProber):
46
+ SAMPLE_SIZE = 64
47
+ SB_ENOUGH_REL_THRESHOLD = 1024 # 0.25 * SAMPLE_SIZE^2
48
+ POSITIVE_SHORTCUT_THRESHOLD = 0.95
49
+ NEGATIVE_SHORTCUT_THRESHOLD = 0.05
50
+
51
+ def __init__(
52
+ self,
53
+ model: SingleByteCharSetModel,
54
+ is_reversed: bool = False,
55
+ name_prober: Optional[CharSetProber] = None,
56
+ ) -> None:
57
+ super().__init__()
58
+ self._model = model
59
+ # TRUE if we need to reverse every pair in the model lookup
60
+ self._reversed = is_reversed
61
+ # Optional auxiliary prober for name decision
62
+ self._name_prober = name_prober
63
+ self._last_order = 255
64
+ self._seq_counters: List[int] = []
65
+ self._total_seqs = 0
66
+ self._total_char = 0
67
+ self._control_char = 0
68
+ self._freq_char = 0
69
+ self.reset()
70
+
71
+ def reset(self) -> None:
72
+ super().reset()
73
+ # char order of last character
74
+ self._last_order = 255
75
+ self._seq_counters = [0] * SequenceLikelihood.get_num_categories()
76
+ self._total_seqs = 0
77
+ self._total_char = 0
78
+ self._control_char = 0
79
+ # characters that fall in our sampling range
80
+ self._freq_char = 0
81
+
82
+ @property
83
+ def charset_name(self) -> Optional[str]:
84
+ if self._name_prober:
85
+ return self._name_prober.charset_name
86
+ return self._model.charset_name
87
+
88
+ @property
89
+ def language(self) -> Optional[str]:
90
+ if self._name_prober:
91
+ return self._name_prober.language
92
+ return self._model.language
93
+
94
+ def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState:
95
+ # TODO: Make filter_international_words keep things in self.alphabet
96
+ if not self._model.keep_ascii_letters:
97
+ byte_str = self.filter_international_words(byte_str)
98
+ else:
99
+ byte_str = self.remove_xml_tags(byte_str)
100
+ if not byte_str:
101
+ return self.state
102
+ char_to_order_map = self._model.char_to_order_map
103
+ language_model = self._model.language_model
104
+ for char in byte_str:
105
+ order = char_to_order_map.get(char, CharacterCategory.UNDEFINED)
106
+ # XXX: This was SYMBOL_CAT_ORDER before, with a value of 250, but
107
+ # CharacterCategory.SYMBOL is actually 253, so we use CONTROL
108
+ # to make it closer to the original intent. The only difference
109
+ # is whether or not we count digits and control characters for
110
+ # _total_char purposes.
111
+ if order < CharacterCategory.CONTROL:
112
+ self._total_char += 1
113
+ if order < self.SAMPLE_SIZE:
114
+ self._freq_char += 1
115
+ if self._last_order < self.SAMPLE_SIZE:
116
+ self._total_seqs += 1
117
+ if not self._reversed:
118
+ lm_cat = language_model[self._last_order][order]
119
+ else:
120
+ lm_cat = language_model[order][self._last_order]
121
+ self._seq_counters[lm_cat] += 1
122
+ self._last_order = order
123
+
124
+ charset_name = self._model.charset_name
125
+ if self.state == ProbingState.DETECTING:
126
+ if self._total_seqs > self.SB_ENOUGH_REL_THRESHOLD:
127
+ confidence = self.get_confidence()
128
+ if confidence > self.POSITIVE_SHORTCUT_THRESHOLD:
129
+ self.logger.debug(
130
+ "%s confidence = %s, we have a winner", charset_name, confidence
131
+ )
132
+ self._state = ProbingState.FOUND_IT
133
+ elif confidence < self.NEGATIVE_SHORTCUT_THRESHOLD:
134
+ self.logger.debug(
135
+ "%s confidence = %s, below negative shortcut threshold %s",
136
+ charset_name,
137
+ confidence,
138
+ self.NEGATIVE_SHORTCUT_THRESHOLD,
139
+ )
140
+ self._state = ProbingState.NOT_ME
141
+
142
+ return self.state
143
+
144
+ def get_confidence(self) -> float:
145
+ r = 0.01
146
+ if self._total_seqs > 0:
147
+ r = (
148
+ (
149
+ self._seq_counters[SequenceLikelihood.POSITIVE]
150
+ + 0.25 * self._seq_counters[SequenceLikelihood.LIKELY]
151
+ )
152
+ / self._total_seqs
153
+ / self._model.typical_positive_ratio
154
+ )
155
+ # The more control characters (proportionnaly to the size
156
+ # of the text), the less confident we become in the current
157
+ # charset.
158
+ r = r * (self._total_char - self._control_char) / self._total_char
159
+ r = r * self._freq_char / self._total_char
160
+ if r >= 1.0:
161
+ r = 0.99
162
+ return r
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/sjisprober.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ######################## BEGIN LICENSE BLOCK ########################
2
+ # The Original Code is mozilla.org code.
3
+ #
4
+ # The Initial Developer of the Original Code is
5
+ # Netscape Communications Corporation.
6
+ # Portions created by the Initial Developer are Copyright (C) 1998
7
+ # the Initial Developer. All Rights Reserved.
8
+ #
9
+ # Contributor(s):
10
+ # Mark Pilgrim - port to Python
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2.1 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
+ # 02110-1301 USA
26
+ ######################### END LICENSE BLOCK #########################
27
+
28
+ from typing import Union
29
+
30
+ from .chardistribution import SJISDistributionAnalysis
31
+ from .codingstatemachine import CodingStateMachine
32
+ from .enums import MachineState, ProbingState
33
+ from .jpcntx import SJISContextAnalysis
34
+ from .mbcharsetprober import MultiByteCharSetProber
35
+ from .mbcssm import SJIS_SM_MODEL
36
+
37
+
38
+ class SJISProber(MultiByteCharSetProber):
39
+ def __init__(self) -> None:
40
+ super().__init__()
41
+ self.coding_sm = CodingStateMachine(SJIS_SM_MODEL)
42
+ self.distribution_analyzer = SJISDistributionAnalysis()
43
+ self.context_analyzer = SJISContextAnalysis()
44
+ self.reset()
45
+
46
+ def reset(self) -> None:
47
+ super().reset()
48
+ self.context_analyzer.reset()
49
+
50
+ @property
51
+ def charset_name(self) -> str:
52
+ return self.context_analyzer.charset_name
53
+
54
+ @property
55
+ def language(self) -> str:
56
+ return "Japanese"
57
+
58
+ def feed(self, byte_str: Union[bytes, bytearray]) -> ProbingState:
59
+ assert self.coding_sm is not None
60
+ assert self.distribution_analyzer is not None
61
+
62
+ for i, byte in enumerate(byte_str):
63
+ coding_state = self.coding_sm.next_state(byte)
64
+ if coding_state == MachineState.ERROR:
65
+ self.logger.debug(
66
+ "%s %s prober hit error at byte %s",
67
+ self.charset_name,
68
+ self.language,
69
+ i,
70
+ )
71
+ self._state = ProbingState.NOT_ME
72
+ break
73
+ if coding_state == MachineState.ITS_ME:
74
+ self._state = ProbingState.FOUND_IT
75
+ break
76
+ if coding_state == MachineState.START:
77
+ char_len = self.coding_sm.get_current_charlen()
78
+ if i == 0:
79
+ self._last_char[1] = byte
80
+ self.context_analyzer.feed(
81
+ self._last_char[2 - char_len :], char_len
82
+ )
83
+ self.distribution_analyzer.feed(self._last_char, char_len)
84
+ else:
85
+ self.context_analyzer.feed(
86
+ byte_str[i + 1 - char_len : i + 3 - char_len], char_len
87
+ )
88
+ self.distribution_analyzer.feed(byte_str[i - 1 : i + 1], char_len)
89
+
90
+ self._last_char[0] = byte_str[-1]
91
+
92
+ if self.state == ProbingState.DETECTING:
93
+ if self.context_analyzer.got_enough_data() and (
94
+ self.get_confidence() > self.SHORTCUT_THRESHOLD
95
+ ):
96
+ self._state = ProbingState.FOUND_IT
97
+
98
+ return self.state
99
+
100
+ def get_confidence(self) -> float:
101
+ assert self.distribution_analyzer is not None
102
+
103
+ context_conf = self.context_analyzer.get_confidence()
104
+ distrib_conf = self.distribution_analyzer.get_confidence()
105
+ return max(context_conf, distrib_conf)
.venv/lib/python3.11/site-packages/pip/_vendor/chardet/version.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ This module exists only to simplify retrieving the version number of chardet
3
+ from within setuptools and from chardet subpackages.
4
+
5
+ :author: Dan Blanchard (dan.blanchard@gmail.com)
6
+ """
7
+
8
+ __version__ = "5.1.0"
9
+ VERSION = __version__.split(".")
.venv/lib/python3.11/site-packages/pip/_vendor/tomli/__init__.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SPDX-License-Identifier: MIT
2
+ # SPDX-FileCopyrightText: 2021 Taneli Hukkinen
3
+ # Licensed to PSF under a Contributor Agreement.
4
+
5
+ __all__ = ("loads", "load", "TOMLDecodeError")
6
+ __version__ = "2.0.1" # DO NOT EDIT THIS LINE MANUALLY. LET bump2version UTILITY DO IT
7
+
8
+ from ._parser import TOMLDecodeError, load, loads
9
+
10
+ # Pretend this exception was created here.
11
+ TOMLDecodeError.__module__ = __name__
.venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (406 Bytes). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc ADDED
Binary file (30.8 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc ADDED
Binary file (4.49 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc ADDED
Binary file (398 Bytes). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/tomli/_parser.py ADDED
@@ -0,0 +1,691 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SPDX-License-Identifier: MIT
2
+ # SPDX-FileCopyrightText: 2021 Taneli Hukkinen
3
+ # Licensed to PSF under a Contributor Agreement.
4
+
5
+ from __future__ import annotations
6
+
7
+ from collections.abc import Iterable
8
+ import string
9
+ from types import MappingProxyType
10
+ from typing import Any, BinaryIO, NamedTuple
11
+
12
+ from ._re import (
13
+ RE_DATETIME,
14
+ RE_LOCALTIME,
15
+ RE_NUMBER,
16
+ match_to_datetime,
17
+ match_to_localtime,
18
+ match_to_number,
19
+ )
20
+ from ._types import Key, ParseFloat, Pos
21
+
22
+ ASCII_CTRL = frozenset(chr(i) for i in range(32)) | frozenset(chr(127))
23
+
24
+ # Neither of these sets include quotation mark or backslash. They are
25
+ # currently handled as separate cases in the parser functions.
26
+ ILLEGAL_BASIC_STR_CHARS = ASCII_CTRL - frozenset("\t")
27
+ ILLEGAL_MULTILINE_BASIC_STR_CHARS = ASCII_CTRL - frozenset("\t\n")
28
+
29
+ ILLEGAL_LITERAL_STR_CHARS = ILLEGAL_BASIC_STR_CHARS
30
+ ILLEGAL_MULTILINE_LITERAL_STR_CHARS = ILLEGAL_MULTILINE_BASIC_STR_CHARS
31
+
32
+ ILLEGAL_COMMENT_CHARS = ILLEGAL_BASIC_STR_CHARS
33
+
34
+ TOML_WS = frozenset(" \t")
35
+ TOML_WS_AND_NEWLINE = TOML_WS | frozenset("\n")
36
+ BARE_KEY_CHARS = frozenset(string.ascii_letters + string.digits + "-_")
37
+ KEY_INITIAL_CHARS = BARE_KEY_CHARS | frozenset("\"'")
38
+ HEXDIGIT_CHARS = frozenset(string.hexdigits)
39
+
40
+ BASIC_STR_ESCAPE_REPLACEMENTS = MappingProxyType(
41
+ {
42
+ "\\b": "\u0008", # backspace
43
+ "\\t": "\u0009", # tab
44
+ "\\n": "\u000A", # linefeed
45
+ "\\f": "\u000C", # form feed
46
+ "\\r": "\u000D", # carriage return
47
+ '\\"': "\u0022", # quote
48
+ "\\\\": "\u005C", # backslash
49
+ }
50
+ )
51
+
52
+
53
+ class TOMLDecodeError(ValueError):
54
+ """An error raised if a document is not valid TOML."""
55
+
56
+
57
+ def load(__fp: BinaryIO, *, parse_float: ParseFloat = float) -> dict[str, Any]:
58
+ """Parse TOML from a binary file object."""
59
+ b = __fp.read()
60
+ try:
61
+ s = b.decode()
62
+ except AttributeError:
63
+ raise TypeError(
64
+ "File must be opened in binary mode, e.g. use `open('foo.toml', 'rb')`"
65
+ ) from None
66
+ return loads(s, parse_float=parse_float)
67
+
68
+
69
+ def loads(__s: str, *, parse_float: ParseFloat = float) -> dict[str, Any]: # noqa: C901
70
+ """Parse TOML from a string."""
71
+
72
+ # The spec allows converting "\r\n" to "\n", even in string
73
+ # literals. Let's do so to simplify parsing.
74
+ src = __s.replace("\r\n", "\n")
75
+ pos = 0
76
+ out = Output(NestedDict(), Flags())
77
+ header: Key = ()
78
+ parse_float = make_safe_parse_float(parse_float)
79
+
80
+ # Parse one statement at a time
81
+ # (typically means one line in TOML source)
82
+ while True:
83
+ # 1. Skip line leading whitespace
84
+ pos = skip_chars(src, pos, TOML_WS)
85
+
86
+ # 2. Parse rules. Expect one of the following:
87
+ # - end of file
88
+ # - end of line
89
+ # - comment
90
+ # - key/value pair
91
+ # - append dict to list (and move to its namespace)
92
+ # - create dict (and move to its namespace)
93
+ # Skip trailing whitespace when applicable.
94
+ try:
95
+ char = src[pos]
96
+ except IndexError:
97
+ break
98
+ if char == "\n":
99
+ pos += 1
100
+ continue
101
+ if char in KEY_INITIAL_CHARS:
102
+ pos = key_value_rule(src, pos, out, header, parse_float)
103
+ pos = skip_chars(src, pos, TOML_WS)
104
+ elif char == "[":
105
+ try:
106
+ second_char: str | None = src[pos + 1]
107
+ except IndexError:
108
+ second_char = None
109
+ out.flags.finalize_pending()
110
+ if second_char == "[":
111
+ pos, header = create_list_rule(src, pos, out)
112
+ else:
113
+ pos, header = create_dict_rule(src, pos, out)
114
+ pos = skip_chars(src, pos, TOML_WS)
115
+ elif char != "#":
116
+ raise suffixed_err(src, pos, "Invalid statement")
117
+
118
+ # 3. Skip comment
119
+ pos = skip_comment(src, pos)
120
+
121
+ # 4. Expect end of line or end of file
122
+ try:
123
+ char = src[pos]
124
+ except IndexError:
125
+ break
126
+ if char != "\n":
127
+ raise suffixed_err(
128
+ src, pos, "Expected newline or end of document after a statement"
129
+ )
130
+ pos += 1
131
+
132
+ return out.data.dict
133
+
134
+
135
+ class Flags:
136
+ """Flags that map to parsed keys/namespaces."""
137
+
138
+ # Marks an immutable namespace (inline array or inline table).
139
+ FROZEN = 0
140
+ # Marks a nest that has been explicitly created and can no longer
141
+ # be opened using the "[table]" syntax.
142
+ EXPLICIT_NEST = 1
143
+
144
+ def __init__(self) -> None:
145
+ self._flags: dict[str, dict] = {}
146
+ self._pending_flags: set[tuple[Key, int]] = set()
147
+
148
+ def add_pending(self, key: Key, flag: int) -> None:
149
+ self._pending_flags.add((key, flag))
150
+
151
+ def finalize_pending(self) -> None:
152
+ for key, flag in self._pending_flags:
153
+ self.set(key, flag, recursive=False)
154
+ self._pending_flags.clear()
155
+
156
+ def unset_all(self, key: Key) -> None:
157
+ cont = self._flags
158
+ for k in key[:-1]:
159
+ if k not in cont:
160
+ return
161
+ cont = cont[k]["nested"]
162
+ cont.pop(key[-1], None)
163
+
164
+ def set(self, key: Key, flag: int, *, recursive: bool) -> None: # noqa: A003
165
+ cont = self._flags
166
+ key_parent, key_stem = key[:-1], key[-1]
167
+ for k in key_parent:
168
+ if k not in cont:
169
+ cont[k] = {"flags": set(), "recursive_flags": set(), "nested": {}}
170
+ cont = cont[k]["nested"]
171
+ if key_stem not in cont:
172
+ cont[key_stem] = {"flags": set(), "recursive_flags": set(), "nested": {}}
173
+ cont[key_stem]["recursive_flags" if recursive else "flags"].add(flag)
174
+
175
+ def is_(self, key: Key, flag: int) -> bool:
176
+ if not key:
177
+ return False # document root has no flags
178
+ cont = self._flags
179
+ for k in key[:-1]:
180
+ if k not in cont:
181
+ return False
182
+ inner_cont = cont[k]
183
+ if flag in inner_cont["recursive_flags"]:
184
+ return True
185
+ cont = inner_cont["nested"]
186
+ key_stem = key[-1]
187
+ if key_stem in cont:
188
+ cont = cont[key_stem]
189
+ return flag in cont["flags"] or flag in cont["recursive_flags"]
190
+ return False
191
+
192
+
193
+ class NestedDict:
194
+ def __init__(self) -> None:
195
+ # The parsed content of the TOML document
196
+ self.dict: dict[str, Any] = {}
197
+
198
+ def get_or_create_nest(
199
+ self,
200
+ key: Key,
201
+ *,
202
+ access_lists: bool = True,
203
+ ) -> dict:
204
+ cont: Any = self.dict
205
+ for k in key:
206
+ if k not in cont:
207
+ cont[k] = {}
208
+ cont = cont[k]
209
+ if access_lists and isinstance(cont, list):
210
+ cont = cont[-1]
211
+ if not isinstance(cont, dict):
212
+ raise KeyError("There is no nest behind this key")
213
+ return cont
214
+
215
+ def append_nest_to_list(self, key: Key) -> None:
216
+ cont = self.get_or_create_nest(key[:-1])
217
+ last_key = key[-1]
218
+ if last_key in cont:
219
+ list_ = cont[last_key]
220
+ if not isinstance(list_, list):
221
+ raise KeyError("An object other than list found behind this key")
222
+ list_.append({})
223
+ else:
224
+ cont[last_key] = [{}]
225
+
226
+
227
+ class Output(NamedTuple):
228
+ data: NestedDict
229
+ flags: Flags
230
+
231
+
232
+ def skip_chars(src: str, pos: Pos, chars: Iterable[str]) -> Pos:
233
+ try:
234
+ while src[pos] in chars:
235
+ pos += 1
236
+ except IndexError:
237
+ pass
238
+ return pos
239
+
240
+
241
+ def skip_until(
242
+ src: str,
243
+ pos: Pos,
244
+ expect: str,
245
+ *,
246
+ error_on: frozenset[str],
247
+ error_on_eof: bool,
248
+ ) -> Pos:
249
+ try:
250
+ new_pos = src.index(expect, pos)
251
+ except ValueError:
252
+ new_pos = len(src)
253
+ if error_on_eof:
254
+ raise suffixed_err(src, new_pos, f"Expected {expect!r}") from None
255
+
256
+ if not error_on.isdisjoint(src[pos:new_pos]):
257
+ while src[pos] not in error_on:
258
+ pos += 1
259
+ raise suffixed_err(src, pos, f"Found invalid character {src[pos]!r}")
260
+ return new_pos
261
+
262
+
263
+ def skip_comment(src: str, pos: Pos) -> Pos:
264
+ try:
265
+ char: str | None = src[pos]
266
+ except IndexError:
267
+ char = None
268
+ if char == "#":
269
+ return skip_until(
270
+ src, pos + 1, "\n", error_on=ILLEGAL_COMMENT_CHARS, error_on_eof=False
271
+ )
272
+ return pos
273
+
274
+
275
+ def skip_comments_and_array_ws(src: str, pos: Pos) -> Pos:
276
+ while True:
277
+ pos_before_skip = pos
278
+ pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE)
279
+ pos = skip_comment(src, pos)
280
+ if pos == pos_before_skip:
281
+ return pos
282
+
283
+
284
+ def create_dict_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]:
285
+ pos += 1 # Skip "["
286
+ pos = skip_chars(src, pos, TOML_WS)
287
+ pos, key = parse_key(src, pos)
288
+
289
+ if out.flags.is_(key, Flags.EXPLICIT_NEST) or out.flags.is_(key, Flags.FROZEN):
290
+ raise suffixed_err(src, pos, f"Cannot declare {key} twice")
291
+ out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False)
292
+ try:
293
+ out.data.get_or_create_nest(key)
294
+ except KeyError:
295
+ raise suffixed_err(src, pos, "Cannot overwrite a value") from None
296
+
297
+ if not src.startswith("]", pos):
298
+ raise suffixed_err(src, pos, "Expected ']' at the end of a table declaration")
299
+ return pos + 1, key
300
+
301
+
302
+ def create_list_rule(src: str, pos: Pos, out: Output) -> tuple[Pos, Key]:
303
+ pos += 2 # Skip "[["
304
+ pos = skip_chars(src, pos, TOML_WS)
305
+ pos, key = parse_key(src, pos)
306
+
307
+ if out.flags.is_(key, Flags.FROZEN):
308
+ raise suffixed_err(src, pos, f"Cannot mutate immutable namespace {key}")
309
+ # Free the namespace now that it points to another empty list item...
310
+ out.flags.unset_all(key)
311
+ # ...but this key precisely is still prohibited from table declaration
312
+ out.flags.set(key, Flags.EXPLICIT_NEST, recursive=False)
313
+ try:
314
+ out.data.append_nest_to_list(key)
315
+ except KeyError:
316
+ raise suffixed_err(src, pos, "Cannot overwrite a value") from None
317
+
318
+ if not src.startswith("]]", pos):
319
+ raise suffixed_err(src, pos, "Expected ']]' at the end of an array declaration")
320
+ return pos + 2, key
321
+
322
+
323
+ def key_value_rule(
324
+ src: str, pos: Pos, out: Output, header: Key, parse_float: ParseFloat
325
+ ) -> Pos:
326
+ pos, key, value = parse_key_value_pair(src, pos, parse_float)
327
+ key_parent, key_stem = key[:-1], key[-1]
328
+ abs_key_parent = header + key_parent
329
+
330
+ relative_path_cont_keys = (header + key[:i] for i in range(1, len(key)))
331
+ for cont_key in relative_path_cont_keys:
332
+ # Check that dotted key syntax does not redefine an existing table
333
+ if out.flags.is_(cont_key, Flags.EXPLICIT_NEST):
334
+ raise suffixed_err(src, pos, f"Cannot redefine namespace {cont_key}")
335
+ # Containers in the relative path can't be opened with the table syntax or
336
+ # dotted key/value syntax in following table sections.
337
+ out.flags.add_pending(cont_key, Flags.EXPLICIT_NEST)
338
+
339
+ if out.flags.is_(abs_key_parent, Flags.FROZEN):
340
+ raise suffixed_err(
341
+ src, pos, f"Cannot mutate immutable namespace {abs_key_parent}"
342
+ )
343
+
344
+ try:
345
+ nest = out.data.get_or_create_nest(abs_key_parent)
346
+ except KeyError:
347
+ raise suffixed_err(src, pos, "Cannot overwrite a value") from None
348
+ if key_stem in nest:
349
+ raise suffixed_err(src, pos, "Cannot overwrite a value")
350
+ # Mark inline table and array namespaces recursively immutable
351
+ if isinstance(value, (dict, list)):
352
+ out.flags.set(header + key, Flags.FROZEN, recursive=True)
353
+ nest[key_stem] = value
354
+ return pos
355
+
356
+
357
+ def parse_key_value_pair(
358
+ src: str, pos: Pos, parse_float: ParseFloat
359
+ ) -> tuple[Pos, Key, Any]:
360
+ pos, key = parse_key(src, pos)
361
+ try:
362
+ char: str | None = src[pos]
363
+ except IndexError:
364
+ char = None
365
+ if char != "=":
366
+ raise suffixed_err(src, pos, "Expected '=' after a key in a key/value pair")
367
+ pos += 1
368
+ pos = skip_chars(src, pos, TOML_WS)
369
+ pos, value = parse_value(src, pos, parse_float)
370
+ return pos, key, value
371
+
372
+
373
+ def parse_key(src: str, pos: Pos) -> tuple[Pos, Key]:
374
+ pos, key_part = parse_key_part(src, pos)
375
+ key: Key = (key_part,)
376
+ pos = skip_chars(src, pos, TOML_WS)
377
+ while True:
378
+ try:
379
+ char: str | None = src[pos]
380
+ except IndexError:
381
+ char = None
382
+ if char != ".":
383
+ return pos, key
384
+ pos += 1
385
+ pos = skip_chars(src, pos, TOML_WS)
386
+ pos, key_part = parse_key_part(src, pos)
387
+ key += (key_part,)
388
+ pos = skip_chars(src, pos, TOML_WS)
389
+
390
+
391
+ def parse_key_part(src: str, pos: Pos) -> tuple[Pos, str]:
392
+ try:
393
+ char: str | None = src[pos]
394
+ except IndexError:
395
+ char = None
396
+ if char in BARE_KEY_CHARS:
397
+ start_pos = pos
398
+ pos = skip_chars(src, pos, BARE_KEY_CHARS)
399
+ return pos, src[start_pos:pos]
400
+ if char == "'":
401
+ return parse_literal_str(src, pos)
402
+ if char == '"':
403
+ return parse_one_line_basic_str(src, pos)
404
+ raise suffixed_err(src, pos, "Invalid initial character for a key part")
405
+
406
+
407
+ def parse_one_line_basic_str(src: str, pos: Pos) -> tuple[Pos, str]:
408
+ pos += 1
409
+ return parse_basic_str(src, pos, multiline=False)
410
+
411
+
412
+ def parse_array(src: str, pos: Pos, parse_float: ParseFloat) -> tuple[Pos, list]:
413
+ pos += 1
414
+ array: list = []
415
+
416
+ pos = skip_comments_and_array_ws(src, pos)
417
+ if src.startswith("]", pos):
418
+ return pos + 1, array
419
+ while True:
420
+ pos, val = parse_value(src, pos, parse_float)
421
+ array.append(val)
422
+ pos = skip_comments_and_array_ws(src, pos)
423
+
424
+ c = src[pos : pos + 1]
425
+ if c == "]":
426
+ return pos + 1, array
427
+ if c != ",":
428
+ raise suffixed_err(src, pos, "Unclosed array")
429
+ pos += 1
430
+
431
+ pos = skip_comments_and_array_ws(src, pos)
432
+ if src.startswith("]", pos):
433
+ return pos + 1, array
434
+
435
+
436
+ def parse_inline_table(src: str, pos: Pos, parse_float: ParseFloat) -> tuple[Pos, dict]:
437
+ pos += 1
438
+ nested_dict = NestedDict()
439
+ flags = Flags()
440
+
441
+ pos = skip_chars(src, pos, TOML_WS)
442
+ if src.startswith("}", pos):
443
+ return pos + 1, nested_dict.dict
444
+ while True:
445
+ pos, key, value = parse_key_value_pair(src, pos, parse_float)
446
+ key_parent, key_stem = key[:-1], key[-1]
447
+ if flags.is_(key, Flags.FROZEN):
448
+ raise suffixed_err(src, pos, f"Cannot mutate immutable namespace {key}")
449
+ try:
450
+ nest = nested_dict.get_or_create_nest(key_parent, access_lists=False)
451
+ except KeyError:
452
+ raise suffixed_err(src, pos, "Cannot overwrite a value") from None
453
+ if key_stem in nest:
454
+ raise suffixed_err(src, pos, f"Duplicate inline table key {key_stem!r}")
455
+ nest[key_stem] = value
456
+ pos = skip_chars(src, pos, TOML_WS)
457
+ c = src[pos : pos + 1]
458
+ if c == "}":
459
+ return pos + 1, nested_dict.dict
460
+ if c != ",":
461
+ raise suffixed_err(src, pos, "Unclosed inline table")
462
+ if isinstance(value, (dict, list)):
463
+ flags.set(key, Flags.FROZEN, recursive=True)
464
+ pos += 1
465
+ pos = skip_chars(src, pos, TOML_WS)
466
+
467
+
468
+ def parse_basic_str_escape(
469
+ src: str, pos: Pos, *, multiline: bool = False
470
+ ) -> tuple[Pos, str]:
471
+ escape_id = src[pos : pos + 2]
472
+ pos += 2
473
+ if multiline and escape_id in {"\\ ", "\\\t", "\\\n"}:
474
+ # Skip whitespace until next non-whitespace character or end of
475
+ # the doc. Error if non-whitespace is found before newline.
476
+ if escape_id != "\\\n":
477
+ pos = skip_chars(src, pos, TOML_WS)
478
+ try:
479
+ char = src[pos]
480
+ except IndexError:
481
+ return pos, ""
482
+ if char != "\n":
483
+ raise suffixed_err(src, pos, "Unescaped '\\' in a string")
484
+ pos += 1
485
+ pos = skip_chars(src, pos, TOML_WS_AND_NEWLINE)
486
+ return pos, ""
487
+ if escape_id == "\\u":
488
+ return parse_hex_char(src, pos, 4)
489
+ if escape_id == "\\U":
490
+ return parse_hex_char(src, pos, 8)
491
+ try:
492
+ return pos, BASIC_STR_ESCAPE_REPLACEMENTS[escape_id]
493
+ except KeyError:
494
+ raise suffixed_err(src, pos, "Unescaped '\\' in a string") from None
495
+
496
+
497
+ def parse_basic_str_escape_multiline(src: str, pos: Pos) -> tuple[Pos, str]:
498
+ return parse_basic_str_escape(src, pos, multiline=True)
499
+
500
+
501
+ def parse_hex_char(src: str, pos: Pos, hex_len: int) -> tuple[Pos, str]:
502
+ hex_str = src[pos : pos + hex_len]
503
+ if len(hex_str) != hex_len or not HEXDIGIT_CHARS.issuperset(hex_str):
504
+ raise suffixed_err(src, pos, "Invalid hex value")
505
+ pos += hex_len
506
+ hex_int = int(hex_str, 16)
507
+ if not is_unicode_scalar_value(hex_int):
508
+ raise suffixed_err(src, pos, "Escaped character is not a Unicode scalar value")
509
+ return pos, chr(hex_int)
510
+
511
+
512
+ def parse_literal_str(src: str, pos: Pos) -> tuple[Pos, str]:
513
+ pos += 1 # Skip starting apostrophe
514
+ start_pos = pos
515
+ pos = skip_until(
516
+ src, pos, "'", error_on=ILLEGAL_LITERAL_STR_CHARS, error_on_eof=True
517
+ )
518
+ return pos + 1, src[start_pos:pos] # Skip ending apostrophe
519
+
520
+
521
+ def parse_multiline_str(src: str, pos: Pos, *, literal: bool) -> tuple[Pos, str]:
522
+ pos += 3
523
+ if src.startswith("\n", pos):
524
+ pos += 1
525
+
526
+ if literal:
527
+ delim = "'"
528
+ end_pos = skip_until(
529
+ src,
530
+ pos,
531
+ "'''",
532
+ error_on=ILLEGAL_MULTILINE_LITERAL_STR_CHARS,
533
+ error_on_eof=True,
534
+ )
535
+ result = src[pos:end_pos]
536
+ pos = end_pos + 3
537
+ else:
538
+ delim = '"'
539
+ pos, result = parse_basic_str(src, pos, multiline=True)
540
+
541
+ # Add at maximum two extra apostrophes/quotes if the end sequence
542
+ # is 4 or 5 chars long instead of just 3.
543
+ if not src.startswith(delim, pos):
544
+ return pos, result
545
+ pos += 1
546
+ if not src.startswith(delim, pos):
547
+ return pos, result + delim
548
+ pos += 1
549
+ return pos, result + (delim * 2)
550
+
551
+
552
+ def parse_basic_str(src: str, pos: Pos, *, multiline: bool) -> tuple[Pos, str]:
553
+ if multiline:
554
+ error_on = ILLEGAL_MULTILINE_BASIC_STR_CHARS
555
+ parse_escapes = parse_basic_str_escape_multiline
556
+ else:
557
+ error_on = ILLEGAL_BASIC_STR_CHARS
558
+ parse_escapes = parse_basic_str_escape
559
+ result = ""
560
+ start_pos = pos
561
+ while True:
562
+ try:
563
+ char = src[pos]
564
+ except IndexError:
565
+ raise suffixed_err(src, pos, "Unterminated string") from None
566
+ if char == '"':
567
+ if not multiline:
568
+ return pos + 1, result + src[start_pos:pos]
569
+ if src.startswith('"""', pos):
570
+ return pos + 3, result + src[start_pos:pos]
571
+ pos += 1
572
+ continue
573
+ if char == "\\":
574
+ result += src[start_pos:pos]
575
+ pos, parsed_escape = parse_escapes(src, pos)
576
+ result += parsed_escape
577
+ start_pos = pos
578
+ continue
579
+ if char in error_on:
580
+ raise suffixed_err(src, pos, f"Illegal character {char!r}")
581
+ pos += 1
582
+
583
+
584
+ def parse_value( # noqa: C901
585
+ src: str, pos: Pos, parse_float: ParseFloat
586
+ ) -> tuple[Pos, Any]:
587
+ try:
588
+ char: str | None = src[pos]
589
+ except IndexError:
590
+ char = None
591
+
592
+ # IMPORTANT: order conditions based on speed of checking and likelihood
593
+
594
+ # Basic strings
595
+ if char == '"':
596
+ if src.startswith('"""', pos):
597
+ return parse_multiline_str(src, pos, literal=False)
598
+ return parse_one_line_basic_str(src, pos)
599
+
600
+ # Literal strings
601
+ if char == "'":
602
+ if src.startswith("'''", pos):
603
+ return parse_multiline_str(src, pos, literal=True)
604
+ return parse_literal_str(src, pos)
605
+
606
+ # Booleans
607
+ if char == "t":
608
+ if src.startswith("true", pos):
609
+ return pos + 4, True
610
+ if char == "f":
611
+ if src.startswith("false", pos):
612
+ return pos + 5, False
613
+
614
+ # Arrays
615
+ if char == "[":
616
+ return parse_array(src, pos, parse_float)
617
+
618
+ # Inline tables
619
+ if char == "{":
620
+ return parse_inline_table(src, pos, parse_float)
621
+
622
+ # Dates and times
623
+ datetime_match = RE_DATETIME.match(src, pos)
624
+ if datetime_match:
625
+ try:
626
+ datetime_obj = match_to_datetime(datetime_match)
627
+ except ValueError as e:
628
+ raise suffixed_err(src, pos, "Invalid date or datetime") from e
629
+ return datetime_match.end(), datetime_obj
630
+ localtime_match = RE_LOCALTIME.match(src, pos)
631
+ if localtime_match:
632
+ return localtime_match.end(), match_to_localtime(localtime_match)
633
+
634
+ # Integers and "normal" floats.
635
+ # The regex will greedily match any type starting with a decimal
636
+ # char, so needs to be located after handling of dates and times.
637
+ number_match = RE_NUMBER.match(src, pos)
638
+ if number_match:
639
+ return number_match.end(), match_to_number(number_match, parse_float)
640
+
641
+ # Special floats
642
+ first_three = src[pos : pos + 3]
643
+ if first_three in {"inf", "nan"}:
644
+ return pos + 3, parse_float(first_three)
645
+ first_four = src[pos : pos + 4]
646
+ if first_four in {"-inf", "+inf", "-nan", "+nan"}:
647
+ return pos + 4, parse_float(first_four)
648
+
649
+ raise suffixed_err(src, pos, "Invalid value")
650
+
651
+
652
+ def suffixed_err(src: str, pos: Pos, msg: str) -> TOMLDecodeError:
653
+ """Return a `TOMLDecodeError` where error message is suffixed with
654
+ coordinates in source."""
655
+
656
+ def coord_repr(src: str, pos: Pos) -> str:
657
+ if pos >= len(src):
658
+ return "end of document"
659
+ line = src.count("\n", 0, pos) + 1
660
+ if line == 1:
661
+ column = pos + 1
662
+ else:
663
+ column = pos - src.rindex("\n", 0, pos)
664
+ return f"line {line}, column {column}"
665
+
666
+ return TOMLDecodeError(f"{msg} (at {coord_repr(src, pos)})")
667
+
668
+
669
+ def is_unicode_scalar_value(codepoint: int) -> bool:
670
+ return (0 <= codepoint <= 55295) or (57344 <= codepoint <= 1114111)
671
+
672
+
673
+ def make_safe_parse_float(parse_float: ParseFloat) -> ParseFloat:
674
+ """A decorator to make `parse_float` safe.
675
+
676
+ `parse_float` must not return dicts or lists, because these types
677
+ would be mixed with parsed TOML tables and arrays, thus confusing
678
+ the parser. The returned decorated callable raises `ValueError`
679
+ instead of returning illegal types.
680
+ """
681
+ # The default `float` callable never returns illegal types. Optimize it.
682
+ if parse_float is float: # type: ignore[comparison-overlap]
683
+ return float
684
+
685
+ def safe_parse_float(float_str: str) -> Any:
686
+ float_value = parse_float(float_str)
687
+ if isinstance(float_value, (dict, list)):
688
+ raise ValueError("parse_float must not return dicts or lists")
689
+ return float_value
690
+
691
+ return safe_parse_float
.venv/lib/python3.11/site-packages/pip/_vendor/tomli/_re.py ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SPDX-License-Identifier: MIT
2
+ # SPDX-FileCopyrightText: 2021 Taneli Hukkinen
3
+ # Licensed to PSF under a Contributor Agreement.
4
+
5
+ from __future__ import annotations
6
+
7
+ from datetime import date, datetime, time, timedelta, timezone, tzinfo
8
+ from functools import lru_cache
9
+ import re
10
+ from typing import Any
11
+
12
+ from ._types import ParseFloat
13
+
14
+ # E.g.
15
+ # - 00:32:00.999999
16
+ # - 00:32:00
17
+ _TIME_RE_STR = r"([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(?:\.([0-9]{1,6})[0-9]*)?"
18
+
19
+ RE_NUMBER = re.compile(
20
+ r"""
21
+ 0
22
+ (?:
23
+ x[0-9A-Fa-f](?:_?[0-9A-Fa-f])* # hex
24
+ |
25
+ b[01](?:_?[01])* # bin
26
+ |
27
+ o[0-7](?:_?[0-7])* # oct
28
+ )
29
+ |
30
+ [+-]?(?:0|[1-9](?:_?[0-9])*) # dec, integer part
31
+ (?P<floatpart>
32
+ (?:\.[0-9](?:_?[0-9])*)? # optional fractional part
33
+ (?:[eE][+-]?[0-9](?:_?[0-9])*)? # optional exponent part
34
+ )
35
+ """,
36
+ flags=re.VERBOSE,
37
+ )
38
+ RE_LOCALTIME = re.compile(_TIME_RE_STR)
39
+ RE_DATETIME = re.compile(
40
+ rf"""
41
+ ([0-9]{{4}})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]) # date, e.g. 1988-10-27
42
+ (?:
43
+ [Tt ]
44
+ {_TIME_RE_STR}
45
+ (?:([Zz])|([+-])([01][0-9]|2[0-3]):([0-5][0-9]))? # optional time offset
46
+ )?
47
+ """,
48
+ flags=re.VERBOSE,
49
+ )
50
+
51
+
52
+ def match_to_datetime(match: re.Match) -> datetime | date:
53
+ """Convert a `RE_DATETIME` match to `datetime.datetime` or `datetime.date`.
54
+
55
+ Raises ValueError if the match does not correspond to a valid date
56
+ or datetime.
57
+ """
58
+ (
59
+ year_str,
60
+ month_str,
61
+ day_str,
62
+ hour_str,
63
+ minute_str,
64
+ sec_str,
65
+ micros_str,
66
+ zulu_time,
67
+ offset_sign_str,
68
+ offset_hour_str,
69
+ offset_minute_str,
70
+ ) = match.groups()
71
+ year, month, day = int(year_str), int(month_str), int(day_str)
72
+ if hour_str is None:
73
+ return date(year, month, day)
74
+ hour, minute, sec = int(hour_str), int(minute_str), int(sec_str)
75
+ micros = int(micros_str.ljust(6, "0")) if micros_str else 0
76
+ if offset_sign_str:
77
+ tz: tzinfo | None = cached_tz(
78
+ offset_hour_str, offset_minute_str, offset_sign_str
79
+ )
80
+ elif zulu_time:
81
+ tz = timezone.utc
82
+ else: # local date-time
83
+ tz = None
84
+ return datetime(year, month, day, hour, minute, sec, micros, tzinfo=tz)
85
+
86
+
87
+ @lru_cache(maxsize=None)
88
+ def cached_tz(hour_str: str, minute_str: str, sign_str: str) -> timezone:
89
+ sign = 1 if sign_str == "+" else -1
90
+ return timezone(
91
+ timedelta(
92
+ hours=sign * int(hour_str),
93
+ minutes=sign * int(minute_str),
94
+ )
95
+ )
96
+
97
+
98
+ def match_to_localtime(match: re.Match) -> time:
99
+ hour_str, minute_str, sec_str, micros_str = match.groups()
100
+ micros = int(micros_str.ljust(6, "0")) if micros_str else 0
101
+ return time(int(hour_str), int(minute_str), int(sec_str), micros)
102
+
103
+
104
+ def match_to_number(match: re.Match, parse_float: ParseFloat) -> Any:
105
+ if match.group("floatpart"):
106
+ return parse_float(match.group())
107
+ return int(match.group(), 0)
.venv/lib/python3.11/site-packages/pip/_vendor/tomli/_types.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ # SPDX-License-Identifier: MIT
2
+ # SPDX-FileCopyrightText: 2021 Taneli Hukkinen
3
+ # Licensed to PSF under a Contributor Agreement.
4
+
5
+ from typing import Any, Callable, Tuple
6
+
7
+ # Type annotations
8
+ ParseFloat = Callable[[str], Any]
9
+ Key = Tuple[str, ...]
10
+ Pos = int
.venv/lib/python3.11/site-packages/pip/_vendor/tomli/py.typed ADDED
@@ -0,0 +1 @@
 
 
1
+ # Marker file for PEP 561
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (3.7 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc ADDED
Binary file (18.3 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc ADDED
Binary file (214 Bytes). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc ADDED
Binary file (22.1 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc ADDED
Binary file (38.3 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc ADDED
Binary file (16.1 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc ADDED
Binary file (11.4 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc ADDED
Binary file (4.49 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc ADDED
Binary file (21.6 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc ADDED
Binary file (7.66 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc ADDED
Binary file (36.5 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (200 Bytes). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc ADDED
Binary file (36.8 kB). View file
 
.venv/lib/python3.11/site-packages/pip/_vendor/urllib3/util/__init__.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import absolute_import
2
+
3
+ # For backwards compatibility, provide imports that used to be here.
4
+ from .connection import is_connection_dropped
5
+ from .request import SKIP_HEADER, SKIPPABLE_HEADERS, make_headers
6
+ from .response import is_fp_closed
7
+ from .retry import Retry
8
+ from .ssl_ import (
9
+ ALPN_PROTOCOLS,
10
+ HAS_SNI,
11
+ IS_PYOPENSSL,
12
+ IS_SECURETRANSPORT,
13
+ PROTOCOL_TLS,
14
+ SSLContext,
15
+ assert_fingerprint,
16
+ resolve_cert_reqs,
17
+ resolve_ssl_version,
18
+ ssl_wrap_socket,
19
+ )
20
+ from .timeout import Timeout, current_time
21
+ from .url import Url, get_host, parse_url, split_first
22
+ from .wait import wait_for_read, wait_for_write
23
+
24
+ __all__ = (
25
+ "HAS_SNI",
26
+ "IS_PYOPENSSL",
27
+ "IS_SECURETRANSPORT",
28
+ "SSLContext",
29
+ "PROTOCOL_TLS",
30
+ "ALPN_PROTOCOLS",
31
+ "Retry",
32
+ "Timeout",
33
+ "Url",
34
+ "assert_fingerprint",
35
+ "current_time",
36
+ "is_connection_dropped",
37
+ "is_fp_closed",
38
+ "get_host",
39
+ "parse_url",
40
+ "make_headers",
41
+ "resolve_cert_reqs",
42
+ "resolve_ssl_version",
43
+ "split_first",
44
+ "ssl_wrap_socket",
45
+ "wait_for_read",
46
+ "wait_for_write",
47
+ "SKIP_HEADER",
48
+ "SKIPPABLE_HEADERS",
49
+ )